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) \