summaryrefslogtreecommitdiffstats
path: root/axiom/src/om/om_stax_builder.c
diff options
context:
space:
mode:
Diffstat (limited to 'axiom/src/om/om_stax_builder.c')
-rw-r--r--axiom/src/om/om_stax_builder.c68
1 files changed, 22 insertions, 46 deletions
diff --git a/axiom/src/om/om_stax_builder.c b/axiom/src/om/om_stax_builder.c
index 60d4fcc..0052338 100644
--- a/axiom/src/om/om_stax_builder.c
+++ b/axiom/src/om/om_stax_builder.c
@@ -155,7 +155,8 @@ axiom_stax_builder_free_self(
}
}
-/** Gets the document associated with the builder
+/**
+ * Gets the document associated with the builder
* @param builder axiom_stax_builder
* @param env environment
* @return pointer to document struct associated with builder NULL if an error occurred.
@@ -418,9 +419,9 @@ axiom_stax_builder_create_om_element(
axiom_element_t *om_ele = NULL;
axis2_char_t *temp_localname = NULL;
axutil_string_t *temp_localname_str = NULL;
+ axiom_node_t *parent = NULL;
temp_localname = axiom_xml_reader_get_name(om_builder->parser, env);
-
if(!temp_localname)
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_XML_READER_ELEMENT_NULL, AXIS2_FAILURE);
@@ -436,56 +437,37 @@ axiom_stax_builder_create_om_element(
#endif
om_builder->element_level++;
-
- if(!om_builder->lastnode)
+ if(om_builder->lastnode)
{
- /* since last node is null, this should be the root node */
- om_ele = axiom_element_create_str(env, NULL, temp_localname_str, NULL, &element_node);
- if(!element_node)
+ if(axiom_node_is_complete(om_builder->lastnode, env))
{
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot create element");
- return NULL;
+ /*previous node building is finished. This node should be a sibling of previous node */
+ parent = axiom_node_get_parent(om_builder->lastnode, env);
}
- om_builder->root_node = element_node;
- if(om_builder->document)
- {
- axiom_document_set_root_element(om_builder->document, env, element_node);
- }
- }
- else if(axiom_node_is_complete(om_builder->lastnode, env))
- {
- /* previous node building is finished. So, this node should be a sibling of previous node */
- axiom_node_t *parent = axiom_node_get_parent(om_builder->lastnode, env);
- om_ele = axiom_element_create_str(env, parent, temp_localname_str, NULL, &element_node);
- if(element_node)
- {
- axiom_node_set_next_sibling(om_builder->lastnode, env, element_node);
- axiom_node_set_previous_sibling(element_node, env, om_builder->lastnode);
- }
- }
- else
- {
- /* previous node building is not finished. This should be first child of previous node */
- om_ele = axiom_element_create_str(
- env, om_builder->lastnode, temp_localname_str, NULL, &element_node);
- if(element_node)
+ else
{
- axiom_node_set_first_child(om_builder->lastnode, env, element_node);
- axiom_node_set_parent(element_node, env, om_builder->lastnode);
+ /*previous node building is not finished. This should be child of previous node */
+ parent = om_builder->lastnode;
}
}
+ om_ele = axiom_element_create_str(env, parent, temp_localname_str, NULL, &element_node);
axutil_string_free(temp_localname_str, env);
-
if((!om_ele) || (!element_node))
{
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Cannot create axiom element");
return NULL;
}
-
axiom_node_set_builder(element_node, env, om_builder);
axiom_element_set_is_empty(om_ele, env, is_empty);
+ if(!om_builder->lastnode)
+ {
+ /* since last node is null, this should be the root node */
+ om_builder->root_node = element_node;
+ axiom_document_set_root_element(om_builder->document, env, element_node);
+ }
+
/* order of processing name spaces first (before processing attributes) is important */
axiom_stax_builder_process_namespaces(om_builder, env, element_node, 0);
axiom_stax_builder_process_attributes(om_builder, env, element_node);
@@ -649,12 +631,6 @@ axiom_stax_builder_next_with_token(
{
int token = 0;
- if((!om_builder) || (!om_builder->parser))
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invalid OM builder");
- return -1;
- }
-
if(om_builder->done)
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_BUILDER_DONE_CANNOT_PULL, AXIS2_FAILURE);
@@ -668,6 +644,7 @@ axiom_stax_builder_next_with_token(
if(token == -1)
{
om_builder->done = AXIS2_TRUE;
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_BUILDER_DONE_CANNOT_PULL, AXIS2_FAILURE);
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error when reading xml");
return -1;
}
@@ -684,6 +661,7 @@ axiom_stax_builder_next_with_token(
if(!axiom_stax_builder_create_om_element(om_builder, env, AXIS2_FALSE))
{
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Error in creating start element");
+ /* error is set in the create_om_element method. No need to set here */
return -1;
}
break;
@@ -797,14 +775,13 @@ axiom_stax_builder_is_complete(
/**
internal function for soap om_builder only
*/
-axis2_status_t AXIS2_CALL
+void AXIS2_CALL
axiom_stax_builder_set_lastnode(
axiom_stax_builder_t * om_builder,
const axutil_env_t * env,
axiom_node_t * om_node)
{
om_builder->lastnode = om_node;
- return AXIS2_SUCCESS;
}
/**
@@ -821,14 +798,13 @@ axiom_stax_builder_get_element_level(
/**
internal function for soap om_builder only
*/
-axis2_status_t AXIS2_CALL
+void AXIS2_CALL
axiom_stax_builder_set_element_level(
axiom_stax_builder_t * om_builder,
const axutil_env_t * env,
int element_level)
{
om_builder->element_level = element_level;
- return AXIS2_SUCCESS;
}
#if 0