Thanks Freeman, I was too slow. -----Original Message----- From: Freeman Fang [mailto:freeman.f...@gmail.com] Sent: 17 October 2011 14:45 To: users@camel.apache.org Subject: Re: Camel CXF component: SOAP 1.1 & 1.2 support
FYI, I create CAMEL-4553 to track it. [1]https://issues.apache.org/jira/browse/CAMEL-4553 Freeman On 2011-10-17, at 下午8:14, Freeman Fang wrote: > Hi, > > Thanks for the confirmation, could you please create an jira for this > issue, I think we need address it for camel-cxf anyway. > > Freeman > On 2011-10-17, at 下午8:07, Andrei Shakirin wrote: > >> Hi Freeman, >> >> Yep, interceptor fixes the problem! >> >> Regards, >> Andrei. >> >> -----Original Message----- >> From: Freeman Fang [mailto:freeman.f...@gmail.com] >> Sent: 17 October 2011 13:28 >> To: users@camel.apache.org >> Subject: Re: Camel CXF component: SOAP 1.1 & 1.2 support >> >> Hi, >> >> My gut feeling is that this issue is kinda of similar with the one I >> encountered with servicemix-cxf-bc JBI component(which means only >> determine soap version from the servicemodel but ignore the real >> incoming message), could you do a quick test here? >> You can add an outInterceptor for your camel-cxf endpoint, the >> interceptor should be like >> >> import org.apache.cxf.binding.soap.SoapMessage; >> import >> org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor; >> import org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor; >> import org.apache.cxf.interceptor.Fault; import >> org.apache.cxf.phase.Phase; >> >> public class SetSoapVersionInterceptor extends >> AbstractSoapInterceptor { >> >> public SetSoapVersionInterceptor() { >> super(Phase.WRITE); >> addBefore(SoapOutInterceptor.class.getName()); >> } >> public void handleMessage(SoapMessage message) throws Fault { >> if (message.getExchange() != null) { >> if (message.getExchange().getInMessage() instanceof >> SoapMessage) { >> >> ((SoapMessage >> )message >> ).setVersion >> (((SoapMessage)message.getExchange().getInMessage()).getVersion()); >> } >> } >> } >> >> } >> >> Tell me if this can fix it. >> >> Freeman >> >> On 2011-10-17, at 下午6:50, Andrei Shakirin wrote: >> >>> Hi, >>> >>> I have a small issue with Camel CXF component supporting both SOAP >>> bindings: 1.1 and 1.2. >>> >>> If I take pure CXF service and specify: >>> >>> @ServiceMode(value = Service.Mode.MESSAGE) @BindingType(value = >>> "http://www.w3.org/2003/05/soap/bindings/HTTP/") >>> >>> this CXF Service accepts both kind of requests: SOAP 1.1 & SOAP 1.2 >>> and expects appropriate responses: SOAP 1.1 response for SOAP 1.1 >>> request and SOAP 1.2 response for SOAP 1.1 request. It works as >>> expected. >>> >>> If I take Camel CXF component and specify the same annotations for >>> the interface, I have the following behavior: >>> all requests (1.1 & 1.2) is still accepted, but I can provide ONLY >>> 1.2 responses and faults. >>> If I try to set 1.1 response as answer for 1.1 request: >>> exchange.getOut().setBody(response, StaxSource.class); the following >>> exception is throwing: >>> >>> 11:46:27,411 | WARN | qtp25691505-91 | >>> PhaseInterceptorChain | ache.cxf.comm >>> on.logging.LogUtils 371 | - - | Interceptor for >>> {http://com.dpdhl/cig/facade/v1 }WSFaca >>> de#{http://facade.cig.dpdhl.com/}invoke has thrown exception, >>> unwinding now >>> org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: An attempt was made >>> to insert a node wher e it is not permitted. >>> at >>> com >>> .sun >>> .org >>> .apache.xerces.internal.dom.CoreDocumentImpl.insertBefore(CoreDocume >>> ntImpl.java:391)[:1.6.0_22] >>> at >>> com >>> .sun >>> .org.apache.xerces.internal.dom.NodeImpl.appendChild(NodeImpl.java: >>> 235)[ >>> :1.6.0_22] >>> at >>> com >>> .sun >>> .xml.messaging.saaj.soap.SOAPPartImpl.appendChild(SOAPPartImpl.java: >>> 502) >>> [67:org.apache.servicemix.bundles.saaj-impl:1.3.2.2] >>> at >>> org >>> .apache >>> .cxf.staxutils.W3CDOMStreamWriter.setChild(W3CDOMStreamWriter.java: >>> 11 >>> 4)[132:org.apache.cxf.bundle:2.4.2] >>> >>> Absolutely the same exception is thrown in pure CXF provider if I >>> send wrong version of response (for example 1.1 response for 1.2 >>> request). >>> >>> Question: is there any possibility to say Camel CXF component that >>> it should accept SOAP 1.1 Response as answer to SOAP 1.1 Request? >>> Sample code illustrating the problem can be provided if necessary. >>> >>> Regards, >>> Andrei. >>> >> >> --------------------------------------------- >> Freeman Fang >> >> FuseSource >> Email:ff...@fusesource.com >> Web: fusesource.com >> Twitter: freemanfang >> Blog: http://freemanfang.blogspot.com >> >> >> >> >> >> >> >> >> > > --------------------------------------------- > Freeman Fang > > FuseSource > Email:ff...@fusesource.com > Web: fusesource.com > Twitter: freemanfang > Blog: http://freemanfang.blogspot.com > > > > > > > > > --------------------------------------------- Freeman Fang FuseSource Email:ff...@fusesource.com Web: fusesource.com Twitter: freemanfang Blog: http://freemanfang.blogspot.com