Hi Wilson,

I just traced the code and find a way to fix this issue and it will be in the trunk soon :)

Willem.

Wilson wrote:
Hi Willem,

Issue created: https://issues.apache.org/activemq/browse/CAMEL-286

Best regards,

Wilson


willem.jiang wrote:
Hi Wilson,

Yes , it must be a camel-cxf component's bug. Could you fill a JIRA[1] for it ?

[1]http://issues.apache.org/activemq/browse/CAMEL

Willem.

Wilson wrote:
Hi,

I found a workaround for the problem. I added a processor after the CXF
router endpoint:

-------JAVA-CODE--BEGIN-------------------------------------------
        String anyEndpoint = "activemq:pedidos";
        
        from(StringUtils.join(cxfRouterURI)).process(new Processor(){
                        public void process(Exchange exchange) throws Exception 
{
                                exchange.setOut(exchange.getIn());
                        }
        }).to(anyEndpoint).to(StringUtils.join(cxfServiceURI));
-------JAVA-CODE--END-------------------------------------------

Now it is working.

I think there is a bug in CXF Camel code.

--
Wilson


Wilson wrote:
Hi Willem,

I am using Camel 1.3. I am using Maven to build the project. Today I
updated to the snapshot released on 2008-01-09 but the problem is still
there.

Thank you.

Wilson


willem.jiang wrote:
Hi Wilson,

Which version of Camel are you using?
Please try out Camel 1.3 snapshot which fixed a camel-cxf component's issue which can't pass the exchange back form the cxf producer.

Willem.

Wilson wrote:
Hi Willem,

Thank you for your reply!

I changed my code in order to use a SEI to describe the Web Service.
Now
it
is working fine but I am having problems when I add an endpoint
between
the
cxf endpoints.

The (working) code looks like this:

--------------------------------------------------------
package com.tc.eai;

import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.spring.Main;
import org.apache.commons.lang.StringUtils;

public class MyRouteBuilder extends RouteBuilder {

        private static String ROUTER_ADDRESS =
"http://localhost:9003/pedidoService";;
        private static String DATA_FORMAT = "dataFormat=MESSAGE";
        private static String SERVICE_NAME =
"serviceName=%7bhttp://www.tc.com/pedido%7dpedido";;
        private static String SERVICE_CLASS =
"serviceClass=com.tc.eai.PedidoService";
        private static String PORT_NAME =
"portName=%7bhttp://www.tc.com/pedido%7dpedidoSOAP";;
        private static String SERVICE_ADDRESS =
"http://localhost:9000/pedidoService";;
        
    /**
     * A main() so we can easily run these routing rules in our IDE
     */
    public static void main(String... args) {
        Main.main(args);
    }

    /**
     * Lets configure the Camel routing rules using Java code...
     */
    public void configure() {
        //-- Router receives requests from external clients and send to
channel
        String[] cxfRouterURI = {
                "cxf://"
                ,ROUTER_ADDRESS
                ,"?"
                ,DATA_FORMAT
                ,"&"
                ,SERVICE_NAME
                ,"&"
                ,SERVICE_CLASS
                ,"&"
                ,PORT_NAME
        };

        //-- Service points to external web service. The request routed
by
the
Router //-- is send to the external service provider
        String[] cxfServiceURI = {
                "cxf://"
                ,SERVICE_ADDRESS
                ,"?"
                ,DATA_FORMAT
                ,"&"
                ,SERVICE_NAME
                ,"&"
                ,SERVICE_CLASS
                ,"&"
                ,PORT_NAME
        };

from(StringUtils.join(cxfRouterURI)).to(StringUtils.join(cxfServiceURI));
    }
}
--------------------------------------------------------

When change the route this way:

        String anyEndpoint = "log:org.apache.camel?level=DEBUG";
        
from(StringUtils.join(cxfRouterURI)).to(anyEndpoint).to(StringUtils.join(cxfServiceURI));

I get this error:

------Exception Begin----------------------------
09/01/2008 18:32:40 org.apache.cxf.phase.PhaseInterceptorChain
doIntercept
INFO: Interceptor has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault
        at
org.apache.camel.component.cxf.interceptors.RawMessageContentRedirectInterceptor.handleMessage(RawMessageContentRedirectInterceptor.java:43)
        at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:207)
        at
org.apache.camel.component.cxf.invoker.CxfClient.invokeWithMessageStream(CxfClient.java:137)
        at
org.apache.camel.component.cxf.invoker.CxfClient.dispatch(CxfClient.java:89)
        at
org.apache.camel.component.cxf.CxfProducer.process(CxfProducer.java:202)
        at
org.apache.camel.component.cxf.CxfProducer.process(CxfProducer.java:152)
        at
org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsynProcessorBridge.process(AsyncProcessorTypeConverter.java:44)
        at
org.apache.camel.processor.SendProcessor.process(SendProcessor.java:73)
        at
org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:143)
        at
org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:87)
        at
org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
        at
org.apache.camel.processor.Pipeline.process(Pipeline.java:85)
        at
org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:40)
        at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:44)
        at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:68)
        at
org.apache.camel.component.cxf.CamelInvoker.invoke(CamelInvoker.java:71)
        at
org.apache.camel.component.cxf.interceptors.AbstractInvokerInterceptor.handleMessage(AbstractInvokerInterceptor.java:65)
        at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:207)
        at
org.apache.camel.component.cxf.CxfMessageObserver.onMessage(CxfMessageObserver.java:83)
        at
org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:284)
        at
org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:240)
        at
org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:54)
        at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
        at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:211)
        at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
        at org.mortbay.jetty.Server.handle(Server.java:313)
        at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
        at
org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:844)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:726)
        at
org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
        at
org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
        at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396)
        at
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
Caused by: java.lang.NullPointerException
        at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1025)
        at org.apache.commons.io.IOUtils.copy(IOUtils.java:999)
        at
org.apache.camel.component.cxf.interceptors.RawMessageContentRedirectInterceptor.handleMessage(RawMessageContentRedirectInterceptor.java:39)
        ... 32 more
------Exception End----------------------------

The same problem happens with seda and activemq endpoints.

Thank you,

Wilson


Hi Wilson,

I am afraid you need to provide the SEI class for camel-cxf component to initiate the endpoint.
If you do not want to unmarshal the request message , I think you
could use soap message or raw message data formate. Now I am thinking to do some refactoring work to enable the web services endpoint without SEI class.

Willem.





Reply via email to