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);
+        }
+    }
 
 }


Reply via email to