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 2007/03/20 15:27:39 UTC
svn commit: r520405 - in /webservices/axis2/trunk/c:
axiom/include/axiom_soap_body.h axiom/src/soap/soap_body.c
axiom/src/soap/soap_envelope.c modules/core/clientapi/svc_client.c
Author: samisa
Date: Tue Mar 20 07:27:38 2007
New Revision: 520405
URL: http://svn.apache.org/viewvc?view=rev&rev=520405
Log:
Fixed SOAP fault format problem in case of SOAP 1.1 - AXIS2C-239
Modified:
webservices/axis2/trunk/c/axiom/include/axiom_soap_body.h
webservices/axis2/trunk/c/axiom/src/soap/soap_body.c
webservices/axis2/trunk/c/axiom/src/soap/soap_envelope.c
webservices/axis2/trunk/c/modules/core/clientapi/svc_client.c
Modified: webservices/axis2/trunk/c/axiom/include/axiom_soap_body.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/axiom/include/axiom_soap_body.h?view=diff&rev=520405&r1=520404&r2=520405
==============================================================================
--- webservices/axis2/trunk/c/axiom/include/axiom_soap_body.h (original)
+++ webservices/axis2/trunk/c/axiom/include/axiom_soap_body.h Tue Mar 20 07:27:38 2007
@@ -141,6 +141,14 @@
const axis2_env_t *env,
axiom_node_t *child);
+ /**
+ * SOAP builder construct a SOAP 1.2 fault all the time.
+ * So when SOAP 1.1 is in use, we should convert SOAP fault to
+ * SOAP 1.1 fault format before use.
+ */
+ AXIS2_EXTERN axis2_status_t AXIS2_CALL
+ axiom_soap_body_convert_fault_to_soap11(axiom_soap_body_t *soap_body,
+ const axis2_env_t *env);
#ifdef __cplusplus
}
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?view=diff&rev=520405&r1=520404&r2=520405
==============================================================================
--- webservices/axis2/trunk/c/axiom/src/soap/soap_body.c (original)
+++ webservices/axis2/trunk/c/axiom/src/soap/soap_body.c Tue Mar 20 07:27:38 2007
@@ -20,6 +20,12 @@
#include <axis2_hash.h>
#include <axiom_soap_const.h>
#include <axiom_soap_builder.h>
+#include <axiom_soap_fault_code.h>
+#include <axiom_soap_fault_reason.h>
+#include <axiom_soap_fault_detail.h>
+#include <axiom_soap_fault_role.h>
+#include <axiom_soap_fault_value.h>
+#include <axiom_soap_fault_text.h>
struct axiom_soap_body
{
@@ -311,4 +317,154 @@
return AXIOM_SOAP12;
}
return AXIS2_FAILURE;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axiom_soap_body_convert_fault_to_soap11(axiom_soap_body_t *soap_body,
+ const axis2_env_t *env)
+{
+ if (soap_body)
+ {
+ axiom_soap_fault_t *soap_fault = NULL;
+ if (axiom_soap_body_has_fault(soap_body, env))
+ {
+ soap_fault = axiom_soap_body_get_fault(soap_body, env);
+ if (soap_fault)
+ {
+ axiom_soap_fault_code_t *fault_code = NULL;
+ axiom_soap_fault_reason_t *fault_reason = NULL;
+ axiom_soap_fault_detail_t *fault_detail = NULL;
+ axiom_soap_fault_role_t *fault_role = NULL;
+ fault_code = axiom_soap_fault_get_code(soap_fault, env);
+ if (fault_code)
+ {
+ axiom_node_t *fault_code_om_node = NULL;
+ axiom_element_t *fault_code_om_ele = NULL;
+ axiom_node_t *fault_value_om_node = NULL;
+ axiom_element_t *fault_value_om_ele = NULL;
+ axiom_soap_fault_value_t *fault_value = NULL;
+ axis2_char_t *text = NULL;
+
+ fault_code_om_node = axiom_soap_fault_code_get_base_node(fault_code, env);
+ if (fault_code_om_node)
+ {
+ fault_code_om_ele = (axiom_element_t *)
+ AXIOM_NODE_GET_DATA_ELEMENT(fault_code_om_node, env);
+ if (fault_code_om_ele)
+ {
+ axiom_element_set_localname(fault_code_om_ele,
+ env, AXIOM_SOAP11_SOAP_FAULT_CODE_LOCAL_NAME);
+
+ fault_value = axiom_soap_fault_code_get_value(fault_code, env);
+
+ if (fault_value)
+ {
+ fault_value_om_node = axiom_soap_fault_value_get_base_node(fault_value, env);
+ if (fault_value_om_node)
+ {
+ fault_value_om_node = AXIOM_NODE_DETACH(fault_value_om_node, env);
+ fault_value_om_ele = (axiom_element_t *)
+ AXIOM_NODE_GET_DATA_ELEMENT(fault_value_om_node, env);
+ if (fault_value_om_ele)
+ {
+ text = axiom_element_get_text(fault_value_om_ele, env, fault_value_om_node);
+ if (text)
+ {
+ axiom_element_set_text(fault_code_om_ele, env, text, fault_code_om_node);
+ }
+ AXIOM_NODE_FREE_TREE(fault_value_om_node, env);
+ }
+
+ }
+ }
+ }
+ }
+ }
+ fault_reason = axiom_soap_fault_get_reason(soap_fault, env);
+ if (fault_reason)
+ {
+ axiom_node_t *fault_reason_om_node = NULL;
+ axiom_element_t *fault_reason_om_ele = NULL;
+ axiom_node_t *fault_text_om_node = NULL;
+ axiom_element_t *fault_text_om_ele = NULL;
+ axiom_soap_fault_text_t *fault_text = NULL;
+ axis2_char_t *text = NULL;
+
+ fault_reason_om_node = axiom_soap_fault_reason_get_base_node(fault_reason, env);
+ if (fault_reason_om_node)
+ {
+ fault_reason_om_ele = (axiom_element_t *)
+ AXIOM_NODE_GET_DATA_ELEMENT(fault_reason_om_node, env);
+
+ if (fault_reason_om_ele)
+ {
+
+ axiom_element_set_localname(fault_reason_om_ele,
+ env, AXIOM_SOAP11_SOAP_FAULT_STRING_LOCAL_NAME);
+
+ fault_text =
+ axiom_soap_fault_reason_get_first_soap_fault_text(fault_reason, env);
+ if (fault_text)
+ {
+ fault_text_om_node = axiom_soap_fault_text_get_base_node(fault_text, env);
+ if (fault_text_om_node)
+ {
+ fault_text_om_node = AXIOM_NODE_DETACH(fault_text_om_node, env);
+ fault_text_om_ele = (axiom_element_t *)
+ AXIOM_NODE_GET_DATA_ELEMENT(fault_text_om_node, env);
+ if (fault_text_om_ele)
+ {
+ text = axiom_element_get_text(fault_text_om_ele, env, fault_text_om_node);
+ if (text)
+ {
+ axiom_element_set_text(fault_reason_om_ele,
+ env, text, fault_reason_om_node);
+ }
+ }
+ AXIOM_NODE_FREE_TREE(fault_text_om_node, env);
+ }
+ }
+ }
+ }
+ }
+
+ fault_role = axiom_soap_fault_get_role(soap_fault, env);
+ if (fault_role)
+ {
+ axiom_node_t *fault_role_om_node = NULL;
+ axiom_element_t *fault_role_om_ele = NULL;
+
+ fault_role_om_node = axiom_soap_fault_role_get_base_node(fault_role, env);
+ if (fault_role_om_node)
+ {
+ fault_role_om_ele = (axiom_element_t *)
+ AXIOM_NODE_GET_DATA_ELEMENT(fault_role_om_node, env);
+ if (fault_role_om_ele)
+ {
+ axiom_element_set_localname(fault_role_om_ele, env,
+ AXIOM_SOAP11_SOAP_FAULT_ACTOR_LOCAL_NAME);
+ }
+ }
+ }
+
+ fault_detail = axiom_soap_fault_get_detail(soap_fault, env);
+ if (fault_detail)
+ {
+ axiom_node_t *fault_detail_om_node = NULL;
+ axiom_element_t *fault_detail_om_ele = NULL;
+ fault_detail_om_node = axiom_soap_fault_detail_get_base_node(fault_detail, env);
+ if (fault_detail_om_node)
+ {
+ fault_detail_om_ele = (axiom_element_t *)
+ AXIOM_NODE_GET_DATA_ELEMENT(fault_detail_om_node, env);
+ if (fault_detail_om_ele)
+ {
+ axiom_element_set_localname(fault_detail_om_ele,
+ env, AXIOM_SOAP11_SOAP_FAULT_DETAIL_LOCAL_NAME);
+ }
+ }
+ }
+ }
+ }
+ }
}
Modified: webservices/axis2/trunk/c/axiom/src/soap/soap_envelope.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/axiom/src/soap/soap_envelope.c?view=diff&rev=520405&r1=520404&r2=520405
==============================================================================
--- webservices/axis2/trunk/c/axiom/src/soap/soap_envelope.c (original)
+++ webservices/axis2/trunk/c/axiom/src/soap/soap_envelope.c Tue Mar 20 07:27:38 2007
@@ -304,150 +304,7 @@
{
axiom_soap_body_t *soap_body = NULL;
soap_body = axiom_soap_envelope_get_body(soap_envelope, env);
- if (soap_body)
- {
- axiom_soap_fault_t *soap_fault = NULL;
- if (axiom_soap_body_has_fault(soap_body, env))
- {
- soap_fault = axiom_soap_body_get_fault(soap_body, env);
- if (soap_fault)
- {
- axiom_soap_fault_code_t *fault_code = NULL;
- axiom_soap_fault_reason_t *fault_reason = NULL;
- axiom_soap_fault_detail_t *fault_detail = NULL;
- axiom_soap_fault_role_t *fault_role = NULL;
- fault_code = axiom_soap_fault_get_code(soap_fault, env);
- if (fault_code)
- {
- axiom_node_t *fault_code_om_node = NULL;
- axiom_element_t *fault_code_om_ele = NULL;
- axiom_node_t *fault_value_om_node = NULL;
- axiom_element_t *fault_value_om_ele = NULL;
- axiom_soap_fault_value_t *fault_value = NULL;
- axis2_char_t *text = NULL;
-
- fault_code_om_node = axiom_soap_fault_code_get_base_node(fault_code, env);
- if (fault_code_om_node)
- {
- fault_code_om_ele = (axiom_element_t *)
- AXIOM_NODE_GET_DATA_ELEMENT(fault_code_om_node, env);
- if (fault_code_om_ele)
- {
- axiom_element_set_localname(fault_code_om_ele,
- env, AXIOM_SOAP11_SOAP_FAULT_CODE_LOCAL_NAME);
-
- fault_value = axiom_soap_fault_code_get_value(fault_code, env);
-
- if (fault_value)
- {
- fault_value_om_node = axiom_soap_fault_value_get_base_node(fault_value, env);
- if (fault_value_om_node)
- {
- fault_value_om_node = AXIOM_NODE_DETACH(fault_value_om_node, env);
- fault_value_om_ele = (axiom_element_t *)
- AXIOM_NODE_GET_DATA_ELEMENT(fault_value_om_node, env);
- if (fault_value_om_ele)
- {
- text = axiom_element_get_text(fault_value_om_ele, env, fault_value_om_node);
- if (text)
- {
- axiom_element_set_text(fault_code_om_ele, env, text, fault_code_om_node);
- }
- AXIOM_NODE_FREE_TREE(fault_value_om_node, env);
- }
-
- }
- }
- }
- }
- }
- fault_reason = axiom_soap_fault_get_reason(soap_fault, env);
- if (fault_reason)
- {
- axiom_node_t *fault_reason_om_node = NULL;
- axiom_element_t *fault_reason_om_ele = NULL;
- axiom_node_t *fault_text_om_node = NULL;
- axiom_element_t *fault_text_om_ele = NULL;
- axiom_soap_fault_text_t *fault_text = NULL;
- axis2_char_t *text = NULL;
-
- fault_reason_om_node = axiom_soap_fault_reason_get_base_node(fault_reason, env);
- if (fault_reason_om_node)
- {
- fault_reason_om_ele = (axiom_element_t *)
- AXIOM_NODE_GET_DATA_ELEMENT(fault_reason_om_node, env);
-
- if (fault_reason_om_ele)
- {
-
- axiom_element_set_localname(fault_reason_om_ele,
- env, AXIOM_SOAP11_SOAP_FAULT_STRING_LOCAL_NAME);
-
- fault_text =
- axiom_soap_fault_reason_get_first_soap_fault_text(fault_reason, env);
- if (fault_text)
- {
- fault_text_om_node = axiom_soap_fault_text_get_base_node(fault_text, env);
- if (fault_text_om_node)
- {
- fault_text_om_node = AXIOM_NODE_DETACH(fault_text_om_node, env);
- fault_text_om_ele = (axiom_element_t *)
- AXIOM_NODE_GET_DATA_ELEMENT(fault_text_om_node, env);
- if (fault_text_om_ele)
- {
- text = axiom_element_get_text(fault_text_om_ele, env, fault_text_om_node);
- if (text)
- {
- axiom_element_set_text(fault_reason_om_ele,
- env, text, fault_reason_om_node);
- }
- }
- AXIOM_NODE_FREE_TREE(fault_text_om_node, env);
- }
- }
- }
- }
- }
-
- fault_role = axiom_soap_fault_get_role(soap_fault, env);
- if (fault_role)
- {
- axiom_node_t *fault_role_om_node = NULL;
- axiom_element_t *fault_role_om_ele = NULL;
-
- fault_role_om_node = axiom_soap_fault_role_get_base_node(fault_role, env);
- if (fault_role_om_node)
- {
- fault_role_om_ele = (axiom_element_t *)
- AXIOM_NODE_GET_DATA_ELEMENT(fault_role_om_node, env);
- if (fault_role_om_ele)
- {
- axiom_element_set_localname(fault_role_om_ele, env,
- AXIOM_SOAP11_SOAP_FAULT_ACTOR_LOCAL_NAME);
- }
- }
- }
-
- fault_detail = axiom_soap_fault_get_detail(soap_fault, env);
- if (fault_detail)
- {
- axiom_node_t *fault_detail_om_node = NULL;
- axiom_element_t *fault_detail_om_ele = NULL;
- fault_detail_om_node = axiom_soap_fault_detail_get_base_node(fault_detail, env);
- if (fault_detail_om_node)
- {
- fault_detail_om_ele = (axiom_element_t *)
- AXIOM_NODE_GET_DATA_ELEMENT(fault_detail_om_node, env);
- if (fault_detail_om_ele)
- {
- axiom_element_set_localname(fault_detail_om_ele,
- env, AXIOM_SOAP11_SOAP_FAULT_DETAIL_LOCAL_NAME);
- }
- }
- }
- }
- }
- }
+ axiom_soap_body_convert_fault_to_soap11(soap_body, env);
}
/* write the xml version and encoding
These should be set to om output before calling the serialize function
@@ -721,3 +578,4 @@
}
return AXIS2_FAILURE;
}
+
Modified: webservices/axis2/trunk/c/modules/core/clientapi/svc_client.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/modules/core/clientapi/svc_client.c?view=diff&rev=520405&r1=520404&r2=520405
==============================================================================
--- webservices/axis2/trunk/c/modules/core/clientapi/svc_client.c (original)
+++ webservices/axis2/trunk/c/modules/core/clientapi/svc_client.c Tue Mar 20 07:27:38 2007
@@ -744,6 +744,11 @@
return NULL;
}
+ if (AXIOM_SOAP11 == axiom_soap_envelope_get_soap_version(soap_envelope, env))
+ {
+ axiom_soap_body_convert_fault_to_soap11(soap_body, env);
+ }
+
soap_node = axiom_soap_body_get_base_node(soap_body, env);
if (!soap_node)
{
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org