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 na...@apache.org on 2006/02/28 12:09:00 UTC
svn commit: r381631 - in /webservices/axis2/trunk/c: include/axis2_om_node.h
modules/xml/om/om_element.c test/xml/soap/test_soap.c
Author: nandika
Date: Tue Feb 28 03:08:57 2006
New Revision: 381631
URL: http://svn.apache.org/viewcvs?rev=381631&view=rev
Log:
iterators returned from om_element is now freed in om_element_free function
Modified:
webservices/axis2/trunk/c/include/axis2_om_node.h
webservices/axis2/trunk/c/modules/xml/om/om_element.c
webservices/axis2/trunk/c/test/xml/soap/test_soap.c
Modified: webservices/axis2/trunk/c/include/axis2_om_node.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/include/axis2_om_node.h?rev=381631&r1=381630&r2=381631&view=diff
==============================================================================
--- webservices/axis2/trunk/c/include/axis2_om_node.h (original)
+++ webservices/axis2/trunk/c/include/axis2_om_node.h Tue Feb 28 03:08:57 2006
@@ -386,10 +386,8 @@
#define AXIS2_OM_NODE_FREE_TREE(om_node,env) ((om_node)->ops->free(om_node,env))
/** adds given child to the given parent */
-/*#define AXIS2_OM_NODE_ADD_CHILD(om_node,env,parent) \
- ((parent)->ops->add_child(om_node,env,parent))*/
-#define AXIS2_OM_NODE_ADD_CHILD(om_node,env,child) \
- ((om_node)->ops->add_child(om_node,env,child))
+#define AXIS2_OM_NODE_ADD_CHILD(om_node, env, child) \
+ ((om_node)->ops->add_child(om_node, env, child))
/** detaches the given node from its parent */
#define AXIS2_OM_NODE_DETACH(om_node,env) ((om_node)->ops->detach(om_node,env))
Modified: webservices/axis2/trunk/c/modules/xml/om/om_element.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/xml/om/om_element.c?rev=381631&r1=381630&r2=381631&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/xml/om/om_element.c (original)
+++ webservices/axis2/trunk/c/modules/xml/om/om_element.c Tue Feb 28 03:08:57 2006
@@ -170,6 +170,12 @@
axis2_qname_t *qname;
+ axis2_om_child_element_iterator_t *child_ele_iter;
+
+ axis2_om_children_iterator_t* children_iter;
+
+ axis2_om_children_qname_iterator_t *children_qname_iter;
+
}axis2_om_element_impl_t;
/************************************Macro *****************************/
@@ -218,7 +224,10 @@
element->attributes = NULL;
element->namespaces = NULL;
element->qname = NULL;
-
+ element->child_ele_iter = NULL;
+ element->children_iter = NULL;
+ element->children_qname_iter = NULL;
+
element->localname = (axis2_char_t *) AXIS2_STRDUP(localname,env);
if (!element->localname)
{
@@ -658,6 +667,7 @@
if (element_impl->localname)
{
AXIS2_FREE ((*env)->allocator,element_impl->localname);
+ element_impl->localname = NULL;
}
if (element_impl->ns)
{
@@ -682,33 +692,50 @@
val = NULL;
}
- axis2_hash_free (AXIS2_INTF_TO_IMPL(om_element)->attributes, env);
+ axis2_hash_free (element_impl->attributes, env);
+ element_impl->attributes = NULL;
}
- if (element_impl->namespaces)
- {
- axis2_hash_index_t *hi;
- void *val = NULL;
+ if (element_impl->namespaces)
+ {
+ axis2_hash_index_t *hi;
+ void *val = NULL;
- for (hi = axis2_hash_first (element_impl->namespaces, env); hi;
- hi = axis2_hash_next ( env, hi))
- {
- axis2_hash_this (hi, NULL, NULL, &val);
+ for (hi = axis2_hash_first (element_impl->namespaces, env); hi;
+ hi = axis2_hash_next ( env, hi))
+ {
+ axis2_hash_this (hi, NULL, NULL, &val);
- if (val)
- AXIS2_OM_NAMESPACE_FREE ((axis2_om_namespace_t *)val, env);
- val = NULL;
-
- }
- axis2_hash_free (element_impl->namespaces, env);
+ if (val)
+ AXIS2_OM_NAMESPACE_FREE ((axis2_om_namespace_t *)val, env);
+ val = NULL;
+ }
+ axis2_hash_free (element_impl->namespaces, env);
/*TODO: free namespaces */
/* need to iterate and free individual namespaces */
- }
- if(element_impl->qname)
- AXIS2_QNAME_FREE(element_impl->qname, env);
- AXIS2_FREE ((*env)->allocator, om_element->ops);
- AXIS2_FREE ((*env)->allocator, element_impl);
-
+ }
+ if(element_impl->qname)
+ {
+ AXIS2_QNAME_FREE(element_impl->qname, env);
+ element_impl->qname = NULL;
+ }
+ if(element_impl->children_iter)
+ {
+ AXIS2_OM_CHILDREN_ITERATOR_FREE(element_impl->children_iter, env);
+ element_impl->children_iter = NULL;
+ }
+ if(element_impl->child_ele_iter)
+ {
+ AXIS2_OM_CHILD_ELEMENT_ITERATOR_FREE(element_impl->child_ele_iter, env);
+ element_impl->child_ele_iter = NULL;
+ }
+ if(element_impl->children_qname_iter)
+ {
+ AXIS2_OM_CHILDREN_QNAME_ITERATOR_FREE(element_impl->children_qname_iter, env);
+ element_impl->children_qname_iter = NULL;
+ }
+ AXIS2_FREE ((*env)->allocator, om_element->ops);
+ AXIS2_FREE ((*env)->allocator, element_impl);
return status;
}
@@ -944,11 +971,21 @@
axis2_env_t **env,
axis2_om_node_t *element_node)
{
+ axis2_om_element_impl_t *om_ele_impl = NULL;
AXIS2_ENV_CHECK(env, NULL);
AXIS2_PARAM_CHECK((*env)->error, element_node, NULL);
- return axis2_om_children_iterator_create(env,
- AXIS2_OM_NODE_GET_FIRST_CHILD(element_node, env));
-
+ om_ele_impl = AXIS2_INTF_TO_IMPL(om_element);
+ if(om_ele_impl->children_iter)
+ {
+ return om_ele_impl->children_iter;
+ }
+ else
+ {
+ om_ele_impl->children_iter = axis2_om_children_iterator_create(env,
+ AXIS2_OM_NODE_GET_FIRST_CHILD(element_node, env));
+ return om_ele_impl->children_iter;
+ }
+ return NULL;
}
axis2_om_children_qname_iterator_t* AXIS2_CALL
@@ -957,13 +994,22 @@
axis2_qname_t *element_qname,
axis2_om_node_t *element_node)
{
+ axis2_om_element_impl_t *om_ele_impl = NULL;
AXIS2_ENV_CHECK(env, NULL);
AXIS2_PARAM_CHECK((*env)->error, element_node, NULL);
-
- return axis2_om_children_qname_iterator_create(env,
+ om_ele_impl = AXIS2_INTF_TO_IMPL(om_element);
+ if(om_ele_impl->children_iter)
+ {
+ return om_ele_impl->children_qname_iter;
+ }
+ else
+ {
+ om_ele_impl->children_qname_iter = axis2_om_children_qname_iterator_create(env,
AXIS2_OM_NODE_GET_FIRST_CHILD(element_node, env),
element_qname);
-
+ return om_ele_impl->children_qname_iter;
+ }
+ return NULL;
}
axis2_om_element_t* AXIS2_CALL
@@ -1160,14 +1206,21 @@
axis2_env_t **env,
axis2_om_node_t *element_node)
{
+ axis2_om_element_impl_t *om_ele_impl = NULL;
axis2_om_node_t *first_node = NULL;
axis2_om_element_t *ele = NULL;
AXIS2_ENV_CHECK(env, NULL);
AXIS2_PARAM_CHECK((*env)->error, element_node, NULL);
+ om_ele_impl = AXIS2_INTF_TO_IMPL(om_element);
ele = AXIS2_OM_ELEMENT_GET_FIRST_ELEMENT(om_element, env, element_node, &first_node);
- if(ele && first_node)
+ if(om_ele_impl->child_ele_iter)
+ {
+ return om_ele_impl->child_ele_iter;
+ }
+ else if(ele && first_node)
{
- return axis2_om_child_element_iterator_create(env, first_node);
+ om_ele_impl->child_ele_iter = axis2_om_child_element_iterator_create(env, first_node);
+ return om_ele_impl->child_ele_iter;
}
- else return NULL;
+ return NULL;
}
Modified: webservices/axis2/trunk/c/test/xml/soap/test_soap.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/test/xml/soap/test_soap.c?rev=381631&r1=381630&r2=381631&view=diff
==============================================================================
--- webservices/axis2/trunk/c/test/xml/soap/test_soap.c (original)
+++ webservices/axis2/trunk/c/test/xml/soap/test_soap.c Tue Feb 28 03:08:57 2006
@@ -114,7 +114,6 @@
printnode(om_node, env);
}
}
- AXIS2_OM_CHILDREN_QNAME_ITERATOR_FREE(children_iter, env);
soap_body = AXIS2_SOAP_ENVELOPE_GET_BODY(soap_envelope, env);
if (soap_body)
{