You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-user@axis.apache.org by Karolina <sa...@gmail.com> on 2008/11/05 17:01:24 UTC

WS-Addressing: How service can extract reference parameters from message header?

Hello -

I am having trouble extracting reference parameters from the message header
on the service side.  I add reference parameters to the message header but
they are not appearing on the service side.

In the invoke method of my service in the axis2_svc_skel_<service>.c file, I
try to get the reference parameters directly from the message header as well
as from the TO endpoint reference (which I acquire from the header and from
the message context).  In all three attempts, the returned list of reference
parameters does not contain any elements. Is this the correct way to do
this?  What am I missing??

(I used WSDL2C to generate my service skeleton.  I am using release 1.5.0.)

Thanks for any help,
Karolina

Code for extracting reference parameters from message header:

//Get message context
in_msg_ctx = axis2_op_ctx_get_msg_ctx(operation_ctx, env,
AXIS2_WSDL_MESSAGE_LABEL_IN);

//get message header
axis2_msg_info_headers_t * msg_info_headers =
     axis2_msg_ctx_get_msg_info_headers(in_msg_ctx, env);

//get TO endpoint reference from message header
axis2_endpoint_ref_t * ToEPRfromHeaders =
     axis2_msg_info_headers_get_to(msg_info_headers, env);

//get TO endpoint reference from message context
axis2_endpoint_ref_t * ToEPRfromCtx =
     axis2_msg_ctx_get_to(in_msg_ctx, env);

/*Get list of reference parameters*/
axutil_array_list_t * refParamList_FromToFromHeader =
     axis2_endpoint_ref_get_ref_param_list(ToEPRfromHeaders, env);

axutil_array_list_t * refParamList_FromToFromCtx =
     axis2_endpoint_ref_get_ref_param_list(ToEPRfromCtx, env);

axutil_array_list_t * refParamList_FromHeader =
     axis2_msg_info_headers_get_all_ref_params(msg_info_headers, env);

Calling axutil_array_list_size on the lists returns 0.  Calling
axutil_array_list_get to get the first element in the lists returns NULL.

I used TCPmon to make sure there are reference parameters being passed.
Everything looks as expected.  TCPmon view of the header:

   <soapenv:Header>
       <wsa:To>http://localhost:8000/axis2/services/rbyteio</wsa:To>
       <wsa:TestParameter
wsa:isReferenceParameter="true">testing</wsa:TestParameter>
       <wsa:Action>http://schemas.ggf.org/rns/2006/05/rbyteio/append
</wsa:Action>

<wsa:MessageID>urn:uuid:5c017fcc-ab4e-1dd1-3bea-00e0812c2160</wsa:MessageID>
   </soapenv:Header>

I set the reference parameters as follows in my client code:

/*create axiom ref param element*/
axiom_node_t *refParams_node = NULL;
axiom_element_t *refParams_ele = NULL;
refParams_ele = axiom_element_create(env, NULL, "TestParameter", nsWSA,
&refParams_node);
axiom_element_set_text(refParams_ele, env, "testing", refParams_node);

/*create EPR and add ref param element*/
endpoint_ref = axis2_endpoint_ref_create(env,
    http://localhost:8000/axis2/services/rbyteio");
axis2_endpoint_ref_add_ref_param(endpoint_ref, env, refParams_node);

/*Specify request should be sent to created EPR*/
options = axis2_options_create(env);
axis2_options_set_to(options, env, endpoint_ref);

Re: WS-Addressing: How service can extract reference parameters from message header?

Posted by Samisa Abeysinghe <sa...@wso2.com>.
This might be a bug. Can you please provide some code to re-create the 
problem and raise an issue in Jira?

Thanks,
Samisa...

Karolina wrote:
> Hello -
>
> I am having trouble extracting reference parameters from the message 
> header on the service side.  I add reference parameters to the message 
> header but they are not appearing on the service side.
>
> In the invoke method of my service in the axis2_svc_skel_<service>.c 
> file, I try to get the reference parameters directly from the message 
> header as well as from the TO endpoint reference (which I acquire from 
> the header and from the message context).  In all three attempts, the 
> returned list of reference parameters does not contain any elements. 
> Is this the correct way to do this?  What am I missing??
>
> (I used WSDL2C to generate my service skeleton.  I am using release 
> 1.5.0. <http://1.5.0.>)
>
> Thanks for any help,
> Karolina
>
> Code for extracting reference parameters from message header:
>
> //Get message context
> in_msg_ctx = axis2_op_ctx_get_msg_ctx(operation_ctx, env, 
> AXIS2_WSDL_MESSAGE_LABEL_IN); 
>
> //get message header
> axis2_msg_info_headers_t * msg_info_headers =    
>      axis2_msg_ctx_get_msg_info_headers(in_msg_ctx, env);
>
> //get TO endpoint reference from message header
> axis2_endpoint_ref_t * ToEPRfromHeaders =
>      axis2_msg_info_headers_get_to(msg_info_headers, env);   
>
> //get TO endpoint reference from message context
> axis2_endpoint_ref_t * ToEPRfromCtx =
>      axis2_msg_ctx_get_to(in_msg_ctx, env);
>
> /*Get list of reference parameters*/
> axutil_array_list_t * refParamList_FromToFromHeader =
>      axis2_endpoint_ref_get_ref_param_list(ToEPRfromHeaders, env);
>
> axutil_array_list_t * refParamList_FromToFromCtx =
>      axis2_endpoint_ref_get_ref_param_list(ToEPRfromCtx, env);
>
> axutil_array_list_t * refParamList_FromHeader =
>      axis2_msg_info_headers_get_all_ref_params(msg_info_headers, env);
>
> Calling axutil_array_list_size on the lists returns 0.  Calling 
> axutil_array_list_get to get the first element in the lists returns NULL.
>
> I used TCPmon to make sure there are reference parameters being 
> passed.  Everything looks as expected.  TCPmon view of the header:
>
>    <soapenv:Header>
>        <wsa:To>http://localhost:8000/axis2/services/rbyteio</wsa:To>
>        <wsa:TestParameter 
> wsa:isReferenceParameter="true">testing</wsa:TestParameter>
>        
> <wsa:Action>http://schemas.ggf.org/rns/2006/05/rbyteio/append</wsa:Action>
>        
> <wsa:MessageID>urn:uuid:5c017fcc-ab4e-1dd1-3bea-00e0812c2160</wsa:MessageID>
>    </soapenv:Header>
>
> I set the reference parameters as follows in my client code:
>
> /*create axiom ref param element*/
> axiom_node_t *refParams_node = NULL;
> axiom_element_t *refParams_ele = NULL;
> refParams_ele = axiom_element_create(env, NULL, "TestParameter", 
> nsWSA, &refParams_node);
> axiom_element_set_text(refParams_ele, env, "testing", refParams_node);
>
> /*create EPR and add ref param element*/
> endpoint_ref = axis2_endpoint_ref_create(env,
>     http://localhost:8000/axis2/services/rbyteio");
> axis2_endpoint_ref_add_ref_param(endpoint_ref, env, refParams_node);
>
> /*Specify request should be sent to created EPR*/
> options = axis2_options_create(env);
> axis2_options_set_to(options, env, endpoint_ref);
>  
>
> ------------------------------------------------------------------------
>
>
> Internal Virus Database is out of date.
> Checked by AVG - http://www.avg.com 
> Version: 8.0.175 / Virus Database: 270.8.5/1759 - Release Date: 10/31/2008 4:10 PM
>
>   


-- 
Samisa Abeysinghe 
Director, Engineering; WSO2 Inc.

http://www.wso2.com/ - "The Open Source SOA Company"


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