-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 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 <[EMAIL PROTECTED] >> <mailto:[EMAIL PROTECTED]>> 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 iD8DBQFIymJpwM6uO7ce7NoRAuO3AJ4uw2vHzK4Y9v+NFCGn4XZFw/uIIACePYVO 5enRHLpE/3dV8spEc0fmhNk= =ZpgG -----END PGP SIGNATURE-----
