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.
>>>
>>>
>>>
>>
>>
>>
>
>
--
View this message in context:
http://www.nabble.com/About-JIRA-issue-CAMEL-180-tp14702992s22882p14753660.html
Sent from the Camel - Users mailing list archive at Nabble.com.