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{