camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Willem Jiang <willem.ji...@gmail.com>
Subject Re: Cannot retrieve header anymore after upgrading from 1.4.0 to 1.5-SNAPSHOT
Date Thu, 11 Sep 2008 13:32:20 GMT
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-----
>
>   


Mime
View raw message