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:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

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

iD8DBQFIyNuswM6uO7ce7NoRAlSyAJ95gaxEItcfhY1yU+L4eYQLlzn43QCePuDi
ILU/OSj0GIfdYIHO8HtVKOo=
=W3oC
-----END PGP SIGNATURE-----


Reply via email to