You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@servicemix.apache.org by inter <ga...@126.com> on 2009/09/06 05:58:49 UTC

Problems with adding out-soap-header for cxf-bc..

I used cxf-bc-consumer,cxf-bc-provider and camel like follows:

cxf-bc-consumer=(1)=>servicemix-camel=(2)=>cxf-bc-provider=(3)=>external
server=(4)=>back to==>cxf-
-bc-provider=(5)=>servicemix-camel=(6)=>cxf-bc-consumer.

The  consumer and provider both have their  own wsdl  file.
The only difference of the two wsdl-files is that:the consumer's wsdl has a
out-soap-header  in binding def

but the provider's does not have it.

So  in step(6),i add a camel-processor to add a soap-heaer part in JBI msg
,the whole msg after my processor like this:
-------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<jbi:message xmlns:jbi="http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper"
	xmlns:msg="http://server" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	name="sayHelloResponse" type="msg:sayHelloResponse" version="1.0">
	<jbi:part>
		<ns1:sayHelloResponse xmlns:ns1="http://server">
			<ns1:out>Hello!!!boy</ns1:out>
		</ns1:sayHelloResponse>
	</jbi:part>
	<jbi:part>
		<wsse:AuthResult
		
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
			mustUnderstand="true">
			<wsse:ResultCode>0000</wsse:ResultCode>
			<wsse:ResultDetail>success</wsse:ResultDetail>
		</wsse:AuthResult>
	</jbi:part>
</jbi:message>
------------------------------------------------------------------------------------------------

But when out of servicemix-cxf-bc,the soap message does not contain
soap-header at all,it just contains 
the body message.
I am sure that I have added a soap-header to the binding def of the
consumer's wsdl.
 
I upload my whole sa ZIP , in the  cxf-bc-su.zip,there are all the wsdl
files.
The proxy.wsdl  is the consumer's,and the service.wsdl is the provider's,the
wsse.xsd is the imported schema in which the soap header is defined.

http://www.nabble.com/file/p25314469/test.zip test.zip 

-- 
View this message in context: http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25314469.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: Problems with adding out-soap-header for cxf-bc..

Posted by inter <ga...@126.com>.
Hi Freeman:
  Very sorry to trouble you again....
  I  have upgraded smx-cxf-bc to   2009-02-SNAPSHOT, the body's namespace
come back.
  
 But  one another problem,  the  attibute's namespace was lost.

Typically,like  

<ax260:NSJGS_0 xsi:nil="true" />

the attibute xsi:nil="true",  namespace xsi  was lost。

Leadingr to that,the client can't parse it.

Does this behaviour  be expected?

Or  is there any config fot that?

thanks!


Freeman Fang wrote:
> 
> Hi,
> 
> I believe SMXCOMP-618[1] already fix the namespace lost problem, you  
> need download a new snopshot from[2] to your SMX_HOME/hotdeploy folder  
> to override the old one
> 
> [1]https://issues.apache.org/activemq/browse/SMXCOMP-618
> [2]http://repo.open.iona.com/maven2-snapshot/org/apache/servicemix/servicemix-cxf-bc/2009.02-fuse-SNAPSHOT/
> 
> Freeman
> On 2009-9-10, at 下午12:29, inter wrote:
> 
>>
>> Hi,Freeman:
>>  I have found out another problem.........
>>
>>  If the header and the body have different namespace,the body's  
>> namespace
>> was lost!
>>
>> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/ 
>> envelope/"><
>> soap:Header><wsse:AuthResult
>> xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/
>> oasis-200401-wss-wssecurity-secext-1.0.xsd"
>> mustUnderstand="true"><wsse:ResultCo
>> de>0000</wsse:ResultCode><wsse:ResultDetail>认证成功!</ 
>> wsse:ResultDetail></wsse:
>> AuthResult></ 
>> soap:Header><soap:Body><findSubscriptionNotifierResult><success>tru
>> e</success><message>ESB09000</message><subscriptionNotifiers
>> /></findSubscriptio
>> nNotifierResult></soap:Body></soap:Envelope>
>>
>>
>> Freeman Fang wrote:
>>>
>>> Hi,
>>>
>>> I just verified this is a bug, create SMXCOMP-632[1] to track it, the
>>> fix is coming soon.
>>> The work around currently for you is add an interceptor as follows
>>>
>>> public class ExtractHeaderPartIntercepor extends
>>> AbstractPhaseInterceptor<Message> {
>>>
>>>     public ExtractHeaderPartIntercepor() {
>>>         super(Phase.PRE_STREAM);
>>>     }
>>>
>>>     public void handleMessage(Message message) {
>>>
>>>         extractHeaderFromMessagePart(message);
>>>     }
>>>
>>>     private void extractHeaderFromMessagePart(Message message) {
>>>         Source source = message.getContent(Source.class);
>>>         if (source == null) {
>>>             return;
>>>         }
>>>
>>>         Element element;
>>>         try {
>>>             element = new SourceTransformer().toDOMElement(source);
>>>         } catch (Exception e) {
>>>             throw new Fault(e);
>>>         }
>>>
>>>         if (!JbiConstants.WSDL11_WRAPPER_NAMESPACE.equals(element
>>>                 .getNamespaceURI())
>>>                 || !JbiConstants.WSDL11_WRAPPER_MESSAGE_LOCALNAME
>>>                         .equals(element.getLocalName())) {
>>>             message.setContent(Source.class, new DOMSource(element));
>>>             return;
>>>         }
>>>
>>>         BindingOperationInfo bop = message.getExchange().get(
>>>                 BindingOperationInfo.class);
>>>         if (bop == null) {
>>>             throw new Fault(
>>>                     new Exception("Operation not bound on this
>>> message"));
>>>         }
>>>         BindingMessageInfo msg = isRequestor(message) ?
>>> bop.getInput() : bop
>>>                 .getOutput();
>>>
>>>         SoapBindingInfo binding = (SoapBindingInfo)
>>> message.getExchange().get(
>>>                 Endpoint.class).getEndpointInfo().getBinding();
>>>         String style = binding.getStyle(bop.getOperationInfo());
>>>         if (style == null) {
>>>             style = binding.getStyle();
>>>         }
>>>
>>>         Element partWrapper = DomUtil.getFirstChildElement(element);
>>>         while (partWrapper != null) {
>>>             extractHeaderParts((SoapMessage) message, element,
>>> partWrapper, msg);
>>>             partWrapper = DomUtil.getNextSiblingElement(partWrapper);
>>>         }
>>>         message.setContent(Source.class, new DOMSource(element));
>>>     }
>>>
>>>     private void extractHeaderParts(SoapMessage message,
>>>             Element element, Element partWrapper, BindingMessageInfo
>>> msg) {
>>>         List<NodeList> partsContent = new ArrayList<NodeList>();
>>>         if (partWrapper != null) {
>>>             if (!JbiConstants.WSDL11_WRAPPER_NAMESPACE.equals(element
>>>                     .getNamespaceURI())
>>>                     || !JbiConstants.WSDL11_WRAPPER_PART_LOCALNAME
>>>                             .equals(partWrapper.getLocalName())) {
>>>                 throw new Fault(new Exception(
>>>                         "Unexpected part wrapper element '"
>>>                                 + QNameUtil.toString(element) + "'
>>> expected '{"
>>>                                 +  
>>> JbiConstants.WSDL11_WRAPPER_NAMESPACE
>>>                                 + "}part'"));
>>>             }
>>>             NodeList nodes = partWrapper.getChildNodes();
>>>             partsContent.add(nodes);
>>>         }
>>>
>>>         List<Header> headerList = message.getHeaders();
>>>         List<SoapHeaderInfo> headers =
>>> msg.getExtensors(SoapHeaderInfo.class);
>>>         for (SoapHeaderInfo header : headers) {
>>>             if (partsContent.size() == 0) {
>>>                 break;
>>>             }
>>>
>>>             NodeList nl = partsContent.get(0);
>>>             if
>>> (header.getPart().getConcreteName().getNamespaceURI().equals(
>>>                     nl.item(0).getNamespaceURI())
>>>                     &&
>>> header.getPart().getConcreteName().getLocalPart()
>>>                             .equals(nl.item(0).getLocalName())) {
>>>                 headerList.add(new
>>> Header(header.getPart().getConcreteName(),
>>>                         nl.item(0)));
>>>                 partsContent.remove(0);
>>>             }
>>>
>>>         }
>>>
>>>     }
>>>
>>> }
>>>
>>> Then add ExtractHeaderPartIntercepor to your cxf bc consumer
>>> <cxfbc:outInterceptors>
>>>
>>> [1]https://issues.apache.org/activemq/browse/SMXCOMP-632
>>>
>>> Freeman
>>> On 2009-9-7, at 下午9:47, inter wrote:
>>>
>>>>
>>>> Hi,Freeman :
>>>> I wrote a cxf-interceptor just before JbiOutWsdl1Interceptor  at
>>>> Phase.MARSHAL to trace the flow.
>>>> I found that  the JbiOutWsdl1Interceptor   has parsed the jbi-
>>>> message as
>>>> expected.
>>>> It got out the soap-headers and put it into the headlist,like :
>>>> List<Header> headerList = message.getHeaders();
>>>> headerList.add(new Header(header.getPart().getConcreteName(),
>>>>                       nl.item(0)));
>>>>
>>>>
>>>> I print out the header's name ,it was "AuthResult" and namespace was
>>>> also
>>>> the expected.
>>>>
>>>> But the SoapResponse to the client still has only the soap body.
>>>>
>>>> How can i go ahead?
>>>>
>>>> Is it the problem of SoapOutInterceptor$SoapOutEndingInterceptor,or
>>>> StaxOutInterceptor$StaxOutEndingInterceptor,or
>>>> MessageSenderInterceptor$MessageSenderEndingInterceptor?
>>>>
>>>> This really confused me.
>>>>
>>>> Expecting for your help!
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Freeman Fang wrote:
>>>>>
>>>>>
>>>>> It should work, ensure the jbi part you added has same namespace  
>>>>> and
>>>>> local name as it defined in the schema.
>>>>> what's the servicemix version you are using?
>>>>>
>>>>> Freeman
>>>>>> Freeman Fang wrote:
>>>>>>>
>>>>>>> Hi,
>>>>>>> Cxf bc provider parse JBI message and generate soap message based
>>>>>>> on
>>>>>>> wsdl model.
>>>>>>> So if the wsdl used for your cxf bc provider has no soap header  
>>>>>>> in
>>>>>>> binding def, the soap message sent out from your cxf bc provider
>>>>>>> won't
>>>>>>> have soap header, it's expected behavior.
>>>>>>> You may need change your provider wsdl first.
>>>>>>>
>>>>>>> Freeman
>>>>>>> On 2009-9-6, at 上午11:58, inter wrote:
>>>>>>>
>>>>>>>>
>>>>>>>> I used cxf-bc-consumer,cxf-bc-provider and camel like follows:
>>>>>>>>
>>>>>>>> cxf-bc-consumer=(1)=>servicemix-camel=(2)=>cxf-bc-
>>>>>>>> provider=(3)=>external
>>>>>>>> server=(4)=>back to==>cxf-
>>>>>>>> -bc-provider=(5)=>servicemix-camel=(6)=>cxf-bc-consumer.
>>>>>>>>
>>>>>>>> The  consumer and provider both have their  own wsdl  file.
>>>>>>>> The only difference of the two wsdl-files is that:the consumer's
>>>>>>>> wsdl has a
>>>>>>>> out-soap-header  in binding def
>>>>>>>>
>>>>>>>> but the provider's does not have it.
>>>>>>>>
>>>>>>>> So  in step(6),i add a camel-processor to add a soap-heaer  
>>>>>>>> part in
>>>>>>>> JBI msg
>>>>>>>> ,the whole msg after my processor like this:
>>>>>>>> -------------------------------------------------------------------------------------
>>>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>>>> <jbi:message xmlns:jbi="http://java.sun.com/xml/ns/jbi/wsdl-11-
>>>>>>>> wrapper"
>>>>>>>> 	xmlns:msg="http://server" xmlns:xsd="http://www.w3.org/2001/
>>>>>>>> XMLSchema"
>>>>>>>> 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>>>> 	name="sayHelloResponse" type="msg:sayHelloResponse"
>>>>>>>> version="1.0">
>>>>>>>> 	<jbi:part>
>>>>>>>> 		<ns1:sayHelloResponse xmlns:ns1="http://server">
>>>>>>>> 			<ns1:out>Hello!!!boy</ns1:out>
>>>>>>>> 		</ns1:sayHelloResponse>
>>>>>>>> 	</jbi:part>
>>>>>>>> 	<jbi:part>
>>>>>>>> 		<wsse:AuthResult
>>>>>>>> 		
>>>>>>>> xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
>>>>>>>> "
>>>>>>>> 			mustUnderstand="true">
>>>>>>>> 			<wsse:ResultCode>0000</wsse:ResultCode>
>>>>>>>> 			<wsse:ResultDetail>success</wsse:ResultDetail>
>>>>>>>> 		</wsse:AuthResult>
>>>>>>>> 	</jbi:part>
>>>>>>>> </jbi:message>
>>>>>>>> ------------------------------------------------------------------------------------------------
>>>>>>>>
>>>>>>>> But when out of servicemix-cxf-bc,the soap message does not
>>>>>>>> contain
>>>>>>>> soap-header at all,it just contains
>>>>>>>> the body message.
>>>>>>>> I am sure that I have added a soap-header to the binding def of
>>>>>>>> the
>>>>>>>> consumer's wsdl.
>>>>>>>>
>>>>>>>> I upload my whole sa ZIP , in the  cxf-bc-su.zip,there are all  
>>>>>>>> the
>>>>>>>> wsdl
>>>>>>>> files.
>>>>>>>> The proxy.wsdl  is the consumer's,and the service.wsdl is the
>>>>>>>> provider's,the
>>>>>>>> wsse.xsd is the imported schema in which the soap header is
>>>>>>>> defined.
>>>>>>>>
>>>>>>>> http://www.nabble.com/file/p25314469/test.zip test.zip
>>>>>>>>
>>>>>>>> -- 
>>>>>>>> View this message in context:
>>>>>>>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25314469.html
>>>>>>>> Sent from the ServiceMix - User mailing list archive at
>>>>>>>> Nabble.com.
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> -- 
>>>>>>> Freeman Fang
>>>>>>> ------------------------
>>>>>>> Open Source SOA: http://fusesource.com
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> -- 
>>>>>> View this message in context:
>>>>>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25316117.html
>>>>>> Sent from the ServiceMix - User mailing list archive at  
>>>>>> Nabble.com.
>>>>>>
>>>>>
>>>>>
>>>>> -- 
>>>>> Freeman Fang
>>>>> ------------------------
>>>>> Open Source SOA: http://fusesource.com
>>>>>
>>>>>
>>>>>
>>>>
>>>> -- 
>>>> View this message in context:
>>>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25330829.html
>>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>>
>>>
>>>
>>> -- 
>>> Freeman Fang
>>> ------------------------
>>> Open Source SOA: http://fusesource.com
>>>
>>>
>>>
>>
>> -- 
>> View this message in context:
>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25377111.html
>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>
> 
> 
> -- 
> Freeman Fang
> ------------------------
> Open Source SOA: http://fusesource.com
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25381688.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: Problems with adding out-soap-header for cxf-bc..

Posted by Freeman Fang <fr...@gmail.com>.
Hi,

I believe SMXCOMP-618[1] already fix the namespace lost problem, you  
need download a new snopshot from[2] to your SMX_HOME/hotdeploy folder  
to override the old one

[1]https://issues.apache.org/activemq/browse/SMXCOMP-618
[2]http://repo.open.iona.com/maven2-snapshot/org/apache/servicemix/servicemix-cxf-bc/2009.02-fuse-SNAPSHOT/

Freeman
On 2009-9-10, at 下午12:29, inter wrote:

>
> Hi,Freeman:
>  I have found out another problem.........
>
>  If the header and the body have different namespace,the body's  
> namespace
> was lost!
>
> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/ 
> envelope/"><
> soap:Header><wsse:AuthResult
> xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/
> oasis-200401-wss-wssecurity-secext-1.0.xsd"
> mustUnderstand="true"><wsse:ResultCo
> de>0000</wsse:ResultCode><wsse:ResultDetail>认证成功!</ 
> wsse:ResultDetail></wsse:
> AuthResult></ 
> soap:Header><soap:Body><findSubscriptionNotifierResult><success>tru
> e</success><message>ESB09000</message><subscriptionNotifiers
> /></findSubscriptio
> nNotifierResult></soap:Body></soap:Envelope>
>
>
> Freeman Fang wrote:
>>
>> Hi,
>>
>> I just verified this is a bug, create SMXCOMP-632[1] to track it, the
>> fix is coming soon.
>> The work around currently for you is add an interceptor as follows
>>
>> public class ExtractHeaderPartIntercepor extends
>> AbstractPhaseInterceptor<Message> {
>>
>>     public ExtractHeaderPartIntercepor() {
>>         super(Phase.PRE_STREAM);
>>     }
>>
>>     public void handleMessage(Message message) {
>>
>>         extractHeaderFromMessagePart(message);
>>     }
>>
>>     private void extractHeaderFromMessagePart(Message message) {
>>         Source source = message.getContent(Source.class);
>>         if (source == null) {
>>             return;
>>         }
>>
>>         Element element;
>>         try {
>>             element = new SourceTransformer().toDOMElement(source);
>>         } catch (Exception e) {
>>             throw new Fault(e);
>>         }
>>
>>         if (!JbiConstants.WSDL11_WRAPPER_NAMESPACE.equals(element
>>                 .getNamespaceURI())
>>                 || !JbiConstants.WSDL11_WRAPPER_MESSAGE_LOCALNAME
>>                         .equals(element.getLocalName())) {
>>             message.setContent(Source.class, new DOMSource(element));
>>             return;
>>         }
>>
>>         BindingOperationInfo bop = message.getExchange().get(
>>                 BindingOperationInfo.class);
>>         if (bop == null) {
>>             throw new Fault(
>>                     new Exception("Operation not bound on this
>> message"));
>>         }
>>         BindingMessageInfo msg = isRequestor(message) ?
>> bop.getInput() : bop
>>                 .getOutput();
>>
>>         SoapBindingInfo binding = (SoapBindingInfo)
>> message.getExchange().get(
>>                 Endpoint.class).getEndpointInfo().getBinding();
>>         String style = binding.getStyle(bop.getOperationInfo());
>>         if (style == null) {
>>             style = binding.getStyle();
>>         }
>>
>>         Element partWrapper = DomUtil.getFirstChildElement(element);
>>         while (partWrapper != null) {
>>             extractHeaderParts((SoapMessage) message, element,
>> partWrapper, msg);
>>             partWrapper = DomUtil.getNextSiblingElement(partWrapper);
>>         }
>>         message.setContent(Source.class, new DOMSource(element));
>>     }
>>
>>     private void extractHeaderParts(SoapMessage message,
>>             Element element, Element partWrapper, BindingMessageInfo
>> msg) {
>>         List<NodeList> partsContent = new ArrayList<NodeList>();
>>         if (partWrapper != null) {
>>             if (!JbiConstants.WSDL11_WRAPPER_NAMESPACE.equals(element
>>                     .getNamespaceURI())
>>                     || !JbiConstants.WSDL11_WRAPPER_PART_LOCALNAME
>>                             .equals(partWrapper.getLocalName())) {
>>                 throw new Fault(new Exception(
>>                         "Unexpected part wrapper element '"
>>                                 + QNameUtil.toString(element) + "'
>> expected '{"
>>                                 +  
>> JbiConstants.WSDL11_WRAPPER_NAMESPACE
>>                                 + "}part'"));
>>             }
>>             NodeList nodes = partWrapper.getChildNodes();
>>             partsContent.add(nodes);
>>         }
>>
>>         List<Header> headerList = message.getHeaders();
>>         List<SoapHeaderInfo> headers =
>> msg.getExtensors(SoapHeaderInfo.class);
>>         for (SoapHeaderInfo header : headers) {
>>             if (partsContent.size() == 0) {
>>                 break;
>>             }
>>
>>             NodeList nl = partsContent.get(0);
>>             if
>> (header.getPart().getConcreteName().getNamespaceURI().equals(
>>                     nl.item(0).getNamespaceURI())
>>                     &&
>> header.getPart().getConcreteName().getLocalPart()
>>                             .equals(nl.item(0).getLocalName())) {
>>                 headerList.add(new
>> Header(header.getPart().getConcreteName(),
>>                         nl.item(0)));
>>                 partsContent.remove(0);
>>             }
>>
>>         }
>>
>>     }
>>
>> }
>>
>> Then add ExtractHeaderPartIntercepor to your cxf bc consumer
>> <cxfbc:outInterceptors>
>>
>> [1]https://issues.apache.org/activemq/browse/SMXCOMP-632
>>
>> Freeman
>> On 2009-9-7, at 下午9:47, inter wrote:
>>
>>>
>>> Hi,Freeman :
>>> I wrote a cxf-interceptor just before JbiOutWsdl1Interceptor  at
>>> Phase.MARSHAL to trace the flow.
>>> I found that  the JbiOutWsdl1Interceptor   has parsed the jbi-
>>> message as
>>> expected.
>>> It got out the soap-headers and put it into the headlist,like :
>>> List<Header> headerList = message.getHeaders();
>>> headerList.add(new Header(header.getPart().getConcreteName(),
>>>                       nl.item(0)));
>>>
>>>
>>> I print out the header's name ,it was "AuthResult" and namespace was
>>> also
>>> the expected.
>>>
>>> But the SoapResponse to the client still has only the soap body.
>>>
>>> How can i go ahead?
>>>
>>> Is it the problem of SoapOutInterceptor$SoapOutEndingInterceptor,or
>>> StaxOutInterceptor$StaxOutEndingInterceptor,or
>>> MessageSenderInterceptor$MessageSenderEndingInterceptor?
>>>
>>> This really confused me.
>>>
>>> Expecting for your help!
>>>
>>>
>>>
>>>
>>>
>>> Freeman Fang wrote:
>>>>
>>>>
>>>> It should work, ensure the jbi part you added has same namespace  
>>>> and
>>>> local name as it defined in the schema.
>>>> what's the servicemix version you are using?
>>>>
>>>> Freeman
>>>>> Freeman Fang wrote:
>>>>>>
>>>>>> Hi,
>>>>>> Cxf bc provider parse JBI message and generate soap message based
>>>>>> on
>>>>>> wsdl model.
>>>>>> So if the wsdl used for your cxf bc provider has no soap header  
>>>>>> in
>>>>>> binding def, the soap message sent out from your cxf bc provider
>>>>>> won't
>>>>>> have soap header, it's expected behavior.
>>>>>> You may need change your provider wsdl first.
>>>>>>
>>>>>> Freeman
>>>>>> On 2009-9-6, at 上午11:58, inter wrote:
>>>>>>
>>>>>>>
>>>>>>> I used cxf-bc-consumer,cxf-bc-provider and camel like follows:
>>>>>>>
>>>>>>> cxf-bc-consumer=(1)=>servicemix-camel=(2)=>cxf-bc-
>>>>>>> provider=(3)=>external
>>>>>>> server=(4)=>back to==>cxf-
>>>>>>> -bc-provider=(5)=>servicemix-camel=(6)=>cxf-bc-consumer.
>>>>>>>
>>>>>>> The  consumer and provider both have their  own wsdl  file.
>>>>>>> The only difference of the two wsdl-files is that:the consumer's
>>>>>>> wsdl has a
>>>>>>> out-soap-header  in binding def
>>>>>>>
>>>>>>> but the provider's does not have it.
>>>>>>>
>>>>>>> So  in step(6),i add a camel-processor to add a soap-heaer  
>>>>>>> part in
>>>>>>> JBI msg
>>>>>>> ,the whole msg after my processor like this:
>>>>>>> -------------------------------------------------------------------------------------
>>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>>> <jbi:message xmlns:jbi="http://java.sun.com/xml/ns/jbi/wsdl-11-
>>>>>>> wrapper"
>>>>>>> 	xmlns:msg="http://server" xmlns:xsd="http://www.w3.org/2001/
>>>>>>> XMLSchema"
>>>>>>> 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>>> 	name="sayHelloResponse" type="msg:sayHelloResponse"
>>>>>>> version="1.0">
>>>>>>> 	<jbi:part>
>>>>>>> 		<ns1:sayHelloResponse xmlns:ns1="http://server">
>>>>>>> 			<ns1:out>Hello!!!boy</ns1:out>
>>>>>>> 		</ns1:sayHelloResponse>
>>>>>>> 	</jbi:part>
>>>>>>> 	<jbi:part>
>>>>>>> 		<wsse:AuthResult
>>>>>>> 		
>>>>>>> xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
>>>>>>> "
>>>>>>> 			mustUnderstand="true">
>>>>>>> 			<wsse:ResultCode>0000</wsse:ResultCode>
>>>>>>> 			<wsse:ResultDetail>success</wsse:ResultDetail>
>>>>>>> 		</wsse:AuthResult>
>>>>>>> 	</jbi:part>
>>>>>>> </jbi:message>
>>>>>>> ------------------------------------------------------------------------------------------------
>>>>>>>
>>>>>>> But when out of servicemix-cxf-bc,the soap message does not
>>>>>>> contain
>>>>>>> soap-header at all,it just contains
>>>>>>> the body message.
>>>>>>> I am sure that I have added a soap-header to the binding def of
>>>>>>> the
>>>>>>> consumer's wsdl.
>>>>>>>
>>>>>>> I upload my whole sa ZIP , in the  cxf-bc-su.zip,there are all  
>>>>>>> the
>>>>>>> wsdl
>>>>>>> files.
>>>>>>> The proxy.wsdl  is the consumer's,and the service.wsdl is the
>>>>>>> provider's,the
>>>>>>> wsse.xsd is the imported schema in which the soap header is
>>>>>>> defined.
>>>>>>>
>>>>>>> http://www.nabble.com/file/p25314469/test.zip test.zip
>>>>>>>
>>>>>>> -- 
>>>>>>> View this message in context:
>>>>>>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25314469.html
>>>>>>> Sent from the ServiceMix - User mailing list archive at
>>>>>>> Nabble.com.
>>>>>>>
>>>>>>
>>>>>>
>>>>>> -- 
>>>>>> Freeman Fang
>>>>>> ------------------------
>>>>>> Open Source SOA: http://fusesource.com
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> -- 
>>>>> View this message in context:
>>>>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25316117.html
>>>>> Sent from the ServiceMix - User mailing list archive at  
>>>>> Nabble.com.
>>>>>
>>>>
>>>>
>>>> -- 
>>>> Freeman Fang
>>>> ------------------------
>>>> Open Source SOA: http://fusesource.com
>>>>
>>>>
>>>>
>>>
>>> -- 
>>> View this message in context:
>>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25330829.html
>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>
>>
>>
>> -- 
>> Freeman Fang
>> ------------------------
>> Open Source SOA: http://fusesource.com
>>
>>
>>
>
> -- 
> View this message in context: http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25377111.html
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>


-- 
Freeman Fang
------------------------
Open Source SOA: http://fusesource.com


Re: Problems with adding out-soap-header for cxf-bc..

Posted by inter <ga...@126.com>.
Hi,Freeman:
  I have found out another problem.........

  If the header and the body have different namespace,the body's namespace
was lost!

 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><
soap:Header><wsse:AuthResult
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/
oasis-200401-wss-wssecurity-secext-1.0.xsd"
mustUnderstand="true"><wsse:ResultCo
de>0000</wsse:ResultCode><wsse:ResultDetail>认证成功!</wsse:ResultDetail></wsse:
AuthResult></soap:Header><soap:Body><findSubscriptionNotifierResult><success>tru
e</success><message>ESB09000</message><subscriptionNotifiers
/></findSubscriptio
nNotifierResult></soap:Body></soap:Envelope>


Freeman Fang wrote:
> 
> Hi,
> 
> I just verified this is a bug, create SMXCOMP-632[1] to track it, the  
> fix is coming soon.
> The work around currently for you is add an interceptor as follows
> 
> public class ExtractHeaderPartIntercepor extends  
> AbstractPhaseInterceptor<Message> {
> 
>      public ExtractHeaderPartIntercepor() {
>          super(Phase.PRE_STREAM);
>      }
> 
>      public void handleMessage(Message message) {
> 
>          extractHeaderFromMessagePart(message);
>      }
> 
>      private void extractHeaderFromMessagePart(Message message) {
>          Source source = message.getContent(Source.class);
>          if (source == null) {
>              return;
>          }
> 
>          Element element;
>          try {
>              element = new SourceTransformer().toDOMElement(source);
>          } catch (Exception e) {
>              throw new Fault(e);
>          }
> 
>          if (!JbiConstants.WSDL11_WRAPPER_NAMESPACE.equals(element
>                  .getNamespaceURI())
>                  || !JbiConstants.WSDL11_WRAPPER_MESSAGE_LOCALNAME
>                          .equals(element.getLocalName())) {
>              message.setContent(Source.class, new DOMSource(element));
>              return;
>          }
> 
>          BindingOperationInfo bop = message.getExchange().get(
>                  BindingOperationInfo.class);
>          if (bop == null) {
>              throw new Fault(
>                      new Exception("Operation not bound on this  
> message"));
>          }
>          BindingMessageInfo msg = isRequestor(message) ?  
> bop.getInput() : bop
>                  .getOutput();
> 
>          SoapBindingInfo binding = (SoapBindingInfo)  
> message.getExchange().get(
>                  Endpoint.class).getEndpointInfo().getBinding();
>          String style = binding.getStyle(bop.getOperationInfo());
>          if (style == null) {
>              style = binding.getStyle();
>          }
> 
>          Element partWrapper = DomUtil.getFirstChildElement(element);
>          while (partWrapper != null) {
>              extractHeaderParts((SoapMessage) message, element,  
> partWrapper, msg);
>              partWrapper = DomUtil.getNextSiblingElement(partWrapper);
>          }
>          message.setContent(Source.class, new DOMSource(element));
>      }
> 
>      private void extractHeaderParts(SoapMessage message,
>              Element element, Element partWrapper, BindingMessageInfo  
> msg) {
>          List<NodeList> partsContent = new ArrayList<NodeList>();
>          if (partWrapper != null) {
>              if (!JbiConstants.WSDL11_WRAPPER_NAMESPACE.equals(element
>                      .getNamespaceURI())
>                      || !JbiConstants.WSDL11_WRAPPER_PART_LOCALNAME
>                              .equals(partWrapper.getLocalName())) {
>                  throw new Fault(new Exception(
>                          "Unexpected part wrapper element '"
>                                  + QNameUtil.toString(element) + "'  
> expected '{"
>                                  + JbiConstants.WSDL11_WRAPPER_NAMESPACE
>                                  + "}part'"));
>              }
>              NodeList nodes = partWrapper.getChildNodes();
>              partsContent.add(nodes);
>          }
> 
>          List<Header> headerList = message.getHeaders();
>          List<SoapHeaderInfo> headers =  
> msg.getExtensors(SoapHeaderInfo.class);
>          for (SoapHeaderInfo header : headers) {
>              if (partsContent.size() == 0) {
>                  break;
>              }
> 
>              NodeList nl = partsContent.get(0);
>              if  
> (header.getPart().getConcreteName().getNamespaceURI().equals(
>                      nl.item(0).getNamespaceURI())
>                      &&  
> header.getPart().getConcreteName().getLocalPart()
>                              .equals(nl.item(0).getLocalName())) {
>                  headerList.add(new  
> Header(header.getPart().getConcreteName(),
>                          nl.item(0)));
>                  partsContent.remove(0);
>              }
> 
>          }
> 
>      }
> 
> }
> 
> Then add ExtractHeaderPartIntercepor to your cxf bc consumer  
> <cxfbc:outInterceptors>
> 
> [1]https://issues.apache.org/activemq/browse/SMXCOMP-632
> 
> Freeman
> On 2009-9-7, at 下午9:47, inter wrote:
> 
>>
>> Hi,Freeman :
>>  I wrote a cxf-interceptor just before JbiOutWsdl1Interceptor  at
>> Phase.MARSHAL to trace the flow.
>>  I found that  the JbiOutWsdl1Interceptor   has parsed the jbi- 
>> message as
>> expected.
>>  It got out the soap-headers and put it into the headlist,like :
>>  List<Header> headerList = message.getHeaders();
>>  headerList.add(new Header(header.getPart().getConcreteName(),
>>                        nl.item(0)));
>>
>>
>> I print out the header's name ,it was "AuthResult" and namespace was  
>> also
>> the expected.
>>
>> But the SoapResponse to the client still has only the soap body.
>>
>> How can i go ahead?
>>
>> Is it the problem of SoapOutInterceptor$SoapOutEndingInterceptor,or
>> StaxOutInterceptor$StaxOutEndingInterceptor,or
>> MessageSenderInterceptor$MessageSenderEndingInterceptor?
>>
>> This really confused me.
>>
>> Expecting for your help!
>>
>>
>>
>>
>>
>> Freeman Fang wrote:
>>>
>>>
>>> It should work, ensure the jbi part you added has same namespace and
>>> local name as it defined in the schema.
>>> what's the servicemix version you are using?
>>>
>>> Freeman
>>>> Freeman Fang wrote:
>>>>>
>>>>> Hi,
>>>>> Cxf bc provider parse JBI message and generate soap message based  
>>>>> on
>>>>> wsdl model.
>>>>> So if the wsdl used for your cxf bc provider has no soap header in
>>>>> binding def, the soap message sent out from your cxf bc provider
>>>>> won't
>>>>> have soap header, it's expected behavior.
>>>>> You may need change your provider wsdl first.
>>>>>
>>>>> Freeman
>>>>> On 2009-9-6, at 上午11:58, inter wrote:
>>>>>
>>>>>>
>>>>>> I used cxf-bc-consumer,cxf-bc-provider and camel like follows:
>>>>>>
>>>>>> cxf-bc-consumer=(1)=>servicemix-camel=(2)=>cxf-bc-
>>>>>> provider=(3)=>external
>>>>>> server=(4)=>back to==>cxf-
>>>>>> -bc-provider=(5)=>servicemix-camel=(6)=>cxf-bc-consumer.
>>>>>>
>>>>>> The  consumer and provider both have their  own wsdl  file.
>>>>>> The only difference of the two wsdl-files is that:the consumer's
>>>>>> wsdl has a
>>>>>> out-soap-header  in binding def
>>>>>>
>>>>>> but the provider's does not have it.
>>>>>>
>>>>>> So  in step(6),i add a camel-processor to add a soap-heaer part in
>>>>>> JBI msg
>>>>>> ,the whole msg after my processor like this:
>>>>>> -------------------------------------------------------------------------------------
>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>> <jbi:message xmlns:jbi="http://java.sun.com/xml/ns/jbi/wsdl-11-
>>>>>> wrapper"
>>>>>> 	xmlns:msg="http://server" xmlns:xsd="http://www.w3.org/2001/
>>>>>> XMLSchema"
>>>>>> 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>> 	name="sayHelloResponse" type="msg:sayHelloResponse"  
>>>>>> version="1.0">
>>>>>> 	<jbi:part>
>>>>>> 		<ns1:sayHelloResponse xmlns:ns1="http://server">
>>>>>> 			<ns1:out>Hello!!!boy</ns1:out>
>>>>>> 		</ns1:sayHelloResponse>
>>>>>> 	</jbi:part>
>>>>>> 	<jbi:part>
>>>>>> 		<wsse:AuthResult
>>>>>> 		
>>>>>> xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
>>>>>> "
>>>>>> 			mustUnderstand="true">
>>>>>> 			<wsse:ResultCode>0000</wsse:ResultCode>
>>>>>> 			<wsse:ResultDetail>success</wsse:ResultDetail>
>>>>>> 		</wsse:AuthResult>
>>>>>> 	</jbi:part>
>>>>>> </jbi:message>
>>>>>> ------------------------------------------------------------------------------------------------
>>>>>>
>>>>>> But when out of servicemix-cxf-bc,the soap message does not  
>>>>>> contain
>>>>>> soap-header at all,it just contains
>>>>>> the body message.
>>>>>> I am sure that I have added a soap-header to the binding def of  
>>>>>> the
>>>>>> consumer's wsdl.
>>>>>>
>>>>>> I upload my whole sa ZIP , in the  cxf-bc-su.zip,there are all the
>>>>>> wsdl
>>>>>> files.
>>>>>> The proxy.wsdl  is the consumer's,and the service.wsdl is the
>>>>>> provider's,the
>>>>>> wsse.xsd is the imported schema in which the soap header is  
>>>>>> defined.
>>>>>>
>>>>>> http://www.nabble.com/file/p25314469/test.zip test.zip
>>>>>>
>>>>>> -- 
>>>>>> View this message in context:
>>>>>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25314469.html
>>>>>> Sent from the ServiceMix - User mailing list archive at  
>>>>>> Nabble.com.
>>>>>>
>>>>>
>>>>>
>>>>> -- 
>>>>> Freeman Fang
>>>>> ------------------------
>>>>> Open Source SOA: http://fusesource.com
>>>>>
>>>>>
>>>>>
>>>>
>>>> -- 
>>>> View this message in context:
>>>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25316117.html
>>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>>
>>>
>>>
>>> -- 
>>> Freeman Fang
>>> ------------------------
>>> Open Source SOA: http://fusesource.com
>>>
>>>
>>>
>>
>> -- 
>> View this message in context:
>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25330829.html
>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>
> 
> 
> -- 
> Freeman Fang
> ------------------------
> Open Source SOA: http://fusesource.com
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25377111.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: Problems with adding out-soap-header for cxf-bc..

Posted by inter <ga...@126.com>.
Hi:
  I got it worked accoding to your ideas!
  
 Great thanks!



Freeman Fang wrote:
> 
> Hi,
> 
> I just verified this is a bug, create SMXCOMP-632[1] to track it, the  
> fix is coming soon.
> The work around currently for you is add an interceptor as follows
> 
> public class ExtractHeaderPartIntercepor extends  
> AbstractPhaseInterceptor<Message> {
> 
>      public ExtractHeaderPartIntercepor() {
>          super(Phase.PRE_STREAM);
>      }
> 
>      public void handleMessage(Message message) {
> 
>          extractHeaderFromMessagePart(message);
>      }
> 
>      private void extractHeaderFromMessagePart(Message message) {
>          Source source = message.getContent(Source.class);
>          if (source == null) {
>              return;
>          }
> 
>          Element element;
>          try {
>              element = new SourceTransformer().toDOMElement(source);
>          } catch (Exception e) {
>              throw new Fault(e);
>          }
> 
>          if (!JbiConstants.WSDL11_WRAPPER_NAMESPACE.equals(element
>                  .getNamespaceURI())
>                  || !JbiConstants.WSDL11_WRAPPER_MESSAGE_LOCALNAME
>                          .equals(element.getLocalName())) {
>              message.setContent(Source.class, new DOMSource(element));
>              return;
>          }
> 
>          BindingOperationInfo bop = message.getExchange().get(
>                  BindingOperationInfo.class);
>          if (bop == null) {
>              throw new Fault(
>                      new Exception("Operation not bound on this  
> message"));
>          }
>          BindingMessageInfo msg = isRequestor(message) ?  
> bop.getInput() : bop
>                  .getOutput();
> 
>          SoapBindingInfo binding = (SoapBindingInfo)  
> message.getExchange().get(
>                  Endpoint.class).getEndpointInfo().getBinding();
>          String style = binding.getStyle(bop.getOperationInfo());
>          if (style == null) {
>              style = binding.getStyle();
>          }
> 
>          Element partWrapper = DomUtil.getFirstChildElement(element);
>          while (partWrapper != null) {
>              extractHeaderParts((SoapMessage) message, element,  
> partWrapper, msg);
>              partWrapper = DomUtil.getNextSiblingElement(partWrapper);
>          }
>          message.setContent(Source.class, new DOMSource(element));
>      }
> 
>      private void extractHeaderParts(SoapMessage message,
>              Element element, Element partWrapper, BindingMessageInfo  
> msg) {
>          List<NodeList> partsContent = new ArrayList<NodeList>();
>          if (partWrapper != null) {
>              if (!JbiConstants.WSDL11_WRAPPER_NAMESPACE.equals(element
>                      .getNamespaceURI())
>                      || !JbiConstants.WSDL11_WRAPPER_PART_LOCALNAME
>                              .equals(partWrapper.getLocalName())) {
>                  throw new Fault(new Exception(
>                          "Unexpected part wrapper element '"
>                                  + QNameUtil.toString(element) + "'  
> expected '{"
>                                  + JbiConstants.WSDL11_WRAPPER_NAMESPACE
>                                  + "}part'"));
>              }
>              NodeList nodes = partWrapper.getChildNodes();
>              partsContent.add(nodes);
>          }
> 
>          List<Header> headerList = message.getHeaders();
>          List<SoapHeaderInfo> headers =  
> msg.getExtensors(SoapHeaderInfo.class);
>          for (SoapHeaderInfo header : headers) {
>              if (partsContent.size() == 0) {
>                  break;
>              }
> 
>              NodeList nl = partsContent.get(0);
>              if  
> (header.getPart().getConcreteName().getNamespaceURI().equals(
>                      nl.item(0).getNamespaceURI())
>                      &&  
> header.getPart().getConcreteName().getLocalPart()
>                              .equals(nl.item(0).getLocalName())) {
>                  headerList.add(new  
> Header(header.getPart().getConcreteName(),
>                          nl.item(0)));
>                  partsContent.remove(0);
>              }
> 
>          }
> 
>      }
> 
> }
> 
> Then add ExtractHeaderPartIntercepor to your cxf bc consumer  
> <cxfbc:outInterceptors>
> 
> [1]https://issues.apache.org/activemq/browse/SMXCOMP-632
> 
> Freeman
> On 2009-9-7, at 下午9:47, inter wrote:
> 
>>
>> Hi,Freeman :
>>  I wrote a cxf-interceptor just before JbiOutWsdl1Interceptor  at
>> Phase.MARSHAL to trace the flow.
>>  I found that  the JbiOutWsdl1Interceptor   has parsed the jbi- 
>> message as
>> expected.
>>  It got out the soap-headers and put it into the headlist,like :
>>  List<Header> headerList = message.getHeaders();
>>  headerList.add(new Header(header.getPart().getConcreteName(),
>>                        nl.item(0)));
>>
>>
>> I print out the header's name ,it was "AuthResult" and namespace was  
>> also
>> the expected.
>>
>> But the SoapResponse to the client still has only the soap body.
>>
>> How can i go ahead?
>>
>> Is it the problem of SoapOutInterceptor$SoapOutEndingInterceptor,or
>> StaxOutInterceptor$StaxOutEndingInterceptor,or
>> MessageSenderInterceptor$MessageSenderEndingInterceptor?
>>
>> This really confused me.
>>
>> Expecting for your help!
>>
>>
>>
>>
>>
>> Freeman Fang wrote:
>>>
>>>
>>> It should work, ensure the jbi part you added has same namespace and
>>> local name as it defined in the schema.
>>> what's the servicemix version you are using?
>>>
>>> Freeman
>>>> Freeman Fang wrote:
>>>>>
>>>>> Hi,
>>>>> Cxf bc provider parse JBI message and generate soap message based  
>>>>> on
>>>>> wsdl model.
>>>>> So if the wsdl used for your cxf bc provider has no soap header in
>>>>> binding def, the soap message sent out from your cxf bc provider
>>>>> won't
>>>>> have soap header, it's expected behavior.
>>>>> You may need change your provider wsdl first.
>>>>>
>>>>> Freeman
>>>>> On 2009-9-6, at 上午11:58, inter wrote:
>>>>>
>>>>>>
>>>>>> I used cxf-bc-consumer,cxf-bc-provider and camel like follows:
>>>>>>
>>>>>> cxf-bc-consumer=(1)=>servicemix-camel=(2)=>cxf-bc-
>>>>>> provider=(3)=>external
>>>>>> server=(4)=>back to==>cxf-
>>>>>> -bc-provider=(5)=>servicemix-camel=(6)=>cxf-bc-consumer.
>>>>>>
>>>>>> The  consumer and provider both have their  own wsdl  file.
>>>>>> The only difference of the two wsdl-files is that:the consumer's
>>>>>> wsdl has a
>>>>>> out-soap-header  in binding def
>>>>>>
>>>>>> but the provider's does not have it.
>>>>>>
>>>>>> So  in step(6),i add a camel-processor to add a soap-heaer part in
>>>>>> JBI msg
>>>>>> ,the whole msg after my processor like this:
>>>>>> -------------------------------------------------------------------------------------
>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>> <jbi:message xmlns:jbi="http://java.sun.com/xml/ns/jbi/wsdl-11-
>>>>>> wrapper"
>>>>>> 	xmlns:msg="http://server" xmlns:xsd="http://www.w3.org/2001/
>>>>>> XMLSchema"
>>>>>> 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>> 	name="sayHelloResponse" type="msg:sayHelloResponse"  
>>>>>> version="1.0">
>>>>>> 	<jbi:part>
>>>>>> 		<ns1:sayHelloResponse xmlns:ns1="http://server">
>>>>>> 			<ns1:out>Hello!!!boy</ns1:out>
>>>>>> 		</ns1:sayHelloResponse>
>>>>>> 	</jbi:part>
>>>>>> 	<jbi:part>
>>>>>> 		<wsse:AuthResult
>>>>>> 		
>>>>>> xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
>>>>>> "
>>>>>> 			mustUnderstand="true">
>>>>>> 			<wsse:ResultCode>0000</wsse:ResultCode>
>>>>>> 			<wsse:ResultDetail>success</wsse:ResultDetail>
>>>>>> 		</wsse:AuthResult>
>>>>>> 	</jbi:part>
>>>>>> </jbi:message>
>>>>>> ------------------------------------------------------------------------------------------------
>>>>>>
>>>>>> But when out of servicemix-cxf-bc,the soap message does not  
>>>>>> contain
>>>>>> soap-header at all,it just contains
>>>>>> the body message.
>>>>>> I am sure that I have added a soap-header to the binding def of  
>>>>>> the
>>>>>> consumer's wsdl.
>>>>>>
>>>>>> I upload my whole sa ZIP , in the  cxf-bc-su.zip,there are all the
>>>>>> wsdl
>>>>>> files.
>>>>>> The proxy.wsdl  is the consumer's,and the service.wsdl is the
>>>>>> provider's,the
>>>>>> wsse.xsd is the imported schema in which the soap header is  
>>>>>> defined.
>>>>>>
>>>>>> http://www.nabble.com/file/p25314469/test.zip test.zip
>>>>>>
>>>>>> -- 
>>>>>> View this message in context:
>>>>>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25314469.html
>>>>>> Sent from the ServiceMix - User mailing list archive at  
>>>>>> Nabble.com.
>>>>>>
>>>>>
>>>>>
>>>>> -- 
>>>>> Freeman Fang
>>>>> ------------------------
>>>>> Open Source SOA: http://fusesource.com
>>>>>
>>>>>
>>>>>
>>>>
>>>> -- 
>>>> View this message in context:
>>>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25316117.html
>>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>>
>>>
>>>
>>> -- 
>>> Freeman Fang
>>> ------------------------
>>> Open Source SOA: http://fusesource.com
>>>
>>>
>>>
>>
>> -- 
>> View this message in context:
>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25330829.html
>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>
> 
> 
> -- 
> Freeman Fang
> ------------------------
> Open Source SOA: http://fusesource.com
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25340967.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: Problems with adding out-soap-header for cxf-bc..

Posted by Freeman Fang <fr...@gmail.com>.
Hi,

I just verified this is a bug, create SMXCOMP-632[1] to track it, the  
fix is coming soon.
The work around currently for you is add an interceptor as follows

public class ExtractHeaderPartIntercepor extends  
AbstractPhaseInterceptor<Message> {

     public ExtractHeaderPartIntercepor() {
         super(Phase.PRE_STREAM);
     }

     public void handleMessage(Message message) {

         extractHeaderFromMessagePart(message);
     }

     private void extractHeaderFromMessagePart(Message message) {
         Source source = message.getContent(Source.class);
         if (source == null) {
             return;
         }

         Element element;
         try {
             element = new SourceTransformer().toDOMElement(source);
         } catch (Exception e) {
             throw new Fault(e);
         }

         if (!JbiConstants.WSDL11_WRAPPER_NAMESPACE.equals(element
                 .getNamespaceURI())
                 || !JbiConstants.WSDL11_WRAPPER_MESSAGE_LOCALNAME
                         .equals(element.getLocalName())) {
             message.setContent(Source.class, new DOMSource(element));
             return;
         }

         BindingOperationInfo bop = message.getExchange().get(
                 BindingOperationInfo.class);
         if (bop == null) {
             throw new Fault(
                     new Exception("Operation not bound on this  
message"));
         }
         BindingMessageInfo msg = isRequestor(message) ?  
bop.getInput() : bop
                 .getOutput();

         SoapBindingInfo binding = (SoapBindingInfo)  
message.getExchange().get(
                 Endpoint.class).getEndpointInfo().getBinding();
         String style = binding.getStyle(bop.getOperationInfo());
         if (style == null) {
             style = binding.getStyle();
         }

         Element partWrapper = DomUtil.getFirstChildElement(element);
         while (partWrapper != null) {
             extractHeaderParts((SoapMessage) message, element,  
partWrapper, msg);
             partWrapper = DomUtil.getNextSiblingElement(partWrapper);
         }
         message.setContent(Source.class, new DOMSource(element));
     }

     private void extractHeaderParts(SoapMessage message,
             Element element, Element partWrapper, BindingMessageInfo  
msg) {
         List<NodeList> partsContent = new ArrayList<NodeList>();
         if (partWrapper != null) {
             if (!JbiConstants.WSDL11_WRAPPER_NAMESPACE.equals(element
                     .getNamespaceURI())
                     || !JbiConstants.WSDL11_WRAPPER_PART_LOCALNAME
                             .equals(partWrapper.getLocalName())) {
                 throw new Fault(new Exception(
                         "Unexpected part wrapper element '"
                                 + QNameUtil.toString(element) + "'  
expected '{"
                                 + JbiConstants.WSDL11_WRAPPER_NAMESPACE
                                 + "}part'"));
             }
             NodeList nodes = partWrapper.getChildNodes();
             partsContent.add(nodes);
         }

         List<Header> headerList = message.getHeaders();
         List<SoapHeaderInfo> headers =  
msg.getExtensors(SoapHeaderInfo.class);
         for (SoapHeaderInfo header : headers) {
             if (partsContent.size() == 0) {
                 break;
             }

             NodeList nl = partsContent.get(0);
             if  
(header.getPart().getConcreteName().getNamespaceURI().equals(
                     nl.item(0).getNamespaceURI())
                     &&  
header.getPart().getConcreteName().getLocalPart()
                             .equals(nl.item(0).getLocalName())) {
                 headerList.add(new  
Header(header.getPart().getConcreteName(),
                         nl.item(0)));
                 partsContent.remove(0);
             }

         }

     }

}

Then add ExtractHeaderPartIntercepor to your cxf bc consumer  
<cxfbc:outInterceptors>

[1]https://issues.apache.org/activemq/browse/SMXCOMP-632

Freeman
On 2009-9-7, at 下午9:47, inter wrote:

>
> Hi,Freeman :
>  I wrote a cxf-interceptor just before JbiOutWsdl1Interceptor  at
> Phase.MARSHAL to trace the flow.
>  I found that  the JbiOutWsdl1Interceptor   has parsed the jbi- 
> message as
> expected.
>  It got out the soap-headers and put it into the headlist,like :
>  List<Header> headerList = message.getHeaders();
>  headerList.add(new Header(header.getPart().getConcreteName(),
>                        nl.item(0)));
>
>
> I print out the header's name ,it was "AuthResult" and namespace was  
> also
> the expected.
>
> But the SoapResponse to the client still has only the soap body.
>
> How can i go ahead?
>
> Is it the problem of SoapOutInterceptor$SoapOutEndingInterceptor,or
> StaxOutInterceptor$StaxOutEndingInterceptor,or
> MessageSenderInterceptor$MessageSenderEndingInterceptor?
>
> This really confused me.
>
> Expecting for your help!
>
>
>
>
>
> Freeman Fang wrote:
>>
>>
>> It should work, ensure the jbi part you added has same namespace and
>> local name as it defined in the schema.
>> what's the servicemix version you are using?
>>
>> Freeman
>>> Freeman Fang wrote:
>>>>
>>>> Hi,
>>>> Cxf bc provider parse JBI message and generate soap message based  
>>>> on
>>>> wsdl model.
>>>> So if the wsdl used for your cxf bc provider has no soap header in
>>>> binding def, the soap message sent out from your cxf bc provider
>>>> won't
>>>> have soap header, it's expected behavior.
>>>> You may need change your provider wsdl first.
>>>>
>>>> Freeman
>>>> On 2009-9-6, at 上午11:58, inter wrote:
>>>>
>>>>>
>>>>> I used cxf-bc-consumer,cxf-bc-provider and camel like follows:
>>>>>
>>>>> cxf-bc-consumer=(1)=>servicemix-camel=(2)=>cxf-bc-
>>>>> provider=(3)=>external
>>>>> server=(4)=>back to==>cxf-
>>>>> -bc-provider=(5)=>servicemix-camel=(6)=>cxf-bc-consumer.
>>>>>
>>>>> The  consumer and provider both have their  own wsdl  file.
>>>>> The only difference of the two wsdl-files is that:the consumer's
>>>>> wsdl has a
>>>>> out-soap-header  in binding def
>>>>>
>>>>> but the provider's does not have it.
>>>>>
>>>>> So  in step(6),i add a camel-processor to add a soap-heaer part in
>>>>> JBI msg
>>>>> ,the whole msg after my processor like this:
>>>>> -------------------------------------------------------------------------------------
>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>> <jbi:message xmlns:jbi="http://java.sun.com/xml/ns/jbi/wsdl-11-
>>>>> wrapper"
>>>>> 	xmlns:msg="http://server" xmlns:xsd="http://www.w3.org/2001/
>>>>> XMLSchema"
>>>>> 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>> 	name="sayHelloResponse" type="msg:sayHelloResponse"  
>>>>> version="1.0">
>>>>> 	<jbi:part>
>>>>> 		<ns1:sayHelloResponse xmlns:ns1="http://server">
>>>>> 			<ns1:out>Hello!!!boy</ns1:out>
>>>>> 		</ns1:sayHelloResponse>
>>>>> 	</jbi:part>
>>>>> 	<jbi:part>
>>>>> 		<wsse:AuthResult
>>>>> 		
>>>>> xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
>>>>> "
>>>>> 			mustUnderstand="true">
>>>>> 			<wsse:ResultCode>0000</wsse:ResultCode>
>>>>> 			<wsse:ResultDetail>success</wsse:ResultDetail>
>>>>> 		</wsse:AuthResult>
>>>>> 	</jbi:part>
>>>>> </jbi:message>
>>>>> ------------------------------------------------------------------------------------------------
>>>>>
>>>>> But when out of servicemix-cxf-bc,the soap message does not  
>>>>> contain
>>>>> soap-header at all,it just contains
>>>>> the body message.
>>>>> I am sure that I have added a soap-header to the binding def of  
>>>>> the
>>>>> consumer's wsdl.
>>>>>
>>>>> I upload my whole sa ZIP , in the  cxf-bc-su.zip,there are all the
>>>>> wsdl
>>>>> files.
>>>>> The proxy.wsdl  is the consumer's,and the service.wsdl is the
>>>>> provider's,the
>>>>> wsse.xsd is the imported schema in which the soap header is  
>>>>> defined.
>>>>>
>>>>> http://www.nabble.com/file/p25314469/test.zip test.zip
>>>>>
>>>>> -- 
>>>>> View this message in context:
>>>>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25314469.html
>>>>> Sent from the ServiceMix - User mailing list archive at  
>>>>> Nabble.com.
>>>>>
>>>>
>>>>
>>>> -- 
>>>> Freeman Fang
>>>> ------------------------
>>>> Open Source SOA: http://fusesource.com
>>>>
>>>>
>>>>
>>>
>>> -- 
>>> View this message in context:
>>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25316117.html
>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>
>>
>>
>> -- 
>> Freeman Fang
>> ------------------------
>> Open Source SOA: http://fusesource.com
>>
>>
>>
>
> -- 
> View this message in context: http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25330829.html
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>


-- 
Freeman Fang
------------------------
Open Source SOA: http://fusesource.com


Re: Problems with adding out-soap-header for cxf-bc..

Posted by inter <ga...@126.com>.
Hi,Freeman :
  I wrote a cxf-interceptor just before JbiOutWsdl1Interceptor  at
Phase.MARSHAL to trace the flow.
  I found that  the JbiOutWsdl1Interceptor   has parsed the jbi-message as
expected.
  It got out the soap-headers and put it into the headlist,like :
  List<Header> headerList = message.getHeaders();
  headerList.add(new Header(header.getPart().getConcreteName(),
                        nl.item(0)));
   

I print out the header's name ,it was "AuthResult" and namespace was also
the expected.

But the SoapResponse to the client still has only the soap body.

How can i go ahead?   

Is it the problem of SoapOutInterceptor$SoapOutEndingInterceptor,or
StaxOutInterceptor$StaxOutEndingInterceptor,or
MessageSenderInterceptor$MessageSenderEndingInterceptor?

This really confused me.

Expecting for your help!





Freeman Fang wrote:
> 
> 
> It should work, ensure the jbi part you added has same namespace and  
> local name as it defined in the schema.
> what's the servicemix version you are using?
> 
> Freeman
>> Freeman Fang wrote:
>>>
>>> Hi,
>>> Cxf bc provider parse JBI message and generate soap message based on
>>> wsdl model.
>>> So if the wsdl used for your cxf bc provider has no soap header in
>>> binding def, the soap message sent out from your cxf bc provider  
>>> won't
>>> have soap header, it's expected behavior.
>>> You may need change your provider wsdl first.
>>>
>>> Freeman
>>> On 2009-9-6, at 上午11:58, inter wrote:
>>>
>>>>
>>>> I used cxf-bc-consumer,cxf-bc-provider and camel like follows:
>>>>
>>>> cxf-bc-consumer=(1)=>servicemix-camel=(2)=>cxf-bc-
>>>> provider=(3)=>external
>>>> server=(4)=>back to==>cxf-
>>>> -bc-provider=(5)=>servicemix-camel=(6)=>cxf-bc-consumer.
>>>>
>>>> The  consumer and provider both have their  own wsdl  file.
>>>> The only difference of the two wsdl-files is that:the consumer's
>>>> wsdl has a
>>>> out-soap-header  in binding def
>>>>
>>>> but the provider's does not have it.
>>>>
>>>> So  in step(6),i add a camel-processor to add a soap-heaer part in
>>>> JBI msg
>>>> ,the whole msg after my processor like this:
>>>> -------------------------------------------------------------------------------------
>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>> <jbi:message xmlns:jbi="http://java.sun.com/xml/ns/jbi/wsdl-11-
>>>> wrapper"
>>>> 	xmlns:msg="http://server" xmlns:xsd="http://www.w3.org/2001/
>>>> XMLSchema"
>>>> 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> 	name="sayHelloResponse" type="msg:sayHelloResponse" version="1.0">
>>>> 	<jbi:part>
>>>> 		<ns1:sayHelloResponse xmlns:ns1="http://server">
>>>> 			<ns1:out>Hello!!!boy</ns1:out>
>>>> 		</ns1:sayHelloResponse>
>>>> 	</jbi:part>
>>>> 	<jbi:part>
>>>> 		<wsse:AuthResult
>>>> 		
>>>> xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
>>>> "
>>>> 			mustUnderstand="true">
>>>> 			<wsse:ResultCode>0000</wsse:ResultCode>
>>>> 			<wsse:ResultDetail>success</wsse:ResultDetail>
>>>> 		</wsse:AuthResult>
>>>> 	</jbi:part>
>>>> </jbi:message>
>>>> ------------------------------------------------------------------------------------------------
>>>>
>>>> But when out of servicemix-cxf-bc,the soap message does not contain
>>>> soap-header at all,it just contains
>>>> the body message.
>>>> I am sure that I have added a soap-header to the binding def of the
>>>> consumer's wsdl.
>>>>
>>>> I upload my whole sa ZIP , in the  cxf-bc-su.zip,there are all the
>>>> wsdl
>>>> files.
>>>> The proxy.wsdl  is the consumer's,and the service.wsdl is the
>>>> provider's,the
>>>> wsse.xsd is the imported schema in which the soap header is defined.
>>>>
>>>> http://www.nabble.com/file/p25314469/test.zip test.zip
>>>>
>>>> -- 
>>>> View this message in context:
>>>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25314469.html
>>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>>
>>>
>>>
>>> -- 
>>> Freeman Fang
>>> ------------------------
>>> Open Source SOA: http://fusesource.com
>>>
>>>
>>>
>>
>> -- 
>> View this message in context:
>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25316117.html
>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>
> 
> 
> -- 
> Freeman Fang
> ------------------------
> Open Source SOA: http://fusesource.com
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25330829.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: Problems with adding out-soap-header for cxf-bc..

Posted by inter <ga...@126.com>.

It seems only get the soap-body.

I am using 3.3.1, the cxf-bc version is  2009-01

Freeman Fang wrote:
> 
> 
> On 2009-9-6, at 下午5:50, inter wrote:
> 
>>
>> Hi,Freeman!
>> I think I did not express my meaning clear。
>>
>> What i want to do is that:
>> The external service's  response did not have a soap-header,I want  
>> to add a
>> soap-header to it  before returning to the caller.
>>
>> My Flow is:
>> cxf-bc-consumer=(1)=>servicemix-camel=(2)=>cxf-bc-
>> provider=(3)=>external
>> server=(4)=>back to==>cxf-
>> -bc-provider=(5)=>servicemix-camel=(6)=>cxf-bc-consumer--Ending(7)
>>
>> From (5) to (7),I think soap message was genrated from JBI message  
>> based on
>> consumer's wsdl model.
>>
>> Does my understanding be right?
>>
>> And in step (6),I enriched the jbi message by adding  a  <jbi:part>  
>> which
>> stands for the soap-header
>> <jbi:part>
>> 		<wsse:AuthResult
>> 		
>>
>> xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
>> "
>> 			mustUnderstand="true">
>> 			<wsse:ResultCode>0000</wsse:ResultCode>
>> 			<wsse:ResultDetail>success</wsse:ResultDetail>
>> 		</wsse:AuthResult>
>> 	</jbi:part>
>>
>>
>> In consumer's wsdl,I add  soap-header to it's  binding-output def:
>>
>>      <wsdl:output name="sayHelloResponse1">
>>        <wsdlsoap:body parts="parameters" use ="literal"/>
>>        <wsdlsoap:header message="tns:sayHelloResponse1"
>> part="AuthResultHeader" use="literal">
>>        </wsdlsoap:header>
>>      </wsdl:output>
>>
>> Is there anything wrong with my approach ?
> 
> It should work, ensure the jbi part you added has same namespace and  
> local name as it defined in the schema.
> what's the servicemix version you are using?
> 
> Freeman
>> Freeman Fang wrote:
>>>
>>> Hi,
>>> Cxf bc provider parse JBI message and generate soap message based on
>>> wsdl model.
>>> So if the wsdl used for your cxf bc provider has no soap header in
>>> binding def, the soap message sent out from your cxf bc provider  
>>> won't
>>> have soap header, it's expected behavior.
>>> You may need change your provider wsdl first.
>>>
>>> Freeman
>>> On 2009-9-6, at 上午11:58, inter wrote:
>>>
>>>>
>>>> I used cxf-bc-consumer,cxf-bc-provider and camel like follows:
>>>>
>>>> cxf-bc-consumer=(1)=>servicemix-camel=(2)=>cxf-bc-
>>>> provider=(3)=>external
>>>> server=(4)=>back to==>cxf-
>>>> -bc-provider=(5)=>servicemix-camel=(6)=>cxf-bc-consumer.
>>>>
>>>> The  consumer and provider both have their  own wsdl  file.
>>>> The only difference of the two wsdl-files is that:the consumer's
>>>> wsdl has a
>>>> out-soap-header  in binding def
>>>>
>>>> but the provider's does not have it.
>>>>
>>>> So  in step(6),i add a camel-processor to add a soap-heaer part in
>>>> JBI msg
>>>> ,the whole msg after my processor like this:
>>>> -------------------------------------------------------------------------------------
>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>> <jbi:message xmlns:jbi="http://java.sun.com/xml/ns/jbi/wsdl-11-
>>>> wrapper"
>>>> 	xmlns:msg="http://server" xmlns:xsd="http://www.w3.org/2001/
>>>> XMLSchema"
>>>> 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> 	name="sayHelloResponse" type="msg:sayHelloResponse" version="1.0">
>>>> 	<jbi:part>
>>>> 		<ns1:sayHelloResponse xmlns:ns1="http://server">
>>>> 			<ns1:out>Hello!!!boy</ns1:out>
>>>> 		</ns1:sayHelloResponse>
>>>> 	</jbi:part>
>>>> 	<jbi:part>
>>>> 		<wsse:AuthResult
>>>> 		
>>>> xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
>>>> "
>>>> 			mustUnderstand="true">
>>>> 			<wsse:ResultCode>0000</wsse:ResultCode>
>>>> 			<wsse:ResultDetail>success</wsse:ResultDetail>
>>>> 		</wsse:AuthResult>
>>>> 	</jbi:part>
>>>> </jbi:message>
>>>> ------------------------------------------------------------------------------------------------
>>>>
>>>> But when out of servicemix-cxf-bc,the soap message does not contain
>>>> soap-header at all,it just contains
>>>> the body message.
>>>> I am sure that I have added a soap-header to the binding def of the
>>>> consumer's wsdl.
>>>>
>>>> I upload my whole sa ZIP , in the  cxf-bc-su.zip,there are all the
>>>> wsdl
>>>> files.
>>>> The proxy.wsdl  is the consumer's,and the service.wsdl is the
>>>> provider's,the
>>>> wsse.xsd is the imported schema in which the soap header is defined.
>>>>
>>>> http://www.nabble.com/file/p25314469/test.zip test.zip
>>>>
>>>> -- 
>>>> View this message in context:
>>>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25314469.html
>>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>>
>>>
>>>
>>> -- 
>>> Freeman Fang
>>> ------------------------
>>> Open Source SOA: http://fusesource.com
>>>
>>>
>>>
>>
>> -- 
>> View this message in context:
>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25316117.html
>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>
> 
> 
> -- 
> Freeman Fang
> ------------------------
> Open Source SOA: http://fusesource.com
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25323904.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: Problems with adding out-soap-header for cxf-bc..

Posted by Freeman Fang <fr...@gmail.com>.
On 2009-9-6, at 下午5:50, inter wrote:

>
> Hi,Freeman!
> I think I did not express my meaning clear。
>
> What i want to do is that:
> The external service's  response did not have a soap-header,I want  
> to add a
> soap-header to it  before returning to the caller.
>
> My Flow is:
> cxf-bc-consumer=(1)=>servicemix-camel=(2)=>cxf-bc-
> provider=(3)=>external
> server=(4)=>back to==>cxf-
> -bc-provider=(5)=>servicemix-camel=(6)=>cxf-bc-consumer--Ending(7)
>
> From (5) to (7),I think soap message was genrated from JBI message  
> based on
> consumer's wsdl model.
>
> Does my understanding be right?
>
> And in step (6),I enriched the jbi message by adding  a  <jbi:part>  
> which
> stands for the soap-header
> <jbi:part>
> 		<wsse:AuthResult
> 		
>
> xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
> "
> 			mustUnderstand="true">
> 			<wsse:ResultCode>0000</wsse:ResultCode>
> 			<wsse:ResultDetail>success</wsse:ResultDetail>
> 		</wsse:AuthResult>
> 	</jbi:part>
>
>
> In consumer's wsdl,I add  soap-header to it's  binding-output def:
>
>      <wsdl:output name="sayHelloResponse1">
>        <wsdlsoap:body parts="parameters" use ="literal"/>
>        <wsdlsoap:header message="tns:sayHelloResponse1"
> part="AuthResultHeader" use="literal">
>        </wsdlsoap:header>
>      </wsdl:output>
>
> Is there anything wrong with my approach ?

It should work, ensure the jbi part you added has same namespace and  
local name as it defined in the schema.
what's the servicemix version you are using?

Freeman
> Freeman Fang wrote:
>>
>> Hi,
>> Cxf bc provider parse JBI message and generate soap message based on
>> wsdl model.
>> So if the wsdl used for your cxf bc provider has no soap header in
>> binding def, the soap message sent out from your cxf bc provider  
>> won't
>> have soap header, it's expected behavior.
>> You may need change your provider wsdl first.
>>
>> Freeman
>> On 2009-9-6, at 上午11:58, inter wrote:
>>
>>>
>>> I used cxf-bc-consumer,cxf-bc-provider and camel like follows:
>>>
>>> cxf-bc-consumer=(1)=>servicemix-camel=(2)=>cxf-bc-
>>> provider=(3)=>external
>>> server=(4)=>back to==>cxf-
>>> -bc-provider=(5)=>servicemix-camel=(6)=>cxf-bc-consumer.
>>>
>>> The  consumer and provider both have their  own wsdl  file.
>>> The only difference of the two wsdl-files is that:the consumer's
>>> wsdl has a
>>> out-soap-header  in binding def
>>>
>>> but the provider's does not have it.
>>>
>>> So  in step(6),i add a camel-processor to add a soap-heaer part in
>>> JBI msg
>>> ,the whole msg after my processor like this:
>>> -------------------------------------------------------------------------------------
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <jbi:message xmlns:jbi="http://java.sun.com/xml/ns/jbi/wsdl-11-
>>> wrapper"
>>> 	xmlns:msg="http://server" xmlns:xsd="http://www.w3.org/2001/
>>> XMLSchema"
>>> 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> 	name="sayHelloResponse" type="msg:sayHelloResponse" version="1.0">
>>> 	<jbi:part>
>>> 		<ns1:sayHelloResponse xmlns:ns1="http://server">
>>> 			<ns1:out>Hello!!!boy</ns1:out>
>>> 		</ns1:sayHelloResponse>
>>> 	</jbi:part>
>>> 	<jbi:part>
>>> 		<wsse:AuthResult
>>> 		
>>> xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
>>> "
>>> 			mustUnderstand="true">
>>> 			<wsse:ResultCode>0000</wsse:ResultCode>
>>> 			<wsse:ResultDetail>success</wsse:ResultDetail>
>>> 		</wsse:AuthResult>
>>> 	</jbi:part>
>>> </jbi:message>
>>> ------------------------------------------------------------------------------------------------
>>>
>>> But when out of servicemix-cxf-bc,the soap message does not contain
>>> soap-header at all,it just contains
>>> the body message.
>>> I am sure that I have added a soap-header to the binding def of the
>>> consumer's wsdl.
>>>
>>> I upload my whole sa ZIP , in the  cxf-bc-su.zip,there are all the
>>> wsdl
>>> files.
>>> The proxy.wsdl  is the consumer's,and the service.wsdl is the
>>> provider's,the
>>> wsse.xsd is the imported schema in which the soap header is defined.
>>>
>>> http://www.nabble.com/file/p25314469/test.zip test.zip
>>>
>>> -- 
>>> View this message in context:
>>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25314469.html
>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>
>>
>>
>> -- 
>> Freeman Fang
>> ------------------------
>> Open Source SOA: http://fusesource.com
>>
>>
>>
>
> -- 
> View this message in context: http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25316117.html
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>


-- 
Freeman Fang
------------------------
Open Source SOA: http://fusesource.com


Re: Problems with adding out-soap-header for cxf-bc..

Posted by inter <ga...@126.com>.
Hi,Freeman!
I think I did not express my meaning clear。

What i want to do is that:
The external service's  response did not have a soap-header,I want to add a
soap-header to it  before returning to the caller.

My Flow is:
cxf-bc-consumer=(1)=>servicemix-camel=(2)=>cxf-bc- 
provider=(3)=>external
server=(4)=>back to==>cxf-
-bc-provider=(5)=>servicemix-camel=(6)=>cxf-bc-consumer--Ending(7)

>From (5) to (7),I think soap message was genrated from JBI message based on
consumer's wsdl model.

Does my understanding be right?

And in step (6),I enriched the jbi message by adding  a  <jbi:part> which 
stands for the soap-header
<jbi:part>
 		<wsse:AuthResult
 		

xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd 
 "
 			mustUnderstand="true">
 			<wsse:ResultCode>0000</wsse:ResultCode>
 			<wsse:ResultDetail>success</wsse:ResultDetail>
 		</wsse:AuthResult>
 	</jbi:part>


In consumer's wsdl,I add  soap-header to it's  binding-output def:

      <wsdl:output name="sayHelloResponse1">
        <wsdlsoap:body parts="parameters" use ="literal"/>
        <wsdlsoap:header message="tns:sayHelloResponse1"
part="AuthResultHeader" use="literal">
        </wsdlsoap:header>
      </wsdl:output>

Is there anything wrong with my approach ?

Freeman Fang wrote:
> 
> Hi,
> Cxf bc provider parse JBI message and generate soap message based on  
> wsdl model.
> So if the wsdl used for your cxf bc provider has no soap header in  
> binding def, the soap message sent out from your cxf bc provider won't  
> have soap header, it's expected behavior.
> You may need change your provider wsdl first.
> 
> Freeman
> On 2009-9-6, at 上午11:58, inter wrote:
> 
>>
>> I used cxf-bc-consumer,cxf-bc-provider and camel like follows:
>>
>> cxf-bc-consumer=(1)=>servicemix-camel=(2)=>cxf-bc- 
>> provider=(3)=>external
>> server=(4)=>back to==>cxf-
>> -bc-provider=(5)=>servicemix-camel=(6)=>cxf-bc-consumer.
>>
>> The  consumer and provider both have their  own wsdl  file.
>> The only difference of the two wsdl-files is that:the consumer's  
>> wsdl has a
>> out-soap-header  in binding def
>>
>> but the provider's does not have it.
>>
>> So  in step(6),i add a camel-processor to add a soap-heaer part in  
>> JBI msg
>> ,the whole msg after my processor like this:
>> -------------------------------------------------------------------------------------
>> <?xml version="1.0" encoding="UTF-8"?>
>> <jbi:message xmlns:jbi="http://java.sun.com/xml/ns/jbi/wsdl-11- 
>> wrapper"
>> 	xmlns:msg="http://server" xmlns:xsd="http://www.w3.org/2001/ 
>> XMLSchema"
>> 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> 	name="sayHelloResponse" type="msg:sayHelloResponse" version="1.0">
>> 	<jbi:part>
>> 		<ns1:sayHelloResponse xmlns:ns1="http://server">
>> 			<ns1:out>Hello!!!boy</ns1:out>
>> 		</ns1:sayHelloResponse>
>> 	</jbi:part>
>> 	<jbi:part>
>> 		<wsse:AuthResult
>> 		
>> xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd 
>> "
>> 			mustUnderstand="true">
>> 			<wsse:ResultCode>0000</wsse:ResultCode>
>> 			<wsse:ResultDetail>success</wsse:ResultDetail>
>> 		</wsse:AuthResult>
>> 	</jbi:part>
>> </jbi:message>
>> ------------------------------------------------------------------------------------------------
>>
>> But when out of servicemix-cxf-bc,the soap message does not contain
>> soap-header at all,it just contains
>> the body message.
>> I am sure that I have added a soap-header to the binding def of the
>> consumer's wsdl.
>>
>> I upload my whole sa ZIP , in the  cxf-bc-su.zip,there are all the  
>> wsdl
>> files.
>> The proxy.wsdl  is the consumer's,and the service.wsdl is the  
>> provider's,the
>> wsse.xsd is the imported schema in which the soap header is defined.
>>
>> http://www.nabble.com/file/p25314469/test.zip test.zip
>>
>> -- 
>> View this message in context:
>> http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25314469.html
>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>
> 
> 
> -- 
> Freeman Fang
> ------------------------
> Open Source SOA: http://fusesource.com
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25316117.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: Problems with adding out-soap-header for cxf-bc..

Posted by Freeman Fang <fr...@gmail.com>.
Hi,
Cxf bc provider parse JBI message and generate soap message based on  
wsdl model.
So if the wsdl used for your cxf bc provider has no soap header in  
binding def, the soap message sent out from your cxf bc provider won't  
have soap header, it's expected behavior.
You may need change your provider wsdl first.

Freeman
On 2009-9-6, at 上午11:58, inter wrote:

>
> I used cxf-bc-consumer,cxf-bc-provider and camel like follows:
>
> cxf-bc-consumer=(1)=>servicemix-camel=(2)=>cxf-bc- 
> provider=(3)=>external
> server=(4)=>back to==>cxf-
> -bc-provider=(5)=>servicemix-camel=(6)=>cxf-bc-consumer.
>
> The  consumer and provider both have their  own wsdl  file.
> The only difference of the two wsdl-files is that:the consumer's  
> wsdl has a
> out-soap-header  in binding def
>
> but the provider's does not have it.
>
> So  in step(6),i add a camel-processor to add a soap-heaer part in  
> JBI msg
> ,the whole msg after my processor like this:
> -------------------------------------------------------------------------------------
> <?xml version="1.0" encoding="UTF-8"?>
> <jbi:message xmlns:jbi="http://java.sun.com/xml/ns/jbi/wsdl-11- 
> wrapper"
> 	xmlns:msg="http://server" xmlns:xsd="http://www.w3.org/2001/ 
> XMLSchema"
> 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> 	name="sayHelloResponse" type="msg:sayHelloResponse" version="1.0">
> 	<jbi:part>
> 		<ns1:sayHelloResponse xmlns:ns1="http://server">
> 			<ns1:out>Hello!!!boy</ns1:out>
> 		</ns1:sayHelloResponse>
> 	</jbi:part>
> 	<jbi:part>
> 		<wsse:AuthResult
> 		
> xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd 
> "
> 			mustUnderstand="true">
> 			<wsse:ResultCode>0000</wsse:ResultCode>
> 			<wsse:ResultDetail>success</wsse:ResultDetail>
> 		</wsse:AuthResult>
> 	</jbi:part>
> </jbi:message>
> ------------------------------------------------------------------------------------------------
>
> But when out of servicemix-cxf-bc,the soap message does not contain
> soap-header at all,it just contains
> the body message.
> I am sure that I have added a soap-header to the binding def of the
> consumer's wsdl.
>
> I upload my whole sa ZIP , in the  cxf-bc-su.zip,there are all the  
> wsdl
> files.
> The proxy.wsdl  is the consumer's,and the service.wsdl is the  
> provider's,the
> wsse.xsd is the imported schema in which the soap header is defined.
>
> http://www.nabble.com/file/p25314469/test.zip test.zip
>
> -- 
> View this message in context: http://www.nabble.com/Problems-with-adding-out-soap-header-for-cxf-bc..-tp25314469p25314469.html
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>


-- 
Freeman Fang
------------------------
Open Source SOA: http://fusesource.com