Christian, I think this would work in reverse as well. If you set the transportId to: http://cxf.apache.org/transports/jms then it would set it to the raw jms transport and not the SoapTransport which is where the JMS/Spec interceptors would be added. Thus, with the raw JMS transport configured in instead, those checks wouldn't occur.
Can you give that a try? Dan On Friday 07 January 2011 1:51:58 am Christian Schneider wrote: > Hi Willem and Dan, > > I guess this is a way to make the Camel - CXF combination soap/jms > compliant. The case I am more concerned about is if you setup a soap/jms > compliant cxf service it will not interoperate with other soap/jms > implementations that are not compliant. As of now I assume almost all > other implementations are not compliant. So my proposal is to introduce > a switch that allows the cxf implementation to disable the checks that > cause these problems. Of cause cxf is not absolutely compliant to the > spec in this case but I think the customers will not care too much about > this. > > Best regards > > Christian > > Am 07.01.2011 01:14, schrieb Willem Jiang: > > Yes, set the transport ID can do the trick. > > Here is the CXFEndpoint configuration which can be used to set up the > > camel-cxf endpoint. > > > > <cxf:cxfEndpoint id="routerEndpoint" > > address="jms:jndi:dynamicQueues/request" > > transportId="http://www.w3.org/2010/soapjms/" > > serviceClass="org.apache.camel.component.cxf.HelloService"> > > </cxf:cxfEndpoint> > > > > Willem > > > > On 1/7/11 4:37 AM, Daniel Kulp wrote: > >> Christian, > >> > >> I need to check this a bit more, but if the transport ID is set to > >> the CXF > >> transports's ID and not the "soap" ID's, then the SOAP/JMS specific > >> interceptors aren't added and thus that validation and stuff would > >> not occur. > >> Is there a way on the Camel side to specify the transport ID to use? > >> > >> Dan > >> > >> On Thursday 06 January 2011 11:33:48 am Christian Schneider wrote: > >>> Hi all, > >>> > >>> I just did an interop test between the soap/jms spec support in jms and > >>> camel-jms with camel-cxf transport. > >>> > >>> When my camel client sends a message to the cxf jms spec server this is > >>> blocked as there is no ContentType property set. (See exception below). > >>> I guess this will also happen with most other implementations that do > >>> not yet support the soap/jms spec. > >>> the problem is that the sepc requires that a fault is sent if the > >>> property is missing. So cxf is spec compliant but incompatible with old > >>> implementations. > >>> > >>> So I think we should have a switch that controls if the spec asssertion > >>> should run or not. (if we don“t already have one that I overlooked). > >>> The > >>> switch could be set to be strict by default so we are compliant by > >>> default. > >>> > >>> what do you think ? > >>> > >>> Best regards > >>> > >>> Christian > >>> > >>> ----- > >>> 06.01.2011 16:47:27 org.apache.cxf.phase.PhaseInterceptorChain > >>> doDefaultLogging > >>> WARNUNG: Interceptor for > >>> {http://talend.com/examples/jms-greeter}JMSGreeterService has thrown > >>> exception, unwinding now > >>> org.apache.cxf.binding.soap.SoapFault: Missing ContentType. > >>> at > >>> org.apache.cxf.binding.soap.jms.interceptor.SoapFaultFactory.createSoap > >>> 11Fa > >>> > >>> ult(SoapFaultFactory.java:58) at > >>> org.apache.cxf.binding.soap.jms.interceptor.SoapFaultFactory.createFaul > >>> t(So > >>> > >>> apFaultFactory.java:48) at > >>> org.apache.cxf.binding.soap.jms.interceptor.SoapJMSInInterceptor.create > >>> Faul > >>> > >>> t(SoapJMSInInterceptor.java:197) at > >>> org.apache.cxf.binding.soap.jms.interceptor.SoapJMSInInterceptor.checkC > >>> onte > >>> > >>> ntType(SoapJMSInInterceptor.java:162) at > >>> org.apache.cxf.binding.soap.jms.interceptor.SoapJMSInInterceptor.handle > >>> Mess > >>> > >>> age(SoapJMSInInterceptor.java:49) at > >>> org.apache.cxf.binding.soap.jms.interceptor.SoapJMSInInterceptor.handle > >>> Mess > >>> > >>> age(SoapJMSInInterceptor.java:38) at > >>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptor > >>> Chai > >>> > >>> n.java:255) at > >>> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiat > >>> ionO > >>> > >>> bserver.java:113) at > >>> org.apache.cxf.transport.jms.JMSDestination.onMessage(JMSDestination.ja > >>> va:2 > >>> > >>> 17) at > >>> org.springframework.jms.listener.AbstractMessageListenerContainer.doInv > >>> okeL > >>> > >>> istener(AbstractMessageListenerContainer.java:535) at > >>> org.springframework.jms.listener.AbstractMessageListenerContainer.invok > >>> eLis > >>> > >>> tener(AbstractMessageListenerContainer.java:495) at > >>> org.springframework.jms.listener.AbstractMessageListenerContainer.doExe > >>> cute > >>> > >>> Listener(AbstractMessageListenerContainer.java:467) at > >>> org.springframework.jms.listener.AbstractPollingMessageListenerContaine > >>> r.do > >>> > >>> ReceiveAndExecute(AbstractPollingMessageListenerContai ner.java:325) > >>> at > >>> org.springframework.jms.listener.AbstractPollingMessageListenerContaine > >>> r.re > >>> > >>> ceiveAndExecute(AbstractPollingMessageListenerContaine r.java:263) > >>> at > >>> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncM > >>> essa > >>> > >>> geListenerInvoker.invokeListener(DefaultMessageListene > >>> rContainer.java:1058) > >>> at > >>> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncM > >>> essa > >>> > >>> geListenerInvoker.executeOngoingLoop(DefaultMessageLis > >>> tenerContainer.java:1050) > >>> at > >>> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncM > >>> essa > >>> > >>> geListenerInvoker.run(DefaultMessageListenerContainer. java:947) > >>> at java.lang.Thread.run(Thread.java:619) > >>> Caused by: org.apache.cxf.binding.soap.jms.interceptor.JMSFault: > >>> Missing > >>> ContentType. > >>> at > >>> org.apache.cxf.binding.soap.jms.interceptor.JMSFaultFactory.createFault > >>> (JMS > >>> > >>> FaultFactory.java:98) at > >>> org.apache.cxf.binding.soap.jms.interceptor.JMSFaultFactory.createMissi > >>> ngCo > >>> > >>> ntentTypeFault(JMSFaultFactory.java:64) at > >>> org.apache.cxf.binding.soap.jms.interceptor.SoapJMSInInterceptor.checkC > >>> onte > >>> > >>> ntType(SoapJMSInInterceptor.java:159) ... 14 more -- Daniel Kulp [email protected] http://dankulp.com/blog
