camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gisbert Amm <gisbert....@1und1.de>
Subject Re: Cannot retrieve header anymore after upgrading from 1.4.0 to 1.5-SNAPSHOT
Date Fri, 12 Sep 2008 15:20:52 GMT
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Sorry, I'm running out of time. I have to show a working prototype on
Tuesday. Therefore I've changed the routing to content based and don't
care about the headers anymore (for the moment). I'll let you know when
I come back to this topic.

Another question: Is there a generic way to transform the SOAP message
into a plain XML string representation?

Thank you again for your help,
Gisbert

Willem Jiang schrieb:
> Can you fill a JIRA[1] and submit a small unit test ?
> In this way , I can dig the code to find out the real reason.
> 
> [1]https://issues.apache.org/activemq/browse/CAMEL
> 
> Willem
> 
> Gisbert Amm wrote:
> I found out in thge mean time that my actual services still work; that
> means that I still get the contents out of the SOAP messages as before.
> 
> The only thing that did't work was the routing (I was wrong when I said
> that it worked with jxpath).
> 
> However, now in SoapUI I always get the fault "Null object passed into
> Dispatch marshalling". Does that tell you something?
> 
> Regards,
> Gisbert
> 
> Willem Jiang schrieb:
>  
>>>> Hi Gisbert,
>>>>
>>>> There is unit test[1] to show how to use the Provider<SOAPMessage>
>>>> interface in camel-cxf module, you may take a look as a reference.
>>>>
>>>> [1]
>>>> https://svn.apache.org/repos/asf/activemq/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfSoapMessageProviderTest.java
>>>>
>>>>
>>>>
>>>> Willem
>>>>
>>>> Willem Jiang wrote:
>>>>    
>>>>> Hi Gisbert,
>>>>>
>>>>> The default camel-cxf endpoint's dataFormat is POJO, you don't need to
>>>>> do any additional configuration. The two dataFormat configerations
>>>>> look good to me.
>>>>> From your configuration , I found you are using the servlet transport
>>>>> which might be need some addtional setting on the configuration.
>>>>>
>>>>> BTW, can you show me the stack trace of your test case for a quick
>>>>> trouble shot?
>>>>>
>>>>> Willem
>>>>>
>>>>> On Fri, Sep 12, 2008 at 12:29 AM, Gisbert Amm <gisbert.amm@1und1.de
>>>>> <mailto:gisbert.amm@1und1.de>> wrote:
>>>>>
>>>>>       
>>>> Hi Willem,
>>>>
>>>> that sounds promising (and your guesses are right). But HOW to set
>>>>    
>>>>>> the
>>>>>>         
>>>> dataFormat? I've tried
>>>>
>>>>  <!-- CXF Endpoint for SOAP: My.wsdl -->
>>>>    <cxf:cxfEndpoint id="MyEndpoint"
>>>>        address="/MyService"
>>>>        serviceClass="foo.bar.DummyProvider"
>>>>        wsdlURL="WEB-INF/wsdl/My.wsdl"
>>>>        endpointName="s:My-SOAP11-HTTP"
>>>>        serviceName="s:svMy"
>>>>        xmlns:s="http://contract/MyAddress/1.2">
>>>>        <cxf:properties>
>>>>            <entry key="dataFormat" value="POJO"/>
>>>>        </cxf:properties>
>>>>    </cxf:cxfEndpoint>
>>>>
>>>> and
>>>>
>>>> <route>
>>>>   <from uri="cxf:bean:MyEndpoint?dataFormat=POJO"/>
>>>>
>>>> but neither of them seems to have any effect.
>>>>
>>>> -Gisbert
>>>>
>>>>
>>>> Willem Jiang schrieb:
>>>>    
>>>>> Hi Gisbert
>>>>>       * NOTE *
>>>>> If you set the camel-cxf endpoint dataFormat to be MESSAGE, the in
>>>>> message body is not the MessageContentsList any more.
>>>>>       I need to update the camel-cxf wiki page for it.
>>>>>       From the codes that you showed , I think you are using the JAXWS
>>>>> Provider Interface as the SEI which provides a low level message
>>>>>       
>>>> for end
>>>>    
>>>>> user to processing and you can get your processor work by
>>>>>       
>>>> setting the
>>>>    
>>>>> endpoint to POJO mode.
>>>>>       Willem
>>>>>       Gisbert Amm wrote:
>>>>> Hi again,
>>>>>       the Groovy example unfortunately didn't work for me but I'm
>>>>>       
>>>> still happy
>>>>    
>>>>> with the jxpath variant. Still it would be nice to find out how
>>>>>       
>>>> to set
>>>>    
>>>>> the dataFormat of the endpoint to MESSAGE (which seems to be
>>>>>       
>>>> plain XML).
>>>>    
>>>>> That would provide me with maximum freedom ...
>>>>>       I faced another problem. Code like this in a processor that
>>>>>       
>>>> worked fine
>>>>    
>>>>> with Camel 1.4.0 doesn't work anymore either:
>>>>>       SOAPMessage soapMessage = (SOAPMessage)
>>>>> exchange.getIn().getBody(List.class).get(0);
>>>>>       SOAPBody sb = soapMessage.getSOAPPart().getEnvelope().getBody();
>>>>>       String message = (String)
>>>>>       
>>>> exchange.getIn().getBody(List.class).get(0);
>>>>
>>>>    
>>>>> Long contractID =
>>>>>      
>>>>>>   
>>>>>> Long.valueOf(sb.getElementsByTagName(CONTRACT_ID).item(0).getTextContent());
>>>>>>
>>>>>>         
>>>>    
>>>>> ...
>>>>>       As you pointed out, the message body is now of type
>>>>> org.apache.cxf.message.MessageContentsList. Is there an example
>>>>> somewhere how to retrieve the single values out of this object?
>>>>>       
>>>> It has a
>>>>    
>>>>> method  get(MessagePartInfo key), but I don't know how to use
>>>>>       
>>>> this (the
>>>>    
>>>>> org.apache.cxf.service.model.MessagePartInfo object seems to be
>>>>>       
>>>> rather
>>>>    
>>>>> complex).
>>>>>       Regards,
>>>>> Gisbert
>>>>>       Gisbert Amm wrote:
>>>>>      
>>>>>>>> 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.
<http://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

iD8DBQFIyojTwM6uO7ce7NoRAjrwAJ9GtyYgNRiNIBUxwp/hT6F0q4+amACfdnJK
thR/iV7W/bOl4yMzk0FdMns=
=d93T
-----END PGP SIGNATURE-----

Mime
View raw message