You are viewing a plain text version of this content. The canonical link for it is here.
Posted to rampart-dev@ws.apache.org by ma...@apache.org on 2008/06/06 12:04:35 UTC

svn commit: r663877 - /webservices/rampart/trunk/c/src/util/rampart_handler_util.c

Author: manjula
Date: Fri Jun  6 03:04:35 2008
New Revision: 663877

URL: http://svn.apache.org/viewvc?rev=663877&view=rev
Log:
Fixing sending subcodes in the fault envelope case for SOAP11.

Modified:
    webservices/rampart/trunk/c/src/util/rampart_handler_util.c

Modified: webservices/rampart/trunk/c/src/util/rampart_handler_util.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_handler_util.c?rev=663877&r1=663876&r2=663877&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_handler_util.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_handler_util.c Fri Jun  6 03:04:35 2008
@@ -162,48 +162,72 @@
     axutil_array_list_t *sub_codes = NULL;
     axiom_soap_body_t *body = NULL;
 
-    sub_codes = axutil_array_list_create(env, 1);
-    axutil_array_list_add(sub_codes, env, sub_code);
+    /* Creating the detailed node in the fault envelope*/
 
     ns1 = axiom_namespace_create(env, RAMPART_WSSE_XMLNS, RAMPART_WSSE);
     text_om_ele = axiom_element_create(env, NULL, "ProblemSecurityHeader", ns1, &text_om_node);
     axiom_element_set_text(text_om_ele, env, detail_node_text, text_om_node);
 
-    /*In case of SOAP v 1.1 we change the default version*/
+    /* In SOAP11 sub code is the faultcode and no soapenv:sender*/
+
     if(axis2_msg_ctx_get_is_soap_11(msg_ctx, env))
     {
-        soap_version =  AXIOM_SOAP11;
+        soap_version = AXIOM_SOAP11;
+        envelope = axiom_soap_envelope_create_default_soap_fault_envelope(env,
+                   sub_code,
+                   reason_text,
+                   soap_version, NULL, text_om_node);
     }
 
-    envelope = axiom_soap_envelope_create_default_soap_fault_envelope(env,
+    /* In SOAP12 we need to create subcodes. subcode/value is the faultcode 
+       in SOAP11 and fault/code/value is soapenv:Sender*/
+
+    else
+    {
+        sub_codes = axutil_array_list_create(env, 1);
+        axutil_array_list_add(sub_codes, env, sub_code);
+
+        envelope = axiom_soap_envelope_create_default_soap_fault_envelope(env,
                "soapenv:Sender",
                reason_text,
                soap_version, sub_codes, text_om_node);
 
-    body = axiom_soap_envelope_get_body(envelope, env);
-    if(body)
-    {
-        axiom_node_t *body_node = NULL;
-        body_node = axiom_soap_body_get_base_node(body, env);
-        if(body_node)
+        if(envelope)
         {
-            axiom_node_t *subcode_node = NULL;
-            subcode_node = oxs_axiom_get_node_by_local_name(env, body_node, AXIOM_SOAP12_SOAP_FAULT_SUB_CODE_LOCAL_NAME);
-            if(subcode_node)
+            body = axiom_soap_envelope_get_body(envelope, env);
+            if(body)
             {
-                axiom_element_t *subcode_ele = NULL;
-                subcode_ele = axiom_node_get_data_element(subcode_node, env);
-                if(subcode_ele)
+                axiom_node_t *body_node = NULL;
+                body_node = axiom_soap_body_get_base_node(body, env);
+                if(body_node)
                 {
-                    axiom_element_declare_namespace(subcode_ele, env, subcode_node, ns1);
+                    axiom_node_t *subcode_node = NULL;
+                    subcode_node = oxs_axiom_get_node_by_local_name(env, body_node, AXIOM_SOAP12_SOAP_FAULT_SUB_CODE_LOCAL_NAME);
+                    if(subcode_node)
+                    {
+                        axiom_element_t *subcode_ele = NULL;
+                        subcode_ele = axiom_node_get_data_element(subcode_node, env);
+                        if(subcode_ele)
+                        {
+                            axiom_element_declare_namespace(subcode_ele, env, subcode_node, ns1);
+                        }
+                    }
                 }
             }
         }
     }
 
-    axis2_msg_ctx_set_fault_soap_envelope(msg_ctx, env, envelope);
+    if(envelope)
+    {
+        axis2_msg_ctx_set_fault_soap_envelope(msg_ctx, env, envelope);
+    }
+
     /*free sub codes*/
-	axutil_array_list_free(sub_codes, env);
+    if(sub_codes)
+    {
+	    axutil_array_list_free(sub_codes, env);
+    }
+
     return;
 }