[ 
https://issues.apache.org/jira/browse/CAMEL-4452?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13105368#comment-13105368
 ] 

Willem Jiang commented on CAMEL-4452:
-------------------------------------

Hi Aki,

I checked the code of NPE, I don't think it relates to the change of CAMEL-4030.
The camelExchange is not same with the cxfExchange, I don't think the oneway 
invocation can cause the NPE that you mentioned.
I guess there are some thing wrong with the boi.getOutput() checking.

Can  you submit the test case into this JIRA to let me have a look?

Willem

> CXFConsumer may extract the request message as the response message and this 
> can lead to problems
> -------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-4452
>                 URL: https://issues.apache.org/jira/browse/CAMEL-4452
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-cxf
>    Affects Versions: 2.8.0
>            Reporter: Aki Yoshida
>            Assignee: Willem Jiang
>             Fix For: 2.8.2, 2.9.0
>
>
> CAMEL-4030 with Revision 1129070 in trunk changed the way how the response 
> message is retrieved from the exchange and this is causing some issue.
> In particular, the changed code may retrieve the request message as the 
> response message when the call is oneway (when the condition 
> camelExchange.getPattern().isOutCapable() is false).
> Subsequently, this is leading to an NPE when the output operation is used to 
> extract the payload body from this request message because there is no output 
> operations in the oneway case at:
>         for (MessagePartInfo partInfo : boi.getOutput().getMessageParts()) {
> and resulting in:
> java.lang.NullPointerException
>       at 
> org.apache.camel.component.cxf.DefaultCxfBinding.getResponsePayloadList(DefaultCxfBinding.java:394)
>       at 
> org.apache.camel.component.cxf.DefaultCxfBinding.populateCxfResponseFromExchange(DefaultCxfBinding.java:318)
>       at 
> org.apache.camel.component.cxf.CxfConsumer$1.setResponseBack(CxfConsumer.java:176)
>       at 
> org.apache.camel.component.cxf.CxfConsumer$1.syncInvoke(CxfConsumer.java:126)
>       at 
> org.apache.camel.component.cxf.CxfConsumer$1.invoke(CxfConsumer.java:71)
>       at 
> org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
>       at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
>       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>       at 
> org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
>       at 
> org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:106)
>       at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
>       at 
> org.apache.cxf.phase.PhaseInterceptorChain.resume(PhaseInterceptorChain.java:232)
>       at 
> org.apache.cxf.interceptor.OneWayProcessorInterceptor$1.run(OneWayProcessorInterceptor.java:130)
>       at 
> org.apache.cxf.workqueue.AutomaticWorkQueueImpl$2.run(AutomaticWorkQueueImpl.java:353)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>       at java.lang.Thread.run(Thread.java:662)
> I see this change was introduced with CAMEL-4030 to support some sort of 
> wire-tap short-cut:
> from("cxf:xxx").inonly("jms:xxx").to("xxx")
> I am not sure how this inbound/outbound switching operation relates to this 
> use case.
> But in any case, this new behavior can lead to this problem and  I think the 
> old behavior (skipping the response message part if there is no response) 
> should be reinstated.
> I have a simple test case that can reproduce this problem, but the exception 
> is thrown in an executor thread and only written to the log and the original 
> test caller thread doesn't see the exception. So, it's not a useful automatic 
> test case. Maybe, there is a way. Let me know, how you think.
> thanks.
> regards, aki

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to