-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Ah, now I understand why I get a ClassCastException :) Not very user friendly, though. I got my routing to work using <jxpath>in/headers/@operationName = 'opCreate'</jxpath> in the meantime (mind that the header is "operationName" instead of "SOAPAction", for what reason ever).
I've also tried to set <from uri="cxf:bean:MyBean?dataFormat=MESSAGE"/> following your hint, but this still leads to a ClassCastException when I use xpath later on. However, I'll also give the Groovy example a go, for this looks rather smart :) Thank you very very much for your help. - -Gisbert Willem Jiang schrieb: > Oh, xpath only works for the XML or which can be converted into the dom > object :) > > <xpath>$SOAPAction = 'create'</xpath>. > > If you don't specify the dataFormat for your CXF endpoint, the message > body is a list which holds the invocation's parameters. So camel xpath > expression can't convert the list into a dom object for xpath query. > > You can use the camel-script[1] to test the header value, here is an > example of spring configuration > > <camelContext id="camel" > xmlns="http://activemq.apache.org/camel/schema/spring"> > <route> > <from uri="direct:start"/> > <filter> > <groovy>exchange.in.headers.SOAPAction == 'create'</groovy> > <to uri="mock:result"/> > </filter> > </route> > </camelContext> > > [1] http://activemq.apache.org/camel/scripting-languages.html > > Hope these information can help you :) > > Willem > > Gisbert Amm wrote: > Hi Willem, > > thank you again. I had seen this $someHeader stuff in the docs and had > tried it out but with 1.4.0 it didn't work. The docs are obviously a bit > ahead of 1.4.0 :) > > However, I've tried this now: > > <xpath>$SOAPAction = 'create'</xpath> > > and get a ClassCastException: > > java.lang.ClassCastException: org.apache.cxf.message.MessageContentsList > at > com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:115) > > at > com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:97) > > at > com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:178) > > at > org.apache.camel.builder.xml.XPathBuilder.evaluateAs(XPathBuilder.java:429) > > > ... > > Is there anything I need to configure in addidtion to make it work? > > In > https://svn.apache.org/repos/asf/activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/ > > there isn't a test for CxfHeaderHelper, so I'm stuck ... In the JIRA > report I find "let people configure what should be copied to/form native > message", but not how to do it. Have I overseen something? > > Regards, > Gisbert > > Willem Jiang schrieb: > >>>> Hi Gisbert >>>> >>>> It's my fault that I didn't check the camel-cxf component's change log. >>>> You can't use Message.PROTOCOL_HEADERS to get the SOAPAction any more , >>>> since William Tam contributed a header filter strategy[1] to encapsulate >>>> the context of PROTOCOL_HEADERS in Camel 1.5. >>>> You can find the code of CXF header handling in the method >>>> propagateCxfToCamel() of CxfHeaderHelper[2] >>>> You should get the SOAPAction just by using the "SOAPAction" as the Key. >>>> >>>> [1] https://issues.apache.org/activemq/browse/CAMEL-766 >>>> [2] >>>> https://svn.apache.org/repos/asf/activemq/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/CxfHeaderHelper.java >>>> >>>> >>>> >>>> Regards, >>>> >>>> Willem >>>> Gisbert Amm wrote: >>>> Hi Willem, >>>> >>>> thank you for the quick reply. I'm afraid I don't really understand what >>>> you want to tell me. I can see that you've commented the code in the >>>> test that did more or less the same I did because this information is >>>> obviously no longer provided in CXF 2.1.2. >>>> >>>> However, what do you mean when you say I should use SOAPActionExtractor >>>> only for handling the request message? I thought that I already did so: >>>> >>>> <route> >>>> <from uri="cxf:bean:MyEndpoint"/> >>>> <process ref="sOAPActionExtractor"/> >>>> ... >>>> >>>> And how can I retrieve the SOAP action from the message now? My routing >>>> relies on it ... >>>> >>>> Regards, >>>> Gisbert Amm >>>> >>>> Willem Jiang wrote: >>>> >>>> >>>>>>> Hi, >>>>>>> >>>>>>> Camel-1.5 snapshot is using CXF 2.1.2 and CXF 2.1.2 only apply the >>>>>>> SOAPAction for the request message (in >>>>>>> SoapPreProtocolOutInterceptor). >>>>>>> Please make sure the SOAPActionExtractor only be used for handling >>>>>>> the >>>>>>> request message :) >>>>>>> >>>>>>> You can find more information in the CustomerServicesTest[1] >>>>>>> >>>>>>> [1]https://svn.apache.org/repos/asf/activemq/camel/trunk/tests/camel-itest/src/test/java/org/apache/camel/itest/customerrelations/CustomerServicesTest.java >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> Willem >>>>>>> >>>>>>> Gisbert Amm wrote: >>>>>>> I've upgraded Camel to the current HEAD from SVN. >>>>>>> >>>>>>> Consider this code, which worked fine with version 1.4.0: >>>>>>> >>>>>>> public class SOAPActionExtractor implements Processor { >>>>>>> >>>>>>> public void process(Exchange exchange) throws Exception { >>>>>>> Map header = (Map) >>>>>>> exchange.getIn().getHeader(Message.PROTOCOL_HEADERS); >>>>>>> ... >>>>>>> >>>>>>> (Message is of type org.apache.cxf.message.Message) >>>>>>> >>>>>>> After upgrading to 1.5-SNAPSHOT, the header is null and I >>>>>>> therefore get >>>>>>> a NPE later on. Can somebody explain why this happens and what has >>>>>>> changed here? That would be very helpful. >>>>>>> >>>>>>> Regards, >>>>>>> Gisbert Amm >>>>>>> > >> -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFIyStiwM6uO7ce7NoRAnYmAJ0SjnSCEG6STfTFkCQaLwFRkzbwUQCfdsxY 2bJrGmGQzpH566/m5TXwS0I= =eRcL -----END PGP SIGNATURE-----
