Hi,
does not work too.
the code snippet
public void process( Exchange anEx ) {
Message iMsg = anEx.getIn();
List<Element> myList = (List<Element>) iMsg.getBody(List.class);
System.out.println("got list=" + myList);
....
}
leads to a stack trace, since myList is null. Here is the output:
[java] Router ready ...
[java] Nov 12, 2008 3:01:07 PM
org.apache.camel.component.cxf.interceptors.AbstractMessageInInterceptor
createDOMMessage
[java] INFO: AbstractMessageInInterceptor Converting Stax Stream to DOM
[java] Nov 12, 2008 3:01:07 PM
org.apache.camel.component.cxf.interceptors.AbstractMessageInInterceptor
handleMessage
[java] INFO: AbstractRoutingMessageInInterceptor Infer
BindingOperationInfo.
[java] Nov 12, 2008 3:01:07 PM
org.apache.camel.component.cxf.interceptors.AbstractMessageInInterceptor
handleMessage
[java] INFO: DOMInInterceptor- BindingOperation
is:{http://apache.org/hello_world_soap_http}greetMe
[java] Start process ...
[java] got list=null
[java] Start process ...
[java] got list=null
[java] Start process ...
[java] got list=null
[java] Start process ...
[java] got list=null
[java] Start process ...
[java] got list=null
[java] Start process ...
[java] got list=null
[java] Nov 12, 2008 3:01:13 PM
org.apache.camel.component.cxf.interceptors.SoapMessageOutInterceptor
handleMessage
[java] INFO: SoapMessageOutInterceptor binding operation style
processing.
[java] Nov 12, 2008 3:01:13 PM
org.apache.cxf.phase.PhaseInterceptorChain doIntercept
[java] INFO: Interceptor has thrown exception, unwinding now
[java] java.lang.NullPointerException
[java] at
org.apache.camel.component.cxf.interceptors.PayloadContentRedirectInterceptor.handleMessage(PayloadContentRedirectInterceptor.java:53)
[java] at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221)
[java] at
org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:74)
[java] at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221)
[java] at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:77)
[java] at
org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:280)
[java] at
org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:254)
[java] at
org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:70)
[java] at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
[java] at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
[java] at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
[java] at org.mortbay.jetty.Server.handle(Server.java:324)
[java] at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
[java] at
org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:842)
[java] at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648)
[java] at
org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
[java] at
org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
[java] at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
[java] at
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
[java] Nov 12, 2008 3:01:13 PM
org.apache.camel.component.cxf.interceptors.FaultOutInterceptor
handleMessage
[java] INFO: FaultOutInterceptor Creating SoapFault
The configuration of the cxf endpoint in the router is (accoring to the
greeter example):
private static final String HELLOWORLD_SERVICE_QUERY =
"?serviceClass=org.apache.hello_world_soap_http.Greeter&dataFormat=PAYLOAD";
private static String FROM_ENDPOINT_LOCATION =
"http://localhost:13012/helloworldrouter";
private static String TO_ENDPOINT_LOCATION =
"http://localhost:50000/helloworldserver";
public void configure() throws Exception {
MercatorProcessor p = new MercatorProcessor();
System.out.println("Mercator Processor succesfully instantiated ...");
this.from( getFromEndpointURI() ).process( p ).to( getToEndpointURI() );
System.out.println("Route succesfully configured ...");
}
private String getFromEndpointURI() {
return "cxf://" + FROM_ENDPOINT_LOCATION + HELLOWORLD_SERVICE_QUERY ;
}
Any idea ?
Mario
mario_horny wrote:
>
> Hi all,
>
> I have a custom processor that needs to transform a cxf message before it
> is routed to the destination endpoint. The code of the process() method
> looks like that:
>
> public void process( Exchange e ) {
>
> Message iMsg = e.getIn();
>
> msgStr = iMsg.getBody(String.class).toString();
>
> System.out.println("Received msg=" + msgStr );
>
> // do the transformation ....
> String transStr = doTransform( msgStr );
>
> Message oMsg = e.getOut();
>
> oMsg.setBody( transStr);
>
> }
>
> This works pretty fine, if the dataFormat is POJO or MESSAGE (defined in
> the RouteBuilder). In these cases, the Java parameter (POJO) or the whole
> xml message (MESSAGE) are printed out by the println(...) . If the
> dataFormat is PAYLOAD, only the class reference [EMAIL PROTECTED]
> is printed out.
>
> I could find no way to get the payload data as a string. I read that I
> need to write an own converter to get the data, but at the end of the day
> my problem is that I could find no way to get the data in any format (I'm
> not fixed to use a string object).
> I tried to get the body as a Map, InputStream, Collection,
> MessageContentsList... but non of these classes worked. I found out that
> some the classes work for some dataFormats (InputStream works fine for
> MESSAGE, MessageContentsList works fine for POJO), but nothing worked out
> for PAYLOAD.
>
> Does anybody have an example how to access the message body for
> dataFormat=PAYLOAD ? Is there a common way to access the body for all
> dataFormats ?
>
> Many thanks in advance,
> Mario
>
--
View this message in context:
http://www.nabble.com/getting-the-in-message-in-a-custom-processor-with-dataFormat%3DPAYLOAD-tp20457607s22882p20461139.html
Sent from the Camel - Users mailing list archive at Nabble.com.