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.