camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stephan Siano (JIRA)" <j...@apache.org>
Subject [jira] Commented: (CAMEL-3151) NullPointerException in CXF Producer if no type converter is available
Date Mon, 27 Sep 2010 10:57:40 GMT

    [ 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.


Mime
View raw message