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