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:
-----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-----


Reply via email to