You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by sa...@apache.org on 2005/10/20 04:39:12 UTC

svn commit: r326779 - in /webservices/axis2/trunk/c: include/ modules/xml/guththila/src/ modules/xml/om/src/

Author: samisa
Date: Wed Oct 19 19:38:56 2005
New Revision: 326779

URL: http://svn.apache.org/viewcvs?rev=326779&view=rev
Log:
Fixes to stax_builder to work with envioronment

Modified:
    webservices/axis2/trunk/c/include/axis2_error.h
    webservices/axis2/trunk/c/include/axis2_om_element.h
    webservices/axis2/trunk/c/include/axis2_om_stax_builder.h
    webservices/axis2/trunk/c/modules/xml/guththila/src/guththila_xml_pull_parser.h
    webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_document.c
    webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_element.c
    webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_stax_builder.c

Modified: webservices/axis2/trunk/c/include/axis2_error.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/include/axis2_error.h?rev=326779&r1=326778&r2=326779&view=diff
==============================================================================
--- webservices/axis2/trunk/c/include/axis2_error.h (original)
+++ webservices/axis2/trunk/c/include/axis2_error.h Wed Oct 19 19:38:56 2005
@@ -51,8 +51,12 @@
     AXIS2_ERROR_INVALID_NULL_PARAMETER,
     AXIS2_ERROR_INVALID_ITERATOR_STATE,
     AXIS2_ERROR_INVALID_NODE_TYPE,
+	AXIS2_ERROR_PULL_PARSER_ELEMENT_NULL,
+	AXIS2_ERROR_PULL_PARSER_VALUE_NULL,
+	AXIS2_ERROR_BUILDER_DONE_CANNOT_PULL,
+	AXIS2_ERROR_INVALID_BUILDER_STATE_LAST_NODE_NULL,
+	AXIS2_ERROR_INVALID_BUILDER_STATE_CANNOT_DISCARD,
 	AXIS2_ERROR_UNALLOCATED_MEMEORY_RELEASE_REQUESTED
-	
 } axis2_error_codes_t;
 
 #ifdef __cplusplus

Modified: webservices/axis2/trunk/c/include/axis2_om_element.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/include/axis2_om_element.h?rev=326779&r1=326778&r2=326779&view=diff
==============================================================================
--- webservices/axis2/trunk/c/include/axis2_om_element.h (original)
+++ webservices/axis2/trunk/c/include/axis2_om_element.h Wed Oct 19 19:38:56 2005
@@ -68,7 +68,7 @@
     * @return status code 
     */
     
-    axis2_status_t (*axis2_om_element_ops_declare_namespace)(axis2_environment_t *environment, struct axis2_om_element *element, axis2_om_namespace_t *ns);
+    axis2_status_t (*axis2_om_element_ops_declare_namespace)(axis2_environment_t *environment, axis2_om_node_t *node, axis2_om_namespace_t *ns);
     
     /**
      * find namespaces in the scope of current element
@@ -178,8 +178,8 @@
 axis2_om_element_t *axis2_om_element_create_with_qname(axis2_environment_t *environment, axis2_om_node_t *parent,axis2_qname_t *qname
 						,axis2_om_node_t **node);
 
-#define axis2_om_element_find_namespace(environment, node, uri, prefix) ((node->data_element)->ops->axis2_om_element_ops_find_namespace(environment, node, uri, prefix))
-#define axis2_om_element_declare_namespace(environment, element, ns) ((element)->ops->axis2_om_element_ops_declare_namespace(environment, element, ns) )
+#define axis2_om_element_find_namespace(environment, node, uri, prefix) (((axis2_om_element_t*)(node->data_element))->ops->axis2_om_element_ops_find_namespace(environment, node, uri, prefix))
+#define axis2_om_element_declare_namespace(environment, node, ns) (((axis2_om_element_t*)(node->data_element))->ops->axis2_om_element_ops_declare_namespace(environment, node, ns) )
 #define axis2_om_element_find_namespace_with_qname (environment, element, qname) ((element)->ops->axis2_om_element_ops_find_namespace_with_qname (environment, element, qname))
 #define axis2_om_element_add_attribute(environment, element, attribute) ((element)->ops->axis2_om_element_ops_add_attribute(environment, element, attribute))
 #define axis2_om_element_get_attribute(environment, element, qname) ((element)->ops->axis2_om_element_ops_get_attribute(environment, element, qname))

Modified: webservices/axis2/trunk/c/include/axis2_om_stax_builder.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/include/axis2_om_stax_builder.h?rev=326779&r1=326778&r2=326779&view=diff
==============================================================================
--- webservices/axis2/trunk/c/include/axis2_om_stax_builder.h (original)
+++ webservices/axis2/trunk/c/include/axis2_om_stax_builder.h Wed Oct 19 19:38:56 2005
@@ -22,107 +22,48 @@
  * @brief om model stax builder 
  */
 
-#include <guththila_xml_pull_parser.h>
 #include <axis2_om_node.h>
 #include <axis2_om_document.h>
+#include <axis2_environment.h>
 
-struct axis2_om_stax_builder
-{
-	guththila_xml_pull_parser_t			*parser;	
-	axis2_om_node_t			*lastnode;
-	axis2_om_document_t	*document;
-	int				done;
-	int				parser_accessed;
-	int				cache;
-	/*apr_array_header_t *element_stack;*/
-};
-
-/**
- *	create an stax_om_builder
- * @param parser   This is the XMLStreamReader of xmlparser
- *				   [ Guththila ]	
- */
-
-axis2_om_stax_builder_t *axis2_om_stax_builder_create(guththila_xml_pull_parser_t *parser);
-
-/**
- *	Create an om element and adds to the document
- *	@param builder pointer to the builder
- *  @param returns a pointer to axis2_om_node_t containing the element or NULL if there
- *  isn't enough memory
- */
-
-axis2_om_node_t *axis2_om_stax_builder_create_om_element(
-						axis2_om_stax_builder_t *builder);
-
-/**
- *	creates an om comment
- *	@param builder
- *  @returns 
- */
-
-axis2_om_node_t *axis2_om_stax_builder_create_om_comment(
-						axis2_om_stax_builder_t *builder);
-
-/**
- *	create an om doctype
- *
- */
-axis2_om_node_t *axis2_om_stax_builder_create_om_doctype(
-						axis2_om_stax_builder_t *builder_t);
-
-/**
- *	create om_processing_instruction
- */
+struct axis2_om_stax_builder;
+struct axis2_om_stax_builder_ops;
 
-axis2_om_node_t *axis2_om_stax_builder_create_om_processing_instruction(
-						axis2_om_stax_builder_t *builder);
+typedef struct axis2_om_stax_builder_ops
+{
 
 /**
- *	End element processing
- */
-void axis2_om_stax_builder_end_element(axis2_om_stax_builder_t *builder);
-/**
  *	move parser forward and reacts to events 
  */
 
-int axis2_om_stax_builder_next(axis2_om_stax_builder_t *builder);
-
-/**
- *	process attrbites 
- *
- */
+axis2_om_node_t *(*axis2_om_stax_builder_ops_next)(axis2_environment_t *environment, axis2_om_stax_builder_t *builder);
 
-void axis2_om_stax_builder_process_attributes(axis2_om_stax_builder_t *builder,axis2_om_node_t *element_node);
+axis2_status_t (*axis2_om_stax_builder_ops_discard_current_element)(axis2_environment_t *environment, axis2_om_stax_builder_t *builder);
 
-/**
- *	create om text
- *
- */
-axis2_om_node_t *axis2_om_stax_builder_create_om_text(axis2_om_stax_builder_t *builder);
 
-/**
- *	discard building an element
- */
+} axis2_om_stax_builder_ops_t;
 
-
-void axis2_om_stax_builder_discard(axis2_om_stax_builder_t *builder,axis2_om_node_t *element_node);
+struct axis2_om_stax_builder
+{
+	axis2_om_stax_builder_ops_t *ops;
+	void *parser;	
+	axis2_om_node_t *lastnode;
+	axis2_om_document_t	*document;
+	axis2_bool_t done;
+	axis2_bool_t parser_accessed;
+	axis2_bool_t cache;
+};
 
 /**
- *	process namespaces 
- *
+ *	create an stax_om_builder
+ * @param parser   This is the XMLStreamReader of xmlparser
+ *				   [ Guththila ]	
  */
 
-axis2_om_node_t *axis2_om_stax_builder_process_namespace_data(axis2_om_stax_builder_t *builder,axis2_om_node_t *element,int is_soap_element);
-
-char *axis2_om_stax_builder_get_attribute_name(axis2_om_stax_builder_t *builder,int i);
-
-char *axis2_om_stax_builder_get_attribute_prefix(axis2_om_stax_builder_t *builder,int i);
-
-void axis2_om_stax_builder_process_start_document(axis2_om_stax_builder_t* builder);
+axis2_om_stax_builder_t *axis2_om_stax_builder_create(axis2_environment_t *environment, void *parser);
 
-char *axis2_om_stax_builder_get_attribute_namespace(axis2_om_stax_builder_t *builder,int i);
+#define axis2_om_stax_builder_next(environment, builder) ((builder)->ops->axis2_om_stax_builder_ops_next(environment, builder))
+#define axis2_om_stax_builder_discard_current_element(environment, builder) ((builder)->ops->axis2_om_stax_builder_ops_discard_current_element(environment, builder))
 
-int axis2_om_stax_builder_get_attribute_count(axis2_om_stax_builder_t *builder);
 
 #endif /* AXIS2_OM_STAX_BUILDER_H */

Modified: webservices/axis2/trunk/c/modules/xml/guththila/src/guththila_xml_pull_parser.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/guththila/src/guththila_xml_pull_parser.h?rev=326779&r1=326778&r2=326779&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/guththila/src/guththila_xml_pull_parser.h (original)
+++ webservices/axis2/trunk/c/modules/xml/guththila/src/guththila_xml_pull_parser.h Wed Oct 19 19:38:56 2005
@@ -52,13 +52,13 @@
 
 enum guththila_event_types
 {
-  GUTHTHILA_START_DOCUMENT = 10,
-  GUTHTHILA_START_ELEMENT = 20,
-  GUTHTHILA_END_ELEMENT = 30,
-  GUTHTHILA_EMPTY_ELEMENT = 40,
-  GUTHTHILA_CHARACTER = 50,
-  GUTHTHILA_ENTITY_REFERANCE = 60,
-  GUTHTHILA_COMMENT = 70
+  GUTHTHILA_START_DOCUMENT = 0,
+  GUTHTHILA_START_ELEMENT,
+  GUTHTHILA_END_ELEMENT,
+  GUTHTHILA_EMPTY_ELEMENT,
+  GUTHTHILA_CHARACTER,
+  GUTHTHILA_ENTITY_REFERANCE,
+  GUTHTHILA_COMMENT
 };
 enum guththila_event_types guththila_event;
 

Modified: webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_document.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_document.c?rev=326779&r1=326778&r2=326779&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_document.c (original)
+++ webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_document.c Wed Oct 19 19:38:56 2005
@@ -137,7 +137,7 @@
 
 axis2_status_t axis2_om_document_impl_build_next(axis2_environment_t *environment, axis2_om_document_t *document)
 {
-   return axis2_om_stax_builder_next(document->builder);
+   return axis2_om_stax_builder_next(environment, document->builder);
 }
 
 

Modified: webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_element.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_element.c?rev=326779&r1=326778&r2=326779&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_element.c (original)
+++ webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_element.c Wed Oct 19 19:38:56 2005
@@ -23,7 +23,7 @@
 axis2_om_element_impl_find_namespace (axis2_environment_t *environment, axis2_om_node_t
                                  *node, const axis2_char_t *uri,
                                  const axis2_char_t *prefix);
-axis2_status_t axis2_om_element_impl_declare_namespace(axis2_environment_t *environment, axis2_om_element_t *element, axis2_om_namespace_t *ns);                                 
+axis2_status_t axis2_om_element_impl_declare_namespace(axis2_environment_t *environment, axis2_om_node_t *node, axis2_om_namespace_t *ns);
 axis2_om_namespace_t *
 axis2_om_element_impl_find_namespace_with_qname (axis2_environment_t *environment, axis2_om_node_t * element,
                                               axis2_qname_t * qname);
@@ -212,15 +212,26 @@
 
 /* declare a namespace for this om element */
 
-axis2_status_t axis2_om_element_impl_declare_namespace(axis2_environment_t *environment, axis2_om_element_t *element, axis2_om_namespace_t *ns)
+axis2_status_t axis2_om_element_impl_declare_namespace(axis2_environment_t *environment, axis2_om_node_t *node, axis2_om_namespace_t *ns)
 {
-    
-    if (!element || !ns)
+	axis2_om_namespace_t *declared_ns = NULL;
+    axis2_om_element_t *element = NULL;
+    if (!node || !ns)
     {
         environment->error->errorno = AXIS2_ERROR_INVALID_NULL_PARAMETER;
         return AXIS2_FAILURE;
     }
+	
+	declared_ns = axis2_om_element_impl_find_namespace (environment, node->parent, declared_ns->uri, declared_ns->prefix);
 
+	if (declared_ns)
+	{
+		/*Namespace already declared, so return*/
+		return AXIS2_SUCCESS;
+	}
+	
+	element = (axis2_om_element_t*)node->data_element;
+	
     if (!element->namespaces)
     {
         element->namespaces = axis2_hash_make (environment);

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=326779&r1=326778&r2=326779&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 Wed Oct 19 19:38:56 2005
@@ -15,18 +15,17 @@
  */
 
 #include <axis2_om_stax_builder.h>
-#include <axis2_om_node.h>
-#include <stdlib.h>
-#include <namespace.h>
 #include <axis2_om_element.h>
-#include <axis2_errno.h>
-#include <xmlpullparser.h>
 #include <axis2_om_text.h>
+#include <guththila_xml_pull_parser.h>
 
-const char XMLNS_URI[] ="http://www.w3.org/XML/1998/namespace";
-const char XMLNS_PREFIX[]= "xml";
+const axis2_char_t XMLNS_URI[] ="http://www.w3.org/XML/1998/namespace";
+const axis2_char_t XMLNS_PREFIX[]= "xml";
 
-static int isnot_whitespace(char s[])
+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;
@@ -40,7 +39,7 @@
     return n;
 }
 
-static int trim(char s[])
+static int trim(axis2_char_t s[])
 {
     int n;
     for(n = strlen(s)-1;n>=0;n--)
@@ -50,234 +49,157 @@
   return n;
 }
 
-axis2_om_stax_builder_t *axis2_om_stax_builder_create(XML_PullParser *parser)
-{
-	axis2_om_document_t *document;
-	axis2_om_stax_builder_t *builder = (axis2_om_stax_builder_t*)malloc(sizeof(axis2_om_stax_builder_t));
-	if(!builder)
-	{
-		fprintf(stderr," %d Error ",AXIS2_ERROR_OM_MEMORY_ALLOCATION);
-		return NULL;
-	}
-	builder->parser  = parser;
-	builder->cache   = TRUE;
-	builder->parser_accessed = FALSE;
-	builder->done   = FALSE;
-	builder->lastnode = NULL;
-    builder->document= NULL;
-	return builder;
-}
-
-
-axis2_om_node_t *axis2_om_stax_builder_create_om_element(
-						axis2_om_stax_builder_t *builder)
-{
-	axis2_om_node_t *element_node;
-	char *localname = XML_PullParser_getName(builder->parser);
-	
-	if(!(builder->lastnode))
-	{	/*  */
-		axis2_om_element_create(NULL,localname,NULL,&element_node);
-		builder->document->root_element = element_node;
-		
-		//axis2_om_document_add_child(builder->document,element_node);
-	}
-	else if(builder->lastnode->done)
-	{	/*  */
-		axis2_om_element_create(builder->lastnode->parent,localname,NULL,&element_node);
-		builder->lastnode->next_sibling = element_node;
-		element_node->prev_sibling = builder->lastnode;
-	}
-	else 
-	{	/* */
-		axis2_om_element_create(builder->lastnode,localname,NULL,&element_node);
-		builder->lastnode->first_child = element_node;
-		element_node->parent = builder->lastnode;
-	}
-    axis2_om_stax_builder_process_attributes(builder,element_node);
-	axis2_om_stax_builder_process_namespace_data(builder,element_node,0);
-	
-	// process attributes
-
-return element_node;
-}
-
-axis2_om_node_t *axis2_om_stax_builder_create_om_comment(
-						axis2_om_stax_builder_t *builder)
-{
-	
-	/* guththila does not support yet*/
-	return NULL;
-}
-
-
-axis2_om_node_t *axis2_om_stax_builder_create_om_doctype(
-						axis2_om_stax_builder_t *builder)
-{
-	/*  guththila does not support yet */
-	return NULL;
-}
-
-
-axis2_om_node_t *axis2_om_stax_builder_create_om_processing_instruction(
-						axis2_om_stax_builder_t *builder)
-{
-	/* guththila does not support yet */
-	return NULL;
-}
-
-void axis2_om_stax_builder_end_element(axis2_om_stax_builder_t *builder)
-{	
-	axis2_om_node_t *parent;
-	if(builder->lastnode)
-	{
-    	if(builder->lastnode->done)
-	    {
-		    parent = builder->lastnode->parent;
-		    parent->done = TRUE;
-		    builder->lastnode = parent;
-	    }
-	    else
-	    {
-		    builder->lastnode->done = TRUE;
-	    }
-	}
-}
-
-
-int axis2_om_stax_builder_next(axis2_om_stax_builder_t *builder)
+axis2_om_stax_builder_t *axis2_om_stax_builder_create(axis2_environment_t *environment, void *parser)
 {
-	int token = 0;
+	axis2_om_stax_builder_t *builder = (axis2_om_stax_builder_t*)axis2_malloc(environment->allocator, sizeof(axis2_om_stax_builder_t));
 
-	
-	if(builder->done)
-	{
-		fprintf(stderr,"%d Error",-1);
+	if (!builder)
+    {
+        environment->error->errorno = AXIS2_ERROR_NO_MEMORY;        
 		return NULL;
-	}
+    }
 	
-	token = XML_PullParser_next (builder->parser);
-
-	if(!(builder->cache))
-	{
-		return token;
-	}
-   
-
-	switch(token)
+	builder->parser = NULL;
+	if (parser)
+		builder->parser = parser;
+	else 
 	{
-	case START_DOCUMENT:
-		{
+		/* create the default Guththila pull parser */
+		guththila_reader_t *reader = guththila_reader_create (stdin);
 		
-		axis2_om_stax_builder_process_start_document(builder);
-		}
-		break;
-
-	case START_ELEMENT:
-		{
-		    
-		builder->lastnode = axis2_om_stax_builder_create_om_element(builder);
-		}
-		break;
-	case END_ELEMENT:
-		{
-		  axis2_om_stax_builder_end_element(builder);
-	   	}
-		break;
-	case CHARACTER:
+		if (!reader)
 		{
-		
-		builder->lastnode = axis2_om_stax_builder_create_om_text(builder);
+			environment->error->errorno = AXIS2_ERROR_NO_MEMORY;        
+			return NULL;
 		}
-		break;
-	case COMMENT:
-		{
-				
 		
+		builder->parser = guththila_xml_pull_parser_create (reader);
 		
+		if (!builder->parser)
+		{
+			environment->error->errorno = AXIS2_ERROR_NO_MEMORY;        
+			return NULL;
 		}
-		break;
-		
+	}	
 		
-	};
+	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;
 }
 
-
-void axis2_om_stax_builder_process_attributes(axis2_om_stax_builder_t *builder,axis2_om_node_t *element_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;
-	char *uri=NULL;
-	char *prefix=NULL;
+	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 = XML_PullParser_getAttributeCount(builder->parser);
-	for(i=0 ; i < attribute_count ; i++)
+	int attribute_count = guththila_xml_pull_parser_get_attribute_count(builder->parser);
+	for(i = 0 ; i < attribute_count ; i++)
 	{
 	    
-		uri     = XML_PullParser_getAttributeNamespace_by_number(builder->parser,i);
-		prefix  = XML_PullParser_getAttributePrefix_by_number(builder->parser,i);
-		//printf("\nAttribute count %d %s %s\n",attribute_count,uri,prefix);
+		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(strcmp(uri," ") != 0);
+		    if(axis2_strcmp(environment->string, uri," ") != 0);
 		    {
-			    ns = axis2_om_element_find_namespace(element_node,uri,prefix);	
+			    ns = axis2_om_element_find_namespace(environment, element_node, uri, prefix);	
 		    }
 		}
 		
-		if(ns == NULL && prefix && uri	&& (strcmp(prefix,XMLNS_PREFIX) == 0)
-				&& (strcmp(uri,XMLNS_URI) == 0))
+		if(ns == NULL && prefix && uri	&& (axis2_strcmp(environment->string, prefix, XMLNS_PREFIX) == 0)
+				&& (axis2_strcmp(environment->string, uri, XMLNS_URI) == 0))
 		{
-			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);
-			
-			
+			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);			
 		}
-		axis2_om_element_add_attribute_with_namespace(element_node
-				,XML_PullParser_getAttributeName_by_number(builder->parser,i)
-				,XML_PullParser_getAttributeValue_by_number(builder->parser,i),ns);	
-				
-		
+		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_om_stax_builder_t *builder)
+axis2_om_node_t *axis2_om_stax_builder_create_om_text(axis2_environment_t *environment, axis2_om_stax_builder_t *builder)
 {
-    char *value;
-	axis2_om_node_t *node=NULL;
-	//axis2_om_text_t *t,*t1;
-	value = XML_PullParser_getValue(builder->parser);
-	
+    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(!value || !(builder->lastnode) )
+	if(!temp_value)
 	{
-	         return builder->lastnode;
+		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 builder->lastnode;
-	
+	        return NULL;
+	*/
 	if(builder->lastnode->done)
 	{
-		axis2_om_text_create(builder->lastnode->parent,
-			value,&node);
+		axis2_om_text_create(environment, builder->lastnode->parent, value, &node);
 					
 	}
 	else
 	{  
-		 axis2_om_text_create(builder->lastnode,value,&node);
+		 axis2_om_text_create(environment, builder->lastnode, value, &node);
 	}
+	
+	builder->lastnode = node;
+	
 	return node;	
 }
 
 
-void axis2_om_stax_builder_discard_element(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)
 {
    axis2_om_node_t *element=NULL;
    axis2_om_node_t *prev_node=NULL;
@@ -286,37 +208,42 @@
 	
 	if(element->done || !(builder->cache))
 	{
-		fprintf(stderr," Error");
-		return;		
+		environment->error->errorno = AXIS2_ERROR_INVALID_BUILDER_STATE_CANNOT_DISCARD;
+		return AXIS2_FAILURE;		
 	}
 	
-	builder->cache = FALSE;
+	builder->cache = AXIS2_FALSE;
 	do
 	{   
-		while(XML_PullParser_next(builder->parser) != END_ELEMENT);
+		while(guththila_xml_pull_parser_next(builder->parser) != GUTHTHILA_END_ELEMENT);
 	}while(!(element->done));
 	
-	//All children of this element is build 
+	/*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 = TRUE;
+	builder->cache = AXIS2_TRUE;
+	
+	return AXIS2_SUCCESS;
 }
 
-void axis2_om_stax_builder_process_start_document(axis2_om_stax_builder_t* builder)
+/*
+axis2_status_t axis2_om_stax_builder_process_start_document(axis2_environment_t *environment, axis2_om_stax_builder_t* builder)
 {
-    /* skiping */
+  
     ATTRIBUTE *a;
-	char *p;
+	axis2_char_t *p;
 	 int ix;
     if(!(builder->document))
     {
@@ -333,98 +260,290 @@
     	free (p);
     }
 }
+*/
 
-
-
-
-
-
-
-axis2_om_node_t *axis2_om_stax_builder_process_namespace_data(axis2_om_stax_builder_t *builder,axis2_om_node_t *element,int is_soap_element)
+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)
 {
-	int i=0;
-	char *nsuri  = NULL;
-	char *prefix = NULL;
-	char *uri=NULL;
-	char *prefixi=NULL;
-	NAMESPACE *NS;
-	
-	
-	int namespace_count;
+	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;
 	
+	namespace_count = guththila_xml_pull_parser_get_namespacecount (builder->parser);
 	
-	axis2_om_namespace_t *ns,*ns1;
-	//e = Stack_last (builder->parser->dep);
-	//d = e->depth->count;
-	namespace_count = XML_PullParser_getNamespaceCount (builder->parser);
-	
-	for( ;namespace_count >0 ; namespace_count--)
+	for( ;namespace_count > 0 ; namespace_count--)
 	{
-	   // uri = XML_PullParser_getNamespaceUri_by_number(builder->parser,namespace_count);
-	   // prefix = XML_PullParser_getNamespacePrefix_by_number(builder->parser,namespace_count);
-		axis2_om_element_declare_namespace_with_ns_uri_prefix(element,XML_PullParser_getNamespaceUri_by_number(builder->parser,namespace_count),XML_PullParser_getNamespacePrefix_by_number(builder->parser,namespace_count));
-	
-	}
-	// set own namespace //
-	
-	NS = XML_PullParser_getNamespace(builder->parser);
-	nsuri  =XML_PullParser_getNamespaceUri(builder->parser,NS);
-	prefix =XML_PullParser_getNamespacePrefix(builder->parser,NS);
+		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 */
+	
+	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(strcmp(nsuri," ") != 0)
+	if(nsuri && axis2_strcmp(environment->string, nsuri, "") != 0)
 	{
 		if(!prefix)
 		{
 			
-			ns =  axis2_om_element_find_namespace(element,nsuri,"");
-			if(!ns)
+			om_ns =  axis2_om_element_find_namespace(environment, node, nsuri, "");
+			if(!om_ns)
 			{
-				ns = axis2_om_element_declare_namespace_with_ns_uri_prefix(element,nsuri,"");			
+				om_ns = axis2_om_namespace_create(environment, nsuri, "");
+				if (om_ns)
+				{
+					status = axis2_om_element_declare_namespace(environment, node, om_ns);
+				}
+				else
+				{
+					/* something went wrong */
+					return AXIS2_FAILURE;
+				}
 			}
-			if(((axis2_om_element_t*)element)->ns == ns)
+			
+			if(((axis2_om_element_t*)(node->data_element))->ns != om_ns)
 			{
-				axis2_om_element_set_namespace(element,ns);
+				((axis2_om_element_t*)(node->data_element))->ns = om_ns;
 			}
 		}
 		else
 		{
-			ns = axis2_om_element_find_namespace(element,nsuri,prefix);
+			om_ns = axis2_om_element_find_namespace(environment, node, nsuri, prefix);
 			
-			if(!ns)
+			if(!om_ns)
 			{
-				ns1 = axis2_om_namespace_create(nsuri,prefix);
-				axis2_om_element_set_namespace(element,ns1);
-				
+				om_ns = axis2_om_namespace_create(environment, nsuri, prefix);
+				if (om_ns)
+				{
+					status = axis2_om_element_declare_namespace(environment, node, om_ns);
+				}
+				else
+				{
+					/* something went wrong */
+					return AXIS2_FAILURE;
+				}
 			}
-			else
+			
+			if(((axis2_om_element_t*)(node->data_element))->ns != om_ns)
 			{
-			    
-				axis2_om_element_set_namespace(element,ns);
+				((axis2_om_element_t*)(node->data_element))->ns = om_ns;
 			}
 		}
 	}
 	
+	return status;
 }
 
-char *axis2_om_stax_builder_get_attribute_prefix(axis2_om_stax_builder_t *builder,int i)
+axis2_om_node_t *axis2_om_stax_builder_create_om_element(axis2_environment_t *environment, 
+						axis2_om_stax_builder_t *builder)
 {
-	return XML_PullParser_getAttributePrefix_by_number(builder->parser,i);
+	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;
+}
+
 
-char *axis2_om_stax_builder_get_attribute_name(axis2_om_stax_builder_t *builder,int i)
+axis2_om_node_t *axis2_om_stax_builder_create_om_processing_instruction(axis2_environment_t *environment, 
+						axis2_om_stax_builder_t *builder)
 {
-	return XML_PullParser_getAttributeName_by_number(builder->parser,i);
+	/* 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;
+		    parent->done = AXIS2_TRUE;
+		    builder->lastnode = parent;
+	    }
+	    else
+	    {
+		    builder->lastnode->done = AXIS2_TRUE;
+	    }
+	}
+	
+	return AXIS2_SUCCESS;
 }
 
-int axis2_om_stax_builder_get_attribute_count(axis2_om_stax_builder_t *builder)
+
+axis2_om_node_t *axis2_om_stax_builder_impl_next(axis2_environment_t *environment, axis2_om_stax_builder_t *builder)
 {
-	return XML_PullParser_getAttributeCount(builder->parser);	
+	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_END_ELEMENT:
+			  axis2_om_stax_builder_end_element(environment, builder);
+			break;
+		case GUTHTHILA_CHARACTER:
+			node = axis2_om_stax_builder_create_om_text(environment, builder);
+			break;
+		case GUTHTHILA_COMMENT:
+			break;
+		}
+	} while (!node);
+	
+	return node;	
 }
 
-char *axis2_om_stax_builder_get_attribute_namespace(axis2_om_stax_builder_t *builder,int i)
+/*
+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)
 {
-	XML_PullParser_getAttributeNamespace_by_number(	builder->parser,i);
+	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);
+    }
+}
+*/