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.

Reply via email to