You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2009/09/20 10:12:38 UTC

svn commit: r816992 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/ camel-core/src/main/java/org/apache/camel/impl/ camel-core/src/main/java/org/apache/camel/model/ components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/...

Author: davsclaus
Date: Sun Sep 20 08:12:37 2009
New Revision: 816992

URL: http://svn.apache.org/viewvc?rev=816992&view=rev
Log:
CAMEL-2027: Fixed NPE when using spring java config.

Added:
    camel/trunk/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/BeanJavaConfigTest.java   (with props)
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java
    camel/trunk/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/CamelConfiguration.java
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java?rev=816992&r1=816991&r2=816992&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java Sun Sep 20 08:12:37 2009
@@ -75,6 +75,14 @@
     void addComponent(String componentName, Component component);
 
     /**
+     * Is the given component already registered?
+     *
+     * @param componentName the name of the component
+     * @return the registered Component or <tt>null</tt> if not registered
+     */
+    Component hasComponent(String componentName);
+
+    /**
      * Gets a component from the context by name.
      *
      * @param componentName the name of the component

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=816992&r1=816991&r2=816992&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Sun Sep 20 08:12:37 2009
@@ -177,6 +177,10 @@
         this.name = name;
     }
 
+    public Component hasComponent(String componentName) {
+        return components.get(componentName);
+    }
+
     public void addComponent(String componentName, final Component component) {
         ObjectHelper.notNull(component, "component");
         synchronized (components) {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java?rev=816992&r1=816991&r2=816992&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java Sun Sep 20 08:12:37 2009
@@ -57,7 +57,8 @@
     private Long delay;
     private Boolean autoStartup = Boolean.TRUE;
 
-    public DefaultRouteContext(RouteDefinition route, FromDefinition from, Collection<Route> routes) {
+    public DefaultRouteContext(CamelContext camelContext, RouteDefinition route, FromDefinition from, Collection<Route> routes) {
+        this.camelContext = camelContext;
         this.route = route;
         this.from = from;
         this.routes = routes;
@@ -68,8 +69,8 @@
      */
     public DefaultRouteContext(CamelContext camelContext) {
         this.camelContext = camelContext;
-        routes = new ArrayList<Route>();
-        route = new RouteDefinition("temporary");
+        this.routes = new ArrayList<Route>();
+        this.route = new RouteDefinition("temporary");
     }
 
     public Endpoint getEndpoint() {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java?rev=816992&r1=816991&r2=816992&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java Sun Sep 20 08:12:37 2009
@@ -417,7 +417,7 @@
     // Implementation methods
     // -------------------------------------------------------------------------
     protected RouteContext addRoutes(Collection<Route> routes, FromDefinition fromType) throws Exception {
-        RouteContext routeContext = new DefaultRouteContext(this, fromType, routes);
+        RouteContext routeContext = new DefaultRouteContext(getCamelContext(), this, fromType, routes);
 
         // configure tracing
         if (trace != null) {

Modified: camel/trunk/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/CamelConfiguration.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/CamelConfiguration.java?rev=816992&r1=816991&r2=816992&view=diff
==============================================================================
--- camel/trunk/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/CamelConfiguration.java (original)
+++ camel/trunk/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/CamelConfiguration.java Sun Sep 20 08:12:37 2009
@@ -52,7 +52,7 @@
      */
     @Bean
     public CamelContext camelContext() throws Exception {
-        SpringCamelContext camelContext = new SpringCamelContext();        
+        SpringCamelContext camelContext = new SpringCamelContext(getApplicationContext());
         setupCamelContext(camelContext);
         List<RouteBuilder> routes = routes();
         for (RoutesBuilder route : routes) {

Added: camel/trunk/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/BeanJavaConfigTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/BeanJavaConfigTest.java?rev=816992&view=auto
==============================================================================
--- camel/trunk/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/BeanJavaConfigTest.java (added)
+++ camel/trunk/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/BeanJavaConfigTest.java Sun Sep 20 08:12:37 2009
@@ -0,0 +1,86 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.spring.javaconfig;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Handler;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.Test;
+import org.springframework.config.java.annotation.Bean;
+import org.springframework.config.java.annotation.Configuration;
+import org.springframework.config.java.test.JavaConfigContextLoader;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
+
+/**
+ * @version $Revision$
+ */
+@ContextConfiguration(
+        locations = "org.apache.camel.spring.javaconfig.BeanJavaConfigTest$ContextConfig",
+        loader = JavaConfigContextLoader.class
+)
+public class BeanJavaConfigTest extends AbstractJUnit4SpringContextTests {
+
+    @EndpointInject(uri = "mock:end")
+    protected MockEndpoint endpoint;
+
+    @EndpointInject(uri = "mock:error")
+    protected MockEndpoint errorEndpoint;
+
+    @Produce(uri = "direct:start")
+    protected ProducerTemplate producer;
+
+    @Test
+    @DirtiesContext
+    public void testRouteUsingBean() throws Exception {
+        endpoint.expectedMessageCount(1);
+        endpoint.message(0).body().isEqualTo("Hello World");
+        producer.sendBody("World");
+        endpoint.assertIsSatisfied();
+    }
+
+    public static class SomeBean {
+
+        @Handler
+        public String someMethod(String body) {
+            return "Hello " + body;
+        }
+    }
+
+    @Configuration
+    public static class ContextConfig extends SingleRouteCamelConfiguration {
+
+        @Bean
+        @Override
+        public RouteBuilder route() {
+            return new RouteBuilder() {
+                @Override
+                public void configure() throws Exception {
+                    from("direct:start")
+                            .errorHandler(deadLetterChannel("mock:end"))
+                            .bean(new SomeBean())
+                            .to("mock:end");
+                }
+            };
+        }
+    }
+
+}
\ No newline at end of file

Propchange: camel/trunk/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/BeanJavaConfigTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/BeanJavaConfigTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java?rev=816992&r1=816991&r2=816992&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java Sun Sep 20 08:12:37 2009
@@ -140,7 +140,10 @@
         this.applicationContext = applicationContext;
 
         if (applicationContext instanceof ConfigurableApplicationContext) {
-            addComponent("spring-event", new EventComponent(applicationContext));
+            // only add if not already added
+            if (hasComponent("spring-event") == null) {
+                addComponent("spring-event", new EventComponent(applicationContext));
+            }
         }
     }