camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Willem Jiang <willem.ji...@gmail.com>
Subject Re: About JIRA issue CAMEL-180
Date Fri, 11 Jan 2008 14:18:10 GMT
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.
>>>>
>>>>
>>>>   
>>>>         
>>>
>>>       
>>     
>
>   


Mime
View raw message