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

Aki Yoshida commented on CAMEL-7069:
------------------------------------

After some pause (forgot about this ticket), I thought about those options 
again.
Since some of the CXF payload conversion methods and NodeList conversion 
methods assume the body (of the CxfPayload) to be not null, option 3 will 
require many changes in those converters to avoid NPE. Option 1 would introduce 
a redundant way of creating an empty cxf payload (either passing null or an 
empty list). So, I think we can opt for option 2 and change the 
getPayloadBodyElements method so that normal scenarios resulting a null camel 
body will not result in NPE at cxf payload instantiation.




> Sending an empty soap body message to a generic provider camel-cxf consumer 
> results in NPE
> ------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-7069
>                 URL: https://issues.apache.org/jira/browse/CAMEL-7069
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-cxf
>    Affects Versions: 2.12.2
>            Reporter: Aki Yoshida
>            Assignee: Aki Yoshida
>
> In some cases, CXFPayload is instantiated with a null body and this is 
> causing an NPE later in the processing.
> Caused by: java.lang.NullPointerException
>       at org.apache.camel.component.cxf.CxfPayload$1.size(CxfPayload.java:105)
>       at 
> org.apache.camel.component.cxf.converter.NodeListWrapper.getLength(NodeListWrapper.java:33)
>       at 
> org.apache.camel.converter.jaxp.DomConverter.toString(DomConverter.java:69)
>       at 
> org.apache.camel.converter.jaxp.DomConverter.toByteArray(DomConverter.java:142)
>       at 
> org.apache.camel.converter.jaxp.DomConverter.toInputStream(DomConverter.java:137)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> What is not sure is how we should fix it.
> CXFPayload is not checking whether the body is null when it is instantiated. 
> In that case, some methods will lead to NPE but some are not (like 
> getBodySources() or getHeaders()). And there are some test cases passing a 
> null body.
> So I think, we should either 
> 1. change CXFPayload to automatically creates an empty body (i.e., an empty 
> List<Source>) when the body passed to the constructor is null, or
> 2. add this null->empty handling in DefaultCXFBinding.getPayloadBodyElements 
> when extracting the body and pass an empty list to the CXFPayload constructor 
> in this case, or
> 3. just throws a specific exception instead of NPE in this particular case.
> In any case, we need to clarify what is the correct usage of CXFPayload.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to