Forwarded with Axis2 prefix :)

Nabeel wrote:
Attached a patch to fix a bug in the above mentioned function.
Pls reveiw and apply.

Note that the funciton signature changed from
axis2_soap_envelope_t *
axis2_soap_envelope_create_default_soap_fault_envelope(axis2_env_t **env,
   int soap_version)
to
axis2_soap_envelope_t *
axis2_soap_envelope_create_default_soap_fault_envelope(axis2_env_t **env,
    axis2_char_t *code_value, axis2_char_t *reason_text, int soap_version)
to create the default fault node inside the body.

-Nabeel

Index: soap_envelope.c =================================================================== --- soap_envelope.c (revision 387727) +++ soap_envelope.c (working copy) @@ -726,46 +726,56 @@ AXIS2_DECLARE(axis2_soap_envelope_t *) axis2_soap_envelope_create_default_soap_fault_envelope(axis2_env_t **env, - int soap_version) + axis2_char_t *code_value, axis2_char_t *reason_text, int soap_version) { axis2_soap_envelope_t *soap_env = NULL; axis2_soap_body_t *soap_body = NULL; axis2_om_namespace_t *om_ns = NULL; axis2_soap_envelope_impl_t *env_impl = NULL; + axis2_soap_fault_t *fault = NULL; + axis2_char_t *env_ns_uri = NULL; AXIS2_ENV_CHECK(env, NULL); - if(soap_version == AXIS2_SOAP11) - { - om_ns = axis2_om_namespace_create(env, - AXIS2_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI, - AXIS2_SOAP_DEFAULT_NAMESPACE_PREFIX); - if(!om_ns) - return NULL; - soap_env = axis2_soap_envelope_create(env, om_ns); - env_impl = AXIS2_INTF_TO_IMPL(soap_env); - - AXIS2_SOAP_ENVELOPE_SET_SOAP_VERSION(soap_env, env, AXIS2_SOAP11); - soap_body = axis2_soap_body_create_with_parent(env, soap_env); - env_impl->body = soap_body; - return soap_env; - } - else if(soap_version == AXIS2_SOAP12) - { - om_ns = axis2_om_namespace_create(env, - AXIS2_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI, - AXIS2_SOAP_DEFAULT_NAMESPACE_PREFIX); - if(!om_ns) - return NULL; - soap_env = axis2_soap_envelope_create(env, om_ns); - env_impl = AXIS2_INTF_TO_IMPL(soap_env); - - AXIS2_SOAP_ENVELOPE_SET_SOAP_VERSION(soap_env, env, AXIS2_SOAP12); - soap_body = axis2_soap_body_create_with_parent(env, soap_env); - env_impl->body = soap_body; - return soap_env; - } - AXIS2_ERROR_SET((*env)->error, - AXIS2_ERROR_INVALID_SOAP_VERSION, AXIS2_FAILURE); - return NULL; + + if (AXIS2_SOAP11 == soap_version) + env_ns_uri = AXIS2_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI; + else if (AXIS2_SOAP12 == soap_version) + env_ns_uri = AXIS2_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI; + else + { + AXIS2_ERROR_SET((*env)->error, + AXIS2_ERROR_INVALID_SOAP_VERSION, AXIS2_FAILURE); + return NULL; + } + om_ns = axis2_om_namespace_create(env, + AXIS2_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI, + AXIS2_SOAP_DEFAULT_NAMESPACE_PREFIX); + if(!om_ns) + return NULL; + soap_env = axis2_soap_envelope_create(env, om_ns); + if (!soap_env) + { + AXIS2_OM_NAMESPACE_FREE(om_ns, env); + return NULL; + } + env_impl = AXIS2_INTF_TO_IMPL(soap_env); + + AXIS2_SOAP_ENVELOPE_SET_SOAP_VERSION(soap_env, env, soap_version); + soap_body = axis2_soap_body_create_with_parent(env, soap_env); + env_impl->body = soap_body; + if (!soap_body) + { + AXIS2_SOAP_ENVELOPE_FREE(soap_env, env); + return NULL; + } + fault = axis2_soap_fault_create_default_fault(env, soap_body, + code_value, reason_text, soap_version); + if (!fault) + { + AXIS2_SOAP_ENVELOPE_FREE(soap_env, env); + return NULL; + } + return soap_env; + } static axis2_status_t Index: soap_header.c =================================================================== --- soap_header.c (revision 387727) +++ soap_header.c (working copy) @@ -289,6 +289,8 @@ axis2_soap_header_impl_t *header_impl = NULL; axis2_soap_header_block_t *header_block = NULL; + axis2_om_namespace_t *cloned_ns = NULL; + axis2_om_node_t* header_block_node = NULL; AXIS2_ENV_CHECK(env, NULL); @@ -297,7 +299,11 @@ header_impl = AXIS2_INTF_TO_IMPL(header); - header_block = axis2_soap_header_block_create_with_parent(env, localname, ns, header); + cloned_ns = AXIS2_OM_NAMESPACE_CLONE(ns, env); + if(!cloned_ns) + return NULL; + + header_block = axis2_soap_header_block_create_with_parent(env, localname,cloned_ns, header); if(!header_block) return NULL; @@ -307,7 +313,29 @@ if(header_block_node) { + axis2_om_element_t *hb_ele = NULL; + axis2_char_t *uri = NULL; + axis2_char_t *prefix = NULL; + axis2_om_node_set_build_status(header_block_node, env, AXIS2_TRUE); + + hb_ele = (axis2_om_element_t *) + AXIS2_OM_NODE_GET_DATA_ELEMENT(header_block_node, env); + if(hb_ele) + { + axis2_om_namespace_t *dec_ns = NULL; + uri = AXIS2_OM_NAMESPACE_GET_URI(cloned_ns, env); + prefix = AXIS2_OM_NAMESPACE_GET_PREFIX(cloned_ns, env); + + dec_ns = AXIS2_OM_ELEMENT_FIND_DECLARED_NAMESPACE(hb_ele, env, uri, prefix); + if(!dec_ns) + { + /** this namespace it not in hb_ele list so free it */ + AXIS2_OM_NAMESPACE_FREE(cloned_ns, env); + cloned_ns = NULL; + } + + } return header_block; } else

Index: axis2_soap_envelope.h
===================================================================
--- axis2_soap_envelope.h       (revision 388149)
+++ axis2_soap_envelope.h       (working copy)
@@ -161,10 +161,11 @@
 AXIS2_DECLARE(axis2_soap_envelope_t *)
 axis2_soap_envelope_create_default_soap_envelope(axis2_env_t **env,
                                                  int soap_version);
-
+
 AXIS2_DECLARE(axis2_soap_envelope_t *)
 axis2_soap_envelope_create_default_soap_fault_envelope(axis2_env_t **env,
-                                                 int soap_version);
+                   axis2_char_t *code_value, axis2_char_t *reason_text, int soap_version)
+
 /******************** Macros **************************************************/

 #define AXIS2_SOAP_ENVELOPE_GET_HEADER(envelope, env) \

  

Reply via email to