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.
