You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by sa...@apache.org on 2005/10/20 04:39:12 UTC
svn commit: r326779 - in /webservices/axis2/trunk/c: include/
modules/xml/guththila/src/ modules/xml/om/src/
Author: samisa
Date: Wed Oct 19 19:38:56 2005
New Revision: 326779
URL: http://svn.apache.org/viewcvs?rev=326779&view=rev
Log:
Fixes to stax_builder to work with envioronment
Modified:
webservices/axis2/trunk/c/include/axis2_error.h
webservices/axis2/trunk/c/include/axis2_om_element.h
webservices/axis2/trunk/c/include/axis2_om_stax_builder.h
webservices/axis2/trunk/c/modules/xml/guththila/src/guththila_xml_pull_parser.h
webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_document.c
webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_element.c
webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_stax_builder.c
Modified: webservices/axis2/trunk/c/include/axis2_error.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/include/axis2_error.h?rev=326779&r1=326778&r2=326779&view=diff
==============================================================================
--- webservices/axis2/trunk/c/include/axis2_error.h (original)
+++ webservices/axis2/trunk/c/include/axis2_error.h Wed Oct 19 19:38:56 2005
@@ -51,8 +51,12 @@
AXIS2_ERROR_INVALID_NULL_PARAMETER,
AXIS2_ERROR_INVALID_ITERATOR_STATE,
AXIS2_ERROR_INVALID_NODE_TYPE,
+ AXIS2_ERROR_PULL_PARSER_ELEMENT_NULL,
+ AXIS2_ERROR_PULL_PARSER_VALUE_NULL,
+ AXIS2_ERROR_BUILDER_DONE_CANNOT_PULL,
+ AXIS2_ERROR_INVALID_BUILDER_STATE_LAST_NODE_NULL,
+ AXIS2_ERROR_INVALID_BUILDER_STATE_CANNOT_DISCARD,
AXIS2_ERROR_UNALLOCATED_MEMEORY_RELEASE_REQUESTED
-
} axis2_error_codes_t;
#ifdef __cplusplus
Modified: webservices/axis2/trunk/c/include/axis2_om_element.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/include/axis2_om_element.h?rev=326779&r1=326778&r2=326779&view=diff
==============================================================================
--- webservices/axis2/trunk/c/include/axis2_om_element.h (original)
+++ webservices/axis2/trunk/c/include/axis2_om_element.h Wed Oct 19 19:38:56 2005
@@ -68,7 +68,7 @@
* @return status code
*/
- axis2_status_t (*axis2_om_element_ops_declare_namespace)(axis2_environment_t *environment, struct axis2_om_element *element, axis2_om_namespace_t *ns);
+ axis2_status_t (*axis2_om_element_ops_declare_namespace)(axis2_environment_t *environment, axis2_om_node_t *node, axis2_om_namespace_t *ns);
/**
* find namespaces in the scope of current element
@@ -178,8 +178,8 @@
axis2_om_element_t *axis2_om_element_create_with_qname(axis2_environment_t *environment, axis2_om_node_t *parent,axis2_qname_t *qname
,axis2_om_node_t **node);
-#define axis2_om_element_find_namespace(environment, node, uri, prefix) ((node->data_element)->ops->axis2_om_element_ops_find_namespace(environment, node, uri, prefix))
-#define axis2_om_element_declare_namespace(environment, element, ns) ((element)->ops->axis2_om_element_ops_declare_namespace(environment, element, ns) )
+#define axis2_om_element_find_namespace(environment, node, uri, prefix) (((axis2_om_element_t*)(node->data_element))->ops->axis2_om_element_ops_find_namespace(environment, node, uri, prefix))
+#define axis2_om_element_declare_namespace(environment, node, ns) (((axis2_om_element_t*)(node->data_element))->ops->axis2_om_element_ops_declare_namespace(environment, node, ns) )
#define axis2_om_element_find_namespace_with_qname (environment, element, qname) ((element)->ops->axis2_om_element_ops_find_namespace_with_qname (environment, element, qname))
#define axis2_om_element_add_attribute(environment, element, attribute) ((element)->ops->axis2_om_element_ops_add_attribute(environment, element, attribute))
#define axis2_om_element_get_attribute(environment, element, qname) ((element)->ops->axis2_om_element_ops_get_attribute(environment, element, qname))
Modified: webservices/axis2/trunk/c/include/axis2_om_stax_builder.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/include/axis2_om_stax_builder.h?rev=326779&r1=326778&r2=326779&view=diff
==============================================================================
--- webservices/axis2/trunk/c/include/axis2_om_stax_builder.h (original)
+++ webservices/axis2/trunk/c/include/axis2_om_stax_builder.h Wed Oct 19 19:38:56 2005
@@ -22,107 +22,48 @@
* @brief om model stax builder
*/
-#include <guththila_xml_pull_parser.h>
#include <axis2_om_node.h>
#include <axis2_om_document.h>
+#include <axis2_environment.h>
-struct axis2_om_stax_builder
-{
- guththila_xml_pull_parser_t *parser;
- axis2_om_node_t *lastnode;
- axis2_om_document_t *document;
- int done;
- int parser_accessed;
- int cache;
- /*apr_array_header_t *element_stack;*/
-};
-
-/**
- * create an stax_om_builder
- * @param parser This is the XMLStreamReader of xmlparser
- * [ Guththila ]
- */
-
-axis2_om_stax_builder_t *axis2_om_stax_builder_create(guththila_xml_pull_parser_t *parser);
-
-/**
- * Create an om element and adds to the document
- * @param builder pointer to the builder
- * @param returns a pointer to axis2_om_node_t containing the element or NULL if there
- * isn't enough memory
- */
-
-axis2_om_node_t *axis2_om_stax_builder_create_om_element(
- axis2_om_stax_builder_t *builder);
-
-/**
- * creates an om comment
- * @param builder
- * @returns
- */
-
-axis2_om_node_t *axis2_om_stax_builder_create_om_comment(
- axis2_om_stax_builder_t *builder);
-
-/**
- * create an om doctype
- *
- */
-axis2_om_node_t *axis2_om_stax_builder_create_om_doctype(
- axis2_om_stax_builder_t *builder_t);
-
-/**
- * create om_processing_instruction
- */
+struct axis2_om_stax_builder;
+struct axis2_om_stax_builder_ops;
-axis2_om_node_t *axis2_om_stax_builder_create_om_processing_instruction(
- axis2_om_stax_builder_t *builder);
+typedef struct axis2_om_stax_builder_ops
+{
/**
- * End element processing
- */
-void axis2_om_stax_builder_end_element(axis2_om_stax_builder_t *builder);
-/**
* move parser forward and reacts to events
*/
-int axis2_om_stax_builder_next(axis2_om_stax_builder_t *builder);
-
-/**
- * process attrbites
- *
- */
+axis2_om_node_t *(*axis2_om_stax_builder_ops_next)(axis2_environment_t *environment, axis2_om_stax_builder_t *builder);
-void axis2_om_stax_builder_process_attributes(axis2_om_stax_builder_t *builder,axis2_om_node_t *element_node);
+axis2_status_t (*axis2_om_stax_builder_ops_discard_current_element)(axis2_environment_t *environment, axis2_om_stax_builder_t *builder);
-/**
- * create om text
- *
- */
-axis2_om_node_t *axis2_om_stax_builder_create_om_text(axis2_om_stax_builder_t *builder);
-/**
- * discard building an element
- */
+} axis2_om_stax_builder_ops_t;
-
-void axis2_om_stax_builder_discard(axis2_om_stax_builder_t *builder,axis2_om_node_t *element_node);
+struct axis2_om_stax_builder
+{
+ axis2_om_stax_builder_ops_t *ops;
+ void *parser;
+ axis2_om_node_t *lastnode;
+ axis2_om_document_t *document;
+ axis2_bool_t done;
+ axis2_bool_t parser_accessed;
+ axis2_bool_t cache;
+};
/**
- * process namespaces
- *
+ * create an stax_om_builder
+ * @param parser This is the XMLStreamReader of xmlparser
+ * [ Guththila ]
*/
-axis2_om_node_t *axis2_om_stax_builder_process_namespace_data(axis2_om_stax_builder_t *builder,axis2_om_node_t *element,int is_soap_element);
-
-char *axis2_om_stax_builder_get_attribute_name(axis2_om_stax_builder_t *builder,int i);
-
-char *axis2_om_stax_builder_get_attribute_prefix(axis2_om_stax_builder_t *builder,int i);
-
-void axis2_om_stax_builder_process_start_document(axis2_om_stax_builder_t* builder);
+axis2_om_stax_builder_t *axis2_om_stax_builder_create(axis2_environment_t *environment, void *parser);
-char *axis2_om_stax_builder_get_attribute_namespace(axis2_om_stax_builder_t *builder,int i);
+#define axis2_om_stax_builder_next(environment, builder) ((builder)->ops->axis2_om_stax_builder_ops_next(environment, builder))
+#define axis2_om_stax_builder_discard_current_element(environment, builder) ((builder)->ops->axis2_om_stax_builder_ops_discard_current_element(environment, builder))
-int axis2_om_stax_builder_get_attribute_count(axis2_om_stax_builder_t *builder);
#endif /* AXIS2_OM_STAX_BUILDER_H */
Modified: webservices/axis2/trunk/c/modules/xml/guththila/src/guththila_xml_pull_parser.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/guththila/src/guththila_xml_pull_parser.h?rev=326779&r1=326778&r2=326779&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/guththila/src/guththila_xml_pull_parser.h (original)
+++ webservices/axis2/trunk/c/modules/xml/guththila/src/guththila_xml_pull_parser.h Wed Oct 19 19:38:56 2005
@@ -52,13 +52,13 @@
enum guththila_event_types
{
- GUTHTHILA_START_DOCUMENT = 10,
- GUTHTHILA_START_ELEMENT = 20,
- GUTHTHILA_END_ELEMENT = 30,
- GUTHTHILA_EMPTY_ELEMENT = 40,
- GUTHTHILA_CHARACTER = 50,
- GUTHTHILA_ENTITY_REFERANCE = 60,
- GUTHTHILA_COMMENT = 70
+ GUTHTHILA_START_DOCUMENT = 0,
+ GUTHTHILA_START_ELEMENT,
+ GUTHTHILA_END_ELEMENT,
+ GUTHTHILA_EMPTY_ELEMENT,
+ GUTHTHILA_CHARACTER,
+ GUTHTHILA_ENTITY_REFERANCE,
+ GUTHTHILA_COMMENT
};
enum guththila_event_types guththila_event;
Modified: webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_document.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_document.c?rev=326779&r1=326778&r2=326779&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_document.c (original)
+++ webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_document.c Wed Oct 19 19:38:56 2005
@@ -137,7 +137,7 @@
axis2_status_t axis2_om_document_impl_build_next(axis2_environment_t *environment, axis2_om_document_t *document)
{
- return axis2_om_stax_builder_next(document->builder);
+ return axis2_om_stax_builder_next(environment, document->builder);
}
Modified: webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_element.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_element.c?rev=326779&r1=326778&r2=326779&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_element.c (original)
+++ webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_element.c Wed Oct 19 19:38:56 2005
@@ -23,7 +23,7 @@
axis2_om_element_impl_find_namespace (axis2_environment_t *environment, axis2_om_node_t
*node, const axis2_char_t *uri,
const axis2_char_t *prefix);
-axis2_status_t axis2_om_element_impl_declare_namespace(axis2_environment_t *environment, axis2_om_element_t *element, axis2_om_namespace_t *ns);
+axis2_status_t axis2_om_element_impl_declare_namespace(axis2_environment_t *environment, axis2_om_node_t *node, axis2_om_namespace_t *ns);
axis2_om_namespace_t *
axis2_om_element_impl_find_namespace_with_qname (axis2_environment_t *environment, axis2_om_node_t * element,
axis2_qname_t * qname);
@@ -212,15 +212,26 @@
/* declare a namespace for this om element */
-axis2_status_t axis2_om_element_impl_declare_namespace(axis2_environment_t *environment, axis2_om_element_t *element, axis2_om_namespace_t *ns)
+axis2_status_t axis2_om_element_impl_declare_namespace(axis2_environment_t *environment, axis2_om_node_t *node, axis2_om_namespace_t *ns)
{
-
- if (!element || !ns)
+ axis2_om_namespace_t *declared_ns = NULL;
+ axis2_om_element_t *element = NULL;
+ if (!node || !ns)
{
environment->error->errorno = AXIS2_ERROR_INVALID_NULL_PARAMETER;
return AXIS2_FAILURE;
}
+
+ declared_ns = axis2_om_element_impl_find_namespace (environment, node->parent, declared_ns->uri, declared_ns->prefix);
+ if (declared_ns)
+ {
+ /*Namespace already declared, so return*/
+ return AXIS2_SUCCESS;
+ }
+
+ element = (axis2_om_element_t*)node->data_element;
+
if (!element->namespaces)
{
element->namespaces = axis2_hash_make (environment);
Modified: webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_stax_builder.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_stax_builder.c?rev=326779&r1=326778&r2=326779&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_stax_builder.c (original)
+++ webservices/axis2/trunk/c/modules/xml/om/src/axis2_om_stax_builder.c Wed Oct 19 19:38:56 2005
@@ -15,18 +15,17 @@
*/
#include <axis2_om_stax_builder.h>
-#include <axis2_om_node.h>
-#include <stdlib.h>
-#include <namespace.h>
#include <axis2_om_element.h>
-#include <axis2_errno.h>
-#include <xmlpullparser.h>
#include <axis2_om_text.h>
+#include <guththila_xml_pull_parser.h>
-const char XMLNS_URI[] ="http://www.w3.org/XML/1998/namespace";
-const char XMLNS_PREFIX[]= "xml";
+const axis2_char_t XMLNS_URI[] ="http://www.w3.org/XML/1998/namespace";
+const axis2_char_t XMLNS_PREFIX[]= "xml";
-static int isnot_whitespace(char s[])
+axis2_om_node_t *axis2_om_stax_builder_impl_next(axis2_environment_t *environment, axis2_om_stax_builder_t *builder);
+axis2_status_t axis2_om_stax_builder_impl_discard_current_element(axis2_environment_t *environment, axis2_om_stax_builder_t *builder);
+
+static int isnot_whitespace(axis2_char_t s[])
{
int n=0;
@@ -40,7 +39,7 @@
return n;
}
-static int trim(char s[])
+static int trim(axis2_char_t s[])
{
int n;
for(n = strlen(s)-1;n>=0;n--)
@@ -50,234 +49,157 @@
return n;
}
-axis2_om_stax_builder_t *axis2_om_stax_builder_create(XML_PullParser *parser)
-{
- axis2_om_document_t *document;
- axis2_om_stax_builder_t *builder = (axis2_om_stax_builder_t*)malloc(sizeof(axis2_om_stax_builder_t));
- if(!builder)
- {
- fprintf(stderr," %d Error ",AXIS2_ERROR_OM_MEMORY_ALLOCATION);
- return NULL;
- }
- builder->parser = parser;
- builder->cache = TRUE;
- builder->parser_accessed = FALSE;
- builder->done = FALSE;
- builder->lastnode = NULL;
- builder->document= NULL;
- return builder;
-}
-
-
-axis2_om_node_t *axis2_om_stax_builder_create_om_element(
- axis2_om_stax_builder_t *builder)
-{
- axis2_om_node_t *element_node;
- char *localname = XML_PullParser_getName(builder->parser);
-
- if(!(builder->lastnode))
- { /* */
- axis2_om_element_create(NULL,localname,NULL,&element_node);
- builder->document->root_element = element_node;
-
- //axis2_om_document_add_child(builder->document,element_node);
- }
- else if(builder->lastnode->done)
- { /* */
- axis2_om_element_create(builder->lastnode->parent,localname,NULL,&element_node);
- builder->lastnode->next_sibling = element_node;
- element_node->prev_sibling = builder->lastnode;
- }
- else
- { /* */
- axis2_om_element_create(builder->lastnode,localname,NULL,&element_node);
- builder->lastnode->first_child = element_node;
- element_node->parent = builder->lastnode;
- }
- axis2_om_stax_builder_process_attributes(builder,element_node);
- axis2_om_stax_builder_process_namespace_data(builder,element_node,0);
-
- // process attributes
-
-return element_node;
-}
-
-axis2_om_node_t *axis2_om_stax_builder_create_om_comment(
- axis2_om_stax_builder_t *builder)
-{
-
- /* guththila does not support yet*/
- return NULL;
-}
-
-
-axis2_om_node_t *axis2_om_stax_builder_create_om_doctype(
- axis2_om_stax_builder_t *builder)
-{
- /* guththila does not support yet */
- return NULL;
-}
-
-
-axis2_om_node_t *axis2_om_stax_builder_create_om_processing_instruction(
- axis2_om_stax_builder_t *builder)
-{
- /* guththila does not support yet */
- return NULL;
-}
-
-void axis2_om_stax_builder_end_element(axis2_om_stax_builder_t *builder)
-{
- axis2_om_node_t *parent;
- if(builder->lastnode)
- {
- if(builder->lastnode->done)
- {
- parent = builder->lastnode->parent;
- parent->done = TRUE;
- builder->lastnode = parent;
- }
- else
- {
- builder->lastnode->done = TRUE;
- }
- }
-}
-
-
-int axis2_om_stax_builder_next(axis2_om_stax_builder_t *builder)
+axis2_om_stax_builder_t *axis2_om_stax_builder_create(axis2_environment_t *environment, void *parser)
{
- int token = 0;
+ axis2_om_stax_builder_t *builder = (axis2_om_stax_builder_t*)axis2_malloc(environment->allocator, sizeof(axis2_om_stax_builder_t));
-
- if(builder->done)
- {
- fprintf(stderr,"%d Error",-1);
+ if (!builder)
+ {
+ environment->error->errorno = AXIS2_ERROR_NO_MEMORY;
return NULL;
- }
+ }
- token = XML_PullParser_next (builder->parser);
-
- if(!(builder->cache))
- {
- return token;
- }
-
-
- switch(token)
+ builder->parser = NULL;
+ if (parser)
+ builder->parser = parser;
+ else
{
- case START_DOCUMENT:
- {
+ /* create the default Guththila pull parser */
+ guththila_reader_t *reader = guththila_reader_create (stdin);
- axis2_om_stax_builder_process_start_document(builder);
- }
- break;
-
- case START_ELEMENT:
- {
-
- builder->lastnode = axis2_om_stax_builder_create_om_element(builder);
- }
- break;
- case END_ELEMENT:
- {
- axis2_om_stax_builder_end_element(builder);
- }
- break;
- case CHARACTER:
+ if (!reader)
{
-
- builder->lastnode = axis2_om_stax_builder_create_om_text(builder);
+ environment->error->errorno = AXIS2_ERROR_NO_MEMORY;
+ return NULL;
}
- break;
- case COMMENT:
- {
-
+ builder->parser = guththila_xml_pull_parser_create (reader);
+ if (!builder->parser)
+ {
+ environment->error->errorno = AXIS2_ERROR_NO_MEMORY;
+ return NULL;
}
- break;
-
+ }
- };
+ builder->cache = AXIS2_TRUE;
+ builder->parser_accessed = AXIS2_FALSE;
+ builder->done = AXIS2_FALSE;
+ builder->lastnode = NULL;
+ builder->document= NULL;
+ /* operations */
+ builder->ops = NULL;
+ builder->ops = (axis2_om_stax_builder_ops_t*) axis2_malloc(environment->allocator, sizeof(axis2_om_stax_builder_t));
+
+ if (!builder->ops)
+ {
+ guththila_xml_pull_parser_free(builder->parser);
+ axis2_free(environment->allocator, builder);
+ environment->error->errorno = AXIS2_ERROR_NO_MEMORY;
+ return NULL;
+ }
+
+ builder->ops->axis2_om_stax_builder_ops_next = axis2_om_stax_builder_impl_next;
+ builder->ops->axis2_om_stax_builder_ops_discard_current_element = axis2_om_stax_builder_impl_discard_current_element;
+
+ return builder;
}
-
-void axis2_om_stax_builder_process_attributes(axis2_om_stax_builder_t *builder,axis2_om_node_t *element_node)
+axis2_status_t axis2_om_stax_builder_process_attributes(axis2_environment_t *environment, axis2_om_stax_builder_t *builder, axis2_om_node_t *element_node)
{
- int i=0;
- axis2_om_namespace_t *ns=NULL;
- char *uri=NULL;
- char *prefix=NULL;
+ int i = 0;
+ axis2_om_attribute_t *attribute = NULL;
+ axis2_om_namespace_t *ns = NULL;
+ axis2_char_t *uri = NULL;
+ axis2_char_t *prefix = NULL;
+ axis2_status_t status = AXIS2_SUCCESS;
- int attribute_count = XML_PullParser_getAttributeCount(builder->parser);
- for(i=0 ; i < attribute_count ; i++)
+ int attribute_count = guththila_xml_pull_parser_get_attribute_count(builder->parser);
+ for(i = 0 ; i < attribute_count ; i++)
{
- uri = XML_PullParser_getAttributeNamespace_by_number(builder->parser,i);
- prefix = XML_PullParser_getAttributePrefix_by_number(builder->parser,i);
- //printf("\nAttribute count %d %s %s\n",attribute_count,uri,prefix);
+ uri = guththila_xml_pull_parser_get_attribute_namespace_by_number(builder->parser, i);
+ prefix = guththila_xml_pull_parser_get_attribute_prefix_by_number(builder->parser, i);
if(uri){
- if(strcmp(uri," ") != 0);
+ if(axis2_strcmp(environment->string, uri," ") != 0);
{
- ns = axis2_om_element_find_namespace(element_node,uri,prefix);
+ ns = axis2_om_element_find_namespace(environment, element_node, uri, prefix);
}
}
- if(ns == NULL && prefix && uri && (strcmp(prefix,XMLNS_PREFIX) == 0)
- && (strcmp(uri,XMLNS_URI) == 0))
+ if(ns == NULL && prefix && uri && (axis2_strcmp(environment->string, prefix, XMLNS_PREFIX) == 0)
+ && (axis2_strcmp(environment->string, uri, XMLNS_URI) == 0))
{
- axis2_om_element_declare_namespace_with_ns_uri_prefix(element_node,
- XMLNS_URI,XMLNS_PREFIX);
- ns = axis2_om_element_find_namespace(element_node,uri,prefix);
-
-
+ ns = axis2_om_namespace_create(environment, XMLNS_URI, XMLNS_PREFIX);
+ if (ns)
+ {
+ status = axis2_om_element_declare_namespace(environment, element_node, ns);
+ }
+ else
+ {
+ status = AXIS2_FAILURE;
+ }
+
+ ns = axis2_om_element_find_namespace(environment, element_node, uri, prefix);
}
- axis2_om_element_add_attribute_with_namespace(element_node
- ,XML_PullParser_getAttributeName_by_number(builder->parser,i)
- ,XML_PullParser_getAttributeValue_by_number(builder->parser,i),ns);
-
-
+ attribute = axis2_om_attribute_create(environment, guththila_xml_pull_parser_get_attribute_name_by_number(builder->parser,i),
+ guththila_xml_pull_parser_get_attribute_value_by_number(builder->parser,i), ns);
+ status = axis2_om_element_add_attribute(environment, (axis2_om_element_t*)element_node->data_element, attribute);
+
}
+ return status;
+
}
-axis2_om_node_t *axis2_om_stax_builder_create_om_text(axis2_om_stax_builder_t *builder)
+axis2_om_node_t *axis2_om_stax_builder_create_om_text(axis2_environment_t *environment, axis2_om_stax_builder_t *builder)
{
- char *value;
- axis2_om_node_t *node=NULL;
- //axis2_om_text_t *t,*t1;
- value = XML_PullParser_getValue(builder->parser);
-
+ axis2_char_t *value = NULL;
+ axis2_char_t *temp_value = NULL;
+ axis2_om_node_t *node = NULL;
+ if (!builder->lastnode)
+ {
+ environment->error->errorno = AXIS2_ERROR_INVALID_BUILDER_STATE_LAST_NODE_NULL;
+ return NULL;
+ }
+ temp_value = guththila_xml_pull_parser_get_value(builder->parser);
- if(!value || !(builder->lastnode) )
+ if(!temp_value)
{
- return builder->lastnode;
+ environment->error->errorno = AXIS2_ERROR_PULL_PARSER_VALUE_NULL;
+ return NULL;
}
-
+ else
+ {
+ value = axis2_strdup(environment->string, temp_value);
+ axis2_free(environment->allocator, temp_value); /*should use guththila free here*/
+ }
+ /* Parser should fire a SPACE event here
if(!isnot_whitespace(value))
- return builder->lastnode;
-
+ return NULL;
+ */
if(builder->lastnode->done)
{
- axis2_om_text_create(builder->lastnode->parent,
- value,&node);
+ axis2_om_text_create(environment, builder->lastnode->parent, value, &node);
}
else
{
- axis2_om_text_create(builder->lastnode,value,&node);
+ axis2_om_text_create(environment, builder->lastnode, value, &node);
}
+
+ builder->lastnode = node;
+
return node;
}
-void axis2_om_stax_builder_discard_element(axis2_om_stax_builder_t *builder)
+axis2_status_t axis2_om_stax_builder_impl_discard_current_element(axis2_environment_t *environment, axis2_om_stax_builder_t *builder)
{
axis2_om_node_t *element=NULL;
axis2_om_node_t *prev_node=NULL;
@@ -286,37 +208,42 @@
if(element->done || !(builder->cache))
{
- fprintf(stderr," Error");
- return;
+ environment->error->errorno = AXIS2_ERROR_INVALID_BUILDER_STATE_CANNOT_DISCARD;
+ return AXIS2_FAILURE;
}
- builder->cache = FALSE;
+ builder->cache = AXIS2_FALSE;
do
{
- while(XML_PullParser_next(builder->parser) != END_ELEMENT);
+ while(guththila_xml_pull_parser_next(builder->parser) != GUTHTHILA_END_ELEMENT);
}while(!(element->done));
- //All children of this element is build
+ /*All children of this element is pulled now*/
prev_node = element->prev_sibling;
if(prev_node)
{
+ axis2_om_node_free(environment, prev_node->next_sibling);
prev_node->next_sibling = NULL;
}else
{
parent = element->parent;
+ axis2_om_node_free(environment, parent->first_child);
parent->first_child = NULL;
builder->lastnode = parent;
}
- builder->cache = TRUE;
+ builder->cache = AXIS2_TRUE;
+
+ return AXIS2_SUCCESS;
}
-void axis2_om_stax_builder_process_start_document(axis2_om_stax_builder_t* builder)
+/*
+axis2_status_t axis2_om_stax_builder_process_start_document(axis2_environment_t *environment, axis2_om_stax_builder_t* builder)
{
- /* skiping */
+
ATTRIBUTE *a;
- char *p;
+ axis2_char_t *p;
int ix;
if(!(builder->document))
{
@@ -333,98 +260,290 @@
free (p);
}
}
+*/
-
-
-
-
-
-
-axis2_om_node_t *axis2_om_stax_builder_process_namespace_data(axis2_om_stax_builder_t *builder,axis2_om_node_t *element,int is_soap_element)
+axis2_status_t axis2_om_stax_builder_process_namespaces(axis2_environment_t *environment, axis2_om_stax_builder_t *builder, axis2_om_node_t *node, int is_soap_element)
{
- int i=0;
- char *nsuri = NULL;
- char *prefix = NULL;
- char *uri=NULL;
- char *prefixi=NULL;
- NAMESPACE *NS;
-
-
- int namespace_count;
+ axis2_char_t *nsuri = NULL;
+ axis2_char_t *prefix = NULL;
+ guththila_namespace_t *ns = NULL;
+ axis2_status_t status = AXIS2_SUCCESS;
+ int namespace_count = 0;
+ axis2_om_namespace_t *om_ns = NULL;
+ namespace_count = guththila_xml_pull_parser_get_namespacecount (builder->parser);
- axis2_om_namespace_t *ns,*ns1;
- //e = Stack_last (builder->parser->dep);
- //d = e->depth->count;
- namespace_count = XML_PullParser_getNamespaceCount (builder->parser);
-
- for( ;namespace_count >0 ; namespace_count--)
+ for( ;namespace_count > 0 ; namespace_count--)
{
- // uri = XML_PullParser_getNamespaceUri_by_number(builder->parser,namespace_count);
- // prefix = XML_PullParser_getNamespacePrefix_by_number(builder->parser,namespace_count);
- axis2_om_element_declare_namespace_with_ns_uri_prefix(element,XML_PullParser_getNamespaceUri_by_number(builder->parser,namespace_count),XML_PullParser_getNamespacePrefix_by_number(builder->parser,namespace_count));
-
- }
- // set own namespace //
-
- NS = XML_PullParser_getNamespace(builder->parser);
- nsuri =XML_PullParser_getNamespaceUri(builder->parser,NS);
- prefix =XML_PullParser_getNamespacePrefix(builder->parser,NS);
+ om_ns = axis2_om_namespace_create(environment, guththila_xml_pull_parser_get_namespace_uri_by_number(builder->parser,namespace_count),
+ guththila_xml_pull_parser_get_namespace_prefix_by_number(builder->parser,namespace_count));
+ if (om_ns)
+ {
+ status = axis2_om_element_declare_namespace(environment, node, om_ns);
+ }
+ else
+ {
+ /* something went wrong */
+ return AXIS2_FAILURE;
+ }
+ }
+ /* set own namespace */
+
+ ns = guththila_xml_pull_parser_get_namespace(builder->parser);
+ nsuri = guththila_xml_pull_parser_get_namespace_uri(builder->parser, ns);
+ prefix = guththila_xml_pull_parser_get_namespace_prefix(builder->parser, ns);
- if(strcmp(nsuri," ") != 0)
+ if(nsuri && axis2_strcmp(environment->string, nsuri, "") != 0)
{
if(!prefix)
{
- ns = axis2_om_element_find_namespace(element,nsuri,"");
- if(!ns)
+ om_ns = axis2_om_element_find_namespace(environment, node, nsuri, "");
+ if(!om_ns)
{
- ns = axis2_om_element_declare_namespace_with_ns_uri_prefix(element,nsuri,"");
+ om_ns = axis2_om_namespace_create(environment, nsuri, "");
+ if (om_ns)
+ {
+ status = axis2_om_element_declare_namespace(environment, node, om_ns);
+ }
+ else
+ {
+ /* something went wrong */
+ return AXIS2_FAILURE;
+ }
}
- if(((axis2_om_element_t*)element)->ns == ns)
+
+ if(((axis2_om_element_t*)(node->data_element))->ns != om_ns)
{
- axis2_om_element_set_namespace(element,ns);
+ ((axis2_om_element_t*)(node->data_element))->ns = om_ns;
}
}
else
{
- ns = axis2_om_element_find_namespace(element,nsuri,prefix);
+ om_ns = axis2_om_element_find_namespace(environment, node, nsuri, prefix);
- if(!ns)
+ if(!om_ns)
{
- ns1 = axis2_om_namespace_create(nsuri,prefix);
- axis2_om_element_set_namespace(element,ns1);
-
+ om_ns = axis2_om_namespace_create(environment, nsuri, prefix);
+ if (om_ns)
+ {
+ status = axis2_om_element_declare_namespace(environment, node, om_ns);
+ }
+ else
+ {
+ /* something went wrong */
+ return AXIS2_FAILURE;
+ }
}
- else
+
+ if(((axis2_om_element_t*)(node->data_element))->ns != om_ns)
{
-
- axis2_om_element_set_namespace(element,ns);
+ ((axis2_om_element_t*)(node->data_element))->ns = om_ns;
}
}
}
+ return status;
}
-char *axis2_om_stax_builder_get_attribute_prefix(axis2_om_stax_builder_t *builder,int i)
+axis2_om_node_t *axis2_om_stax_builder_create_om_element(axis2_environment_t *environment,
+ axis2_om_stax_builder_t *builder)
{
- return XML_PullParser_getAttributePrefix_by_number(builder->parser,i);
+ axis2_om_node_t *element_node;
+ axis2_char_t *localname = NULL;
+ axis2_char_t *temp_localname = guththila_xml_pull_parser_get_name (builder->parser);
+
+ if (!temp_localname)
+ {
+ environment->error->errorno = AXIS2_ERROR_PULL_PARSER_ELEMENT_NULL;
+ return NULL;
+ }
+ else
+ {
+ localname = axis2_strdup(environment->string, temp_localname);
+ axis2_free(environment->allocator, temp_localname); /*we should be using guththila free here*/
+ }
+
+ if(!(builder->lastnode))
+ {
+ axis2_om_element_create(environment, NULL,localname,NULL,&element_node);
+
+ if (builder->document->root_element)
+ axis2_om_node_free(environment, builder->document->root_element);
+ builder->document->root_element = element_node;
+ }
+ else if(builder->lastnode->done)
+ {
+ axis2_om_element_create(environment, builder->lastnode->parent, localname, NULL, &element_node);
+ builder->lastnode->next_sibling = element_node;
+ element_node->prev_sibling = builder->lastnode;
+ }
+ else
+ {
+ axis2_om_element_create(environment, builder->lastnode,localname,NULL,&element_node);
+ builder->lastnode->first_child = element_node;
+ element_node->parent = builder->lastnode;
+ }
+ axis2_om_stax_builder_process_attributes(environment, builder, element_node);
+ axis2_om_stax_builder_process_namespaces(environment, builder, element_node, 0);
+
+ builder->lastnode = element_node;
+
+ return element_node;
+}
+
+axis2_om_node_t *axis2_om_stax_builder_create_om_comment( axis2_environment_t *environment,
+ axis2_om_stax_builder_t *builder)
+{
+
+ /* guththila does not support comments*/
+ return NULL;
}
+axis2_om_node_t *axis2_om_stax_builder_create_om_doctype(axis2_environment_t *environment,
+ axis2_om_stax_builder_t *builder)
+{
+ /* guththila does not support doctype */
+ return NULL;
+}
+
-char *axis2_om_stax_builder_get_attribute_name(axis2_om_stax_builder_t *builder,int i)
+axis2_om_node_t *axis2_om_stax_builder_create_om_processing_instruction(axis2_environment_t *environment,
+ axis2_om_stax_builder_t *builder)
{
- return XML_PullParser_getAttributeName_by_number(builder->parser,i);
+ /* guththila does not support processing instrtuctions */
+ return NULL;
+}
+
+axis2_status_t axis2_om_stax_builder_end_element(axis2_environment_t *environment, axis2_om_stax_builder_t *builder)
+{
+ axis2_om_node_t *parent;
+ if(builder->lastnode)
+ {
+ if(builder->lastnode->done)
+ {
+ parent = builder->lastnode->parent;
+ parent->done = AXIS2_TRUE;
+ builder->lastnode = parent;
+ }
+ else
+ {
+ builder->lastnode->done = AXIS2_TRUE;
+ }
+ }
+
+ return AXIS2_SUCCESS;
}
-int axis2_om_stax_builder_get_attribute_count(axis2_om_stax_builder_t *builder)
+
+axis2_om_node_t *axis2_om_stax_builder_impl_next(axis2_environment_t *environment, axis2_om_stax_builder_t *builder)
{
- return XML_PullParser_getAttributeCount(builder->parser);
+ int token = 0;
+ axis2_om_node_t *node = NULL;
+
+ do
+ {
+ if(builder->done)
+ {
+ environment->error->errorno = AXIS2_ERROR_BUILDER_DONE_CANNOT_PULL;
+ return NULL;
+ }
+
+ token = guththila_xml_pull_parser_next (builder->parser);
+
+ if(!(builder->cache))
+ {
+ return NULL;
+ }
+
+
+ switch(token)
+ {
+ case GUTHTHILA_START_DOCUMENT:
+ /*axis2_om_stax_builder_process_start_document(builder);*/
+ /*Do nothing */
+ break;
+ case GUTHTHILA_START_ELEMENT:
+ node = axis2_om_stax_builder_create_om_element(environment, builder);
+ break;
+ case GUTHTHILA_END_ELEMENT:
+ axis2_om_stax_builder_end_element(environment, builder);
+ break;
+ case GUTHTHILA_CHARACTER:
+ node = axis2_om_stax_builder_create_om_text(environment, builder);
+ break;
+ case GUTHTHILA_COMMENT:
+ break;
+ }
+ } while (!node);
+
+ return node;
}
-char *axis2_om_stax_builder_get_attribute_namespace(axis2_om_stax_builder_t *builder,int i)
+/*
+axis2_status_t axis2_om_stax_builder_process_attributes(axis2_environment_t *environment, axis2_om_stax_builder_t *builder, axis2_om_node_t *element_node)
{
- XML_PullParser_getAttributeNamespace_by_number( builder->parser,i);
+ int i=0;
+ axis2_om_namespace_t *ns = NULL;
+ axis2_char_t *uri = NULL;
+ axis2_char_t *prefix = NULL;
+ axis2_status_t status = AXIS2_SUCCESS;
+
+ int attribute_count = guththila_xml_pull_parser_get_attribute_count(builder->parser);
+ for(i = 0 ; i < attribute_count ; i++)
+ {
+
+ uri = guththila_xml_pull_parser_get_attribute_namespace_by_number(builder->parser,i);
+ prefix = guththila_xml_pull_parser_get_attribute_prefix_by_number(builder->parser,i);
+
+ if(uri){
+ if(axis2_strcmp(environment->string, uri," ") != 0);
+ {
+ ns = axis2_om_element_find_namespace(element_node, uri, prefix);
+ }
+ }
+
+ if(ns == NULL && prefix && uri && (axis2_strcmp(environment->string, prefix, XMLNS_PREFIX) == 0)
+ && (axis2_strcmp(environment->string, uri, XMLNS_URI) == 0))
+ {
+ ns = axis2_om_element_declare_namespace_with_ns_uri_prefix(element_node,
+ XMLNS_URI, XMLNS_PREFIX);
+ ns = axis2_om_element_find_namespace(element_node, uri, prefix);
+ }
+
+ status = axis2_om_element_add_attribute_with_namespace(element_node,
+ guththila_xml_pull_parser_get_attribute_name_by_number(builder->parser,i),
+ guththila_xml_pull_parser_get_attribute_value_by_number(builder->parser,i), ns);
+ }
+
+ return status;
+
}
+*/
+
+
+/*
+axis2_status_t axis2_om_stax_builder_process_start_document(axis2_environment_t *environment, axis2_om_stax_builder_t* builder)
+{
+
+ ATTRIBUTE *a;
+ axis2_char_t *p;
+ int ix;
+ if(!(builder->document))
+ {
+ return;
+ }
+
+ ix = XML_PullParser_getAttributeCount (builder->parser);
+ for (; ix > 0; ix--)
+ {
+ a = XML_PullParser_getAttribute (builder->parser);
+ p = XML_PullParser_getAttributeName (builder->parser, a);
+ free (p);
+ p = XML_PullParser_getAttributeValue (builder->parser, a);
+ free (p);
+ }
+}
+*/