Author: ningjiang Date: Fri Jun 10 09:30:17 2011 New Revision: 1134252 URL: http://svn.apache.org/viewvc?rev=1134252&view=rev Log: CAMEL-4073 Fixed the NPE when misconfiguring the CXF endpoint url
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/FailedToCreateConsumerException.java camel/trunk/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelDestination.java camel/trunk/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/CamelDestinationTest.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/FailedToCreateConsumerException.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/FailedToCreateConsumerException.java?rev=1134252&r1=1134251&r2=1134252&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/FailedToCreateConsumerException.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/FailedToCreateConsumerException.java Fri Jun 10 09:30:17 2011 @@ -26,6 +26,11 @@ public class FailedToCreateConsumerExcep private final String uri; + public FailedToCreateConsumerException(String endpointURI, Throwable cause) { + super("Failed to create Consumer for endpoint for: " + endpointURI + ". Reason: " + cause, cause); + this.uri = endpointURI; + } + public FailedToCreateConsumerException(Endpoint endpoint, Throwable cause) { super("Failed to create Consumer for endpoint: " + endpoint + ". Reason: " + cause, cause); this.uri = endpoint.getEndpointUri(); Modified: camel/trunk/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelDestination.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelDestination.java?rev=1134252&r1=1134251&r2=1134252&view=diff ============================================================================== --- camel/trunk/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelDestination.java (original) +++ camel/trunk/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelDestination.java Fri Jun 10 09:30:17 2011 @@ -24,6 +24,7 @@ import org.apache.camel.Consumer; import org.apache.camel.Endpoint; import org.apache.camel.Exchange; import org.apache.camel.FailedToCreateConsumerException; +import org.apache.camel.NoSuchEndpointException; import org.apache.camel.Processor; import org.apache.camel.component.cxf.common.header.CxfHeaderHelper; import org.apache.camel.component.cxf.common.message.DefaultCxfMesssageMapper; @@ -112,9 +113,17 @@ public class CamelDestination extends Ab try { LOG.debug("establishing Camel connection"); destinationEndpoint = getCamelContext().getEndpoint(camelDestinationUri); + if (destinationEndpoint == null) { + throw new NoSuchEndpointException(camelDestinationUri); + } consumer = destinationEndpoint.createConsumer(new ConsumerProcessor()); ServiceHelper.startService(consumer); + } catch (NoSuchEndpointException nex) { + throw nex; } catch (Exception ex) { + if (destinationEndpoint == null) { + throw new FailedToCreateConsumerException(camelDestinationUri, ex); + } throw new FailedToCreateConsumerException(destinationEndpoint, ex); } } Modified: camel/trunk/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/CamelDestinationTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/CamelDestinationTest.java?rev=1134252&r1=1134251&r2=1134252&view=diff ============================================================================== --- camel/trunk/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/CamelDestinationTest.java (original) +++ camel/trunk/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/CamelDestinationTest.java Fri Jun 10 09:30:17 2011 @@ -21,14 +21,20 @@ import java.io.IOException; import java.io.InputStream; import javax.xml.namespace.QName; +import javax.xml.ws.Endpoint; +import javax.xml.ws.Holder; +import javax.xml.ws.WebServiceException; import org.apache.camel.CamelContext; +import org.apache.camel.NoSuchEndpointException; import org.apache.camel.RuntimeCamelException; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.cxf.transport.CamelDestination.ConsumerProcessor; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.DefaultExchange; +import org.apache.camel.wsdl_first.Person; +import org.apache.camel.wsdl_first.UnknownPersonFault; import org.apache.cxf.Bus; import org.apache.cxf.BusFactory; import org.apache.cxf.bus.spring.SpringBusFactory; @@ -263,5 +269,21 @@ public class CamelDestinationTest extend Assert.assertEquals(expectedException, exc); EasyMock.verify(dest); } + + @Test + public void testCAMEL4073() throws Exception { + try { + Endpoint.publish("camel://foo", new Person() { + public void getPerson(Holder<String> personId, Holder<String> ssn, Holder<String> name) + throws UnknownPersonFault { + } + }); + fail("Should throw and Exception"); + } catch (WebServiceException ex) { + Throwable c = ex.getCause(); + assertNotNull(c); + assertTrue(c instanceof NoSuchEndpointException); + } + } }