You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by sa...@apache.org on 2005/10/23 09:41:36 UTC
svn commit: r327761 -
/webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_stax_builder.c
Author: samisa
Date: Sun Oct 23 00:41:32 2005
New Revision: 327761
URL: http://svn.apache.org/viewcvs?rev=327761&view=rev
Log:
Fixed formatting and removed commented blocks
Modified:
webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_stax_builder.c
Modified: webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_stax_builder.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_stax_builder.c?rev=327761&r1=327760&r2=327761&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_stax_builder.c (original)
+++ webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_stax_builder.c Sun Oct 23 00:41:32 2005
@@ -1,576 +1,519 @@
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <axis2_om_stax_builder.h>
-#include <axis2_om_element.h>
-#include <axis2_om_text.h>
-#include <guththila_xml_pull_parser.h>
-
-const axis2_char_t XMLNS_URI[] ="http://www.w3.org/XML/1998/namespace";
-const axis2_char_t XMLNS_PREFIX[]= "xml";
-
-axis2_om_node_t *axis2_om_stax_builder_impl_next(axis2_environment_t *environment, axis2_om_stax_builder_t *builder);
-axis2_status_t axis2_om_stax_builder_impl_discard_current_element(axis2_environment_t *environment, axis2_om_stax_builder_t *builder);
-
-static int isnot_whitespace(axis2_char_t s[])
-{
-
- int n=0;
-
- for(n = strlen(s)-1;n>=0;n--)
- if(s[n] !=' ' && s[n] !='\t' && s[n] != '\n')
- break;
- if(n== -1)
- n =0;
-
- return n;
-}
-
-static int trim(axis2_char_t s[])
-{
- int n;
- for(n = strlen(s)-1;n>=0;n--)
- if(s[n] !=' ' && s[n] !='\t' && s[n] != '\n')
- break;
- s[n+1] = '\0';
- return n;
-}
-
-axis2_om_stax_builder_t *axis2_om_stax_builder_create(axis2_environment_t *environment, void *parser)
-{
- axis2_om_stax_builder_t *builder = (axis2_om_stax_builder_t*)axis2_malloc(environment->allocator, sizeof(axis2_om_stax_builder_t));
-
- if (!builder)
- {
- environment->error->errorno = AXIS2_ERROR_NO_MEMORY;
- return NULL;
- }
-
- builder->parser = NULL;
- if (parser)
- builder->parser = parser;
- else
- {
- /* create the default Guththila pull parser */
- guththila_reader_t *reader = guththila_reader_create (stdin);
-
- if (!reader)
- {
- environment->error->errorno = AXIS2_ERROR_NO_MEMORY;
- return NULL;
- }
-
- builder->parser = guththila_xml_pull_parser_create (reader);
-
- if (!builder->parser)
- {
- environment->error->errorno = AXIS2_ERROR_NO_MEMORY;
- return NULL;
- }
- }
-
- builder->cache = AXIS2_TRUE;
- builder->parser_accessed = AXIS2_FALSE;
- builder->done = AXIS2_FALSE;
- builder->lastnode = NULL;
- builder->document= NULL;
-
- /* operations */
- builder->ops = NULL;
- builder->ops = (axis2_om_stax_builder_ops_t*) axis2_malloc(environment->allocator, sizeof(axis2_om_stax_builder_t));
-
- if (!builder->ops)
- {
- guththila_xml_pull_parser_free(builder->parser);
- axis2_free(environment->allocator, builder);
- environment->error->errorno = AXIS2_ERROR_NO_MEMORY;
- return NULL;
- }
-
- builder->ops->axis2_om_stax_builder_ops_next = axis2_om_stax_builder_impl_next;
- builder->ops->axis2_om_stax_builder_ops_discard_current_element = axis2_om_stax_builder_impl_discard_current_element;
-
- return builder;
-}
-
-axis2_status_t axis2_om_stax_builder_process_attributes(axis2_environment_t *environment, axis2_om_stax_builder_t *builder, axis2_om_node_t *element_node)
-{
- int i = 0;
- axis2_om_attribute_t *attribute = NULL;
- axis2_om_namespace_t *ns = NULL;
- axis2_char_t *uri = NULL;
- axis2_char_t *prefix = NULL;
- axis2_status_t status = AXIS2_SUCCESS;
-
- int attribute_count = guththila_xml_pull_parser_get_attribute_count(builder->parser);
- for(i = 0 ; i < attribute_count ; i++)
- {
-
- uri = guththila_xml_pull_parser_get_attribute_namespace_by_number(builder->parser, i);
- prefix = guththila_xml_pull_parser_get_attribute_prefix_by_number(builder->parser, i);
-
- if(uri){
- if(axis2_strcmp(environment->string, uri," ") != 0);
- {
- ns = axis2_om_element_find_namespace(environment, element_node, uri, prefix);
- }
- }
-
- if(ns == NULL && prefix && uri && (axis2_strcmp(environment->string, prefix, XMLNS_PREFIX) == 0)
- && (axis2_strcmp(environment->string, uri, XMLNS_URI) == 0))
- {
- ns = axis2_om_namespace_create(environment, XMLNS_URI, XMLNS_PREFIX);
- if (ns)
- {
- status = axis2_om_element_declare_namespace(environment, element_node, ns);
- }
- else
- {
- status = AXIS2_FAILURE;
- }
-
- ns = axis2_om_element_find_namespace(environment, element_node, uri, prefix);
- }
- attribute = axis2_om_attribute_create(environment, guththila_xml_pull_parser_get_attribute_name_by_number(builder->parser,i),
- guththila_xml_pull_parser_get_attribute_value_by_number(builder->parser,i), ns);
- status = axis2_om_element_add_attribute(environment, (axis2_om_element_t*)element_node->data_element, attribute);
-
- }
-
- return status;
-
-}
-
-
-axis2_om_node_t *axis2_om_stax_builder_create_om_text(axis2_environment_t *environment, axis2_om_stax_builder_t *builder)
-{
- axis2_char_t *value = NULL;
- axis2_char_t *temp_value = NULL;
- axis2_om_node_t *node = NULL;
-
- if (!builder->lastnode)
- {
- environment->error->errorno = AXIS2_ERROR_INVALID_BUILDER_STATE_LAST_NODE_NULL;
- return NULL;
- }
-
- temp_value = guththila_xml_pull_parser_get_value(builder->parser);
-
- if(!temp_value)
- {
- environment->error->errorno = AXIS2_ERROR_PULL_PARSER_VALUE_NULL;
- return NULL;
- }
- else
- {
- value = axis2_strdup(environment->string, temp_value);
- axis2_free(environment->allocator, temp_value); /*should use guththila free here*/
- }
- /* Parser should fire a SPACE event here
- if(!isnot_whitespace(value))
- return NULL;
- */
- if(builder->lastnode->done)
- {
- axis2_om_text_create(environment, builder->lastnode->parent, value, &node);
-
- }
- else
- {
- axis2_om_text_create(environment, builder->lastnode, value, &node);
- }
-
- node->done = AXIS2_TRUE;
- builder->lastnode = node;
-
- return node;
-}
-
-
-axis2_status_t axis2_om_stax_builder_impl_discard_current_element(axis2_environment_t *environment, axis2_om_stax_builder_t *builder)
-{
- axis2_om_node_t *element=NULL;
- axis2_om_node_t *prev_node=NULL;
- axis2_om_node_t *parent = NULL;
- element = builder->lastnode;
-
- if(element->done || !(builder->cache))
- {
- environment->error->errorno = AXIS2_ERROR_INVALID_BUILDER_STATE_CANNOT_DISCARD;
- return AXIS2_FAILURE;
- }
-
- builder->cache = AXIS2_FALSE;
- do
- {
- while(guththila_xml_pull_parser_next(builder->parser) != GUTHTHILA_END_ELEMENT);
- }while(!(element->done));
-
- /*All children of this element is pulled now*/
-
- prev_node = element->prev_sibling;
- if(prev_node)
- {
- axis2_om_node_free(environment, prev_node->next_sibling);
- prev_node->next_sibling = NULL;
-
- }else
- {
- parent = element->parent;
- axis2_om_node_free(environment, parent->first_child);
- parent->first_child = NULL;
- builder->lastnode = parent;
- }
- builder->cache = AXIS2_TRUE;
-
- return AXIS2_SUCCESS;
-}
-
-/*
-axis2_status_t axis2_om_stax_builder_process_start_document(axis2_environment_t *environment, axis2_om_stax_builder_t* builder)
-{
-
- ATTRIBUTE *a;
- axis2_char_t *p;
- int ix;
- if(!(builder->document))
- {
- return;
- }
-
- ix = XML_PullParser_getAttributeCount (builder->parser);
- for (; ix > 0; ix--)
- {
- a = XML_PullParser_getAttribute (builder->parser);
- p = XML_PullParser_getAttributeName (builder->parser, a);
- free (p);
- p = XML_PullParser_getAttributeValue (builder->parser, a);
- free (p);
- }
-}
-*/
-
-axis2_status_t axis2_om_stax_builder_process_namespaces(axis2_environment_t *environment, axis2_om_stax_builder_t *builder, axis2_om_node_t *node, int is_soap_element)
-{
- axis2_char_t *nsuri = NULL;
- axis2_char_t *prefix = NULL;
- guththila_namespace_t *ns = NULL;
- axis2_status_t status = AXIS2_SUCCESS;
- int namespace_count = 0;
- axis2_om_namespace_t *om_ns = NULL;
- axis2_char_t *temp_prefix = NULL;
-
- namespace_count = guththila_xml_pull_parser_get_namespacecount (builder->parser);
-
- for( ;namespace_count > 0 ; namespace_count--)
- {
- om_ns = axis2_om_namespace_create(environment, guththila_xml_pull_parser_get_namespace_uri_by_number(builder->parser,namespace_count),
- guththila_xml_pull_parser_get_namespace_prefix_by_number(builder->parser,namespace_count));
- if (om_ns)
- {
- status = axis2_om_element_declare_namespace(environment, node, om_ns);
- }
- else
- {
- /* something went wrong */
- return AXIS2_FAILURE;
- }
- }
- /* set own namespace */
- temp_prefix = guththila_xml_pull_parser_get_prefix(builder->parser);
-
- if (temp_prefix)
- {
- om_ns = axis2_om_element_find_namespace(environment, node, NULL, temp_prefix);
-
- if (om_ns)
- {
- ((axis2_om_element_t*)(node->data_element))->ns = om_ns;
- }
- else
- {
- environment->error->errorno = AXIS2_ERROR_INVALID_DOCUMENT_STATE_UNDEFINED_NAMESPACE;
- return AXIS2_FAILURE;
- }
-
- }
-
- /*ns = guththila_xml_pull_parser_get_namespace(builder->parser);
- nsuri = guththila_xml_pull_parser_get_namespace_uri(builder->parser, ns);
- prefix = guththila_xml_pull_parser_get_namespace_prefix(builder->parser, ns);
-
- if(nsuri && axis2_strcmp(environment->string, nsuri, "") != 0)
- {
- if(!prefix)
- {
-
- om_ns = axis2_om_element_find_namespace(environment, node, nsuri, "");
- if(!om_ns)
- {
- om_ns = axis2_om_namespace_create(environment, nsuri, "");
- if (om_ns)
- {
- status = axis2_om_element_declare_namespace(environment, node, om_ns);
- }
- else
- {
-
- return AXIS2_FAILURE;
- }
- }
-
- if(((axis2_om_element_t*)(node->data_element))->ns != om_ns)
- {
- ((axis2_om_element_t*)(node->data_element))->ns = om_ns;
- }
- }
- else
- {
- om_ns = axis2_om_element_find_namespace(environment, node, nsuri, prefix);
-
- if(!om_ns)
- {
- om_ns = axis2_om_namespace_create(environment, nsuri, prefix);
- if (om_ns)
- {
- status = axis2_om_element_declare_namespace(environment, node, om_ns);
- }
- else
- {
- return AXIS2_FAILURE;
- }
- }
-
- if(((axis2_om_element_t*)(node->data_element))->ns != om_ns)
- {
- ((axis2_om_element_t*)(node->data_element))->ns = om_ns;
- }
- }
- }*/
-
- return status;
-}
-
-axis2_om_node_t *axis2_om_stax_builder_create_om_element(axis2_environment_t *environment,
- axis2_om_stax_builder_t *builder)
-{
- axis2_om_node_t *element_node;
- axis2_char_t *localname = NULL;
-
- axis2_char_t *temp_localname = guththila_xml_pull_parser_get_name (builder->parser);
-
- if (!temp_localname)
- {
- environment->error->errorno = AXIS2_ERROR_PULL_PARSER_ELEMENT_NULL;
- return NULL;
- }
- else
- {
- localname = axis2_strdup(environment->string, temp_localname);
- axis2_free(environment->allocator, temp_localname); /*we should be using guththila free here*/
- }
-
- if(!(builder->lastnode))
- {
- axis2_om_element_create(environment, NULL,localname,NULL,&element_node);
-
- if (builder->document->root_element)
- axis2_om_node_free(environment, builder->document->root_element);
- builder->document->root_element = element_node;
- }
- else if(builder->lastnode->done)
- {
- axis2_om_element_create(environment, builder->lastnode->parent, localname, NULL, &element_node);
- builder->lastnode->next_sibling = element_node;
- element_node->prev_sibling = builder->lastnode;
- }
- else
- {
- axis2_om_element_create(environment, builder->lastnode,localname,NULL,&element_node);
- builder->lastnode->first_child = element_node;
- element_node->parent = builder->lastnode;
- }
- axis2_om_stax_builder_process_attributes(environment, builder, element_node);
- axis2_om_stax_builder_process_namespaces(environment, builder, element_node, 0);
-
- builder->lastnode = element_node;
-
- return element_node;
-}
-
-axis2_om_node_t *axis2_om_stax_builder_create_om_comment( axis2_environment_t *environment,
- axis2_om_stax_builder_t *builder)
-{
-
- /* guththila does not support comments*/
- return NULL;
-}
-
-
-axis2_om_node_t *axis2_om_stax_builder_create_om_doctype(axis2_environment_t *environment,
- axis2_om_stax_builder_t *builder)
-{
- /* guththila does not support doctype */
- return NULL;
-}
-
-
-axis2_om_node_t *axis2_om_stax_builder_create_om_processing_instruction(axis2_environment_t *environment,
- axis2_om_stax_builder_t *builder)
-{
- /* guththila does not support processing instrtuctions */
- return NULL;
-}
-
-axis2_status_t axis2_om_stax_builder_end_element(axis2_environment_t *environment, axis2_om_stax_builder_t *builder)
-{
- axis2_om_node_t *parent;
- if(builder->lastnode)
- {
- if(builder->lastnode->done)
- {
- parent = builder->lastnode->parent;
- if (parent)
- {
- parent->done = AXIS2_TRUE;
- builder->lastnode = parent;
- }
- }
- else
- {
- builder->lastnode->done = AXIS2_TRUE;
- }
- }
-
- return AXIS2_SUCCESS;
-}
-
-
-axis2_om_node_t *axis2_om_stax_builder_impl_next(axis2_environment_t *environment, axis2_om_stax_builder_t *builder)
-{
- int token = 0;
- axis2_om_node_t *node = NULL;
-
- do
- {
- if(builder->done)
- {
- environment->error->errorno = AXIS2_ERROR_BUILDER_DONE_CANNOT_PULL;
- return NULL;
- }
-
- token = guththila_xml_pull_parser_next (builder->parser);
-
- if(!(builder->cache))
- {
- return NULL;
- }
-
-
- switch(token)
- {
- case GUTHTHILA_START_DOCUMENT:
- /*axis2_om_stax_builder_process_start_document(builder);*/
- /*Do nothing */
- break;
- case GUTHTHILA_START_ELEMENT:
- node = axis2_om_stax_builder_create_om_element(environment, builder);
- break;
- case GUTHTHILA_EMPTY_ELEMENT:
- node = axis2_om_stax_builder_create_om_element(environment, builder);
- case GUTHTHILA_END_ELEMENT:
- axis2_om_stax_builder_end_element(environment, builder);
- break;
- case GUTHTHILA_SPACE:
- /* Do nothing*/
- break;
- case GUTHTHILA_CHARACTER:
- node = axis2_om_stax_builder_create_om_text(environment, builder);
- break;
- case GUTHTHILA_COMMENT:
- break;
- }
- } while (!node);
-
- return node;
-}
-
-/*
-axis2_status_t axis2_om_stax_builder_process_attributes(axis2_environment_t *environment, axis2_om_stax_builder_t *builder, axis2_om_node_t *element_node)
-{
- int i=0;
- axis2_om_namespace_t *ns = NULL;
- axis2_char_t *uri = NULL;
- axis2_char_t *prefix = NULL;
- axis2_status_t status = AXIS2_SUCCESS;
-
- int attribute_count = guththila_xml_pull_parser_get_attribute_count(builder->parser);
- for(i = 0 ; i < attribute_count ; i++)
- {
-
- uri = guththila_xml_pull_parser_get_attribute_namespace_by_number(builder->parser,i);
- prefix = guththila_xml_pull_parser_get_attribute_prefix_by_number(builder->parser,i);
-
- if(uri){
- if(axis2_strcmp(environment->string, uri," ") != 0);
- {
- ns = axis2_om_element_find_namespace(element_node, uri, prefix);
- }
- }
-
- if(ns == NULL && prefix && uri && (axis2_strcmp(environment->string, prefix, XMLNS_PREFIX) == 0)
- && (axis2_strcmp(environment->string, uri, XMLNS_URI) == 0))
- {
- ns = axis2_om_element_declare_namespace_with_ns_uri_prefix(element_node,
- XMLNS_URI, XMLNS_PREFIX);
- ns = axis2_om_element_find_namespace(element_node, uri, prefix);
- }
-
- status = axis2_om_element_add_attribute_with_namespace(element_node,
- guththila_xml_pull_parser_get_attribute_name_by_number(builder->parser,i),
- guththila_xml_pull_parser_get_attribute_value_by_number(builder->parser,i), ns);
- }
-
- return status;
-
-}
-*/
-
-
-
-/*
-axis2_status_t axis2_om_stax_builder_process_start_document(axis2_environment_t *environment, axis2_om_stax_builder_t* builder)
-{
-
- ATTRIBUTE *a;
- axis2_char_t *p;
- int ix;
- if(!(builder->document))
- {
- return;
- }
-
- ix = XML_PullParser_getAttributeCount (builder->parser);
- for (; ix > 0; ix--)
- {
- a = XML_PullParser_getAttribute (builder->parser);
- p = XML_PullParser_getAttributeName (builder->parser, a);
- free (p);
- p = XML_PullParser_getAttributeValue (builder->parser, a);
- free (p);
- }
-}
-*/
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <axis2_om_stax_builder.h>
+#include <axis2_om_element.h>
+#include <axis2_om_text.h>
+#include <guththila_xml_pull_parser.h>
+
+const axis2_char_t XMLNS_URI[] = "http://www.w3.org/XML/1998/namespace";
+const axis2_char_t XMLNS_PREFIX[] = "xml";
+
+axis2_om_node_t *axis2_om_stax_builder_impl_next (axis2_environment_t *
+ environment,
+ axis2_om_stax_builder_t *
+ builder);
+axis2_status_t
+axis2_om_stax_builder_impl_discard_current_element (axis2_environment_t *
+ environment,
+ axis2_om_stax_builder_t *
+ builder);
+
+static int
+isnot_whitespace (axis2_char_t s[])
+{
+
+ int n = 0;
+
+ for (n = strlen (s) - 1; n >= 0; n--)
+ if (s[n] != ' ' && s[n] != '\t' && s[n] != '\n')
+ break;
+ if (n == -1)
+ n = 0;
+
+ return n;
+}
+
+static int
+trim (axis2_char_t s[])
+{
+ int n;
+ for (n = strlen (s) - 1; n >= 0; n--)
+ if (s[n] != ' ' && s[n] != '\t' && s[n] != '\n')
+ break;
+ s[n + 1] = '\0';
+ return n;
+}
+
+axis2_om_stax_builder_t *
+axis2_om_stax_builder_create (axis2_environment_t * environment, void *parser)
+{
+ axis2_om_stax_builder_t *builder =
+ (axis2_om_stax_builder_t *) axis2_malloc (environment->allocator,
+ sizeof
+ (axis2_om_stax_builder_t));
+
+ if (!builder)
+ {
+ environment->error->errorno = AXIS2_ERROR_NO_MEMORY;
+ return NULL;
+ }
+
+ builder->parser = NULL;
+ if (parser)
+ builder->parser = parser;
+ else
+ {
+ /* create the default Guththila pull parser */
+ guththila_reader_t *reader = guththila_reader_create (stdin);
+
+ if (!reader)
+ {
+ environment->error->errorno = AXIS2_ERROR_NO_MEMORY;
+ return NULL;
+ }
+
+ builder->parser = guththila_xml_pull_parser_create (reader);
+
+ if (!builder->parser)
+ {
+ environment->error->errorno = AXIS2_ERROR_NO_MEMORY;
+ return NULL;
+ }
+ }
+
+ builder->cache = AXIS2_TRUE;
+ builder->parser_accessed = AXIS2_FALSE;
+ builder->done = AXIS2_FALSE;
+ builder->lastnode = NULL;
+ builder->document = NULL;
+
+ /* operations */
+ builder->ops = NULL;
+ builder->ops =
+ (axis2_om_stax_builder_ops_t *) axis2_malloc (environment->allocator,
+ sizeof
+ (axis2_om_stax_builder_t));
+
+ if (!builder->ops)
+ {
+ guththila_xml_pull_parser_free (builder->parser);
+ axis2_free (environment->allocator, builder);
+ environment->error->errorno = AXIS2_ERROR_NO_MEMORY;
+ return NULL;
+ }
+
+ builder->ops->axis2_om_stax_builder_ops_next =
+ axis2_om_stax_builder_impl_next;
+ builder->ops->axis2_om_stax_builder_ops_discard_current_element =
+ axis2_om_stax_builder_impl_discard_current_element;
+
+ return builder;
+}
+
+axis2_status_t
+axis2_om_stax_builder_process_attributes (axis2_environment_t * environment,
+ axis2_om_stax_builder_t * builder,
+ axis2_om_node_t * element_node)
+{
+ int i = 0;
+ axis2_om_attribute_t *attribute = NULL;
+ axis2_om_namespace_t *ns = NULL;
+ axis2_char_t *uri = NULL;
+ axis2_char_t *prefix = NULL;
+ axis2_status_t status = AXIS2_SUCCESS;
+
+ int attribute_count =
+ guththila_xml_pull_parser_get_attribute_count (builder->parser);
+ for (i = 0; i < attribute_count; i++)
+ {
+
+ uri =
+ guththila_xml_pull_parser_get_attribute_namespace_by_number
+ (builder->parser, i);
+ prefix =
+ guththila_xml_pull_parser_get_attribute_prefix_by_number
+ (builder->parser, i);
+
+ if (uri)
+ {
+ if (axis2_strcmp (environment->string, uri, " ") != 0);
+ {
+ ns = axis2_om_element_find_namespace (environment,
+ element_node, uri,
+ prefix);
+ }
+ }
+
+ if (ns == NULL && prefix && uri
+ && (axis2_strcmp (environment->string, prefix, XMLNS_PREFIX) == 0)
+ && (axis2_strcmp (environment->string, uri, XMLNS_URI) == 0))
+ {
+ ns = axis2_om_namespace_create (environment, XMLNS_URI,
+ XMLNS_PREFIX);
+ if (ns)
+ {
+ status =
+ axis2_om_element_declare_namespace (environment,
+ element_node, ns);
+ }
+ else
+ {
+ status = AXIS2_FAILURE;
+ }
+
+ ns = axis2_om_element_find_namespace (environment, element_node,
+ uri, prefix);
+ }
+ attribute =
+ axis2_om_attribute_create (environment,
+ guththila_xml_pull_parser_get_attribute_name_by_number
+ (builder->parser, i),
+ guththila_xml_pull_parser_get_attribute_value_by_number
+ (builder->parser, i), ns);
+ status =
+ axis2_om_element_add_attribute (environment,
+ (axis2_om_element_t *)
+ element_node->data_element,
+ attribute);
+
+ }
+
+ return status;
+
+}
+
+
+axis2_om_node_t *
+axis2_om_stax_builder_create_om_text (axis2_environment_t * environment,
+ axis2_om_stax_builder_t * builder)
+{
+ axis2_char_t *value = NULL;
+ axis2_char_t *temp_value = NULL;
+ axis2_om_node_t *node = NULL;
+
+ if (!builder->lastnode)
+ {
+ environment->error->errorno =
+ AXIS2_ERROR_INVALID_BUILDER_STATE_LAST_NODE_NULL;
+ return NULL;
+ }
+
+ temp_value = guththila_xml_pull_parser_get_value (builder->parser);
+
+ if (!temp_value)
+ {
+ environment->error->errorno = AXIS2_ERROR_PULL_PARSER_VALUE_NULL;
+ return NULL;
+ }
+ else
+ {
+ value = axis2_strdup (environment->string, temp_value);
+ axis2_free (environment->allocator, temp_value); /*should use guththila free here */
+ }
+ /* Parser should fire a SPACE event here
+ if(!isnot_whitespace(value))
+ return NULL;
+ */
+ if (builder->lastnode->done)
+ {
+ axis2_om_text_create (environment, builder->lastnode->parent, value,
+ &node);
+
+ }
+ else
+ {
+ axis2_om_text_create (environment, builder->lastnode, value, &node);
+ }
+
+ node->done = AXIS2_TRUE;
+ builder->lastnode = node;
+
+ return node;
+}
+
+
+axis2_status_t
+axis2_om_stax_builder_impl_discard_current_element (axis2_environment_t *
+ environment,
+ axis2_om_stax_builder_t *
+ builder)
+{
+ axis2_om_node_t *element = NULL;
+ axis2_om_node_t *prev_node = NULL;
+ axis2_om_node_t *parent = NULL;
+ element = builder->lastnode;
+
+ if (element->done || !(builder->cache))
+ {
+ environment->error->errorno =
+ AXIS2_ERROR_INVALID_BUILDER_STATE_CANNOT_DISCARD;
+ return AXIS2_FAILURE;
+ }
+
+ builder->cache = AXIS2_FALSE;
+ do
+ {
+ while (guththila_xml_pull_parser_next (builder->parser) !=
+ GUTHTHILA_END_ELEMENT);
+ }
+ while (!(element->done));
+
+ /*All children of this element is pulled now */
+
+ prev_node = element->prev_sibling;
+ if (prev_node)
+ {
+ axis2_om_node_free (environment, prev_node->next_sibling);
+ prev_node->next_sibling = NULL;
+
+ }
+ else
+ {
+ parent = element->parent;
+ axis2_om_node_free (environment, parent->first_child);
+ parent->first_child = NULL;
+ builder->lastnode = parent;
+ }
+ builder->cache = AXIS2_TRUE;
+
+ return AXIS2_SUCCESS;
+}
+
+axis2_status_t
+axis2_om_stax_builder_process_namespaces (axis2_environment_t * environment,
+ axis2_om_stax_builder_t * builder,
+ axis2_om_node_t * node,
+ int is_soap_element)
+{
+ axis2_status_t status = AXIS2_SUCCESS;
+ int namespace_count = 0;
+ axis2_om_namespace_t *om_ns = NULL;
+ axis2_char_t *temp_prefix = NULL;
+
+ namespace_count =
+ guththila_xml_pull_parser_get_namespacecount (builder->parser);
+
+ for (; namespace_count > 0; namespace_count--)
+ {
+ om_ns =
+ axis2_om_namespace_create (environment,
+ guththila_xml_pull_parser_get_namespace_uri_by_number
+ (builder->parser, namespace_count),
+ guththila_xml_pull_parser_get_namespace_prefix_by_number
+ (builder->parser, namespace_count));
+ if (om_ns)
+ {
+ status =
+ axis2_om_element_declare_namespace (environment, node, om_ns);
+ }
+ else
+ {
+ /* something went wrong */
+ return AXIS2_FAILURE;
+ }
+ }
+ /* set own namespace */
+ temp_prefix = guththila_xml_pull_parser_get_prefix (builder->parser);
+
+ if (temp_prefix)
+ {
+ om_ns =
+ axis2_om_element_find_namespace (environment, node, NULL,
+ temp_prefix);
+
+ if (om_ns)
+ {
+ ((axis2_om_element_t *) (node->data_element))->ns = om_ns;
+ }
+ else
+ {
+ environment->error->errorno =
+ AXIS2_ERROR_INVALID_DOCUMENT_STATE_UNDEFINED_NAMESPACE;
+ return AXIS2_FAILURE;
+ }
+
+ }
+
+ return status;
+}
+
+axis2_om_node_t *
+axis2_om_stax_builder_create_om_element (axis2_environment_t * environment,
+ axis2_om_stax_builder_t * builder)
+{
+ axis2_om_node_t *element_node;
+ axis2_char_t *localname = NULL;
+
+ axis2_char_t *temp_localname =
+ guththila_xml_pull_parser_get_name (builder->parser);
+
+ if (!temp_localname)
+ {
+ environment->error->errorno = AXIS2_ERROR_PULL_PARSER_ELEMENT_NULL;
+ return NULL;
+ }
+ else
+ {
+ localname = axis2_strdup (environment->string, temp_localname);
+ axis2_free (environment->allocator, temp_localname); /*we should be using guththila free here */
+ }
+
+ if (!(builder->lastnode))
+ {
+ axis2_om_element_create (environment, NULL, localname, NULL,
+ &element_node);
+
+ if (builder->document->root_element)
+ axis2_om_node_free (environment, builder->document->root_element);
+ builder->document->root_element = element_node;
+ }
+ else if (builder->lastnode->done)
+ {
+ axis2_om_element_create (environment, builder->lastnode->parent,
+ localname, NULL, &element_node);
+ builder->lastnode->next_sibling = element_node;
+ element_node->prev_sibling = builder->lastnode;
+ }
+ else
+ {
+ axis2_om_element_create (environment, builder->lastnode, localname,
+ NULL, &element_node);
+ builder->lastnode->first_child = element_node;
+ element_node->parent = builder->lastnode;
+ }
+ axis2_om_stax_builder_process_attributes (environment, builder,
+ element_node);
+ axis2_om_stax_builder_process_namespaces (environment, builder,
+ element_node, 0);
+
+ builder->lastnode = element_node;
+
+ return element_node;
+}
+
+axis2_om_node_t *
+axis2_om_stax_builder_create_om_comment (axis2_environment_t * environment,
+ axis2_om_stax_builder_t * builder)
+{
+
+ /* guththila does not support comments */
+ return NULL;
+}
+
+
+axis2_om_node_t *
+axis2_om_stax_builder_create_om_doctype (axis2_environment_t * environment,
+ axis2_om_stax_builder_t * builder)
+{
+ /* guththila does not support doctype */
+ return NULL;
+}
+
+
+axis2_om_node_t *
+axis2_om_stax_builder_create_om_processing_instruction (axis2_environment_t *
+ environment,
+ axis2_om_stax_builder_t
+ * builder)
+{
+ /* guththila does not support processing instrtuctions */
+ return NULL;
+}
+
+axis2_status_t
+axis2_om_stax_builder_end_element (axis2_environment_t * environment,
+ axis2_om_stax_builder_t * builder)
+{
+ axis2_om_node_t *parent;
+ if (builder->lastnode)
+ {
+ if (builder->lastnode->done)
+ {
+ parent = builder->lastnode->parent;
+ if (parent)
+ {
+ parent->done = AXIS2_TRUE;
+ builder->lastnode = parent;
+ }
+ }
+ else
+ {
+ builder->lastnode->done = AXIS2_TRUE;
+ }
+ }
+
+ return AXIS2_SUCCESS;
+}
+
+
+axis2_om_node_t *
+axis2_om_stax_builder_impl_next (axis2_environment_t * environment,
+ axis2_om_stax_builder_t * builder)
+{
+ int token = 0;
+ axis2_om_node_t *node = NULL;
+
+ do
+ {
+ if (builder->done)
+ {
+ environment->error->errorno =
+ AXIS2_ERROR_BUILDER_DONE_CANNOT_PULL;
+ return NULL;
+ }
+
+ token = guththila_xml_pull_parser_next (builder->parser);
+
+ if (!(builder->cache))
+ {
+ return NULL;
+ }
+
+
+ switch (token)
+ {
+ case GUTHTHILA_START_DOCUMENT:
+ /*axis2_om_stax_builder_process_start_document(builder); */
+ /*Do nothing */
+ break;
+ case GUTHTHILA_START_ELEMENT:
+ node =
+ axis2_om_stax_builder_create_om_element (environment,
+ builder);
+ break;
+ case GUTHTHILA_EMPTY_ELEMENT:
+ node =
+ axis2_om_stax_builder_create_om_element (environment,
+ builder);
+ case GUTHTHILA_END_ELEMENT:
+ axis2_om_stax_builder_end_element (environment, builder);
+ break;
+ case GUTHTHILA_SPACE:
+ /* Do nothing */
+ break;
+ case GUTHTHILA_CHARACTER:
+ node =
+ axis2_om_stax_builder_create_om_text (environment, builder);
+ break;
+ case GUTHTHILA_COMMENT:
+ break;
+ }
+ }
+ while (!node);
+
+ return node;
+}