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/11/29 04:53:58 UTC

svn commit: r349607 [1/3] - in /webservices/axis2/trunk/c: include/ modules/test/om/src/ modules/util/src/ modules/xml/om/src/ modules/xml/parser/ modules/xml/parser/guththila/src/ modules/xml/parser/libxml2/src/

Author: samisa
Date: Mon Nov 28 19:53:29 2005
New Revision: 349607

URL: http://svn.apache.org/viewcvs?rev=349607&view=rev
Log:
memory leaks fixed , axis2_pull_parser was renamed to axis2_xml_reader

Added:
    webservices/axis2/trunk/c/modules/xml/parser/axis2_xml_reader.h
    webservices/axis2/trunk/c/modules/xml/parser/guththila/src/guththila_xml_reader_wrapper.c
    webservices/axis2/trunk/c/modules/xml/parser/libxml2/src/axis2_libxml2_reader_wrapper.c
Removed:
    webservices/axis2/trunk/c/modules/xml/parser/axis2_pull_parser.h
    webservices/axis2/trunk/c/modules/xml/parser/guththila/src/axis2_guththila_wrapper.c
    webservices/axis2/trunk/c/modules/xml/parser/libxml2/src/axis2_libxml2_wrapper.c
Modified:
    webservices/axis2/trunk/c/include/axis2_error.h
    webservices/axis2/trunk/c/include/axis2_om_stax_builder.h
    webservices/axis2/trunk/c/modules/test/om/src/test_om.c
    webservices/axis2/trunk/c/modules/util/src/qname.c
    webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_attribute.c
    webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_comment.c
    webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_element.c
    webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_node.c
    webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_processing_instruction.c
    webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_stax_builder.c
    webservices/axis2/trunk/c/modules/xml/parser/libxml2/src/axis2_libxml2_writer_wrapper.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=349607&r1=349606&r2=349607&view=diff
==============================================================================
--- webservices/axis2/trunk/c/include/axis2_error.h (original)
+++ webservices/axis2/trunk/c/include/axis2_error.h Mon Nov 28 19:53:29 2005
@@ -129,10 +129,10 @@
         AXIS2_ERROR_INVALID_ITERATOR_STATE,
         /** Node type is different from what is expected */
         AXIS2_ERROR_INVALID_NODE_TYPE,
-        /** Pull parser returned NULL element */
-        AXIS2_ERROR_PULL_PARSER_ELEMENT_NULL,
-        /** Pull parser returned NULL value */
-        AXIS2_ERROR_PULL_PARSER_VALUE_NULL,
+        /** axis2_xml_reader returned NULL element */
+        AXIS2_ERROR_XML_READER_ELEMENT_NULL,
+        /** axis2_xml_reader returned NULL value */
+        AXIS2_ERROR_XML_READER_VALUE_NULL,
         /** Builder done with pulling. Cannot pull any more */
         AXIS2_ERROR_BUILDER_DONE_CANNOT_PULL,
         /** Bulder's last node is NULL when it is not supposed to be NULL */

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=349607&r1=349606&r2=349607&view=diff
==============================================================================
--- webservices/axis2/trunk/c/include/axis2_om_stax_builder.h (original)
+++ webservices/axis2/trunk/c/include/axis2_om_stax_builder.h Mon Nov 28 19:53:29 2005
@@ -23,7 +23,7 @@
  */
 
 #include <axis2_om_node.h>
-#include <axis2_pull_parser.h>
+#include <axis2_xml_reader.h>
 #include <axis2_om_document.h>
 #include <axis2_env.h>
 
@@ -122,7 +122,7 @@
     */
     AXIS2_DECLARE(axis2_om_stax_builder_t *)
     axis2_om_stax_builder_create(axis2_env_t **env,
-                                           axis2_pull_parser_t *parser);
+                                           axis2_xml_reader_t *parser);
 
 
 /** builds next node */

Modified: webservices/axis2/trunk/c/modules/test/om/src/test_om.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/test/om/src/test_om.c?rev=349607&r1=349606&r2=349607&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/test/om/src/test_om.c (original)
+++ webservices/axis2/trunk/c/modules/test/om/src/test_om.c Mon Nov 28 19:53:29 2005
@@ -39,7 +39,7 @@
     axis2_om_node_t *node1 = NULL, *node2 = NULL;
     axis2_om_output_t *om_output = NULL;
     axis2_om_namespace_t* ns = NULL;
-    axis2_pull_parser_t *pull_parser = NULL;
+    axis2_xml_reader_t *reader = NULL;
     axis2_xml_writer_t *writer = NULL;
     axis2_char_t *buf = NULL;
     
@@ -49,16 +49,16 @@
         return -1;
       
     /** create pull parser */
-    pull_parser = axis2_pull_parser_create_for_memory(&environment, read_input, NULL);
+    reader = axis2_xml_reader_create_for_memory(&environment, read_input, NULL);
     
-    if(!pull_parser)
+    if(!reader)
     {
         printf("ERROR CREATING PULLPARSER");
         return -1;
     }
     /** create axis2_om_stax_builder by parsing pull_parser struct */
     
-    builder = axis2_om_stax_builder_create (&environment,pull_parser);
+    builder = axis2_om_stax_builder_create (&environment,reader);
     
     if(!builder)
     {
@@ -237,7 +237,7 @@
         printf ("\naxis2_om_node_serialize success\n");
     /* end serializing stuff */
 
-     AXIS2_OM_NODE_FREE_TREE(node1,&environment);
+    // AXIS2_OM_NODE_FREE_TREE(node1,&environment);
      axis2_om_output_free(om_output, &environment);
      printf ("\nDONE\n");
 
@@ -258,7 +258,7 @@
 
     environment = axis2_env_create_with_error_stream_log(allocator, error, stream, axis_log);
     test_om_build (file_name); 
-
+    test_om_serialize();
     axis2_env_free(environment); 
     getchar();
     return 0;

Modified: webservices/axis2/trunk/c/modules/util/src/qname.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/util/src/qname.c?rev=349607&r1=349606&r2=349607&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/util/src/qname.c (original)
+++ webservices/axis2/trunk/c/modules/util/src/qname.c Mon Nov 28 19:53:29 2005
@@ -79,6 +79,7 @@
 
     /**  prefix mandatory */
     axis2_char_t *prefix;
+    
 
 }axis2_qname_impl_t;
 
@@ -194,25 +195,30 @@
 axis2_qname_free ( axis2_qname_t * qname,
                    axis2_env_t **env)
 {   
+    axis2_qname_impl_t *qname_impl = NULL;
     AXIS2_FUNC_PARAM_CHECK(qname, env, AXIS2_FAILURE);
+    qname_impl = AXIS2_INTF_TO_IMPL(qname);
     
-    if (AXIS2_INTF_TO_IMPL(qname)->localpart)
+    if (qname_impl->localpart)
     {
-        AXIS2_FREE ((*env)->allocator, AXIS2_INTF_TO_IMPL(qname)->localpart);
+        AXIS2_FREE ((*env)->allocator, qname_impl->localpart);
+        qname_impl->localpart = NULL;
     }
     if (AXIS2_INTF_TO_IMPL(qname)->namespace_uri)
     {
-        AXIS2_FREE ((*env)->allocator, AXIS2_INTF_TO_IMPL(qname)->namespace_uri);
+        AXIS2_FREE ((*env)->allocator, qname_impl->namespace_uri);
+        qname_impl->namespace_uri = NULL;
     }
     if (AXIS2_INTF_TO_IMPL(qname)->prefix)
     {
-        AXIS2_FREE ((*env)->allocator, AXIS2_INTF_TO_IMPL(qname)->prefix);
+        AXIS2_FREE ((*env)->allocator, qname_impl->prefix);
+        qname_impl->prefix = NULL;
     }
     if (qname->ops)
     {
         AXIS2_FREE ((*env)->allocator, qname->ops);
     }
-    AXIS2_FREE ((*env)->allocator, AXIS2_INTF_TO_IMPL(qname));
+    AXIS2_FREE ((*env)->allocator, qname_impl);
     return AXIS2_SUCCESS;
 
 }
@@ -309,18 +315,23 @@
                      axis2_env_t **env,
                      const axis2_char_t *uri)
 {
+    axis2_qname_impl_t *qname_impl = NULL;
     AXIS2_FUNC_PARAM_CHECK(qname, env,AXIS2_FAILURE);
+    qname_impl = AXIS2_INTF_TO_IMPL(qname);
+    if(AXIS2_INTF_TO_IMPL(qname)->namespace_uri)
+        AXIS2_FREE((*env)->allocator, AXIS2_INTF_TO_IMPL(qname)->namespace_uri);
+    
     if(!uri)
     {
-        AXIS2_ERROR_SET_ERROR_NUMBER((*env)->error, AXIS2_ERROR_INVALID_NULL_PARAM);
-        AXIS2_ERROR_SET_STATUS_CODE((*env)->error, AXIS2_FAILURE);
-        return AXIS2_FAILURE;
+        qname_impl->namespace_uri = (axis2_char_t*)AXIS2_STRDUP(uri, env);
+        if(!qname_impl->namespace_uri)
+        {
+           AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+           return AXIS2_FAILURE;
+        }
     }
-    if(AXIS2_INTF_TO_IMPL(qname)->namespace_uri)
-        AXIS2_FREE((*env)->allocator, AXIS2_INTF_TO_IMPL(qname)->namespace_uri);
-    AXIS2_INTF_TO_IMPL(qname)->namespace_uri = (axis2_char_t*)AXIS2_STRDUP(uri, env);
-    if(!AXIS2_INTF_TO_IMPL(qname)->namespace_uri)
-        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+    /* uri should be set to null */
+    qname_impl->namespace_uri = NULL;       
     return AXIS2_SUCCESS;
 }
 

Modified: webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_attribute.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_attribute.c?rev=349607&r1=349606&r2=349607&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_attribute.c (original)
+++ webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_attribute.c Mon Nov 28 19:53:29 2005
@@ -69,6 +69,8 @@
     axis2_char_t *value;
     /** attribute namespace */
     axis2_om_namespace_t *ns;
+    /** store qname here */
+    axis2_qname_t *qname;
 
 }axis2_om_attribute_impl_t;
 
@@ -125,7 +127,7 @@
     attribute->ns = ns;
 
     /** operations */
-
+    attribute->qname = NULL;
     attribute->om_attribute.ops = (axis2_om_attribute_ops_t*)AXIS2_MALLOC ((*env)->allocator,
                       sizeof (axis2_om_attribute_ops_t));
     if (!(attribute->om_attribute.ops))
@@ -157,47 +159,56 @@
 axis2_om_attribute_free (axis2_om_attribute_t *om_attribute,
                               axis2_env_t **env)
 {   
+    axis2_om_attribute_impl_t *attribute_impl = NULL;
+    
     AXIS2_FUNC_PARAM_CHECK(om_attribute, env, AXIS2_FAILURE);
-    if (AXIS2_INTF_TO_IMPL(om_attribute))
+    attribute_impl = AXIS2_INTF_TO_IMPL(om_attribute);
+
+    if (attribute_impl->localname)
     {
-        if (AXIS2_INTF_TO_IMPL(om_attribute)->localname)
-        {
-            AXIS2_FREE ((*env)->allocator, AXIS2_INTF_TO_IMPL(om_attribute)->localname);
-        }
-        if (AXIS2_INTF_TO_IMPL(om_attribute)->value)
-        {
-            AXIS2_FREE  ((*env)->allocator, AXIS2_INTF_TO_IMPL(om_attribute)->value);
-        }
-        AXIS2_FREE  ((*env)->allocator, AXIS2_INTF_TO_IMPL(om_attribute));
-        return AXIS2_SUCCESS;
+        AXIS2_FREE ((*env)->allocator, attribute_impl->localname);
+        attribute_impl->localname = NULL;
+    }
+    if (attribute_impl->value)
+    {
+        AXIS2_FREE  ((*env)->allocator, attribute_impl->value);
+        attribute_impl->value = NULL;
     }
-    return AXIS2_FAILURE;
+    if(attribute_impl->qname)
+    {
+        AXIS2_QNAME_FREE(attribute_impl->qname, env);
+        attribute_impl->qname = NULL;
+    }
+    AXIS2_FREE((*env)->allocator, om_attribute->ops);
+    AXIS2_FREE  ((*env)->allocator,attribute_impl);
+    return AXIS2_SUCCESS;
 }
 
-
-
 axis2_qname_t * AXIS2_CALL 
 axis2_om_attribute_get_qname (axis2_om_attribute_t *om_attribute,
                                    axis2_env_t **env)
 {
     axis2_qname_t *qname = NULL;
+    axis2_om_attribute_impl_t *attribute_impl = NULL;
     AXIS2_FUNC_PARAM_CHECK(om_attribute, env, NULL);
-
-    if (AXIS2_INTF_TO_IMPL(om_attribute)->ns)
+    attribute_impl = AXIS2_INTF_TO_IMPL(om_attribute);
+    if(!(attribute_impl->qname))
     {
-        axis2_om_namespace_t *ns = NULL;
-        ns = AXIS2_INTF_TO_IMPL(om_attribute)->ns;
-        
-        qname = axis2_qname_create (env,
-                    AXIS2_INTF_TO_IMPL(om_attribute)->localname,
-                    AXIS2_OM_NAMESPACE_GET_URI(ns, env),
-                    AXIS2_OM_NAMESPACE_GET_PREFIX(ns, env));
-    }                                
-    else
-        qname = axis2_qname_create (env,AXIS2_INTF_TO_IMPL(om_attribute)->localname,
+        if (attribute_impl->ns)
+        {
+            qname = axis2_qname_create (env,
+                    attribute_impl->localname,
+                    AXIS2_OM_NAMESPACE_GET_URI(attribute_impl->ns, env),
+                    AXIS2_OM_NAMESPACE_GET_PREFIX(attribute_impl->ns, env));
+        }                                
+        else
+        {    qname = axis2_qname_create (env,attribute_impl->localname,
                                     NULL,  NULL);
-
-    return qname;
+        }
+        attribute_impl->qname = qname;
+        return qname;                                        
+    }
+    return attribute_impl->qname;
 }
 
 

Modified: webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_comment.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_comment.c?rev=349607&r1=349606&r2=349607&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_comment.c (original)
+++ webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_comment.c Mon Nov 28 19:53:29 2005
@@ -122,18 +122,19 @@
 axis2_om_comment_free (axis2_om_comment_t *om_comment,
                        axis2_env_t **env)
 {
+    axis2_om_comment_impl_t *comment_impl = NULL;
     AXIS2_FUNC_PARAM_CHECK(om_comment, env, AXIS2_FAILURE);
-    if (om_comment)
+    comment_impl = AXIS2_INTF_TO_IMPL(om_comment);
+    
+    if (comment_impl->value)
     {
-        if (AXIS2_INTF_TO_IMPL(om_comment)->value)
-        {
-            AXIS2_FREE ((*env)->allocator, AXIS2_INTF_TO_IMPL(om_comment)->value);
-        }
-        AXIS2_FREE((*env)->allocator,AXIS2_INTF_TO_IMPL(om_comment));
-        return AXIS2_SUCCESS;
+        AXIS2_FREE ((*env)->allocator, comment_impl->value);
     }
-    return AXIS2_FAILURE;
+    AXIS2_FREE((*env)->allocator, om_comment->ops);
+    AXIS2_FREE((*env)->allocator,AXIS2_INTF_TO_IMPL(om_comment));
+    return AXIS2_SUCCESS;
 }
+
 
 axis2_char_t* AXIS2_CALL
 axis2_om_comment_get_value(axis2_om_comment_t *om_comment,

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=349607&r1=349606&r2=349607&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 Mon Nov 28 19:53:29 2005
@@ -528,69 +528,66 @@
                        axis2_env_t **env)
 {
     axis2_status_t status = AXIS2_SUCCESS;
+    axis2_om_element_impl_t *element_impl = NULL;
     AXIS2_FUNC_PARAM_CHECK(om_element, env, AXIS2_FAILURE);
+    element_impl = AXIS2_INTF_TO_IMPL(om_element);
     
-    if (om_element)
+    if (element_impl->localname)
+    {
+        AXIS2_FREE ((*env)->allocator,element_impl->localname);
+    }
+    if (element_impl->ns)
     {
-        if (AXIS2_INTF_TO_IMPL(om_element)->localname)
-        {
-            AXIS2_FREE ((*env)->allocator,AXIS2_INTF_TO_IMPL(om_element)->localname);
-        }
-        if (AXIS2_INTF_TO_IMPL(om_element)->ns)
-        {
             /* it is the responsibility of the element where the namespace is declared to free it */
-        }
-        if (AXIS2_INTF_TO_IMPL(om_element)->attributes)
-        {
-            /*
-            axis2_hash_index_t *hi;
-            void *val = NULL;
+    }
+    if (element_impl->attributes)
+    {
+        axis2_hash_index_t *hi;
+        void *val = NULL;
             
-            for (hi = axis2_hash_first (AXIS2_INTF_TO_IMPL(om_element)->attributes, env); hi;
+        for (hi = axis2_hash_first (element_impl->attributes, env); hi;
                  hi = axis2_hash_next ( env, hi))
-            {
+        {
                axis2_hash_this (hi, NULL, NULL, &val);
 
-                   if (val)
+                if (val)
                    status = AXIS2_OM_ATTRIBUTE_FREE ((axis2_om_attribute_t *)val, env);
-                   else
-                   {
+                else
+                {
                    status = AXIS2_FAILURE;
-                   }
-                   val = NULL;
+                }
+                 val = NULL;
                    
             }
-            */
            axis2_hash_free (AXIS2_INTF_TO_IMPL(om_element)->attributes, env);
         }
-        if (AXIS2_INTF_TO_IMPL(om_element)->namespaces)
+        if (element_impl->namespaces)
         {
-            /*
             axis2_hash_index_t *hi;
             void *val = NULL;
             
-            for (hi = axis2_hash_first (AXIS2_INTF_TO_IMPL(om_element)->namespaces, env); hi;
+            for (hi = axis2_hash_first (element_impl->namespaces, env); hi;
                  hi = axis2_hash_next ( env, hi))
             {
                axis2_hash_this (hi, NULL, NULL, &val);
 
-                   if (val)
-                   status = AXIS2_OM_NAMESPACE_FREE ((axis2_om_namespace_t *)val, env);
-                   else
-                   {
-                   status = AXIS2_FAILURE;
-                   }
-                   val = NULL;
+                if (val)
+                status = AXIS2_OM_NAMESPACE_FREE ((axis2_om_namespace_t *)val, env);
+                else
+                {
+                status = AXIS2_FAILURE;
+                }
+                val = NULL;
                    
             }
-            */
-            axis2_hash_free (AXIS2_INTF_TO_IMPL(om_element)->namespaces, env);
+         
+            axis2_hash_free (element_impl->namespaces, env);
             /*TODO: free namespaces */
            /* need to iterate and free individual namespaces */
         }
         AXIS2_FREE ((*env)->allocator, om_element->ops);
-        AXIS2_FREE ((*env)->allocator, AXIS2_INTF_TO_IMPL(om_element));
-    }
+        AXIS2_FREE ((*env)->allocator, element_impl);
+  
     return status;
 }
 

Modified: webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_node.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_node.c?rev=349607&r1=349606&r2=349607&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_node.c (original)
+++ webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_node.c Mon Nov 28 19:53:29 2005
@@ -245,42 +245,39 @@
 axis2_status_t AXIS2_CALL axis2_om_node_free_tree(axis2_om_node_t *om_node,
                                                   axis2_env_t **env)
 {
-    
+    axis2_om_node_impl_t *node_impl = NULL;   
     axis2_om_node_t *child_node = NULL;
-      
     AXIS2_FUNC_PARAM_CHECK(om_node,env,AXIS2_FAILURE);
     
-    if (AXIS2_INTF_TO_IMPL(om_node)->first_child)
-    {   
+    node_impl = AXIS2_INTF_TO_IMPL(om_node);
         
-        while (AXIS2_INTF_TO_IMPL(om_node)->first_child)
+    if (node_impl->first_child)
+    {   
+        while (node_impl->first_child)
         {
-            
-            child_node = AXIS2_OM_NODE_DETACH (AXIS2_INTF_TO_IMPL(om_node)->first_child, env);
-            
+            child_node = AXIS2_OM_NODE_DETACH (node_impl->first_child, env);
             AXIS2_OM_NODE_FREE_TREE ( child_node , env); 
-            
         }
     }
     
-    switch (AXIS2_INTF_TO_IMPL(om_node)->node_type)
+    switch (node_impl->node_type)
     {
     case AXIS2_OM_ELEMENT:
         
-        AXIS2_OM_ELEMENT_FREE((axis2_om_element_t*)(AXIS2_INTF_TO_IMPL(om_node)->data_element), env);
+        AXIS2_OM_ELEMENT_FREE((axis2_om_element_t*)(node_impl->data_element), env);
         break;
 
     case AXIS2_OM_COMMENT:
-        /* axis2_om_comment_free(env,(axis2_om_comment_t*)node->data_element) */
+        AXIS2_OM_COMMENT_FREE((axis2_om_comment_t*)(node_impl->data_element), env);
         break;
     case AXIS2_OM_DOCTYPE:
-        /* axis2_om_doctype_free(env,(axis2_om_doctype_t*)node->data_element) */
+        /*AXIS2_OM_DOCTYPE_FREE((axis2_om_doctype_t*)(node_impl->data_element), env);*/
         break;
     case AXIS2_OM_PROCESSING_INSTRUCTION:
-        /* axis2_om_prcessing_instruction_free(env,(axis2_om_processing_instruction)node->data_element)*/
+         AXIS2_OM_PROCESSING_INSTRUCTION_FREE((axis2_om_processing_instruction_t*)(node_impl->data_element), env);
         break;
     case AXIS2_OM_TEXT:
-        AXIS2_OM_TEXT_FREE((axis2_om_text_t*)(AXIS2_INTF_TO_IMPL(om_node)->data_element),env);
+        AXIS2_OM_TEXT_FREE((axis2_om_text_t*)(node_impl->data_element),env);
         break;
 
     default:

Modified: webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_processing_instruction.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_processing_instruction.c?rev=349607&r1=349606&r2=349607&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_processing_instruction.c (original)
+++ webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_processing_instruction.c Mon Nov 28 19:53:29 2005
@@ -155,18 +155,25 @@
 axis2_om_processing_instruction_free (axis2_om_processing_instruction_t *om_pi,
                                       axis2_env_t **env)
 {
+        axis2_om_processing_instruction_impl_t *pi_impl = NULL;
         AXIS2_FUNC_PARAM_CHECK(om_pi, env, AXIS2_FAILURE);
-        if (AXIS2_INTF_TO_IMPL(om_pi)->value)
+        
+        pi_impl = AXIS2_INTF_TO_IMPL(om_pi);
+        
+        if (pi_impl->value)
         {
-            AXIS2_FREE ((*env)->allocator, AXIS2_INTF_TO_IMPL(om_pi)->value);
+            AXIS2_FREE ((*env)->allocator,pi_impl->value);
+            pi_impl->value = NULL;
         }
 
-        if (AXIS2_INTF_TO_IMPL(om_pi)->target)
+        if (pi_impl->target)
         {
-            AXIS2_FREE ((*env)->allocator, AXIS2_INTF_TO_IMPL(om_pi)->target);
+            AXIS2_FREE ((*env)->allocator, pi_impl->target);
+            pi_impl->target = NULL;
         }
-
-        AXIS2_FREE ((*env)->allocator,om_pi);
+        
+        AXIS2_FREE((*env)->allocator, om_pi->ops);
+        AXIS2_FREE ((*env)->allocator, pi_impl);
         return AXIS2_SUCCESS;
 }
 

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=349607&r1=349606&r2=349607&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 Mon Nov 28 19:53:29 2005
@@ -20,13 +20,11 @@
 #include <axis2_om_processing_instruction.h>
 #include <axis2_om_comment.h>
 #include <axis2_string.h>
-#include <axis2_pull_parser.h>
+#include <axis2_xml_writer.h>
 #include <axis2_om_doctype.h>
 
 
 
-const axis2_char_t XMLNS_URI[] = "http://www.w3.org/XML/1998/namespace";
-const axis2_char_t XMLNS_PREFIX[] = "xmlns";
 
 /**************************** function prototypes *****************************/
 
@@ -59,7 +57,7 @@
 {
     axis2_om_stax_builder_t om_stax_builder;
     /** pull parser instance used by the builder */
-    axis2_pull_parser_t *parser;
+    axis2_xml_reader_t *parser;
     /** last node the builder found */
     axis2_om_node_t *lastnode;
     /** document associated with the builder */
@@ -85,7 +83,7 @@
 													
 AXIS2_DECLARE(axis2_om_stax_builder_t *)
 axis2_om_stax_builder_create (axis2_env_t **env,
-                              axis2_pull_parser_t *parser)
+                              axis2_xml_reader_t *parser)
 {
     axis2_om_stax_builder_impl_t *builder = NULL;
     AXIS2_ENV_CHECK(env, NULL);
@@ -116,7 +114,7 @@
 
     if (!builder->om_stax_builder.ops)
     {
-        AXIS2_PULL_PARSER_FREE (builder->parser, env);
+        AXIS2_XML_READER_FREE (builder->parser, env);
         AXIS2_FREE ((*env)->allocator, builder);
         AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, NULL);
     }
@@ -154,69 +152,45 @@
     builder_impl = AXIS2_INTF_TO_IMPL(om_builder);
     
 
-    attribute_count = AXIS2_PULL_PARSER_GET_ATTRIBUTE_COUNT(
+    attribute_count = AXIS2_XML_READER_GET_ATTRIBUTE_COUNT(
                                builder_impl->parser,env);
     for (i=1; i <= attribute_count ; i++)
     {
         
-        uri =  AXIS2_PULL_PARSER_GET_ATTRIBUTE_NAMESPACE_BY_NUMBER(
+        uri =  AXIS2_XML_READER_GET_ATTRIBUTE_NAMESPACE_BY_NUMBER(
                        builder_impl->parser, env, i);
               
-        prefix = AXIS2_PULL_PARSER_GET_ATTRIBUTE_PREFIX_BY_NUMBER(
+        prefix = AXIS2_XML_READER_GET_ATTRIBUTE_PREFIX_BY_NUMBER(
                         builder_impl->parser, env, i);
 
         if (uri)
         {
-            if (axis2_strcmp (uri, " ") != 0);
+            if (axis2_strcmp (uri, "") != 0);
             {
                 ns = AXIS2_OM_ELEMENT_FIND_NAMESPACE (
                         (axis2_om_element_t*)AXIS2_OM_NODE_GET_DATA_ELEMENT(element_node,env),
                         env , element_node, uri, prefix);
             }
         }
-        /*
-        if (ns == NULL && prefix && uri
-            && (axis2_strcmp (prefix, XMLNS_PREFIX) == 0)
-            && (axis2_strcmp (uri, XMLNS_URI) == 0))
-        {
-            ns = axis2_om_namespace_create (env, XMLNS_URI,
-                                            XMLNS_PREFIX);
-            if (ns)
-            {
-                status = AXIS2_OM_ELEMENT_DECLARE_NAMESPACE (
-                            (axis2_om_element_t*)AXIS2_OM_NODE_GET_DATA_ELEMENT(element_node,env),
-                            env, element_node, ns);
-            }
-            else
-            {
-                status = AXIS2_FAILURE;
-            }
-
-            ns = AXIS2_OM_ELEMENT_FIND_NAMESPACE (
-                    (axis2_om_element_t*)AXIS2_OM_NODE_GET_DATA_ELEMENT(element_node,env),
-                    env, element_node, uri, prefix);
-        }
-        */
-        attr_name = AXIS2_PULL_PARSER_GET_ATTRIBUTE_NAME_BY_NUMBER(
+      
+        attr_name = AXIS2_XML_READER_GET_ATTRIBUTE_NAME_BY_NUMBER(
                                  builder_impl->parser, env, i);
         
-        attr_value = AXIS2_PULL_PARSER_GET_ATTRIBUTE_VALUE_BY_NUMBER(
+        attr_value = AXIS2_XML_READER_GET_ATTRIBUTE_VALUE_BY_NUMBER(
                                  builder_impl->parser, env, i);
         attribute = axis2_om_attribute_create (env, attr_name, attr_value, ns);
                             
         status = AXIS2_OM_ELEMENT_ADD_ATTRIBUTE (
                     (axis2_om_element_t*)AXIS2_OM_NODE_GET_DATA_ELEMENT(element_node,env),
                         env, attribute);
-        
-        AXIS2_PULL_PARSER_XML_FREE(builder_impl->parser, env, uri);
-        AXIS2_PULL_PARSER_XML_FREE(builder_impl->parser, env, prefix);
-        AXIS2_PULL_PARSER_XML_FREE(builder_impl->parser, env, attr_name);
-        AXIS2_PULL_PARSER_XML_FREE(builder_impl->parser, env, attr_value);
-        
+        if(uri)
+           AXIS2_XML_READER_XML_FREE(builder_impl->parser, env, uri);
+        if(prefix)
+        AXIS2_XML_READER_XML_FREE(builder_impl->parser, env, prefix);
+        AXIS2_XML_READER_XML_FREE(builder_impl->parser, env, attr_name);
+        AXIS2_XML_READER_XML_FREE(builder_impl->parser, env, attr_value);
     }
-
     return status;
-
 }
 
 
@@ -227,7 +201,6 @@
     axis2_char_t *temp_value = NULL;
     axis2_om_node_t *node = NULL;
     axis2_om_stax_builder_impl_t *builder = NULL;
-   
     
     AXIS2_FUNC_PARAM_CHECK(om_stax_builder, env, NULL);
     builder = AXIS2_INTF_TO_IMPL(om_stax_builder);
@@ -235,11 +208,11 @@
     if (!builder->lastnode)
         AXIS2_ERROR_SET((*env)->error, 
                          AXIS2_ERROR_INVALID_BUILDER_STATE_LAST_NODE_NULL,NULL);
-    temp_value = AXIS2_PULL_PARSER_GET_VALUE (builder->parser, env);
+    temp_value = AXIS2_XML_READER_GET_VALUE (builder->parser, env);
 
     if (!temp_value)
     {
-        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_PULL_PARSER_VALUE_NULL, NULL);
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_XML_READER_VALUE_NULL, NULL);
     }
   
     if (AXIS2_OM_NODE_GET_BUILD_STATUS(builder->lastnode, env))
@@ -257,7 +230,7 @@
     AXIS2_OM_NODE_SET_BUILD_STATUS(node , env, AXIS2_TRUE);
     builder->lastnode = node;
     
-    AXIS2_PULL_PARSER_XML_FREE(builder->parser , env, temp_value);
+    AXIS2_XML_READER_XML_FREE(builder->parser , env, temp_value);
     return node;
 }
 
@@ -286,8 +259,8 @@
     builder->cache = AXIS2_FALSE;
     do
     {
-        while (AXIS2_PULL_PARSER_NEXT (builder->parser, env)
-                != AXIS2_PULL_PARSER_END_ELEMENT);
+        while (AXIS2_XML_READER_NEXT (builder->parser, env)
+                != AXIS2_XML_READER_END_ELEMENT);
     }
     while (!(AXIS2_OM_NODE_GET_BUILD_STATUS(element, env)));
 
@@ -333,13 +306,13 @@
     
     builder = AXIS2_INTF_TO_IMPL(om_stax_builder);
     
-    namespace_count = AXIS2_PULL_PARSER_GET_NAMESPACE_COUNT (builder->parser, env);
+    namespace_count = AXIS2_XML_READER_GET_NAMESPACE_COUNT (builder->parser, env);
     for (i = 1; i <= namespace_count; i++)
     {
-        temp_ns_prefix = AXIS2_PULL_PARSER_GET_NAMESPACE_PREFIX_BY_NUMBER(
+        temp_ns_prefix = AXIS2_XML_READER_GET_NAMESPACE_PREFIX_BY_NUMBER(
                                 builder->parser, env, i);
                                      
-        temp_ns_uri = AXIS2_PULL_PARSER_GET_NAMESPACE_URI_BY_NUMBER(
+        temp_ns_uri = AXIS2_XML_READER_GET_NAMESPACE_URI_BY_NUMBER(
                             builder->parser, env , i);
                             
         if(AXIS2_STRCMP(temp_ns_prefix,"xmlns") == 0 || !temp_ns_prefix)
@@ -364,8 +337,8 @@
                         env, node, om_ns);
                                      
         }        
-        AXIS2_PULL_PARSER_XML_FREE(builder->parser, env, temp_ns_prefix);
-        AXIS2_PULL_PARSER_XML_FREE(builder->parser, env, temp_ns_uri);
+        AXIS2_XML_READER_XML_FREE(builder->parser, env, temp_ns_prefix);
+        AXIS2_XML_READER_XML_FREE(builder->parser, env, temp_ns_uri);
                                 
         if (!om_ns)
         {
@@ -374,7 +347,7 @@
         }
     }
     /* set own namespace */
-    temp_prefix = AXIS2_PULL_PARSER_GET_PREFIX ( builder->parser, env);
+    temp_prefix = AXIS2_XML_READER_GET_PREFIX ( builder->parser, env);
     if (temp_prefix)
     {
         om_ns = AXIS2_OM_ELEMENT_FIND_NAMESPACE (
@@ -393,7 +366,7 @@
              AXIS2_ERROR_INVALID_DOCUMENT_STATE_UNDEFINED_NAMESPACE, AXIS2_FAILURE);
         }
     }
-    AXIS2_PULL_PARSER_XML_FREE(builder->parser, env, temp_prefix);
+    AXIS2_XML_READER_XML_FREE(builder->parser, env, temp_prefix);
     return status;
 }
 
@@ -409,11 +382,11 @@
     
     builder_impl = AXIS2_INTF_TO_IMPL(om_stax_builder);
     
-    temp_localname  = AXIS2_PULL_PARSER_GET_NAME (builder_impl->parser, env);
+    temp_localname  = AXIS2_XML_READER_GET_NAME (builder_impl->parser, env);
 
     if (!temp_localname)
     {
-        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_PULL_PARSER_ELEMENT_NULL, NULL); 
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_XML_READER_ELEMENT_NULL, NULL); 
     }
     
     if (!(builder_impl->lastnode))
@@ -445,11 +418,12 @@
         AXIS2_OM_NODE_SET_PARENT(element_node , env, builder_impl->lastnode);
     }
     
-    AXIS2_PULL_PARSER_XML_FREE(builder_impl->parser , env, temp_localname);
-    
-    axis2_om_stax_builder_process_attributes ( om_stax_builder, env, element_node);
+    AXIS2_XML_READER_XML_FREE(builder_impl->parser , env, temp_localname);
+
+    /** order of processing namespaces first is important */
     axis2_om_stax_builder_process_namespaces ( om_stax_builder, env, element_node, 0);
-    
+    axis2_om_stax_builder_process_attributes ( om_stax_builder, env, element_node);
+
     builder_impl->lastnode = element_node;
 	
     return element_node;
@@ -466,16 +440,16 @@
     AXIS2_FUNC_PARAM_CHECK(builder, env, NULL);
     builder_impl = AXIS2_INTF_TO_IMPL(builder);
     
-    comment_value  = AXIS2_PULL_PARSER_GET_VALUE(builder_impl->parser, env);
+    comment_value  = AXIS2_XML_READER_GET_VALUE(builder_impl->parser, env);
     if (!comment_value)
     {
-        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_PULL_PARSER_ELEMENT_NULL, NULL); 
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_XML_READER_ELEMENT_NULL, NULL); 
     }
     
     if (!(builder_impl->lastnode))
     {
         /* do nothing */ 
-        AXIS2_PULL_PARSER_XML_FREE(builder_impl->parser , env, comment_value);
+        AXIS2_XML_READER_XML_FREE(builder_impl->parser , env, comment_value);
         return NULL;   
     }
     else if (AXIS2_OM_NODE_GET_BUILD_STATUS(builder_impl->lastnode, env))
@@ -496,7 +470,7 @@
         AXIS2_OM_NODE_SET_PARENT(comment_node , env, builder_impl->lastnode);
     }
     
-    AXIS2_PULL_PARSER_XML_FREE(builder_impl->parser , env, comment_value);
+    AXIS2_XML_READER_XML_FREE(builder_impl->parser , env, comment_value);
     
     builder_impl->lastnode = comment_node;
 	
@@ -516,7 +490,7 @@
     AXIS2_FUNC_PARAM_CHECK(builder, env, NULL);
     builder_impl = AXIS2_INTF_TO_IMPL(builder);
     
-    doc_value = AXIS2_PULL_PARSER_GET_DTD(builder_impl->parser, env);
+    doc_value = AXIS2_XML_READER_GET_DTD(builder_impl->parser, env);
     if(!doc_value)
         return NULL;
     if(!(builder_impl->lastnode))
@@ -528,7 +502,7 @@
     }
     builder_impl->lastnode = doctype_node;
     
-    AXIS2_PULL_PARSER_XML_FREE(builder_impl->parser, env, doc_value);
+    AXIS2_XML_READER_XML_FREE(builder_impl->parser, env, doc_value);
     return doctype_node;
 }
 
@@ -545,18 +519,18 @@
     AXIS2_FUNC_PARAM_CHECK(builder, env, NULL);
     builder_impl = AXIS2_INTF_TO_IMPL(builder);
     
-    target = AXIS2_PULL_PARSER_GET_PI_TARGET (builder_impl->parser, env);
-    value  = AXIS2_PULL_PARSER_GET_PI_DATA(builder_impl->parser, env);
+    target = AXIS2_XML_READER_GET_PI_TARGET (builder_impl->parser, env);
+    value  = AXIS2_XML_READER_GET_PI_DATA(builder_impl->parser, env);
     if (!target)
     {
-        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_PULL_PARSER_ELEMENT_NULL, NULL); 
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_XML_READER_ELEMENT_NULL, NULL); 
     }
     
     if (!(builder_impl->lastnode))
     {
         /* do nothing */
-        AXIS2_PULL_PARSER_XML_FREE(builder_impl->parser , env, target);
-        AXIS2_PULL_PARSER_XML_FREE(builder_impl->parser , env, value);
+        AXIS2_XML_READER_XML_FREE(builder_impl->parser , env, target);
+        AXIS2_XML_READER_XML_FREE(builder_impl->parser , env, value);
         return NULL;
     }
     else if (AXIS2_OM_NODE_GET_BUILD_STATUS(builder_impl->lastnode, env) ||
@@ -578,8 +552,8 @@
         AXIS2_OM_NODE_SET_PARENT(pi_node , env, builder_impl->lastnode);
     }
     
-    AXIS2_PULL_PARSER_XML_FREE(builder_impl->parser , env, target);
-    AXIS2_PULL_PARSER_XML_FREE(builder_impl->parser , env, value);
+    AXIS2_XML_READER_XML_FREE(builder_impl->parser , env, target);
+    AXIS2_XML_READER_XML_FREE(builder_impl->parser , env, value);
     builder_impl->lastnode = pi_node;
     return pi_node;
 }
@@ -636,7 +610,7 @@
         if (builder->done)
             AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_BUILDER_DONE_CANNOT_PULL, NULL);
 
-        token = AXIS2_PULL_PARSER_NEXT (builder->parser, env);
+        token = AXIS2_XML_READER_NEXT (builder->parser, env);
         if(token == -1)
             return NULL;
         
@@ -648,43 +622,43 @@
 
         switch (token)
         {
-        case AXIS2_PULL_PARSER_START_DOCUMENT:
+        case AXIS2_XML_READER_START_DOCUMENT:
             /*Do nothing */
             break;
         
-        case AXIS2_PULL_PARSER_START_ELEMENT:
+        case AXIS2_XML_READER_START_ELEMENT:
            node = axis2_om_stax_builder_create_om_element (
                         om_stax_builder, env); 
             break;
         
-        case AXIS2_PULL_PARSER_EMPTY_ELEMENT:
+        case AXIS2_XML_READER_EMPTY_ELEMENT:
             node = axis2_om_stax_builder_create_om_element (
                         om_stax_builder, env);
         
-        case AXIS2_PULL_PARSER_END_ELEMENT:
+        case AXIS2_XML_READER_END_ELEMENT:
             axis2_om_stax_builder_end_element (om_stax_builder, env);
             break;
         
         
-        case AXIS2_PULL_PARSER_SPACE:
+        case AXIS2_XML_READER_SPACE:
             /* Do nothing */
             break;
         
-        case AXIS2_PULL_PARSER_CHARACTER:
+        case AXIS2_XML_READER_CHARACTER:
             node = axis2_om_stax_builder_create_om_text(om_stax_builder, env);
             break;
                 
-        case AXIS2_PULL_PARSER_ENTITY_REFERANCE:
+        case AXIS2_XML_READER_ENTITY_REFERANCE:
             break;
         
-        case AXIS2_PULL_PARSER_COMMENT:
+        case AXIS2_XML_READER_COMMENT:
             
          node = axis2_om_stax_builder_create_om_comment(om_stax_builder, env);
                 axis2_om_stax_builder_end_element (om_stax_builder, env);
         
             break;
         
-        case AXIS2_PULL_PARSER_PROCESSING_INSTRUCTION:
+        case AXIS2_XML_READER_PROCESSING_INSTRUCTION:
             
             node = axis2_om_stax_builder_create_om_processing_instruction(
                                         om_stax_builder , env );
@@ -692,10 +666,10 @@
           
             break;
         
-        case AXIS2_PULL_PARSER_CDATA:
+        case AXIS2_XML_READER_CDATA:
             break;
         
-        case AXIS2_PULL_PARSER_DOCUMENT_TYPE:
+        case AXIS2_XML_READER_DOCUMENT_TYPE:
         /* node = axis2_om_stax_builder_create_om_doctype(om_stax_builder, env);
         */          
         break;
@@ -721,7 +695,7 @@
 
     if(builder_impl->parser)
     {
-        AXIS2_PULL_PARSER_FREE(builder_impl->parser, env);
+        AXIS2_XML_READER_FREE(builder_impl->parser, env);
     }
 
 	if(builder->ops)

Added: webservices/axis2/trunk/c/modules/xml/parser/axis2_xml_reader.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/parser/axis2_xml_reader.h?rev=349607&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/parser/axis2_xml_reader.h (added)
+++ webservices/axis2/trunk/c/modules/xml/parser/axis2_xml_reader.h Mon Nov 28 19:53:29 2005
@@ -0,0 +1,369 @@
+/*
+ *   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.
+ *
+ */
+ 
+#ifndef AXIS2_XML_READER_H
+#define AXIS2_XML_READER_H
+
+/**
+ *@file axis2_xml_reader.h	
+ *@brief this is the parser abstraction layer for axis2 
+ */
+
+#include <axis2_env.h>
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+typedef struct axis2_xml_reader_ops axis2_xml_reader_ops_t;
+typedef struct axis2_xml_reader axis2_xml_reader_t;
+
+/**
+ * @defgroup axis2_xml_reader 
+ * @ingroup axis2_om_parser
+ * @{
+ */
+
+enum axis2_xml_reader_event_types
+{
+    AXIS2_XML_READER_START_DOCUMENT = 0,
+    AXIS2_XML_READER_START_ELEMENT,
+    AXIS2_XML_READER_END_ELEMENT,
+    AXIS2_XML_READER_SPACE,
+    AXIS2_XML_READER_EMPTY_ELEMENT,
+    AXIS2_XML_READER_CHARACTER,
+    AXIS2_XML_READER_ENTITY_REFERANCE,
+    AXIS2_XML_READER_COMMENT,
+    AXIS2_XML_READER_PROCESSING_INSTRUCTION,
+    AXIS2_XML_READER_CDATA,
+    AXIS2_XML_READER_DOCUMENT_TYPE
+};
+
+  /**
+    * \brief AXIS2_XML_READER operations
+    * Encapsulator struct for operations of axis2_xml_reader
+    */
+
+AXIS2_DECLARE_DATA struct axis2_xml_reader_ops
+    {
+        /**
+         * causes the reader to read the next parse event. 
+         * returns the event just read
+         * @param parser axis2_xml_reader struct 
+         * @param env    axis2_environment, MUST NOT be NULL
+         * @returns one of the events defined in 
+         *          axis2_xml_reader_event_types
+         */
+        
+        int (AXIS2_CALL *next)(axis2_xml_reader_t *parser,
+                               axis2_env_t **env);
+         /**
+         * free pull_parser
+         * @param parser axis2_xml_reader struct 
+         * @param env    axis2_environment MUST NOT be NULL 
+         * @returns axis2_status_code
+         */
+        
+        axis2_status_t (AXIS2_CALL *free)(axis2_xml_reader_t *parser,
+                                          axis2_env_t **env);
+        /**
+         * Get the Number of attributes in the current element 
+         * @param parser axis2_xml_reader  
+         * @param env    axis2_environment, MUST NOT be NULL.
+         * @returns Number of attributes , AXIS2_FAILURE on error 
+         */  
+        
+        int (AXIS2_CALL *get_attribute_count)(axis2_xml_reader_t *parser,
+                                              axis2_env_t **env);
+                                              
+       /** This is used to get an attribute's localname using an index relative to 
+         * current element.The iterations are not zero based. 
+         * To access the first attribute use 1 for parameter i
+         * @param parser parser struct 
+         * @param env environment struct
+         * @param i attribute index
+         * @returns the attribute localname 
+         *          caller must free the value using AXIS2_XML_READER_XML_FREE macro         
+         */
+        axis2_char_t* (AXIS2_CALL *get_attribute_name_by_number)
+                                                    (axis2_xml_reader_t *parser,
+                                                     axis2_env_t **env,
+                                                     int i);
+                                                     
+       /** This is used to get an attribute's prefix using an index relative to 
+         * current element. The iterations are not zero based. 
+         * To access the first attribute use 1 for parameter i
+         * @param parser parser struct 
+         * @param env environment, MUST NOT be NULL
+         * @param i attribute index.
+         * @returns the attribute prefix, returns NULL on error,  
+         *          caller must free the value using AXIS2_XML_READER_XML_FREE macro         
+         */                                                     
+        
+        axis2_char_t* (AXIS2_CALL *get_attribute_prefix_by_number)
+                                                    (axis2_xml_reader_t *parser,
+                                                     axis2_env_t **env,
+                                                     int i);
+                                                     
+        /** get an attribute's value using an index relative to 
+         * current element. The iterations are not zero based. 
+         * To access the first attribute use 1 for parameter i
+         * @param parser parser struct 
+         * @param env environment, MUST NOT be NULL.
+         * @param i attribute index
+         * @returns the attribute value, returns NULL on error,
+         *          caller must free the value using AXIS2_XML_READER_XML_FREE macro         
+         */        
+                                             
+        axis2_char_t* (AXIS2_CALL *get_attribute_value_by_number)
+                                                    (axis2_xml_reader_t *parser,
+                                                     axis2_env_t **env,
+                                                     int i);
+        
+        /** get an attribute's namespace uri using an index relative to 
+         * current element. The iterations are not zero based. 
+         * To access the first attribute use 1 for parameter i
+         * @param parser parser struct 
+         * @param env environment struct
+         * @param i attribute index
+         * @returns the attribute value, returns NULL on error  
+         *          caller must free the value using AXIS2_XML_READER_XML_FREE macro        
+         */ 
+        
+        axis2_char_t* (AXIS2_CALL *get_attribute_namespace_by_number)
+                                                    (axis2_xml_reader_t *parser,
+                                                     axis2_env_t **env,
+                                                     int i);
+       /** returns the text value of current element
+         * @param parser pointer to parser
+         * @param env environment, MUST not be NULL
+         * @returns Text Value, NULL on error 
+         *          caller must free the value using AXIS2_XML_READER_XML_FREE macro 
+         */
+                                
+        axis2_char_t* (AXIS2_CALL *get_value)(axis2_xml_reader_t *parser,
+                                              axis2_env_t **env);
+        
+        /**
+         * Returns the namespace count of current element 
+         * @param parser parser struct 
+         * @param env environment
+         * @returns namespace count of current element,
+         */
+        int (AXIS2_CALL *get_namespace_count)(axis2_xml_reader_t *parser,
+                                              axis2_env_t **env);
+        /**
+         * access the namespace uri of the namespaces declared in current element 
+         * using an index 
+         * @param parser parser struct 
+         * @param env environment 
+         * @param i index
+         * @returns namespace uri of corresponding namespace 
+         *          caller must free the value using AXIS2_XML_READER_XML_FREE macro         
+         */
+        axis2_char_t* (AXIS2_CALL *get_namespace_uri_by_number)
+                                              (axis2_xml_reader_t *parser,
+                                               axis2_env_t **env,
+                                               int i);
+        /**
+         * access the namespace prefix of the namespaces declared in current element 
+         * using an index 
+         * @param parser parser struct 
+         * @param env environment 
+         * @param i index
+         * @returns namespace prefix of corresponding namespace 
+         *          caller must free the value using AXIS2_XML_READER_XML_FREE macro         
+         */                                               
+        axis2_char_t* (AXIS2_CALL *get_namespace_prefix_by_number)
+                                               (axis2_xml_reader_t *parser,
+                                                axis2_env_t **env,
+                                                int i); 
+        /**
+         *  Used to obtain the current element prefix
+         * @param parser parser struct 
+         * @param env environment struct
+         * @returns prefix , NULL on error 
+         *          caller must free the value using AXIS2_XML_READER_XML_FREE macro
+         */         
+        
+        axis2_char_t* (AXIS2_CALL *get_prefix)(axis2_xml_reader_t *parser,
+                                               axis2_env_t **env);   
+        /**
+         *  Used to obtain the current element localname
+         * @param parser parser struct 
+         * @param env environment struct
+         * @returns localname , NULL on error 
+         *          caller must free the value using AXIS2_XML_READER_XML_FREE macro
+         */         
+        axis2_char_t* (AXIS2_CALL *get_name)(axis2_xml_reader_t *parser,
+                                             axis2_env_t **env); 
+        /**
+         * Used to get the processingInstruction target
+         * @param parser parser struct
+         * @param env environment, MUST NOT be NULL.
+         * @returns target value of processingInstruction
+         *          caller must free the value using AXIS2_XML_READER_XML_FREE macro
+         */        
+        axis2_char_t* (AXIS2_CALL *get_pi_target)(axis2_xml_reader_t *parser,
+                                                  axis2_env_t **env);
+        /**
+         *  gets the processingInstruction data
+         *@param parser parser struct
+         *@param env environment, MUST NOT be NULL.
+         *@returns data of processingInstruction
+         *          caller must free the value using AXIS2_XML_READER_XML_FREE macro
+         */        
+
+
+        axis2_char_t* (AXIS2_CALL *get_pi_data)(axis2_xml_reader_t *parser,
+                                                axis2_env_t **env);
+        /**
+         *  used to get the DTD 
+         * @param parser pointer to pull parser struct
+         * @param env environment, MUST NOT be NULL.
+         * @return text of doctype declaration. NULL is returns of no data 
+         *         exists.
+         */         
+        axis2_char_t* (AXIS2_CALL *get_dtd)(axis2_xml_reader_t *parser,
+                                            axis2_env_t **env);                                                
+        /**
+         *  Free function , this function wraps the underlying parser's 
+         *  xml free function. For freeing values obatined by calling
+         *  pull parser api methods, This function must be used.
+         * @param parser pointer to axis2_xml_reader
+         * @param env environment, MUST NOT be NULL.
+         * @param data data values to be destroyed
+         * @return status of the operation, AXIS2_SUCCESS on success,
+         *                  AXIS2_FAILURE on error.
+         */         
+        axis2_status_t (AXIS2_CALL *xml_free)(axis2_xml_reader_t *parser,
+                                   axis2_env_t **env,
+                                   void *data);                                                
+    };
+     
+/** 
+ * @brief axis2_xml_reader struct
+  *	Axis2 OM pull_parser
+ */
+struct axis2_xml_reader
+{
+    axis2_xml_reader_ops_t *ops;  
+};    
+
+/**
+ * create an instance of axis2_xml_reader to parse
+ * a file using an xml document in a file system
+ * @param env environment struct, must not be null
+ * @param filename url of an xml document
+ * @returns a pointer to xml_pull_parser_t struct
+ *          NULL on error with error code set in the environment's error 
+ */
+
+AXIS2_DECLARE(axis2_xml_reader_t *)
+axis2_xml_reader_create_for_file(axis2_env_t **env,
+                                  char *filename,
+                                  const axis2_char_t *encoding);
+/**
+ * This create an instance of axis2_xml_reader to 
+ * parse a xml document in a buffer. It takes a callback 
+ * function that takes a buffer and the size of the buffer
+ * The user must implement a function that takes in buffer
+ * and size and fill the buffer with specified size
+ * with xml stream, parser will call this function to fill the 
+ * buffer on the fly while parsing.
+ * @param env environment MUST NOT be NULL.
+ * @param read_input_callback() callback function that fills
+ *         a char buffer with size @size
+ *         @param buffer a character buffer
+ *         @param size size of the buffer to be filled
+ * @param encoding encoding scheme of the xml stream
+ */
+ 
+AXIS2_DECLARE(axis2_xml_reader_t *)
+axis2_xml_reader_create_for_memory(axis2_env_t **env,
+                                    int (*read_input_callback)(char *buffer,int size),
+                                    const axis2_char_t *encoding);
+                                    
+/********************************* Macros *************************************/
+
+/** Macros corresponding to above declared function pointers */
+
+/** causes the reader to read the next parse event.
+ returns an integer which identifies the type of event just read. */
+#define AXIS2_XML_READER_NEXT(parser, env) \
+        ((parser)->ops->next(parser, env))
+/** Free pull parser struct */
+#define AXIS2_XML_READER_FREE(parser, env) \
+        ((parser)->ops->free(parser, env))
+/** Get the Number of attributes in an element */
+#define AXIS2_XML_READER_GET_ATTRIBUTE_COUNT(parser, env) \
+        ((parser)->ops->get_attribute_count(parser, env))
+/** Get the localname of the attribute corresponding to index i */
+#define AXIS2_XML_READER_GET_ATTRIBUTE_NAME_BY_NUMBER(parser, env, i) \
+        ((parser)->ops->get_attribute_name_by_number(parser, env, i))
+/** Get value of attribute corresponding to index i */        
+#define AXIS2_XML_READER_GET_ATTRIBUTE_VALUE_BY_NUMBER(parser, env, i) \
+        ((parser)->ops->get_attribute_value_by_number(parser,env, i))
+/** Get namespace uri of attribute corresponding to index i */
+#define AXIS2_XML_READER_GET_ATTRIBUTE_NAMESPACE_BY_NUMBER(parser, env, i) \
+        ((parser)->ops->get_attribute_namespace_by_number(parser, env, i))
+/** get prefix of attribute corresponding to index i */
+#define AXIS2_XML_READER_GET_ATTRIBUTE_PREFIX_BY_NUMBER(parser, env, i) \
+        ((parser)->ops->get_attribute_prefix_by_number(parser, env, i))
+/** get the localname of element */
+#define AXIS2_XML_READER_GET_NAME(parser, env) \
+        ((parser)->ops->get_name(parser, env))
+/** get value of element */
+#define AXIS2_XML_READER_GET_VALUE(parser, env) \
+        ((parser)->ops->get_value(parser, env))
+/** get prefix of element */        
+#define AXIS2_XML_READER_GET_PREFIX(parser, env) \
+        ((parser)->ops->get_prefix(parser, env))
+/** get the number of namespaces declared in an element */
+#define AXIS2_XML_READER_GET_NAMESPACE_COUNT(parser, env) \
+        ((parser)->ops->get_namespace_count(parser, env))
+/** get the elements namespace uri corresponding to index i */        
+#define AXIS2_XML_READER_GET_NAMESPACE_URI_BY_NUMBER(parser, env, i) \
+        ((parser)->ops->get_namespace_uri_by_number(parser, env, i))
+/** get the elements namespace prefix corresponding to index i */        
+#define AXIS2_XML_READER_GET_NAMESPACE_PREFIX_BY_NUMBER(parser, env, i) \
+        ((parser)->ops->get_namespace_prefix_by_number(parser, env, i))
+/** get processing instruction data */        
+#define AXIS2_XML_READER_GET_PI_DATA(parser, env) \
+        ((parser)->ops->get_pi_data(parser, env))
+/** get processing instruction target */
+#define AXIS2_XML_READER_GET_PI_TARGET(parser, env) \
+        ((parser)->ops->get_pi_target(parser, env))
+/** get document type declaration text */        
+#define AXIS2_XML_READER_GET_DTD(parser, env) \
+        ((parser)->ops->get_dtd(parser, env))
+/** macro to free values returned by pull parser */        
+#define AXIS2_XML_READER_XML_FREE(parser, env, data) \
+        ((parser)->ops->xml_free(parser, env, data))
+
+
+/******************************* End Macros ***********************************/
+/** @} */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* AXIS2_XML_READER_H */

Added: webservices/axis2/trunk/c/modules/xml/parser/guththila/src/guththila_xml_reader_wrapper.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/parser/guththila/src/guththila_xml_reader_wrapper.c?rev=349607&view=auto
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/parser/guththila/src/guththila_xml_reader_wrapper.c (added)
+++ webservices/axis2/trunk/c/modules/xml/parser/guththila/src/guththila_xml_reader_wrapper.c Mon Nov 28 19:53:29 2005
@@ -0,0 +1,549 @@
+/*
+ *   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_xml_reader.h>
+#include <axis2_env.h>
+#include <axis2.h>
+#include <guththila_xml_pull_parser.h>
+
+/**************** function prototypes ******************************************/
+
+
+
+int AXIS2_CALL 
+guththila_xml_reader_wrapper_next(axis2_xml_reader_t *parser,
+                             axis2_env_t **env);
+
+        
+axis2_status_t AXIS2_CALL 
+guththila_xml_reader_wrapper_free(axis2_xml_reader_t *parser,
+                             axis2_env_t **env);
+           
+        
+int AXIS2_CALL 
+guththila_xml_reader_wrapper_get_attribute_count(axis2_xml_reader_t *parser,
+                                            axis2_env_t **env);
+        
+axis2_char_t* AXIS2_CALL 
+guththila_xml_reader_wrapper_get_attribute_name_by_number(axis2_xml_reader_t *parser,
+                                                     axis2_env_t **env,
+                                                     int i);
+        
+axis2_char_t* AXIS2_CALL
+guththila_xml_reader_wrapper_get_attribute_prefix_by_number(axis2_xml_reader_t *parser,
+                                                       axis2_env_t **env,
+                                                       int i);
+                                                     
+axis2_char_t* AXIS2_CALL
+guththila_xml_reader_wrapper_get_attribute_value_by_number(
+                                                axis2_xml_reader_t *parser,
+                                                axis2_env_t **env,
+                                                int i);
+        
+        
+axis2_char_t* AXIS2_CALL 
+guththila_xml_reader_wrapper_get_attribute_namespace_by_number(
+                                                 axis2_xml_reader_t *parser,
+                                                 axis2_env_t **env,
+                                                 int i);
+
+                                
+axis2_char_t* AXIS2_CALL 
+guththila_xml_reader_wrapper_get_value(axis2_xml_reader_t *parser,
+                                  axis2_env_t **env);
+                                                      
+int AXIS2_CALL 
+guththila_xml_reader_wrapper_get_namespace_count(axis2_xml_reader_t *parser,
+                                            axis2_env_t **env);
+
+axis2_char_t* AXIS2_CALL
+guththila_xml_reader_wrapper_get_namespace_uri_by_number(axis2_xml_reader_t *parser,
+                                                    axis2_env_t **env,
+                                                    int i);
+                                               
+axis2_char_t* AXIS2_CALL
+guththila_xml_reader_wrapper_get_namespace_prefix_by_number(
+                                                axis2_xml_reader_t *parser,
+                                                axis2_env_t **env,
+                                                int i); 
+                                                
+axis2_char_t* AXIS2_CALL
+guththila_xml_reader_wrapper_get_prefix(axis2_xml_reader_t *parser,
+                                   axis2_env_t **env);   
+        
+axis2_char_t* AXIS2_CALL
+guththila_xml_reader_wrapper_get_name(axis2_xml_reader_t *parser,
+                                 axis2_env_t **env); 
+
+axis2_char_t* AXIS2_CALL
+guththila_xml_reader_wrapper_get_pi_target(axis2_xml_reader_t *parser,
+                                      axis2_env_t **env);
+
+axis2_char_t* AXIS2_CALL
+guththila_xml_reader_wrapper_get_pi_data(axis2_xml_reader_t *parser,
+                                     axis2_env_t **env);
+
+axis2_char_t* AXIS2_CALL
+guththila_xml_reader_wrapper_get_dtd(axis2_xml_reader_t *parser,
+                                     axis2_env_t **env);                                     
+
+axis2_status_t AXIS2_CALL
+guththila_xml_reader_wrapper_xml_free(axis2_xml_reader_t *parser,
+                                 axis2_env_t **env,
+                                 void *data);
+
+
+/*********** guththila_xml_reader_wrapper_impl_t wrapper struct   *******************/
+
+typedef struct guththila_xml_reader_wrapper_impl
+{
+    axis2_xml_reader_t parser;    
+    guththila_xml_pull_parser_t *guththila_parser;
+    guththila_environment_t *guththila_env;
+    guththila_reader_t *reader;
+    int event_map[10];
+    
+}guththila_xml_reader_wrapper_impl_t;
+
+/********************************* Macro ***************************************/
+
+#define AXIS2_INTF_TO_IMPL(p) ((guththila_xml_reader_wrapper_impl_t*)p)
+
+#define AXIS2_IMPL_TO_INTF(p) &(p->parser)
+
+/**********End macros  --  event_map initializing function *********************/
+
+static axis2_status_t guththila_xml_reader_wrapper_init_map(
+                            guththila_xml_reader_wrapper_impl_t *parser)
+{
+    if(parser)
+    {
+        parser->event_map[GUTHTHILA_START_DOCUMENT] = AXIS2_XML_READER_START_DOCUMENT;
+        parser->event_map[GUTHTHILA_START_ELEMENT]  = AXIS2_XML_READER_START_ELEMENT;
+        parser->event_map[GUTHTHILA_END_ELEMENT]    = AXIS2_XML_READER_END_ELEMENT;
+        parser->event_map[GUTHTHILA_SPACE]          = AXIS2_XML_READER_SPACE;
+        parser->event_map[GUTHTHILA_EMPTY_ELEMENT]  = AXIS2_XML_READER_EMPTY_ELEMENT;
+        parser->event_map[GUTHTHILA_CHARACTER]      = AXIS2_XML_READER_CHARACTER;
+        parser->event_map[GUTHTHILA_ENTITY_REFERANCE] = AXIS2_XML_READER_ENTITY_REFERANCE;
+        parser->event_map[GUTHTHILA_COMMENT]          = AXIS2_XML_READER_COMMENT;
+        return AXIS2_SUCCESS;
+    }
+    return AXIS2_FAILURE;
+}
+
+/********************************************************************************/
+
+AXIS2_DECLARE(axis2_xml_reader_t *)
+axis2_xml_reader_create_for_file(axis2_env_t **env,
+                                  char* filename,
+                                  const char *encoding)
+{
+    guththila_xml_reader_wrapper_impl_t *guththila_impl = NULL;
+    guththila_allocator_t *allocator = NULL;
+    guththila_environment_t *guththila_env = NULL;
+    guththila_xml_pull_parser_t *guththila = NULL;
+    
+    AXIS2_ENV_CHECK(env, NULL);
+    
+    guththila_impl = AXIS2_MALLOC((*env)->allocator,
+                             sizeof(guththila_xml_reader_wrapper_impl_t));
+    
+    if(!guththila_impl)
+          AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, NULL);
+    
+    allocator = guththila_allocator_init(NULL);
+    guththila_env  = guththila_environment_create(allocator,NULL, NULL);
+    
+    guththila_impl->reader = 
+            guththila_reader_create_for_file(guththila_env, filename);
+    
+    if(!(guththila_impl->reader))
+    {
+        AXIS2_FREE((*env)->allocator,guththila_impl);
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, NULL);
+    }    
+    
+    guththila = guththila_xml_pull_parser_create(guththila_env,
+                                            guththila_impl->reader);
+    if(!guththila)
+    {
+        AXIS2_FREE((*env)->allocator,guththila_impl);
+        AXIS2_ERROR_SET((*env)->error,AXIS2_ERROR_NO_MEMORY, NULL);
+    }
+    
+    
+    guththila_impl->guththila_parser = guththila;
+    guththila_impl->guththila_env = guththila_env;
+    guththila_impl->parser.ops = NULL;
+    guththila_impl->parser.ops = (axis2_xml_reader_ops_t*)AXIS2_MALLOC(
+                                      (*env)->allocator,
+                                       sizeof(axis2_xml_reader_ops_t));
+    if(!(guththila_impl->parser.ops))
+    {   guththila_xml_pull_parser_free( guththila_env, guththila);
+        AXIS2_FREE((*env)->allocator,guththila_impl);
+        AXIS2_ERROR_SET((*env)->error,AXIS2_ERROR_NO_MEMORY, NULL);
+    }
+    
+    
+    guththila_xml_reader_wrapper_init_map(guththila_impl);
+    
+    
+/************** operations *****/    
+    guththila_impl->parser.ops->next = guththila_xml_reader_wrapper_next;
+    
+    guththila_impl->parser.ops->free = guththila_xml_reader_wrapper_free;
+    
+    guththila_impl->parser.ops->get_attribute_count =
+        guththila_xml_reader_wrapper_get_attribute_count;
+    guththila_impl->parser.ops->get_attribute_name_by_number =
+        guththila_xml_reader_wrapper_get_attribute_name_by_number;
+    guththila_impl->parser.ops->get_attribute_value_by_number =
+        guththila_xml_reader_wrapper_get_attribute_value_by_number;
+    guththila_impl->parser.ops->get_attribute_prefix_by_number =
+        guththila_xml_reader_wrapper_get_attribute_prefix_by_number;
+    guththila_impl->parser.ops->get_attribute_namespace_by_number =
+        guththila_xml_reader_wrapper_get_attribute_namespace_by_number;
+    
+    guththila_impl->parser.ops->get_value = guththila_xml_reader_wrapper_get_value;
+    guththila_impl->parser.ops->get_name  = guththila_xml_reader_wrapper_get_name;
+    guththila_impl->parser.ops->get_prefix = guththila_xml_reader_wrapper_get_prefix;
+    
+    guththila_impl->parser.ops->get_namespace_count =
+        guththila_xml_reader_wrapper_get_namespace_count;
+    guththila_impl->parser.ops->get_namespace_uri_by_number =
+        guththila_xml_reader_wrapper_get_namespace_uri_by_number;
+    guththila_impl->parser.ops->get_namespace_prefix_by_number =
+        guththila_xml_reader_wrapper_get_namespace_prefix_by_number;
+
+    guththila_impl->parser.ops->get_dtd=
+        guththila_xml_reader_wrapper_get_dtd;
+
+    guththila_impl->parser.ops->xml_free = guththila_xml_reader_wrapper_xml_free;        
+
+    return &(guththila_impl->parser);
+}
+
+/****** pull parser for memory create function ***************************/
+
+
+AXIS2_DECLARE(axis2_xml_reader_t *)
+axis2_xml_reader_create_for_memory(axis2_env_t **env,
+                                    int (*read_input_callback)(char *buffer,int size),
+                                    const char *encoding)
+{
+    guththila_xml_reader_wrapper_impl_t *guththila_impl = NULL;
+    guththila_allocator_t *allocator = NULL;
+    guththila_environment_t *guththila_env = NULL;
+    guththila_xml_pull_parser_t *guththila = NULL;
+    
+    AXIS2_ENV_CHECK(env, NULL);
+    
+    guththila_impl = AXIS2_MALLOC((*env)->allocator,
+                             sizeof(guththila_xml_reader_wrapper_impl_t));
+    
+    if(!guththila_impl)
+          AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, NULL);
+    
+    allocator = guththila_allocator_init(NULL);
+    guththila_env  = guththila_environment_create(allocator,NULL, NULL);
+    
+    /*-------difference of two create function is here--------*/
+    guththila_impl->reader = 
+        guththila_reader_create_for_memory(guththila_env,read_input_callback); 
+                                                   
+    if(!(guththila_impl->reader))
+    {
+        AXIS2_FREE((*env)->allocator,guththila_impl);
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, NULL);
+    }    
+    
+    guththila = guththila_xml_pull_parser_create(guththila_env,
+                                                guththila_impl->reader);
+    if(!guththila)
+    {
+        AXIS2_FREE((*env)->allocator,guththila_impl);
+        AXIS2_ERROR_SET((*env)->error,AXIS2_ERROR_NO_MEMORY, NULL);
+    }
+    
+    
+    guththila_impl->guththila_parser = guththila;
+    guththila_impl->guththila_env = guththila_env;
+    guththila_impl->parser.ops = NULL;
+    guththila_impl->parser.ops = (axis2_xml_reader_ops_t*)AXIS2_MALLOC(
+                                      (*env)->allocator,
+                                       sizeof(axis2_xml_reader_ops_t));
+    if(!(guththila_impl->parser.ops))
+    {   guththila_xml_pull_parser_free( guththila_env, guththila);
+        AXIS2_FREE((*env)->allocator,guththila_impl);
+        AXIS2_ERROR_SET((*env)->error,AXIS2_ERROR_NO_MEMORY, NULL);
+    }
+    
+    
+    guththila_xml_reader_wrapper_init_map(guththila_impl);
+    
+    
+/************** operations *****/    
+    guththila_impl->parser.ops->next = guththila_xml_reader_wrapper_next;
+    
+    guththila_impl->parser.ops->free = guththila_xml_reader_wrapper_free;
+    
+    guththila_impl->parser.ops->get_attribute_count =
+        guththila_xml_reader_wrapper_get_attribute_count;
+    guththila_impl->parser.ops->get_attribute_name_by_number =
+        guththila_xml_reader_wrapper_get_attribute_name_by_number;
+    guththila_impl->parser.ops->get_attribute_value_by_number =
+        guththila_xml_reader_wrapper_get_attribute_value_by_number;
+    guththila_impl->parser.ops->get_attribute_prefix_by_number =
+        guththila_xml_reader_wrapper_get_attribute_prefix_by_number;
+    guththila_impl->parser.ops->get_attribute_namespace_by_number =
+        guththila_xml_reader_wrapper_get_attribute_namespace_by_number;
+    
+    guththila_impl->parser.ops->get_value = guththila_xml_reader_wrapper_get_value;
+    guththila_impl->parser.ops->get_name  = guththila_xml_reader_wrapper_get_name;
+    guththila_impl->parser.ops->get_prefix = guththila_xml_reader_wrapper_get_prefix;
+    
+    guththila_impl->parser.ops->get_namespace_count =
+        guththila_xml_reader_wrapper_get_namespace_count;
+    guththila_impl->parser.ops->get_namespace_uri_by_number =
+        guththila_xml_reader_wrapper_get_namespace_uri_by_number;
+    guththila_impl->parser.ops->get_namespace_prefix_by_number =
+        guththila_xml_reader_wrapper_get_namespace_prefix_by_number;
+    guththila_impl->parser.ops->get_dtd=
+        guththila_xml_reader_wrapper_get_dtd;
+        
+    guththila_impl->parser.ops->xml_free = guththila_xml_reader_wrapper_xml_free;
+    return &(guththila_impl->parser);
+}
+
+                               
+
+
+
+int AXIS2_CALL 
+guththila_xml_reader_wrapper_next(axis2_xml_reader_t *parser,
+                             axis2_env_t **env)
+{
+    int i =-1;
+    AXIS2_FUNC_PARAM_CHECK(parser,env, -1);
+    i = guththila_xml_pull_parser_next(AXIS2_INTF_TO_IMPL(parser)->guththila_env, 
+            AXIS2_INTF_TO_IMPL(parser)->guththila_parser); 
+    return i == -1 ? -1 : AXIS2_INTF_TO_IMPL(parser)->event_map[i]; 
+    
+}
+
+        
+axis2_status_t AXIS2_CALL 
+guththila_xml_reader_wrapper_free(axis2_xml_reader_t *parser,
+                             axis2_env_t **env)
+{
+    guththila_xml_reader_wrapper_impl_t *parser_impl = NULL;
+    AXIS2_FUNC_PARAM_CHECK(parser,env,AXIS2_FAILURE);
+    parser_impl = AXIS2_INTF_TO_IMPL(parser);
+    if(parser_impl->reader)
+        guththila_reader_free(parser_impl->guththila_env,
+                              parser_impl->reader);    
+    
+    if(parser_impl->guththila_parser)
+        guththila_xml_pull_parser_free(
+                    parser_impl->guththila_env,
+                    parser_impl->guththila_parser);
+                  
+    guththila_environment_free(parser_impl->guththila_env);
+    
+    if(parser->ops)
+        AXIS2_FREE((*env)->allocator, parser->ops);
+    AXIS2_FREE((*env)->allocator, parser_impl);
+    return AXIS2_SUCCESS;   
+}
+           
+        
+int AXIS2_CALL 
+guththila_xml_reader_wrapper_get_attribute_count(axis2_xml_reader_t *parser,
+                                            axis2_env_t **env)
+{
+    AXIS2_FUNC_PARAM_CHECK(parser, env, AXIS2_FAILURE);
+    return guththila_xml_pull_parser_get_attribute_count(
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_env, 
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_parser);
+}
+        
+axis2_char_t* AXIS2_CALL 
+guththila_xml_reader_wrapper_get_attribute_name_by_number(axis2_xml_reader_t *parser,
+                                                     axis2_env_t **env,
+                                                     int i)
+{
+    AXIS2_FUNC_PARAM_CHECK(parser,env, NULL);
+    return guththila_xml_pull_parser_get_attribute_name_by_number(
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_env, 
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_parser, i);    
+    
+    
+}
+        
+axis2_char_t* AXIS2_CALL
+guththila_xml_reader_wrapper_get_attribute_prefix_by_number(axis2_xml_reader_t *parser,
+                                                       axis2_env_t **env,
+                                                       int i)
+{
+    AXIS2_FUNC_PARAM_CHECK(parser,env, NULL);
+    return guththila_xml_pull_parser_get_attribute_prefix_by_number(
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_env, 
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_parser, i);    
+    
+    
+}
+
+                                                     
+axis2_char_t* AXIS2_CALL
+guththila_xml_reader_wrapper_get_attribute_value_by_number(axis2_xml_reader_t *parser,
+                                                      axis2_env_t **env,
+                                                      int i)
+{
+    AXIS2_FUNC_PARAM_CHECK(parser,env, NULL);
+    return guththila_xml_pull_parser_get_attribute_value_by_number(
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_env, 
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_parser, i);    
+    
+    
+}
+        
+        
+axis2_char_t* AXIS2_CALL 
+guththila_xml_reader_wrapper_get_attribute_namespace_by_number(
+                                                 axis2_xml_reader_t *parser,
+                                                 axis2_env_t **env,
+                                                 int i)
+{
+    AXIS2_FUNC_PARAM_CHECK(parser,env, NULL);
+    return guththila_xml_pull_parser_get_attribute_namespace_by_number(
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_env, 
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_parser, i);    
+    
+    
+}
+
+                                
+axis2_char_t* AXIS2_CALL 
+guththila_xml_reader_wrapper_get_value(axis2_xml_reader_t *parser,
+                                  axis2_env_t **env)
+{
+    AXIS2_FUNC_PARAM_CHECK(parser,env, NULL);
+    return guththila_xml_pull_parser_get_value(
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_env, 
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_parser);    
+    
+    
+}
+                                                      
+int AXIS2_CALL 
+guththila_xml_reader_wrapper_get_namespace_count(axis2_xml_reader_t *parser,
+                                            axis2_env_t **env)
+{
+    AXIS2_FUNC_PARAM_CHECK(parser,env, AXIS2_FAILURE);
+    return guththila_xml_pull_parser_get_namespace_count(
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_env, 
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_parser);    
+    
+    
+}
+
+axis2_char_t* AXIS2_CALL
+guththila_xml_reader_wrapper_get_namespace_uri_by_number(axis2_xml_reader_t *parser,
+                                                    axis2_env_t **env,
+                                                    int i)
+{
+    AXIS2_FUNC_PARAM_CHECK(parser,env, NULL);
+    return guththila_xml_pull_parser_get_namespace_uri_by_number(
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_env, 
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_parser, i);    
+    
+    
+}
+                                               
+axis2_char_t* AXIS2_CALL
+guththila_xml_reader_wrapper_get_namespace_prefix_by_number(
+                                                axis2_xml_reader_t *parser,
+                                                axis2_env_t **env,
+                                                int i)
+{
+    AXIS2_FUNC_PARAM_CHECK(parser,env, NULL);
+    return guththila_xml_pull_parser_get_namespace_prefix_by_number(
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_env, 
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_parser, i);    
+    
+    
+}
+                                                
+axis2_char_t* AXIS2_CALL
+guththila_xml_reader_wrapper_get_prefix(axis2_xml_reader_t *parser,
+                                   axis2_env_t **env)
+{
+    AXIS2_FUNC_PARAM_CHECK(parser,env, NULL);
+    return guththila_xml_pull_parser_get_prefix(
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_env, 
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_parser);    
+    
+    
+}
+        
+axis2_char_t* AXIS2_CALL
+guththila_xml_reader_wrapper_get_name(axis2_xml_reader_t *parser,
+                                 axis2_env_t **env)
+{
+    AXIS2_FUNC_PARAM_CHECK(parser,env, NULL);
+    return guththila_xml_pull_parser_get_name(
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_env, 
+                    AXIS2_INTF_TO_IMPL(parser)->guththila_parser);    
+    
+    
+}
+
+axis2_char_t* AXIS2_CALL
+guththila_xml_reader_wrapper_get_pi_target(axis2_xml_reader_t *parser,
+                                      axis2_env_t **env)
+{   
+    /* guththila_does not support pi's yet*/
+    return NULL;   
+ }
+
+axis2_char_t* AXIS2_CALL
+guththila_xml_reader_wrapper_get_pi_data(axis2_xml_reader_t *parser,
+                                     axis2_env_t **env)
+ {
+    /* guththila_dose not support yet */
+    return NULL;
+ }
+
+axis2_char_t* AXIS2_CALL
+guththila_xml_reader_wrapper_get_dtd(axis2_xml_reader_t *parser,
+                                     axis2_env_t **env)
+{
+    printf("not implemented in guththila");
+    return NULL;
+}
+ 
+axis2_status_t AXIS2_CALL
+guththila_xml_reader_wrapper_xml_free(axis2_xml_reader_t *parser,
+                                 axis2_env_t **env,
+                                 void *data)
+{
+    AXIS2_FUNC_PARAM_CHECK(parser, env, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, data, AXIS2_FAILURE);
+    GUTHTHILA_FREE(AXIS2_INTF_TO_IMPL(parser)->guththila_env->allocator,
+                   data);
+    return AXIS2_SUCCESS;
+}