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/28 06:25:02 UTC

svn commit: r349375 - in /webservices/axis2/trunk/c: include/ modules/test/om/src/ modules/xml/om/src/ modules/xml/parser/ modules/xml/parser/guththila/impl/src/ modules/xml/parser/libxml2/src/ modules/xml/parser/libxml2/test/

Author: samisa
Date: Sun Nov 27 21:24:31 2005
New Revision: 349375

URL: http://svn.apache.org/viewcvs?rev=349375&view=rev
Log:
libxml2 reader and writer support added

Modified:
    webservices/axis2/trunk/c/include/axis2_error.h
    webservices/axis2/trunk/c/include/axis2_om_element.h
    webservices/axis2/trunk/c/modules/test/om/src/test_om.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_output.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/axis2_xml_writer.h
    webservices/axis2/trunk/c/modules/xml/parser/guththila/impl/src/guththila_xml_stream_writer.c
    webservices/axis2/trunk/c/modules/xml/parser/libxml2/src/axis2_libxml2_wrapper.c
    webservices/axis2/trunk/c/modules/xml/parser/libxml2/src/axis2_libxml2_writer_wrapper.c
    webservices/axis2/trunk/c/modules/xml/parser/libxml2/test/libxml_test.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=349375&r1=349374&r2=349375&view=diff
==============================================================================
--- webservices/axis2/trunk/c/include/axis2_error.h (original)
+++ webservices/axis2/trunk/c/include/axis2_error.h Sun Nov 27 21:24:31 2005
@@ -201,7 +201,42 @@
         AXIS2_ERROR_CREATING_XML_STREAM_WRITER,
         /** error occured creating xml stream writer */
         AXIS2_ERROR_CREATING_XML_STREAM_READER,
-        INVALID_PHASE
+        INVALID_PHASE,
+        AXIS2_ERROR_WRITING_START_ELEMENT,
+        
+        AXIS2_ERROR_WRITING_START_DOCUMENT,
+        
+        AXIS2_ERROR_WRITING_END_ELEMENT,
+        
+        AXIS2_ERROR_WRITING_END_DOCUMENT,
+        
+        AXIS2_ERROR_WRITING_START_ELEMENT_WITH_NAMESPACE,
+        
+        AXIS2_ERROR_WRITING_START_ELEMENT_WITH_NAMESPACE_PREFIX,
+        
+        AXIS2_ERROR_WRITING_EMPTY_ELEMENT,
+        
+        AXIS2_ERROR_WRITING_EMPTY_ELEMENT_WITH_NAMESPACE,
+        
+        AXIS2_ERROR_WRITING_EMPTY_ELEMENT_WITH_NAMESPACE_PREFIX,
+        
+        AXIS2_ERROR_WRITING_ATTRIBUTE,
+        
+        AXIS2_ERROR_WRITING_ATTRIBUTE_WITH_NAMESPACE,
+        
+        AXIS2_ERROR_WRITING_ATTRIBUTE_WITH_NAMESPACE_PREFIX,
+        
+        AXIS2_ERROR_WRITING_COMMENT,
+        
+        AXIS2_ERROR_WRITING_PROCESSING_INSTRUCTION,
+        
+        AXIS2_ERROR_WTRING_CDATA,
+        
+        AXIS2_ERROR_WRITING_DTD,
+        
+        AXIS2_ERROR_WRITING_DEFAULT_NAMESPACE
+        
+        
         
     };
 

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=349375&r1=349374&r2=349375&view=diff
==============================================================================
--- webservices/axis2/trunk/c/include/axis2_om_element.h (original)
+++ webservices/axis2/trunk/c/include/axis2_om_element.h Sun Nov 27 21:24:31 2005
@@ -149,6 +149,13 @@
                                                     (struct axis2_om_element *om_element,
                                                      axis2_env_t **env,
                                                      axis2_om_output_t * om_output);
+        
+        axis2_om_namespace_t* (AXIS2_CALL *find_declared_namespace)
+                                        (struct axis2_om_element *om_element,
+                                         axis2_env_t **env,
+                                         const axis2_char_t *uri,
+                                         const axis2_char_t *prefix);
+                                                             
                                                         
        /**
         *   returns the localname of this element
@@ -283,6 +290,9 @@
 /** set namespace */        
 #define AXIS2_OM_ELEMENT_SET_NAMESPACE(om_element, env, ns , node) \
         ((om_element)->ops->set_namespace(om_element, env, ns, node))
+
+#define AXIS2_OM_ELEMENT_FIND_DECLARED_NAMESPACE(om_element, env, uri, prefix) \
+        ((om_element)->ops->find_declared_namespace(om_element, env, uri, prefix))        
         
 /** @} */
 

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=349375&r1=349374&r2=349375&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 Sun Nov 27 21:24:31 2005
@@ -40,6 +40,9 @@
     axis2_om_output_t *om_output = NULL;
     axis2_om_namespace_t* ns = NULL;
     axis2_pull_parser_t *pull_parser = NULL;
+    axis2_xml_writer_t *writer = NULL;
+    axis2_char_t *buf = NULL;
+    
     
     f =fopen(filename, "r");
     if(!f)
@@ -77,7 +80,8 @@
     {
         /** print root node information */
         
-       
+       if(AXIS2_OM_NODE_GET_NODE_TYPE(node1, &environment) == AXIS2_OM_ELEMENT)
+       {
         ele1 =AXIS2_OM_NODE_GET_DATA_ELEMENT(node1,&environment);
         if(ele1)
              
@@ -88,9 +92,10 @@
         if (ns)
         {
             printf ("root ns prefix %s\n", AXIS2_OM_NAMESPACE_GET_PREFIX(ns,&environment));
-            printf ("root ns uri %s\n", AXIS2_OM_NAMESPACE_GET_PREFIX(ns,&environment));
-
+            printf ("root ns uri %s\n", AXIS2_OM_NAMESPACE_GET_URI(ns,&environment));
+            ns = NULL;
         }
+       }
     }
     /** build the document continuously untill all the xml file is built in to a om model */
     
@@ -106,9 +111,20 @@
         {
         case AXIS2_OM_ELEMENT:
             ele2 =(axis2_om_element_t*) AXIS2_OM_NODE_GET_DATA_ELEMENT(node2, &environment);
-            if(ele2 && AXIS2_OM_ELEMENT_GET_LOCALNAME(ele2,&environment))
-                printf("\n localname %s\n" , AXIS2_OM_ELEMENT_GET_LOCALNAME(ele2,&environment)); 
-                        
+        if(ele2 && AXIS2_OM_ELEMENT_GET_LOCALNAME(ele2,&environment))
+        { 
+               printf("\n localname %s\n" , AXIS2_OM_ELEMENT_GET_LOCALNAME(ele2,&environment)); 
+            
+               ns = AXIS2_OM_ELEMENT_GET_NAMESPACE(ele2,&environment);
+    
+            if (ns)
+            {
+                printf ("prefix %s\n", AXIS2_OM_NAMESPACE_GET_PREFIX(ns,&environment));
+                printf ("ns uri %s\n", AXIS2_OM_NAMESPACE_GET_URI(ns,&environment));
+            }
+            
+                ns = NULL;
+            }            
             break;
         case AXIS2_OM_TEXT:
             
@@ -126,19 +142,20 @@
     while (node2);
     printf ("END: pull document\n");
 
-    printf ("Serialize pulled document\n");
-    
+    printf ("Serialize pulled document\n\n\n\n");
+   /* 
+    writer = axis2_xml_writer_create_for_memory(&environment, &buf, NULL, AXIS2_TRUE, 0);
+   */
+    writer = axis2_xml_writer_create(&environment, "finaltest.xml", NULL, AXIS2_TRUE, 0);
     
-    om_output = axis2_om_output_create (&environment, NULL);
+    om_output = axis2_om_output_create (&environment, writer);
     AXIS2_OM_NODE_SERIALIZE (AXIS2_OM_DOCUMENT_GET_ROOT_ELEMENT(document, &environment), &environment , om_output);
     AXIS2_OM_DOCUMENT_FREE(document, &environment); 
     axis2_om_output_free(om_output, &environment);  
     AXIS2_OM_STAX_BUILDER_FREE(builder, &environment);
   
-    AXIS2_PULL_PARSER_FREE(pull_parser, &environment);    
-    
-
-    
+        
+    AXIS2_FREE(environment->allocator, buf);
     printf ("\ndone\n");
     return 0;
 }
@@ -162,6 +179,7 @@
        </book>
     */
     int status;
+    axis2_xml_writer_t *writer = NULL;
     axis2_om_element_t *ele1 = NULL, *ele2 = NULL, *ele3 = NULL, *ele4 =
         NULL;
     axis2_om_node_t *node1 = NULL, *node2 = NULL, *node3 = NULL, *node4 =
@@ -201,13 +219,15 @@
     attr2 = axis2_om_attribute_create (&environment, "name", "Axitoc Oman", ns1);
     
     AXIS2_OM_ELEMENT_ADD_ATTRIBUTE(ele4,&environment, attr2);
-    
+    writer = axis2_xml_writer_create(&environment, "write_text.xml", NULL, AXIS2_TRUE, 0);
    
     /* serializing stuff */
-    om_output = axis2_om_output_create (&environment, NULL);
+    om_output = axis2_om_output_create (&environment,writer);
 
     printf ("Serialize built document\n");
+    AXIS2_XML_WRITER_WRITE_START_DOCUMENT(om_output->xml_writer , &environment);
     status = AXIS2_OM_NODE_SERIALIZE (node1,&environment ,om_output);
+    AXIS2_XML_WRITER_WRITE_END_DOCUMENT(om_output->xml_writer, &environment);
     if (status != AXIS2_SUCCESS)
     {
         printf ("\naxis2_om_node_serialize failed\n");
@@ -227,20 +247,19 @@
 int
 main (int argc, char *argv[])
 {
-    char *file_name = "test.xml";
+    char *file_name = "contents.xml";
     if (argc > 1)
         file_name = argv[1];
     allocator = axis2_allocator_init (NULL);
     axis_log = axis2_log_create(allocator, NULL);
     error = axis2_error_create(allocator);
-    
+
     stream = axis2_stream_create(allocator, NULL);
-    
+
     environment = axis2_env_create_with_error_stream_log(allocator, error, stream, axis_log);
-    test_om_build (file_name);
-    test_om_serialize (); 
-    test_om_build (file_name);
-    test_om_serialize (); 
+    test_om_build (file_name); 
+
     axis2_env_free(environment); 
+    getchar();
     return 0;
  }

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=349375&r1=349374&r2=349375&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 Sun Nov 27 21:24:31 2005
@@ -70,8 +70,6 @@
     /** attribute namespace */
     axis2_om_namespace_t *ns;
 
-
-
 }axis2_om_attribute_impl_t;
 
 /***************************************** macro *******************************/

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=349375&r1=349374&r2=349375&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 Sun Nov 27 21:24:31 2005
@@ -113,6 +113,7 @@
     comment->om_comment.ops->free = axis2_om_comment_free;
     comment->om_comment.ops->set_value = axis2_om_comment_set_value;
     comment->om_comment.ops->get_value = axis2_om_comment_get_value;
+    comment->om_comment.ops->serialize = axis2_om_comment_serialize;
     return &(comment->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=349375&r1=349374&r2=349375&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 Sun Nov 27 21:24:31 2005
@@ -37,14 +37,13 @@
                                             axis2_env_t **env,
                                             axis2_om_node_t * node,
                                             axis2_qname_t * qname);
-/*
+
 axis2_om_namespace_t *AXIS2_CALL
 axis2_om_element_find_declared_namespace (axis2_om_element_t *om_element,
                                           axis2_env_t **env,
-                                          struct axis2_om_element *element,
                                           const axis2_char_t *uri,
                                           const axis2_char_t *prefix);
-*/
+
 
 axis2_status_t AXIS2_CALL
 axis2_om_element_add_attribute (axis2_om_element_t *element,
@@ -228,6 +227,8 @@
     
     element->om_element.ops->get_namespace =
         axis2_om_element_get_namespace;
+    element->om_element.ops->find_declared_namespace =
+        axis2_om_element_find_declared_namespace;        
     
     return &(element->om_element);
 
@@ -304,8 +305,10 @@
     }
 
     element = (axis2_om_element_t *) AXIS2_OM_NODE_GET_DATA_ELEMENT(node, env);
+    
+    if (AXIS2_INTF_TO_IMPL(element)->namespaces)
     if (!prefix || axis2_strcmp ( prefix, "") == 0)
-    {
+    {   
         for (hashindex = axis2_hash_first (AXIS2_INTF_TO_IMPL(element)->namespaces, env);
              hashindex; hashindex = axis2_hash_next (env, hashindex))
         {
@@ -314,12 +317,14 @@
                 axis2_strcmp (AXIS2_OM_NAMESPACE_GET_URI(
                     (axis2_om_namespace_t *) (ns), env),uri) == 0)
             {
+              
                 return (axis2_om_namespace_t *) (ns);
             }
         }
+        ns = NULL;
     }
 
-    if (AXIS2_INTF_TO_IMPL(element)->namespaces)
+    if (AXIS2_INTF_TO_IMPL(element)->namespaces && prefix)
         ns = axis2_hash_get (AXIS2_INTF_TO_IMPL(element)->namespaces, prefix,
                              AXIS2_HASH_KEY_STRING);
     
@@ -387,50 +392,55 @@
                         AXIS2_OM_NAMESPACE_GET_PREFIX(ns,env),
                         AXIS2_HASH_KEY_STRING, ns);
     else
+    {
         axis2_hash_set (AXIS2_INTF_TO_IMPL(element)->namespaces,
                         "default",  AXIS2_HASH_KEY_STRING,  ns);
-
+    }
     return AXIS2_SUCCESS;
 }
 
-/*
-axis2_om_namespace_t *
-axis2_om_element_impl_find_declared_namespace (axis2_env_t *
-                                               environment,
-                                               struct axis2_om_element *
-                                               element,
-                                               const axis2_char_t * uri,
-                                               const axis2_char_t * prefix)
+
+axis2_om_namespace_t * AXIS2_CALL
+axis2_om_element_find_declared_namespace (axis2_om_element_t *om_element,
+                                            axis2_env_t **env,
+                                            const axis2_char_t * uri,
+                                            const axis2_char_t * prefix)
 {
     axis2_hash_index_t *hash_index = NULL;
     void *ns = NULL;
-    if (!element || !(element->namespaces))
+    axis2_om_element_impl_t *om_element_impl = NULL;
+    AXIS2_FUNC_PARAM_CHECK(om_element, env, NULL);
+    AXIS2_PARAM_CHECK((*env)->error, uri, NULL);
+    
+    om_element_impl = AXIS2_INTF_TO_IMPL(om_element);
+    
+    if (!(om_element_impl->namespaces))
     {
         return NULL;
     }
-    if (!prefix || axis2_strcmp (environment->string, prefix, "") == 0)
+    if (!prefix || AXIS2_STRCMP(prefix, "") == 0)
     {
-        for (hash_index = axis2_hash_first (environment, element->namespaces);
-             hash_index; hash_index = axis2_hash_next (hash_index))
+        for (hash_index = axis2_hash_first (om_element_impl->namespaces, env);
+             hash_index; hash_index = axis2_hash_next (env, hash_index))
         {
             axis2_hash_this (hash_index, NULL, NULL, &ns);
-            if (axis2_strcmp
-                (environment->string, ((axis2_om_namespace_t *) (ns))->uri,
-                 uri))
+            if (AXIS2_STRCMP(AXIS2_OM_NAMESPACE_GET_URI(
+                    (axis2_om_namespace_t *)(ns), env), uri) == 0)
             {
                 return (axis2_om_namespace_t *) (ns);
             }
         }
+        ns = NULL;
         return NULL;
     }
-    ns = axis2_hash_get (element->namespaces, prefix, AXIS2_HASH_KEY_STRING);
+    
+    ns = axis2_hash_get (om_element_impl->namespaces, prefix, AXIS2_HASH_KEY_STRING);
     if (ns)
         return (axis2_om_namespace_t *) ns;
     else
         return NULL;
-
 }
-*/
+
 
 axis2_om_namespace_t * AXIS2_CALL
 axis2_om_element_find_namespace_with_qname (axis2_om_element_t *element,
@@ -590,8 +600,10 @@
                                        axis2_om_output_t *om_output)
 {
     int status = AXIS2_SUCCESS;
+   
     axis2_om_element_impl_t *ele_impl = NULL;
     AXIS2_FUNC_PARAM_CHECK(om_element, env, AXIS2_FAILURE);
+     
     if (!om_output)
     {
         AXIS2_ERROR_SET_ERROR_NUMBER((*env)->error,
@@ -600,7 +612,7 @@
         return AXIS2_FAILURE;
     }
     ele_impl = AXIS2_INTF_TO_IMPL(om_element);
-    
+
     if (ele_impl->ns &&
         AXIS2_OM_NAMESPACE_GET_URI(ele_impl->ns, env) &&
         AXIS2_OM_NAMESPACE_GET_PREFIX(ele_impl->ns, env))
@@ -611,15 +623,17 @@
                                         AXIS2_OM_NAMESPACE_GET_URI(ele_impl->ns, env),
                                         AXIS2_OM_NAMESPACE_GET_PREFIX(ele_impl->ns, env));
     }                                   
-    else if (ele_impl->ns && AXIS2_OM_NAMESPACE_GET_URI(ele_impl->ns, env))
-    {    status = 
+    else if (ele_impl->ns && AXIS2_OM_NAMESPACE_GET_URI(ele_impl->ns, env) && !AXIS2_OM_NAMESPACE_GET_PREFIX(ele_impl->ns, env))
+    {  
+        status = 
             axis2_om_output_write (om_output, env,
                                 AXIS2_OM_ELEMENT, 2,
                                 ele_impl->localname,
                                 AXIS2_OM_NAMESPACE_GET_URI(ele_impl->ns, env));
     }                                   
     else
-    {    status = axis2_om_output_write (om_output, env,
+    {
+        status = axis2_om_output_write (om_output, env,
                                     AXIS2_OM_ELEMENT, 1, ele_impl->localname);
 
     }
@@ -673,7 +687,6 @@
                                      axis2_om_output_t * om_output)
 {
     int status = AXIS2_SUCCESS;
-
     if (!om_output)
     {
         AXIS2_ERROR_SET_ERROR_NUMBER((*env)->error ,
@@ -726,7 +739,6 @@
     axis2_status_t status = AXIS2_FAILURE;
     AXIS2_FUNC_PARAM_CHECK(om_element, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error,ns , AXIS2_FAILURE);
-      
     om_ns = axis2_om_element_find_namespace(om_element,env,node,
                                 AXIS2_OM_NAMESPACE_GET_URI(ns, env),
                                 AXIS2_OM_NAMESPACE_GET_PREFIX(ns , env));

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=349375&r1=349374&r2=349375&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 Sun Nov 27 21:24:31 2005
@@ -486,7 +486,7 @@
     int status = AXIS2_SUCCESS;
     AXIS2_FUNC_PARAM_CHECK(om_node, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error,om_output,AXIS2_FAILURE);
-
+    
 
     switch (AXIS2_INTF_TO_IMPL(om_node)->node_type)
     {
@@ -555,6 +555,7 @@
     /* serialize next sibling */  
     if(AXIS2_INTF_TO_IMPL(om_node)->next_sibling)    
         status = axis2_om_node_serialize(AXIS2_INTF_TO_IMPL(om_node)->next_sibling, env, om_output);
+    
     
     return status;
  

Modified: webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_output.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_output.c?rev=349375&r1=349374&r2=349375&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_output.c (original)
+++ webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_output.c Sun Nov 27 21:24:31 2005
@@ -25,7 +25,7 @@
 axis2_om_output_create (axis2_env_t **env, axis2_xml_writer_t *xml_writer)
 {
     axis2_om_output_t *om_output = NULL;
-    AXIS2_ENV_CHECK(env , NULL);
+    AXIS2_FUNC_PARAM_CHECK(xml_writer, env, NULL);
     
     om_output = (axis2_om_output_t *) AXIS2_MALLOC ((*env)->allocator,
                                                     sizeof (axis2_om_output_t));
@@ -34,22 +34,8 @@
         AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, NULL);
 
     om_output->xml_writer = NULL;
-    if(xml_writer)
-    {
-        om_output->xml_writer = xml_writer;
-    }
-    else
-    {
-        om_output->xml_writer = axis2_xml_writer_create(env, NULL,
-                                                        DEFAULT_CHAR_SET_ENCODING,
-                                                        AXIS2_TRUE,
-                                                        0);
-        if(!(om_output->xml_writer))
-        {
-            AXIS2_FREE((*env)->allocator, om_output);
-            AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, NULL);
-        }
-    }
+    om_output->xml_writer = xml_writer;
+   
     om_output->do_optimize = AXIS2_FALSE;
     om_output->mime_boundary = 0;
     om_output->root_content_id = 0;
@@ -198,6 +184,8 @@
         AXIS2_FREE((*env)->allocator, om_output->xml_version);
     if(om_output->char_set_encoding)
         AXIS2_FREE((*env)->allocator, om_output->char_set_encoding);
+    if(om_output->xml_writer)
+        AXIS2_XML_WRITER_FREE(om_output->xml_writer, env);
     AXIS2_FREE ((*env)->allocator, om_output);
     return AXIS2_SUCCESS;
 }

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=349375&r1=349374&r2=349375&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 Sun Nov 27 21:24:31 2005
@@ -144,7 +144,9 @@
     processing_instruction->om_pi.ops->get_value =
             axis2_om_processing_instruction_get_value;
     processing_instruction->om_pi.ops->set_value = 
-            axis2_om_processing_instruction_set_value;                     
+            axis2_om_processing_instruction_set_value; 
+    processing_instruction->om_pi.ops->serialize =
+            axis2_om_processing_instruction_serialize;                                
     
     return &(processing_instruction->om_pi);
 }

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=349375&r1=349374&r2=349375&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_stax_builder.c (original)
+++ webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_stax_builder.c Sun Nov 27 21:24:31 2005
@@ -26,7 +26,7 @@
 
 
 const axis2_char_t XMLNS_URI[] = "http://www.w3.org/XML/1998/namespace";
-const axis2_char_t XMLNS_PREFIX[] = "xml";
+const axis2_char_t XMLNS_PREFIX[] = "xmlns";
 
 /**************************** function prototypes *****************************/
 
@@ -156,7 +156,6 @@
 
     attribute_count = AXIS2_PULL_PARSER_GET_ATTRIBUTE_COUNT(
                                builder_impl->parser,env);
-    
     for (i=1; i <= attribute_count ; i++)
     {
         
@@ -203,7 +202,6 @@
         
         attr_value = AXIS2_PULL_PARSER_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 (
@@ -322,6 +320,7 @@
     axis2_status_t status = AXIS2_SUCCESS;
     int namespace_count = 0;
     axis2_om_namespace_t *om_ns = NULL;
+    axis2_om_namespace_t *temp_ns = NULL;
     /* temp values */
     axis2_char_t *temp_prefix = NULL;
     axis2_char_t *temp_ns_prefix = NULL;
@@ -335,32 +334,40 @@
     builder = AXIS2_INTF_TO_IMPL(om_stax_builder);
     
     namespace_count = AXIS2_PULL_PARSER_GET_NAMESPACE_COUNT (builder->parser, env);
-
-    
-    
     for (i = 1; i <= namespace_count; i++)
     {
         temp_ns_prefix = AXIS2_PULL_PARSER_GET_NAMESPACE_PREFIX_BY_NUMBER(
                                 builder->parser, env, i);
-                                
+                                     
         temp_ns_uri = AXIS2_PULL_PARSER_GET_NAMESPACE_URI_BY_NUMBER(
                             builder->parser, env , i);
                             
-                                                       
-        om_ns = axis2_om_namespace_create ( env,
-                         temp_ns_uri, temp_ns_prefix );
-                
-        AXIS2_PULL_PARSER_XML_FREE(builder->parser, env, temp_ns_prefix);
-        AXIS2_PULL_PARSER_XML_FREE(builder->parser, env, temp_ns_uri);
-        
-                        
-        if (om_ns)
+        if(AXIS2_STRCMP(temp_ns_prefix,"xmlns") == 0 || !temp_ns_prefix)
         {
-            status = AXIS2_OM_ELEMENT_DECLARE_NAMESPACE(
-                        (axis2_om_element_t *)AXIS2_OM_NODE_GET_DATA_ELEMENT(node, env),
-                        env, node, om_ns);
+             axis2_om_element_t *om_ele = NULL;
+             om_ns = axis2_om_namespace_create ( env,
+                         temp_ns_uri, NULL );
+             om_ele = (axis2_om_element_t *)AXIS2_OM_NODE_GET_DATA_ELEMENT(node, env);
+             status = AXIS2_OM_ELEMENT_DECLARE_NAMESPACE( om_ele, env, node, om_ns);
+            
+             temp_ns = AXIS2_OM_ELEMENT_FIND_DECLARED_NAMESPACE(om_ele, env, temp_ns_uri, NULL);
+             if(temp_ns)
+               AXIS2_OM_ELEMENT_SET_NAMESPACE (om_ele, env, om_ns, node);                        
+                                                 
         }
         else
+        {                                            
+           om_ns = axis2_om_namespace_create ( env,
+                         temp_ns_uri, temp_ns_prefix );
+           status = AXIS2_OM_ELEMENT_DECLARE_NAMESPACE(
+                        (axis2_om_element_t *)AXIS2_OM_NODE_GET_DATA_ELEMENT(node, env),
+                        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);
+                                
+        if (!om_ns)
         {
             /* something went wrong */
             return AXIS2_FAILURE;
@@ -368,13 +375,12 @@
     }
     /* set own namespace */
     temp_prefix = AXIS2_PULL_PARSER_GET_PREFIX ( builder->parser, env);
-
     if (temp_prefix)
     {
         om_ns = AXIS2_OM_ELEMENT_FIND_NAMESPACE (
                     (axis2_om_element_t *)AXIS2_OM_NODE_GET_DATA_ELEMENT(node, env),
                     env, node, NULL, temp_prefix);
-
+       
         if (om_ns)
         {
             axis2_om_element_t *om_ele = NULL;
@@ -461,7 +467,6 @@
     builder_impl = AXIS2_INTF_TO_IMPL(builder);
     
     comment_value  = AXIS2_PULL_PARSER_GET_VALUE(builder_impl->parser, env);
-
     if (!comment_value)
     {
         AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_PULL_PARSER_ELEMENT_NULL, NULL); 
@@ -469,10 +474,9 @@
     
     if (!(builder_impl->lastnode))
     {
-        axis2_om_comment_create (env , NULL, comment_value, &comment_node);
-        AXIS2_OM_DOCUMENT_SET_ROOT_ELEMENT(builder_impl->document,
-            env, comment_node);
-        
+        /* do nothing */ 
+        AXIS2_PULL_PARSER_XML_FREE(builder_impl->parser , env, comment_value);
+        return NULL;   
     }
     else if (AXIS2_OM_NODE_GET_BUILD_STATUS(builder_impl->lastnode, env))
     {
@@ -550,8 +554,10 @@
     
     if (!(builder_impl->lastnode))
     {
-        axis2_om_processing_instruction_create(env, NULL, target, value, &pi_node);
-        AXIS2_OM_DOCUMENT_SET_ROOT_ELEMENT(builder_impl->document, env, pi_node);
+        /* do nothing */
+        AXIS2_PULL_PARSER_XML_FREE(builder_impl->parser , env, target);
+        AXIS2_PULL_PARSER_XML_FREE(builder_impl->parser , env, value);
+        return NULL;
     }
     else if (AXIS2_OM_NODE_GET_BUILD_STATUS(builder_impl->lastnode, env) ||
      (AXIS2_OM_NODE_GET_NODE_TYPE(builder_impl->lastnode, env) == AXIS2_OM_TEXT))
@@ -584,7 +590,7 @@
 {
     axis2_om_node_t *parent;
     axis2_om_stax_builder_impl_t *builder = NULL;
-
+    axis2_om_node_t *root_node = NULL;
     
     AXIS2_FUNC_PARAM_CHECK(om_stax_builder, env, AXIS2_FAILURE );
     
@@ -606,7 +612,10 @@
             AXIS2_OM_NODE_SET_BUILD_STATUS((builder->lastnode), env, AXIS2_TRUE);
         }
     }
-   
+ /*   root_node = AXIS2_OM_DOCUMENT_GET_ROOT_ELEMENT(builder->document, env);
+    if(AXIS2_OM_NODE_GET_BUILD_STATUS(root_node, env))
+        builder->done = AXIS2_TRUE;
+   */
     return AXIS2_SUCCESS;
 }
 
@@ -628,7 +637,9 @@
             AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_BUILDER_DONE_CANNOT_PULL, NULL);
 
         token = AXIS2_PULL_PARSER_NEXT (builder->parser, env);
-
+        if(token == -1)
+            return NULL;
+        
         if (!(builder->cache))
         {
             return NULL;
@@ -642,7 +653,6 @@
             break;
         
         case AXIS2_PULL_PARSER_START_ELEMENT:
-            
            node = axis2_om_stax_builder_create_om_element (
                         om_stax_builder, env); 
             break;
@@ -652,7 +662,6 @@
                         om_stax_builder, env);
         
         case AXIS2_PULL_PARSER_END_ELEMENT:
-            
             axis2_om_stax_builder_end_element (om_stax_builder, env);
             break;
         
@@ -669,14 +678,18 @@
             break;
         
         case AXIS2_PULL_PARSER_COMMENT:
-        /* node =  axis2_om_stax_builder_create_om_comment(om_stax_builder, env);
-        */
+            
+         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:
-          /*  node = axis2_om_stax_builder_create_om_processing_instruction(
+            
+            node = axis2_om_stax_builder_create_om_processing_instruction(
                                         om_stax_builder , env );
-            */
+            axis2_om_stax_builder_end_element (om_stax_builder, env);
+          
             break;
         
         case AXIS2_PULL_PARSER_CDATA:
@@ -701,12 +714,22 @@
 AXIS2_CALL axis2_om_stax_builder_free(axis2_om_stax_builder_t *builder,
                                       axis2_env_t **env)
 {
+    axis2_om_stax_builder_impl_t *builder_impl =  NULL;
     AXIS2_FUNC_PARAM_CHECK(builder, env, AXIS2_FAILURE);
+    
+    builder_impl = AXIS2_INTF_TO_IMPL(builder);
+
+    if(builder_impl->parser)
+    {
+        AXIS2_PULL_PARSER_FREE(builder_impl->parser, env);
+    }
+
 	if(builder->ops)
+	{
 		AXIS2_FREE ((*env)->allocator,builder->ops);
+	}	
 	AXIS2_FREE ((*env)->allocator, AXIS2_INTF_TO_IMPL(builder));
 	return AXIS2_SUCCESS;	
-	
 }
                                             
 axis2_om_document_t* AXIS2_CALL

Modified: webservices/axis2/trunk/c/modules/xml/parser/axis2_xml_writer.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/parser/axis2_xml_writer.h?rev=349375&r1=349374&r2=349375&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/parser/axis2_xml_writer.h (original)
+++ webservices/axis2/trunk/c/modules/xml/parser/axis2_xml_writer.h Sun Nov 27 21:24:31 2005
@@ -444,7 +444,7 @@
 
 AXIS2_DECLARE(axis2_xml_writer_t *)
 axis2_xml_writer_create_for_memory(axis2_env_t **env,
-                                   void *buffer,
+                                   char **buffer,
                                    axis2_char_t *encoding,
                                    int is_prefix_default,
                                    int compression);
@@ -477,11 +477,11 @@
         
 #define AXIS2_XML_WRITER_WRITE_EMPTY_ELEMENT_WITH_NAMESPACE(\
         writer, env,localname,namespace_uri) \
-        ((writer)->ops->write_empty_element(writer,env,localname,namespace_uri))       
+        ((writer)->ops->write_empty_element_with_namespace(writer,env,localname,namespace_uri))       
 
-#define AXIS2_XML_WRITER_WRITE_EMPTY_ELEMENT_WITH_NAMESPACE_WITH_PREFIX(\
+#define AXIS2_XML_WRITER_WRITE_EMPTY_ELEMENT_WITH_NAMESPACE_PREFIX(\
         writer, env, localname, namespace_uri, prefix) \
-        ((writer)->ops->write_empty_element(\
+        ((writer)->ops->write_empty_element_with_namespace_prefix(\
         writer,env,localname,namespace_uri, prefix))
 
 #define AXIS2_XML_WRITER_WRITE_END_ELEMENT(writer, env) \

Modified: webservices/axis2/trunk/c/modules/xml/parser/guththila/impl/src/guththila_xml_stream_writer.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/parser/guththila/impl/src/guththila_xml_stream_writer.c?rev=349375&r1=349374&r2=349375&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/parser/guththila/impl/src/guththila_xml_stream_writer.c (original)
+++ webservices/axis2/trunk/c/modules/xml/parser/guththila/impl/src/guththila_xml_stream_writer.c Sun Nov 27 21:24:31 2005
@@ -157,7 +157,7 @@
                                 guththila_char_t * local_name,
                                 guththila_char_t * namespace_uri)
 {
-    int is_declared;
+    int is_declared = 0;
     guththila_char_t ***new_element;
     guththila_char_t *prefix;
     if (!stream_writer)
@@ -173,7 +173,6 @@
     prefix =
         guththila_xml_stream_writer_get_prefix (environment, stream_writer,
                                                 namespace_uri);
-
     is_declared = (prefix != 0);
 
     if (!is_declared)
@@ -194,14 +193,24 @@
     }
 
     fputs (local_name, stream_writer->writer);
+    
+    stream_writer->in_start_element = 1;
 
     if (stream_writer->prefix_defaulting && !is_declared)
-    {
-        if (prefix)
+    {   
+        if (prefix && GUTHTHILA_STRLEN ( prefix) != 0)
+        {
             guththila_xml_stream_writer_write_namespace (environment,
                                                          stream_writer,
                                                          prefix,
                                                          namespace_uri);
+        }                                                         
+        else 
+        {
+            guththila_xml_stream_writer_write_default_namespace (environment,
+                                                         stream_writer,
+                                                         namespace_uri);                                                         
+        }
     }
     /*push element to stack */
     /*guththila_char_t** new_element = (guththila_char_t**)apr_array_push(stream_writer->element_stack); */
@@ -542,10 +551,9 @@
                              guththila_char_t * prefix,
                              guththila_char_t * namespace_uri)
 {
-    guththila_char_t *declared_prefix;
+    guththila_char_t *declared_prefix = NULL;
     if (!stream_writer->in_start_element)
         return GUTHTHILA_STREAM_WRITER_ERROR_ILLEGAL_STATE;
-
     if (!prefix)
         prefix = GUTHTHILA_DEFAULT_NS_PREFIX;
 

Modified: webservices/axis2/trunk/c/modules/xml/parser/libxml2/src/axis2_libxml2_wrapper.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/parser/libxml2/src/axis2_libxml2_wrapper.c?rev=349375&r1=349374&r2=349375&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/parser/libxml2/src/axis2_libxml2_wrapper.c (original)
+++ webservices/axis2/trunk/c/modules/xml/parser/libxml2/src/axis2_libxml2_wrapper.c Sun Nov 27 21:24:31 2005
@@ -98,8 +98,10 @@
                                axis2_env_t **env,
                                void *data);
 
-void axis2_libxml2_wrapper_fill_maps(axis2_pull_parser_t *parser,
+axis2_status_t axis2_libxml2_wrapper_fill_maps(axis2_pull_parser_t *parser,
                                             axis2_env_t **env);
+                                            
+static int axis2_libxml2_wrapper_read_input_callback(void *ctx,char *buffer,int size);                                            
                                    
 /************* End function parameters , axis2_libxml2_wrapper_impl_t struct ***/
 
@@ -108,6 +110,7 @@
 	axis2_pull_parser_t parser;
 	
 	xmlTextReaderPtr reader;
+	
 	int current_event;
 	int current_attribute_count;
     int current_namespace_count;
@@ -116,6 +119,11 @@
     
     int namespace_map[AXIS2_ATTR_NS_MAX];
     int attribute_map[AXIS2_ATTR_NS_MAX];
+    /******************************************/
+    /* read callback function */
+    int (*read_input_callback)(char *buffer, int size);
+    
+    
 }axis2_libxml2_wrapper_impl_t;
 
 /****************** End struct , Macro *****************************************/
@@ -260,25 +268,36 @@
 }
 
 /************** create function for io callback function **********************/
-/*
+
+
+
+
 AXIS2_DECLARE(axis2_pull_parser_t *)
-axis2_pull_parser_create_for_memory(axis2_env_t **env,int )
+axis2_pull_parser_create_for_memory(axis2_env_t **env,
+                                    int (*read_input_callback)(char *buffer,int size),
+                                    const axis2_char_t *encoding)
 {
     
 	axis2_libxml2_wrapper_impl_t *wrapper_impl = NULL;
-    AXIS2_FUNC_PARAM_CHECK(filename, env, NULL);
+    AXIS2_FUNC_PARAM_CHECK(read_input_callback, env, NULL);
     
     wrapper_impl = (axis2_libxml2_wrapper_impl_t*)AXIS2_MALLOC((*env)->allocator,
          sizeof(axis2_libxml2_wrapper_impl_t));
     if(!wrapper_impl)
+    {
         AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, NULL);
+        return NULL;   
+    }
+    
+    wrapper_impl->read_input_callback = read_input_callback;
+    
+    wrapper_impl->reader =  xmlReaderForIO(axis2_libxml2_wrapper_read_input_callback,
+             NULL, wrapper_impl, NULL, encoding, XML_PARSE_RECOVER);
     
-    wrapper_impl->reader =  xmlNewTextReaderFilename(filename);
     if(!(wrapper_impl->reader))
     {
         AXIS2_FREE((*env)->allocator, wrapper_impl);
-        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_CREATING_LIBXML_READER, NULL);
-        
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_CREATING_XML_STREAM_READER, NULL);
     }
 	
     
@@ -299,7 +318,7 @@
     }
 
 	
-	wrapper_impl->parser.ops->free = axis2_libxml2_wrapper_free;
+		wrapper_impl->parser.ops->free = axis2_libxml2_wrapper_free;
     wrapper_impl->parser.ops->next = axis2_libxml2_wrapper_next;
     wrapper_impl->parser.ops->xml_free = axis2_libxml2_wrapper_xml_free;
     
@@ -328,10 +347,16 @@
         axis2_libxml2_wrapper_get_namespace_prefix_by_number;
     wrapper_impl->parser.ops->get_namespace_uri_by_number =
         axis2_libxml2_wrapper_get_namespace_uri_by_number;
+        
+    wrapper_impl->parser.ops->get_pi_target =
+        axis2_libxml2_wrapper_get_pi_target;
+    wrapper_impl->parser.ops->get_pi_data =
+        axis2_libxml2_wrapper_get_pi_data;
+        
+    wrapper_impl->parser.ops->get_dtd =
+        axis2_libxml2_wrapper_get_dtd;    
 	return &(wrapper_impl->parser);
 }
-	
-*/	
 
 
 
@@ -343,19 +368,18 @@
     int node = 2;
     int empty_check = 0;
     axis2_libxml2_wrapper_impl_t *parser_impl; 
-     
     AXIS2_FUNC_PARAM_CHECK(parser,env, -1);
     parser_impl = AXIS2_INTF_TO_IMPL(parser);
     /* if end_element event after empty element event is not required remove
-        this if close */
+        this if close 
     if(parser_impl->current_event == AXIS2_PULL_PARSER_EMPTY_ELEMENT)
     {
-        /* if the previous event was a empty element then create an end element
-            event */
+         if the previous event was a empty element then create an end element
+            event 
         parser_impl->current_event = AXIS2_PULL_PARSER_END_ELEMENT;
         return AXIS2_PULL_PARSER_END_ELEMENT;        
     }
-    
+    */
     ret_val = xmlTextReaderRead(parser_impl->reader);
     
     if(ret_val == 1)
@@ -371,7 +395,7 @@
             axis2_libxml2_wrapper_fill_maps(parser , env);
         }
         if(empty_check == 1)
-        {
+        {   
             parser_impl->current_event =  AXIS2_PULL_PARSER_EMPTY_ELEMENT;
             return AXIS2_PULL_PARSER_EMPTY_ELEMENT;         
         }
@@ -402,7 +426,8 @@
     axis2_libxml2_wrapper_impl_t *parser_impl=NULL;
     AXIS2_FUNC_PARAM_CHECK(parser,env, AXIS2_FAILURE);
     parser_impl = AXIS2_INTF_TO_IMPL(parser);
-    if(parser_impl->current_event == AXIS2_PULL_PARSER_START_ELEMENT)
+    if(parser_impl->current_event == AXIS2_PULL_PARSER_START_ELEMENT ||
+       parser_impl->current_event == AXIS2_PULL_PARSER_EMPTY_ELEMENT )
         return parser_impl->current_attribute_count;
     else
         return 0;
@@ -506,10 +531,19 @@
                                 axis2_env_t **env)
 {
     axis2_libxml2_wrapper_impl_t *parser_impl = NULL;
+    int ret;
     AXIS2_FUNC_PARAM_CHECK(parser, env, NULL);
     parser_impl = AXIS2_INTF_TO_IMPL(parser);
-    /*xmlTextReaderMoveToElement(parser_impl->reader); */
+ /*   if(!(parser_impl->current_event == AXIS2_PULL_PARSER_CHARACTER))
+    {    ret = xmlTextReaderMoveToElement(parser_impl->reader); 
+        if(ret == 1)
+            return (axis2_char_t*)xmlTextReaderValue(parser_impl->reader);
+    else
+        return NULL;        
+    }
+  */
     return (axis2_char_t*)xmlTextReaderValue(parser_impl->reader);
+   
 }
                                                       
 int AXIS2_CALL 
@@ -519,7 +553,8 @@
     axis2_libxml2_wrapper_impl_t *parser_impl = NULL;
     AXIS2_FUNC_PARAM_CHECK(parser,env, AXIS2_FAILURE);
     parser_impl = AXIS2_INTF_TO_IMPL(parser);
-    if(parser_impl->current_event == AXIS2_PULL_PARSER_START_ELEMENT)
+    if(parser_impl->current_event == AXIS2_PULL_PARSER_START_ELEMENT ||
+       parser_impl->current_event == AXIS2_PULL_PARSER_EMPTY_ELEMENT)
         return parser_impl->current_namespace_count;
     else
         return 0;
@@ -593,7 +628,7 @@
     axis2_libxml2_wrapper_impl_t *parser_impl = NULL;
     AXIS2_FUNC_PARAM_CHECK(parser, env, NULL);
     parser_impl = AXIS2_INTF_TO_IMPL(parser);
-    /*xmlTextReaderMoveToElement(parser_impl->reader);*/
+    xmlTextReaderMoveToElement(parser_impl->reader);
     return (axis2_char_t*)xmlTextReaderLocalName(parser_impl->reader);
     
 }
@@ -652,7 +687,7 @@
  }
 
 
-void axis2_libxml2_wrapper_fill_maps(axis2_pull_parser_t *parser,
+axis2_status_t axis2_libxml2_wrapper_fill_maps(axis2_pull_parser_t *parser,
                                             axis2_env_t **env)
 {
     int libxml2_attribute_count = 0;
@@ -662,12 +697,12 @@
     char *q_name = NULL;
     axis2_libxml2_wrapper_impl_t *parser_impl = NULL;
     
-    AXIS2_FUNC_PARAM_CHECK(parser, env, NULL);
+    AXIS2_FUNC_PARAM_CHECK(parser, env, AXIS2_FAILURE);
     parser_impl = AXIS2_INTF_TO_IMPL(parser);
     
     libxml2_attribute_count = xmlTextReaderAttributeCount(parser_impl->reader);
     if(libxml2_attribute_count == 0)
-        return;
+        return AXIS2_SUCCESS;
     
     for(i = 0;i < AXIS2_ATTR_NS_MAX ;i++)
     {
@@ -701,5 +736,11 @@
         parser_impl->current_attribute_count = attr_count;
         parser_impl->current_namespace_count = ns_count;
     }
-    return;
+    return AXIS2_SUCCESS;
+}
+
+
+static int axis2_libxml2_wrapper_read_input_callback(void *ctx,char *buffer,int size)
+{
+ return  ((axis2_libxml2_wrapper_impl_t*)ctx)->read_input_callback(buffer, size);
 }

Modified: webservices/axis2/trunk/c/modules/xml/parser/libxml2/src/axis2_libxml2_writer_wrapper.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/parser/libxml2/src/axis2_libxml2_writer_wrapper.c?rev=349375&r1=349374&r2=349375&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/parser/libxml2/src/axis2_libxml2_writer_wrapper.c (original)
+++ webservices/axis2/trunk/c/modules/xml/parser/libxml2/src/axis2_libxml2_writer_wrapper.c Sun Nov 27 21:24:31 2005
@@ -16,8 +16,12 @@
  
 #include <libxml/xmlwriter.h>
 #include <axis2.h>
+#include <axis2_defines.h>
 #include <axis2_env.h>
 #include <axis2_xml_writer.h>
+#include <axis2_string.h>
+#include <string.h>
+
 /*******************************************************************************/
 
 #define ENCODING "ISO-8859-1"
@@ -202,9 +206,26 @@
                                          axis2_char_t *text,
                                          int in_attr);
 
+static axis2_bool_t 
+axis2_libxml2_writer_wrapper_validate_namespace(axis2_xml_writer_t *writer,
+                                         axis2_env_t **env,
+                                         axis2_char_t *ns_uri,
+                                         axis2_char_t *prefix);
+static axis2_status_t 
+axis2_libxml2_writer_wrapper_reset(axis2_xml_writer_t *writer,
+                                   axis2_env_t **env);
+                                                                            
 
 
 /**************************** end function pointers ****************************/
+typedef struct axis2_qname_array
+{
+    int allocated;
+    int current_no;
+    axis2_char_t **prefix;
+    axis2_char_t **uri;
+}axis2_qname_array_t;
+
 
 
 typedef struct axis2_libxml2_writer_wrapper_impl
@@ -212,7 +233,12 @@
     axis2_xml_writer_t writer;
     xmlTextWriterPtr xml_writer;
     xmlBufferPtr buffer;
+    axis2_char_t **output_buffer;
     int writer_type;
+    axis2_char_t *encoding;
+    int is_prefix_defaulting;
+    int compression;
+    axis2_qname_array_t qname_array;
     
 }axis2_libxml2_writer_wrapper_impl_t;
 
@@ -230,15 +256,15 @@
                         int is_prefix_default,
                         int compression)
 {
-    axis2_libxml2_writer_wrapper_impl_t *writer_impl;
-    int rc;
+    int rc = 0;
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
     AXIS2_ENV_CHECK(env, NULL);
-    
     writer_impl = (axis2_libxml2_writer_wrapper_impl_t *)AXIS2_MALLOC((*env)->allocator,
                    sizeof(axis2_libxml2_writer_wrapper_impl_t));
     if(!writer_impl)
         AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, NULL);
     
+     
     writer_impl->xml_writer = xmlNewTextWriterFilename(filename, compression);
     
     if(!(writer_impl->xml_writer))
@@ -248,6 +274,34 @@
         AXIS2_FREE((*env)->allocator, writer_impl);
                 
     }
+    
+    if(encoding)
+        writer_impl->encoding = AXIS2_STRDUP(encoding , env);
+    else
+        writer_impl->encoding = AXIS2_STRDUP(ENCODING, env);
+     
+    /********** allocate qname array 10 default size ******************************/
+    writer_impl->qname_array.prefix = AXIS2_MALLOC((*env)->allocator,
+                                        sizeof(axis2_char_t*)*10);
+    writer_impl->qname_array.uri = AXIS2_MALLOC((*env)->allocator,
+                                        sizeof(axis2_char_t*)*10);                                        
+    if(!(writer_impl->qname_array.uri) || !(writer_impl->qname_array.prefix))
+    {
+        axis2_libxml2_writer_wrapper_free(&(writer_impl->writer), env);
+    
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, NULL);
+        return NULL;
+    }                                       
+    
+    writer_impl->qname_array.allocated = 10;
+    writer_impl->qname_array.current_no = 0;
+    
+      
+    /*************************************************************************/  
+    writer_impl->compression = compression;
+    /* writer type */
+    writer_impl->writer_type = AXIS2_LIBXML2_WRITER_FILE;   
+    
     writer_impl->writer.ops = NULL;
     writer_impl->writer.ops = (axis2_xml_writer_ops_t*)AXIS2_MALLOC((*env)->allocator,
                                     sizeof(axis2_xml_writer_ops_t));
@@ -320,12 +374,12 @@
 
 AXIS2_DECLARE(axis2_xml_writer_t *)
 axis2_xml_writer_create_for_memory(axis2_env_t **env,
-                                   void *buffer,
+                                   char **buffer,
                                    axis2_char_t *encoding, 
                                    int is_prefix_default,
                                    int compression)
 {
-    axis2_libxml2_writer_wrapper_impl_t *writer_impl;
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
     AXIS2_ENV_CHECK(env, NULL);
     
     writer_impl = (axis2_libxml2_writer_wrapper_impl_t *)AXIS2_MALLOC((*env)->allocator,
@@ -333,25 +387,75 @@
     if(!writer_impl)
         AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, NULL);
     
+    writer_impl->writer.ops = NULL;
+    writer_impl->encoding = NULL;
+    writer_impl->buffer = NULL;
+    writer_impl->qname_array.prefix = NULL;
+    writer_impl->qname_array.uri = NULL;
+    writer_impl->writer_type = AXIS2_LIBXML2_WRITER_MEMORY;
+    writer_impl->output_buffer = buffer;
+    
+    
+    writer_impl->buffer = xmlBufferCreate();
+    if(writer_impl->buffer == NULL)
+    {
+        axis2_libxml2_writer_wrapper_free(&(writer_impl->writer), env);
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, NULL);
+        return NULL;
+    }
+    
+    writer_impl->xml_writer = xmlNewTextWriterMemory(writer_impl->buffer, 0);
+    if(writer_impl->xml_writer == NULL)
+    {
+        axis2_libxml2_writer_wrapper_free(&(writer_impl->writer), env);
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_CREATING_XML_STREAM_WRITER , NULL);
+        return NULL;
+    }
+
+     if(encoding)
+        writer_impl->encoding = AXIS2_STRDUP(encoding , env);
+    else
+        writer_impl->encoding = AXIS2_STRDUP(ENCODING, env);
+     
+    /********** allocate qname array 10 default size ******************************/
+    writer_impl->qname_array.prefix = AXIS2_MALLOC((*env)->allocator,
+                                        sizeof(axis2_char_t*)*10);
+    writer_impl->qname_array.uri = AXIS2_MALLOC((*env)->allocator,
+                                        sizeof(axis2_char_t*)*10);                                        
+    if(!(writer_impl->qname_array.uri) || !(writer_impl->qname_array.prefix))
+    {
+        axis2_libxml2_writer_wrapper_free(&(writer_impl->writer), env);
+    
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, NULL);
+        return NULL;
+    }                                       
+    
+    writer_impl->qname_array.allocated = 10;
+    writer_impl->qname_array.current_no = 0;
+    /*************************************************************************/  
+    
+    writer_impl->compression = compression;
     
     
-    writer_impl->writer.ops = NULL;
     writer_impl->writer.ops = (axis2_xml_writer_ops_t*)AXIS2_MALLOC((*env)->allocator,
                                     sizeof(axis2_xml_writer_ops_t));
     if(!(writer_impl->writer.ops))
     {
-        AXIS2_FREE((*env)->allocator,writer_impl);
+        axis2_libxml2_writer_wrapper_free(&(writer_impl->writer), env);
         AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, NULL);
     }
+    
     /* operations */
     writer_impl->writer.ops->free = axis2_libxml2_writer_wrapper_free;
-    writer_impl->writer.ops->write_start_element = axis2_libxml2_writer_wrapper_write_start_element;
+    writer_impl->writer.ops->write_start_element = 
+            axis2_libxml2_writer_wrapper_write_start_element;
     writer_impl->writer.ops->write_start_element_with_namespace =
             axis2_libxml2_writer_wrapper_write_start_element_with_namespace;
     writer_impl->writer.ops->write_start_element_with_namespace_prefix = 
             axis2_libxml2_writer_wrapper_write_start_element_with_namespace_prefix;
     
-    writer_impl->writer.ops->write_empty_element = axis2_libxml2_writer_wrapper_write_empty_element;
+    writer_impl->writer.ops->write_empty_element =
+            axis2_libxml2_writer_wrapper_write_empty_element;
     writer_impl->writer.ops->write_empty_element_with_namespace  =
             axis2_libxml2_writer_wrapper_write_empty_element_with_namespace;
     writer_impl->writer.ops->write_empty_element_with_namespace_prefix =
@@ -407,11 +511,45 @@
 axis2_libxml2_writer_wrapper_free(axis2_xml_writer_t *writer,
                                   axis2_env_t **env)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
-  
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+
+    if(writer_impl->xml_writer)
+    {
+        xmlFreeTextWriter(writer_impl->xml_writer);
+        writer_impl->xml_writer = NULL;
+    }
+   
+    if(writer_impl->writer_type == AXIS2_LIBXML2_WRITER_MEMORY)
+    {
+      *(writer_impl->output_buffer) = AXIS2_MALLOC((*env)->allocator,     
+            sizeof(axis2_char_t)*(strlen((const axis2_char_t*)writer_impl->buffer->content)+1));
+        sprintf(*(writer_impl->output_buffer),(const axis2_char_t*)writer_impl->buffer->content);
+        xmlBufferFree(writer_impl->buffer);
+        writer_impl->buffer = NULL;
+    }
+           
+    if(writer_impl->encoding)
+    {
+        AXIS2_FREE((*env)->allocator, writer_impl->encoding);
+        writer_impl->encoding = NULL;
+    }
+    if(writer_impl->qname_array.current_no >0)
+        axis2_libxml2_writer_wrapper_reset(writer, env);
+    
+    AXIS2_FREE((*env)->allocator, writer_impl->qname_array.prefix);
+    AXIS2_FREE((*env)->allocator, writer_impl->qname_array.uri);
+    writer_impl->qname_array.prefix = NULL;
+    writer_impl->qname_array.prefix = NULL;
+    
     if(writer->ops)
+    {
         AXIS2_FREE((*env)->allocator, writer->ops);
-    AXIS2_FREE((*env)->allocator, AXIS2_INTF_TO_IMPL(writer));
+        writer->ops = NULL;
+    }
+    AXIS2_FREE((*env)->allocator, writer_impl);
+    writer_impl = NULL;
     return AXIS2_SUCCESS;
 }
         
@@ -421,18 +559,34 @@
                                     axis2_env_t **env,
                                     axis2_char_t *localname)
 {
-    int status = AXIS2_SUCCESS;
+    int status = 0;
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, localname, AXIS2_FAILURE);
-    return status;
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    
+    axis2_libxml2_writer_wrapper_reset(writer, env);
+    
+    status =  xmlTextWriterStartElement(writer_impl->xml_writer,(xmlChar *)localname);
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_WRITING_START_ELEMENT, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    return AXIS2_SUCCESS;
 }
 
 axis2_status_t AXIS2_CALL
 axis2_libxml2_writer_wrapper_end_start_element(axis2_xml_writer_t *writer,
                                                axis2_env_t **env)
 {
+    axis2_libxml2_writer_wrapper_impl_t *wrapper_impl = NULL;
+    int status = 0;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
-   }
+    /* nothing to do , 
+       it is automatically taken care by the libxml2 writer */
+    return AXIS2_SUCCESS;
+}
         
 axis2_status_t AXIS2_CALL
 axis2_libxml2_writer_wrapper_write_start_element_with_namespace(
@@ -441,10 +595,29 @@
                                         axis2_char_t *localname,
                                         axis2_char_t *namespace_uri)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
+    int exists = AXIS2_FALSE;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, localname, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error,namespace_uri, AXIS2_FAILURE);
-   }
+    
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    axis2_libxml2_writer_wrapper_reset(writer, env);
+
+    axis2_libxml2_writer_wrapper_validate_namespace(writer, env, namespace_uri, NULL); 
+
+    status = xmlTextWriterStartElementNS(writer_impl->xml_writer
+                , NULL, BAD_CAST localname, BAD_CAST namespace_uri);
+    
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error,
+            AXIS2_ERROR_WRITING_START_ELEMENT_WITH_NAMESPACE, AXIS2_FAILURE);
+        return AXIS2_FAILURE;            
+    }   
+    return AXIS2_SUCCESS;    
+}
         
 axis2_status_t AXIS2_CALL
 axis2_libxml2_writer_wrapper_write_start_element_with_namespace_prefix(
@@ -454,11 +627,29 @@
                                         axis2_char_t *namespace_uri,
                                         axis2_char_t *prefix)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
+    int exists = AXIS2_FALSE;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, localname,  AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, namespace_uri, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, prefix, AXIS2_FAILURE);
-       
+    
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    axis2_libxml2_writer_wrapper_reset(writer, env);
+   /* axis2_libxml2_writer_wrapper_validate_namespace(writer, env, namespace_uri, prefix);
+    */
+    status = xmlTextWriterStartElementNS(writer_impl->xml_writer,
+                                        BAD_CAST prefix,
+                                        BAD_CAST localname, 
+                                        BAD_CAST NULL);
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error,
+            AXIS2_ERROR_WRITING_START_ELEMENT_WITH_NAMESPACE_PREFIX, AXIS2_FAILURE);
+        return AXIS2_FAILURE;            
+    }                                        
+    return AXIS2_SUCCESS;       
 }
                                     
 axis2_status_t AXIS2_CALL
@@ -467,10 +658,27 @@
                                         axis2_env_t **env,
                                         axis2_char_t *localname)
 {
+    int status = 0;
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, localname, AXIS2_FAILURE);
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
     
-    
+    axis2_libxml2_writer_wrapper_reset(writer, env);
+       
+    status =  xmlTextWriterStartElement(writer_impl->xml_writer,(xmlChar *)localname);
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_WRITING_EMPTY_ELEMENT, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    status =  xmlTextWriterEndElement(writer_impl->xml_writer);
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_WRITING_EMPTY_ELEMENT, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    return AXIS2_SUCCESS;
 }
         
 axis2_status_t AXIS2_CALL
@@ -480,10 +688,35 @@
                                         axis2_char_t *localname,
                                         axis2_char_t *namespace_uri)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, localname, AXIS2_FAILURE);
-    AXIS2_PARAM_CHECK((*env)->error, namespace_uri, AXIS2_FAILURE);
-   }
+    AXIS2_PARAM_CHECK((*env)->error,namespace_uri, AXIS2_FAILURE);
+    
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    axis2_libxml2_writer_wrapper_reset(writer, env);
+    axis2_libxml2_writer_wrapper_validate_namespace(writer, env, namespace_uri, NULL);
+    
+    status = xmlTextWriterStartElementNS(writer_impl->xml_writer
+                , NULL, BAD_CAST localname, BAD_CAST namespace_uri);
+
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error,
+            AXIS2_ERROR_WRITING_EMPTY_ELEMENT_WITH_NAMESPACE, AXIS2_FAILURE);
+        return AXIS2_FAILURE;            
+    }
+    status =  xmlTextWriterEndElement(writer_impl->xml_writer);
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error,
+            AXIS2_ERROR_WRITING_EMPTY_ELEMENT_WITH_NAMESPACE, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+      
+    return AXIS2_SUCCESS;    
+}
 
 axis2_status_t AXIS2_CALL
 axis2_libxml2_writer_wrapper_write_empty_element_with_namespace_prefix(
@@ -493,26 +726,78 @@
                                         axis2_char_t *namespace_uri,
                                         axis2_char_t *prefix)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
-    AXIS2_PARAM_CHECK((*env)->error, localname, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, localname,  AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, namespace_uri, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, prefix, AXIS2_FAILURE);
     
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    axis2_libxml2_writer_wrapper_reset(writer, env);
+    axis2_libxml2_writer_wrapper_validate_namespace(writer, env, namespace_uri, prefix);
+    
+    status = xmlTextWriterStartElementNS(writer_impl->xml_writer,
+                                        BAD_CAST prefix,
+                                        BAD_CAST localname, 
+                                        BAD_CAST namespace_uri);
+                                        
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error,
+            AXIS2_ERROR_WRITING_START_ELEMENT_WITH_NAMESPACE_PREFIX, AXIS2_FAILURE);
+        return AXIS2_FAILURE;            
+    }                                        
+    status =  xmlTextWriterEndElement(writer_impl->xml_writer);
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error,
+            AXIS2_ERROR_WRITING_EMPTY_ELEMENT_WITH_NAMESPACE_PREFIX, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    return AXIS2_SUCCESS;
 }
 
 axis2_status_t AXIS2_CALL
 axis2_libxml2_writer_wrapper_write_end_element(axis2_xml_writer_t *writer,
                                                axis2_env_t **env)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
+    
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
+    
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    status = xmlTextWriterFullEndElement(writer_impl->xml_writer);
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error,
+                     AXIS2_ERROR_WRITING_END_ELEMENT,
+                     AXIS2_FAILURE);
+    return AXIS2_FAILURE;
+    }
+    return AXIS2_SUCCESS;    
 }
 
 axis2_status_t AXIS2_CALL
 axis2_libxml2_writer_wrapper_write_end_document(axis2_xml_writer_t *writer,
                                                axis2_env_t **env)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
   
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    status =  xmlTextWriterEndDocument(writer_impl->xml_writer);
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error,
+                        AXIS2_ERROR_WRITING_END_DOCUMENT,
+                        AXIS2_FAILURE);
+                        
+        return AXIS2_FAILURE;    
+    }
+    return AXIS2_SUCCESS;    
 }
 
 axis2_status_t AXIS2_CALL
@@ -521,9 +806,23 @@
                                            axis2_char_t *localname,
                                            axis2_char_t *value)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, localname, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, value, AXIS2_FAILURE);
+    
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    status = xmlTextWriterWriteAttribute(writer_impl->xml_writer,
+                      BAD_CAST localname, BAD_CAST value);
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error,
+                        AXIS2_ERROR_WRITING_ATTRIBUTE,  AXIS2_FAILURE);
+                        
+        return AXIS2_FAILURE;    
+    }
+    return AXIS2_SUCCESS;                     
 }
                                                
 axis2_status_t AXIS2_CALL
@@ -533,12 +832,35 @@
                                           axis2_char_t *localname,
                                           axis2_char_t *value,
                                           axis2_char_t *namespace_uri)
-{
+{   
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
+    axis2_bool_t exists = AXIS2_FALSE;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, localname,  AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, value, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, namespace_uri, AXIS2_FAILURE);
     
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    
+    exists = axis2_libxml2_writer_wrapper_validate_namespace(writer, env, namespace_uri, NULL);
+    if(exists == AXIS2_TRUE)
+        status = xmlTextWriterWriteAttributeNS(writer_impl->xml_writer,
+                        NULL, BAD_CAST localname, BAD_CAST NULL,
+                        BAD_CAST value);
+    else                   
+        status = xmlTextWriterWriteAttributeNS(writer_impl->xml_writer,
+                        NULL, BAD_CAST localname, BAD_CAST namespace_uri,
+                        BAD_CAST value);
+                    
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error,
+             AXIS2_ERROR_WRITING_ATTRIBUTE_WITH_NAMESPACE,  AXIS2_FAILURE);
+                        
+        return AXIS2_FAILURE;    
+    }
+    return AXIS2_SUCCESS;                   
 }
                                           
 axis2_status_t AXIS2_CALL
@@ -550,33 +872,118 @@
                                           axis2_char_t *namespace_uri,
                                           axis2_char_t *prefix)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
+    int exists = AXIS2_FALSE;
+    
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
-    AXIS2_PARAM_CHECK((*env)->error, localname, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, localname,  AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, value, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, namespace_uri, AXIS2_FAILURE);
-    AXIS2_PARAM_CHECK((*env)->error, prefix , AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, prefix, AXIS2_FAILURE);
+        
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    
+    exists = axis2_libxml2_writer_wrapper_validate_namespace(writer, env, namespace_uri, prefix);
+    if(exists == AXIS2_TRUE)
+            status = xmlTextWriterWriteAttributeNS(writer_impl->xml_writer,
+                    BAD_CAST prefix , BAD_CAST localname, 
+                        BAD_CAST NULL , BAD_CAST value);
+    else                        
+        status = xmlTextWriterWriteAttributeNS(writer_impl->xml_writer,
+                    BAD_CAST prefix , BAD_CAST localname, 
+                        BAD_CAST namespace_uri , BAD_CAST value);
+                    
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error,
+             AXIS2_ERROR_WRITING_ATTRIBUTE_WITH_NAMESPACE_PREFIX,  AXIS2_FAILURE);
+                        
+        return AXIS2_FAILURE;    
+    }
+    return AXIS2_SUCCESS;                   
 }
-                                          
+
+/** need to work on this */                                         
 axis2_status_t AXIS2_CALL
 axis2_libxml2_writer_wrapper_write_namespace(axis2_xml_writer_t *writer,
                                              axis2_env_t **env,
                                              axis2_char_t *prefix,
                                              axis2_char_t *namespace_uri)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
+    int exists = AXIS2_FALSE;
+    char *xmlnsprefix = NULL;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, namespace_uri, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, prefix , AXIS2_FAILURE);
-}
+    
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    exists = axis2_libxml2_writer_wrapper_validate_namespace(writer, env, 
+                                namespace_uri, prefix);
 
+    if(exists == AXIS2_TRUE)
+        return AXIS2_SUCCESS;                                
+    
+    xmlnsprefix = (axis2_char_t*)AXIS2_MALLOC((*env)->allocator,
+                    (sizeof(char)* (strlen(prefix) +7)));
+    sprintf(xmlnsprefix,"xmlns:%s",prefix);
+    
+    
+    status = xmlTextWriterWriteAttribute(writer_impl->xml_writer,
+                   BAD_CAST xmlnsprefix, BAD_CAST namespace_uri);
+    AXIS2_FREE((*env)->allocator, xmlnsprefix);
+    xmlnsprefix = NULL;
+                       
+    
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error,
+             AXIS2_ERROR_WRITING_ATTRIBUTE_WITH_NAMESPACE_PREFIX,  AXIS2_FAILURE);
+                        
+        return AXIS2_FAILURE;    
+    }
+    
+    AXIS2_FREE((*env)->allocator, xmlnsprefix);
+    xmlnsprefix = NULL;
+    return AXIS2_SUCCESS;   
+}
 
+/** should be implemented */
 axis2_status_t AXIS2_CALL
 axis2_libxml2_writer_wrapper_write_default_namespace
                                             (axis2_xml_writer_t *writer,
                                              axis2_env_t **env,
                                              axis2_char_t *namespace_uri)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
+    int exists = AXIS2_FALSE;
+    axis2_char_t *xmlns = NULL;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
-    AXIS2_PARAM_CHECK((*env)->error, namespace_uri, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, namespace_uri, AXIS2_FAILURE)
+    
+    exists = axis2_libxml2_writer_wrapper_validate_namespace(writer, env, namespace_uri, NULL);
+    if(exists == AXIS2_TRUE)
+    {
+        /* namespace already declared , nothing to do */
+        return AXIS2_SUCCESS;
+    }
+    
+    xmlns = AXIS2_MALLOC((*env)->allocator, 
+            sizeof(axis2_char_t)*(strlen("xmlns")+1));
+    sprintf(xmlns,"xmlns");
+    
+    status = xmlTextWriterWriteAttribute(writer_impl->xml_writer,
+                   NULL , BAD_CAST namespace_uri);
+                   
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_WRITING_DEFAULT_NAMESPACE, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }                   
+    return AXIS2_SUCCESS;
 }
 
 axis2_status_t AXIS2_CALL
@@ -584,8 +991,21 @@
                                            axis2_env_t **env,
                                            axis2_char_t *value)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, value, AXIS2_FAILURE);
+    
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    status = xmlTextWriterWriteComment(writer_impl->xml_writer,BAD_CAST value);
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error,
+             AXIS2_ERROR_WRITING_COMMENT,  AXIS2_FAILURE);
+                        
+        return AXIS2_FAILURE;    
+    }
+    return AXIS2_SUCCESS;    
 }
 
                                            
@@ -595,8 +1015,20 @@
                                            axis2_env_t **env,
                                            axis2_char_t *target)
 {   
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, target, AXIS2_FAILURE);
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    
+    status = xmlTextWriterStartPI(writer_impl->xml_writer, BAD_CAST target);
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error,
+            AXIS2_ERROR_WRITING_PROCESSING_INSTRUCTION, AXIS2_FAILURE);
+        return AXIS2_FAILURE;            
+    }
+    return AXIS2_SUCCESS;    
 }    
                                            
 axis2_status_t AXIS2_CALL
@@ -606,9 +1038,23 @@
                                            axis2_char_t *target,
                                            axis2_char_t *data)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, target, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, data, AXIS2_FAILURE);
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    
+    status = xmlTextWriterWritePI(writer_impl->xml_writer,
+                                  BAD_CAST target,
+                                  BAD_CAST data);
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error,
+            AXIS2_ERROR_WRITING_PROCESSING_INSTRUCTION, AXIS2_FAILURE);
+        return AXIS2_FAILURE;            
+    }
+    return AXIS2_SUCCESS; 
 }
                                            
 axis2_status_t AXIS2_CALL
@@ -616,8 +1062,20 @@
                                          axis2_env_t **env,
                                          axis2_char_t *data)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, data, AXIS2_FAILURE);
+    
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    
+    status = xmlTextWriterWriteCDATA(writer_impl->xml_writer, BAD_CAST data);
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_WTRING_CDATA, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    return AXIS2_SUCCESS;    
 }    
 
 axis2_status_t AXIS2_CALL
@@ -625,8 +1083,19 @@
                                          axis2_env_t **env,
                                          axis2_char_t *dtd)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, dtd, AXIS2_FAILURE);
+    
+    status = xmlTextWriterStartDTD(writer_impl->xml_writer,
+                    BAD_CAST dtd, NULL, NULL);
+    if(status < 0)
+    {
+        AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_WRITING_DTD, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    return AXIS2_SUCCESS;
 }
 
 axis2_status_t AXIS2_CALL
@@ -635,8 +1104,11 @@
                                          axis2_env_t **env,
                                          axis2_char_t *name)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, name, AXIS2_FAILURE);
+    printf("not implemented ");
+    return AXIS2_FAILURE;
 }    
 
 axis2_status_t AXIS2_CALL
@@ -644,7 +1116,19 @@
                                          axis2_xml_writer_t *writer,
                                          axis2_env_t **env)
 {
-     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
+    axis2_libxml2_writer_wrapper_impl_t *wrapper_impl = NULL;
+    int status = 0;
+    AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
+    
+    wrapper_impl = AXIS2_INTF_TO_IMPL(writer);
+    status = xmlTextWriterStartDocument(wrapper_impl->xml_writer,
+                             NULL, NULL, NULL);
+    if(status < 0)
+    {   AXIS2_ERROR_SET((*env)->error,
+            AXIS2_ERROR_WRITING_START_DOCUMENT,AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    return AXIS2_SUCCESS;        
 }    
 
 axis2_status_t AXIS2_CALL
@@ -652,9 +1136,21 @@
                                          axis2_xml_writer_t *writer,
                                          axis2_env_t **env,
                                          axis2_char_t *version)
-{
+{   
+    axis2_libxml2_writer_wrapper_impl_t *wrapper_impl = NULL;
+    int status = 0;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
-    AXIS2_PARAM_CHECK((*env)->error, version, AXIS2_FAILURE); 
+    AXIS2_PARAM_CHECK((*env)->error, version, AXIS2_FAILURE);
+    
+    wrapper_impl = AXIS2_INTF_TO_IMPL(writer);
+    status = xmlTextWriterStartDocument(wrapper_impl->xml_writer,
+                             BAD_CAST version , NULL, NULL);
+    if(status < 0)
+    {   AXIS2_ERROR_SET((*env)->error,
+            AXIS2_ERROR_WRITING_START_DOCUMENT, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    return AXIS2_SUCCESS;
 }    
 
 axis2_status_t AXIS2_CALL
@@ -664,10 +1160,21 @@
                                          axis2_char_t *encoding,
                                          axis2_char_t *version)
 {
+    axis2_libxml2_writer_wrapper_impl_t *wrapper_impl = NULL;
+    int status = 0;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
-    AXIS2_PARAM_CHECK((*env)->error, encoding, AXIS2_FAILURE); 
-    AXIS2_PARAM_CHECK((*env)->error, version, AXIS2_FAILURE); 
+    AXIS2_PARAM_CHECK((*env)->error, version, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK((*env)->error, encoding, AXIS2_FAILURE);
     
+    wrapper_impl = AXIS2_INTF_TO_IMPL(writer);
+    status = xmlTextWriterStartDocument(wrapper_impl->xml_writer,
+                             BAD_CAST version , encoding , NULL);
+    if(status < 0)
+    {   AXIS2_ERROR_SET((*env)->error,
+            AXIS2_ERROR_WRITING_START_DOCUMENT, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    return AXIS2_SUCCESS;
 }
 
                                          
@@ -677,8 +1184,22 @@
                                          axis2_env_t **env,
                                          axis2_char_t *text)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
+    
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, text, AXIS2_FAILURE); 
+    
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    
+    status = xmlTextWriterWriteString(writer_impl->xml_writer,
+                                      BAD_CAST text);
+    if(status < 0)
+    {   AXIS2_ERROR_SET((*env)->error,
+            AXIS2_ERROR_WRITING_START_DOCUMENT, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }
+    return AXIS2_SUCCESS;
 }    
 
 axis2_char_t* AXIS2_CALL
@@ -686,8 +1207,13 @@
                                          axis2_env_t **env,
                                          axis2_char_t *uri)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
     AXIS2_FUNC_PARAM_CHECK(writer, env, NULL);
     AXIS2_PARAM_CHECK((*env)->error, uri, NULL);
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    printf("not implemented ");
+    return NULL;    
 }
 
 axis2_status_t AXIS2_CALL 
@@ -695,10 +1221,16 @@
                                          axis2_env_t **env,
                                          axis2_char_t *prefix,
                                          axis2_char_t *uri)
-{
+{   
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, prefix, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, uri, AXIS2_FAILURE);
+    
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    printf(" not implemented ");
+    return AXIS2_FAILURE;
 }
 axis2_status_t AXIS2_CALL
 axis2_libxml2_writer_wrapper_set_default_prefix(
@@ -706,8 +1238,13 @@
                                          axis2_env_t **env,
                                          axis2_char_t *uri)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, uri, AXIS2_FAILURE);
+    
+    printf(" not implemented ");
+    return AXIS2_FAILURE;
 }    
 
 axis2_status_t AXIS2_CALL
@@ -717,6 +1254,105 @@
                                          axis2_char_t *text,
                                          int in_attr)
 {
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int status = 0;
     AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK((*env)->error, text, AXIS2_FAILURE);
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    printf(" not implemented ");
+    return AXIS2_FAILURE;    
 }
+
+
+static axis2_status_t 
+axis2_libxml2_writer_wrapper_validate_namespace(axis2_xml_writer_t *writer,
+                                         axis2_env_t **env,
+                                         axis2_char_t *ns_uri,
+                                         axis2_char_t *prefix)
+{
+    int i = 0;
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    
+    AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    if(!prefix && !ns_uri)
+        return AXIS2_FAILURE;
+    
+    /* default namespace handling */
+    if(!prefix && ns_uri)
+    {
+        for(i =0; i < writer_impl->qname_array.current_no; i++)
+        {
+            if(AXIS2_STRCMP(writer_impl->qname_array.uri[i], ns_uri) == 0)
+            {
+                return AXIS2_TRUE;
+            }        
+        }
+        if(writer_impl->qname_array.current_no == writer_impl->qname_array.allocated)
+        {
+           writer_impl->qname_array.prefix = AXIS2_REALLOC((*env)->allocator,
+                                                writer_impl->qname_array.prefix,
+                                                sizeof(axis2_char_t *)*10);
+           writer_impl->qname_array.uri = AXIS2_REALLOC((*env)->allocator,
+                                                writer_impl->qname_array.prefix,
+                                                sizeof(axis2_char_t *)*10);
+           writer_impl->qname_array.allocated += 10;
+            
+        }
+        writer_impl->qname_array.prefix[writer_impl->qname_array.current_no] = 
+                AXIS2_STRDUP("",env);
+        writer_impl->qname_array.uri[writer_impl->qname_array.current_no] =
+                AXIS2_STRDUP(ns_uri, env);
+        writer_impl->qname_array.current_no++;                
+        return AXIS2_FALSE;
+    }
+  
+    for(i =0; i < writer_impl->qname_array.current_no; i++)
+    {
+        if(AXIS2_STRCMP(writer_impl->qname_array.prefix[i], prefix) == 0)
+        {
+            return AXIS2_TRUE;
+        }        
+    }
+    if(writer_impl->qname_array.current_no == writer_impl->qname_array.allocated)
+    {
+        writer_impl->qname_array.prefix = AXIS2_REALLOC((*env)->allocator,
+                                            writer_impl->qname_array.prefix,
+                                            sizeof(axis2_char_t *)*10);
+        writer_impl->qname_array.uri = AXIS2_REALLOC((*env)->allocator,
+                                            writer_impl->qname_array.prefix,
+                                            sizeof(axis2_char_t *)*10);
+        writer_impl->qname_array.allocated += 10;
+        
+    }
+    writer_impl->qname_array.prefix[writer_impl->qname_array.current_no] = 
+            AXIS2_STRDUP(prefix ,env);
+    writer_impl->qname_array.uri[writer_impl->qname_array.current_no] =
+            AXIS2_STRDUP(ns_uri, env);
+    writer_impl->qname_array.current_no++;                
+return AXIS2_FALSE;
+
+}
+
+static axis2_status_t 
+axis2_libxml2_writer_wrapper_reset(axis2_xml_writer_t *writer,
+                                   axis2_env_t **env)
+{
+    axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL;
+    int i = 0;
+    
+    AXIS2_FUNC_PARAM_CHECK(writer, env, AXIS2_FAILURE);
+    
+    writer_impl = AXIS2_INTF_TO_IMPL(writer);
+    
+        for( i = 0; i < writer_impl->qname_array.current_no; i++)
+        {
+            AXIS2_FREE((*env)->allocator, writer_impl->qname_array.prefix[i]);
+            AXIS2_FREE((*env)->allocator, writer_impl->qname_array.uri[i]);
+            writer_impl->qname_array.prefix[i] = NULL;
+            writer_impl->qname_array.uri[i] = NULL;
+        }
+        
+        writer_impl->qname_array.current_no = 0;    
+    return AXIS2_SUCCESS;
+}                                     
\ No newline at end of file

Modified: webservices/axis2/trunk/c/modules/xml/parser/libxml2/test/libxml_test.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/parser/libxml2/test/libxml_test.c?rev=349375&r1=349374&r2=349375&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/parser/libxml2/test/libxml_test.c (original)
+++ webservices/axis2/trunk/c/modules/xml/parser/libxml2/test/libxml_test.c Sun Nov 27 21:24:31 2005
@@ -31,7 +31,10 @@
     stream = axis2_stream_create(allocator, NULL);
     env       = axis2_env_create_with_error_stream_log(allocator, error, stream, log);
     parser = axis2_pull_parser_create_for_file(&env,filename,NULL);
-    
+    if(!parser)
+    {   printf("error creatin parser ");
+        return;
+    }
     printf("running test\n\n\n");
         
     do{