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

Stephan Siano commented on CAMEL-3151:
--------------------------------------

Actually it is an issue in error handling, so I don't really know how to write 
a unit test for that. 

Maybe it helps explaining what I actually do:
I have a beans.xml that looks like that:

<?xml version="1.0"?>
<beans xmlns="http://www.springframework.org/schema/beans";
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
           xmlns:camel="http://camel.apache.org/schema/spring";
           xmlns:cxf="http://camel.apache.org/schema/cxf";
           xmlns:http-conf="http://cxf.apache.org/transports/http/configuration";
           xmlns:sample="http://services.samples/xsd";
           xsi:schemaLocation="
         http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
         http://cxf.apache.org/transports/http/configuration
         http://cxf.apache.org/schemas/configuration/http-conf.xsd
         http://camel.apache.org/schema/cxf
         http://camel.apache.org/schema/cxf/camel-cxf.xsd
         http://camel.apache.org/schema/spring
         http://camel.apache.org/schema/spring/camel-spring.xsd";>

        <import resource="classpath:META-INF/cxf/cxf.xml" />
        <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
        <import resource="classpath:META-INF/cxf/cxf-extension-http.xml"/>  
     
        <cxf:cxfEndpoint id="serviceEndpoint"
                             
address="http://myhost:8080/MockServices/EchoService";
                             wsdlURL="EchoService.wsdl"
                             endpointName="sample:EchoServicePort" 
                             serviceName="sample:EchoService">
                <cxf:properties>
                        <entry key="dataFormat" value="PAYLOAD" />
                </cxf:properties>
        </cxf:cxfEndpoint>

        <camel:camelContext>
                <camel:route>
                        <camel:from uri="file://c:/temp/camel/poller" />
                        <!-- The wsdl contains multiple operations, so we 
select one -->
                        <camel:setHeader headerName="operationName">
                                
<camel:constant>buyStocksOperation1K</camel:constant>
                        </camel:setHeader>      
                        <camel:to uri="cxf:bean:serviceEndpoint" />
                </camel:route>
        </camel:camelContext>
</beans>

You can use any wsdl for that (even for a webservice that does not exist, 
because it will not get called). Then put a xml-file matching the request type 
of the endpoint into the /temp/camel/poller directory. You will encounter a 
NullPointerException. After the getBody() statements are replaced by 
getMandatoryBody() statements, the scenario does still not work, but now you 
get a (IMO much better) TypeConversionException that indicates the reason for 
the issue.

Mid-term it might be a good idea to have a TypeConverter for CxfPayload type 
messages. If that is there, the fix will not show up anymore in this scenario 
(but maybe in other scenarios where no type converter is available).

> NullPointerException in CXF Producer if no type converter is available
> ----------------------------------------------------------------------
>
>                 Key: CAMEL-3151
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-3151
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-cxf
>            Reporter: Stephan Siano
>            Priority: Minor
>             Fix For: 2.5.0
>
>
> When I am trying to send the content of a file to an CXF endpoint in PAYLOAD 
> format, I get a NullPointerException in line 603 of the CXFEndpoint class (in 
> the current trunk). The offending coding is:
>                 CxfPayload<?> payload = (CxfPayload<?>)params[0];
>                 List<Element> elements = payload.getBody();
> The params are set in line 282 of the CxfProducer class:
>             params = new Object[1];
>             // TODO: maybe it should be mandatory body?
>             params[0] = exchange.getIn().getBody(CxfPayload.class);
> The fix is most probably trivial (change to getMandatoryBody()) and add a 
> throws InvalidPayloadException to the getParams() method of CxfProducer). 
> After this is fixed (the same for the MESSAGE format two lines lower), the 
> example will still not work, but I get a meaningful error message saying that 
> there is no type converter between GenericFile and CxfPayload.
> One could argue, that under some circumstances null payloads may be legal (I 
> just don't see any), but in this case the CxfEndpoint class would have to be 
> modified to avoid the NullPointerException. As the coding is a missing 
> converter or a null payload will trigger NullPointerExceptions for 
> CxfEndpoints unconditionally.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to