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/08/14 04:18:01 UTC

svn commit: r565611 - /webservices/axis2/trunk/c/src/modules/mod_addr/addr_out_handler.c

Author: samisa
Date: Mon Aug 13 19:18:00 2007
New Revision: 565611

URL: http://svn.apache.org/viewvc?view=rev&rev=565611
Log:
Adding patch to set ReferenceParameters for wsa:To. Applied patch by Jamie Lyon - AXIS2C-668

Modified:
    webservices/axis2/trunk/c/src/modules/mod_addr/addr_out_handler.c

Modified: webservices/axis2/trunk/c/src/modules/mod_addr/addr_out_handler.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/src/modules/mod_addr/addr_out_handler.c?view=diff&rev=565611&r1=565610&r2=565611
==============================================================================
--- webservices/axis2/trunk/c/src/modules/mod_addr/addr_out_handler.c (original)
+++ webservices/axis2/trunk/c/src/modules/mod_addr/addr_out_handler.c Mon Aug 13 19:18:00 2007
@@ -118,14 +118,14 @@
     axiom_element_t *soap_header_ele = NULL;
     axis2_endpoint_ref_t *epr = NULL;
     axutil_property_t *property = NULL;
-	 const axis2_char_t *wsa_action = NULL;
+     const axis2_char_t *wsa_action = NULL;
 
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE);
     msg_info_headers =  axis2_msg_ctx_get_msg_info_headers(msg_ctx, env);
     if (!msg_info_headers)
         return AXIS2_SUCCESS; /* no addressing in use */
-	 wsa_action = axis2_msg_info_headers_get_action (msg_info_headers, env);
+     wsa_action = axis2_msg_info_headers_get_action (msg_info_headers, env);
     if (!wsa_action || !axutil_strcmp (wsa_action, ""))
         return AXIS2_SUCCESS; /* If no action present, assume no addressing in use */
 
@@ -265,6 +265,7 @@
             {
                 axiom_node_t *to_header_block_node = NULL;
                 axiom_soap_header_block_t *to_header_block = NULL;
+                axutil_array_list_t *ref_param_list = NULL;
 
                 to_header_block  =
                     axiom_soap_header_add_header_block(soap_header, env,
@@ -279,6 +280,55 @@
                     if (to_header_block_element)
                     {
                         axiom_element_set_text(to_header_block_element, env, address, to_header_block_node);
+                    }
+                }
+        
+        
+                ref_param_list = axis2_endpoint_ref_get_ref_param_list(epr, env);
+                if (ref_param_list && axutil_array_list_size(ref_param_list, env) > 0)
+                {
+                    axiom_soap_header_block_t *reference_header_block = NULL;
+                    axiom_node_t *reference_node = NULL;
+                    int i = 0;
+                    
+                    for (i = 0; i < axutil_array_list_size(ref_param_list, env); i++)
+                    {
+                        axiom_node_t *ref_node = NULL;
+                        
+                        ref_node = (axiom_node_t *)axutil_array_list_get(ref_param_list, env, i);
+                        if (ref_node)
+                        {
+                            axiom_element_t* ref_ele = NULL;
+                            
+                            ref_ele = axiom_node_get_data_element(ref_node,env);
+                            if (ref_ele)
+                            {                                        
+                                reference_header_block  =
+                                    axiom_soap_header_add_header_block(soap_header, env,
+                                    axiom_element_get_localname(ref_ele, env),
+                                    axiom_element_get_namespace(ref_ele,env,ref_node));
+                                
+                                reference_node = axiom_soap_header_block_get_base_node(reference_header_block, env);
+                                if (reference_node)
+                                {
+                                    axiom_element_t *reference_ele = NULL;
+                                    reference_ele = (axiom_element_t*)axiom_node_get_data_element(reference_node, env);
+                                    
+                                    if (reference_ele)
+                                    {
+                                        axiom_namespace_t *addr_ns_obj = NULL;
+                                        axiom_attribute_t *reference_attr = NULL;
+                                        
+                                        addr_ns_obj = axiom_namespace_create(env, addr_ns, AXIS2_WSA_DEFAULT_PREFIX);
+                                        reference_attr = 
+                                            axiom_attribute_create(env, "isReferenceParameter", "true", addr_ns_obj);
+                                        axiom_element_add_attribute(reference_ele, env, reference_attr, reference_node);
+                                        axiom_element_set_text( reference_ele, env, 
+                                            axiom_element_get_text( ref_ele, env, ref_node ), reference_node );
+                                    }
+                                }
+                            }
+                        }
                     }
                 }
             }



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org