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 ma...@apache.org on 2009/03/11 05:10:51 UTC
svn commit: r752363 - in /webservices/axis2/trunk/c/axiom:
include/axiom_children_qname_iterator.h include/axiom_soap_builder.h
include/axiom_util.h src/om/om_children_qname_iterator.c
src/soap/soap_body.c src/soap/soap_builder.c src/util/om_util.c
Author: manjula
Date: Wed Mar 11 04:10:50 2009
New Revision: 752363
URL: http://svn.apache.org/viewvc?rev=752363&view=rev
Log:
Fixies for mtom service callback.
Modified:
webservices/axis2/trunk/c/axiom/include/axiom_children_qname_iterator.h
webservices/axis2/trunk/c/axiom/include/axiom_soap_builder.h
webservices/axis2/trunk/c/axiom/include/axiom_util.h
webservices/axis2/trunk/c/axiom/src/om/om_children_qname_iterator.c
webservices/axis2/trunk/c/axiom/src/soap/soap_body.c
webservices/axis2/trunk/c/axiom/src/soap/soap_builder.c
webservices/axis2/trunk/c/axiom/src/util/om_util.c
Modified: webservices/axis2/trunk/c/axiom/include/axiom_children_qname_iterator.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/axiom/include/axiom_children_qname_iterator.h?rev=752363&r1=752362&r2=752363&view=diff
==============================================================================
--- webservices/axis2/trunk/c/axiom/include/axiom_children_qname_iterator.h (original)
+++ webservices/axis2/trunk/c/axiom/include/axiom_children_qname_iterator.h Wed Mar 11 04:10:50 2009
@@ -97,6 +97,7 @@
axiom_children_qname_iterator_t * iterator,
const axutil_env_t * env);
+
/** @} */
#ifdef __cplusplus
Modified: webservices/axis2/trunk/c/axiom/include/axiom_soap_builder.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/axiom/include/axiom_soap_builder.h?rev=752363&r1=752362&r2=752363&view=diff
==============================================================================
--- webservices/axis2/trunk/c/axiom/include/axiom_soap_builder.h (original)
+++ webservices/axis2/trunk/c/axiom/include/axiom_soap_builder.h Wed Mar 11 04:10:50 2009
@@ -247,7 +247,13 @@
void *user_param,
axis2_char_t *callback_name);
-
+ AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+ axiom_soap_builder_replace_xop(
+ axiom_soap_builder_t * builder,
+ const axutil_env_t * env,
+ axiom_node_t *om_element_node,
+ axiom_element_t *om_element);
+
Modified: webservices/axis2/trunk/c/axiom/include/axiom_util.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/axiom/include/axiom_util.h?rev=752363&r1=752362&r2=752363&view=diff
==============================================================================
--- webservices/axis2/trunk/c/axiom/include/axiom_util.h (original)
+++ webservices/axis2/trunk/c/axiom/include/axiom_util.h Wed Mar 11 04:10:50 2009
@@ -373,6 +373,13 @@
const axutil_env_t * env,
const axutil_uri_t * uri);
+ AXIS2_EXTERN axiom_node_t* AXIS2_CALL
+ axiom_util_get_node_by_local_name(
+ const axutil_env_t *env,
+ axiom_node_t *node,
+ axis2_char_t *local_name);
+
+
#ifdef __cplusplus
}
#endif
Modified: webservices/axis2/trunk/c/axiom/src/om/om_children_qname_iterator.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/axiom/src/om/om_children_qname_iterator.c?rev=752363&r1=752362&r2=752363&view=diff
==============================================================================
--- webservices/axis2/trunk/c/axiom/src/om/om_children_qname_iterator.c (original)
+++ webservices/axis2/trunk/c/axiom/src/om/om_children_qname_iterator.c Wed Mar 11 04:10:50 2009
@@ -197,3 +197,4 @@
}
return iterator->last_child;
}
+
Modified: webservices/axis2/trunk/c/axiom/src/soap/soap_body.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/axiom/src/soap/soap_body.c?rev=752363&r1=752362&r2=752363&view=diff
==============================================================================
--- webservices/axis2/trunk/c/axiom/src/soap/soap_body.c (original)
+++ webservices/axis2/trunk/c/axiom/src/soap/soap_body.c Wed Mar 11 04:10:50 2009
@@ -27,6 +27,7 @@
#include <axiom_soap_fault_role.h>
#include "_axiom_soap_fault_value.h"
#include "_axiom_soap_fault_text.h"
+#include <axiom_util.h>
struct axiom_soap_body
{
@@ -246,9 +247,27 @@
const axutil_env_t * env)
{
int status = AXIS2_SUCCESS;
-
+ axiom_node_t *xop_node = NULL;
+ axis2_bool_t is_replaced = AXIS2_FALSE;
+ axiom_element_t *xop_element = NULL;
+
+
if (soap_body->om_ele_node && soap_body->soap_builder)
{
+ xop_node = axiom_util_get_node_by_local_name(env,
+ soap_body->om_ele_node, AXIS2_XOP_INCLUDE);
+
+ if(xop_node)
+ {
+ xop_element = (axiom_element_t *)axiom_node_get_data_element(
+ xop_node, env);
+ if(xop_element)
+ {
+ is_replaced = axiom_soap_builder_replace_xop(soap_body->soap_builder,
+ env, xop_node, xop_element);
+ }
+ }
+
while (axiom_node_is_complete(soap_body->om_ele_node, env) !=
AXIS2_TRUE)
{
Modified: webservices/axis2/trunk/c/axiom/src/soap/soap_builder.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/axiom/src/soap/soap_builder.c?rev=752363&r1=752362&r2=752363&view=diff
==============================================================================
--- webservices/axis2/trunk/c/axiom/src/soap/soap_builder.c (original)
+++ webservices/axis2/trunk/c/axiom/src/soap/soap_builder.c Wed Mar 11 04:10:50 2009
@@ -1292,3 +1292,92 @@
}
}
+AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+axiom_soap_builder_replace_xop(
+ axiom_soap_builder_t * builder,
+ const axutil_env_t * env,
+ axiom_node_t *om_element_node,
+ axiom_element_t *om_element)
+{
+ axiom_namespace_t *ns = NULL;
+ axis2_bool_t is_replaced = AXIS2_FALSE;
+
+ ns = axiom_element_get_namespace(om_element, env, om_element_node);
+ if (ns)
+ {
+ axis2_char_t *uri = axiom_namespace_get_uri(ns, env);
+ if (uri)
+ {
+ if (axutil_strcmp(uri, AXIS2_XOP_NAMESPACE_URI) == 0)
+ {
+ axutil_qname_t *qname = NULL;
+ qname = axutil_qname_create(env, "href", NULL, NULL);
+ if (qname)
+ {
+ axis2_char_t *id = NULL;
+ id = axiom_element_get_attribute_value(om_element, env,
+ qname);
+ if (id)
+ {
+ axis2_char_t *pos = NULL;
+ pos = axutil_strstr(id, "cid:");
+ if (pos)
+ {
+ axiom_data_handler_t *data_handler = NULL;
+ id += 4;
+
+ if (builder->mime_body_parts)
+ {
+
+ axis2_char_t *id_decoded = NULL;
+
+ id_decoded = axutil_strdup(env, id);
+
+ axutil_url_decode(env, id_decoded, id_decoded);
+
+ data_handler =
+ (axiom_data_handler_t *)
+ axutil_hash_get(builder->
+ mime_body_parts,
+ (void *) id_decoded,
+ AXIS2_HASH_KEY_STRING);
+ if (data_handler)
+ {
+ axiom_text_t *data_text = NULL;
+ axiom_node_t *data_om_node = NULL;
+ axiom_node_t *parent = NULL;
+
+ parent = axiom_node_get_parent(om_element_node,
+ env);
+
+ /*remove the <xop:Include> element */
+ axiom_node_free_tree(om_element_node,
+ env);
+
+ data_text =
+ axiom_text_create_with_data_handler
+ (env, parent, data_handler,
+ &data_om_node);
+
+ axiom_text_set_content_id(data_text,
+ env, id_decoded);
+ /*axiom_stax_builder_set_lastnode
+ (soap_builder->om_builder, env,
+ parent);*/
+ is_replaced = AXIS2_TRUE;
+ }
+ if(id_decoded)
+ {
+ AXIS2_FREE(env->allocator, id_decoded);
+ }
+ }
+ }
+ }
+ }
+ axutil_qname_free(qname, env);
+ }
+ }
+ }
+
+ return is_replaced;
+}
Modified: webservices/axis2/trunk/c/axiom/src/util/om_util.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/axiom/src/util/om_util.c?rev=752363&r1=752362&r2=752363&view=diff
==============================================================================
--- webservices/axis2/trunk/c/axiom/src/util/om_util.c (original)
+++ webservices/axis2/trunk/c/axiom/src/util/om_util.c Wed Mar 11 04:10:50 2009
@@ -1153,3 +1153,51 @@
return doc;
}
+
+
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL
+axiom_util_get_node_by_local_name(
+ const axutil_env_t *env,
+ axiom_node_t *node,
+ axis2_char_t *local_name)
+{
+ axis2_char_t *temp_name = NULL;
+
+ if(!node)
+ {
+ return NULL;
+ }
+
+ if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT)
+ {
+ return NULL;
+ }
+
+ temp_name = axiom_util_get_localname(node, env);
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[rampart]Checking node %s for %s", temp_name, local_name );
+
+ if(!axutil_strcmp(temp_name, local_name))
+ {
+ /* Gottcha.. return this node */
+ return node;
+ }
+ else
+ {
+ /* Doesn't match? Get the children and search for them */
+ axiom_node_t *temp_node = NULL;
+
+ temp_node = axiom_node_get_first_element(node, env);
+ while(temp_node)
+ {
+ axiom_node_t *res_node = NULL;
+ res_node = axiom_util_get_node_by_local_name(env, temp_node, local_name);
+ if(res_node)
+ {
+ return res_node;
+ }
+ temp_node = axiom_node_get_next_sibling(temp_node, env);
+ }
+ }
+ return NULL;
+}