You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by he...@apache.org on 2013/10/17 10:47:06 UTC

git commit: [Spring-JavaConfig] Added autowiring support to JavaConfig CamelConfiguration.

Updated Branches:
  refs/heads/master de4cb2b98 -> 8a93ae75d


[Spring-JavaConfig] Added autowiring support to JavaConfig CamelConfiguration.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/8a93ae75
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/8a93ae75
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/8a93ae75

Branch: refs/heads/master
Commit: 8a93ae75db774a32c7822542b912026be190e610
Parents: de4cb2b
Author: Henryk Konsek <he...@gmail.com>
Authored: Thu Oct 17 10:46:56 2013 +0200
Committer: Henryk Konsek <he...@gmail.com>
Committed: Thu Oct 17 10:46:56 2013 +0200

----------------------------------------------------------------------
 .../spring/javaconfig/CamelConfiguration.java   | 20 +++++-
 .../autowire/AutodetectNoRoutesConfigTest.java  | 48 ++++++++++++++
 .../autowire/AutodetectingConfigTest.java       | 68 ++++++++++++++++++++
 .../autowire/AutowiringContextConfig.java       | 38 +++++++++++
 .../javaconfig/autowire/ModuleConfig.java       | 40 ++++++++++++
 5 files changed, 212 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/8a93ae75/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/CamelConfiguration.java
----------------------------------------------------------------------
diff --git a/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/CamelConfiguration.java b/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/CamelConfiguration.java
index 0b6d1e9..636a7e7 100644
--- a/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/CamelConfiguration.java
+++ b/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/CamelConfiguration.java
@@ -16,7 +16,10 @@
  */
 package org.apache.camel.spring.javaconfig;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import static java.util.Collections.emptyList;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.RoutesBuilder;
@@ -154,8 +157,21 @@ public abstract class CamelConfiguration implements BeanFactoryAware, Applicatio
     }
 
     /**
-     * Returns the list of routes to use in this configuration
+     * Returns the list of routes to use in this configuration. By default autowires all
+     * {@link org.apache.camel.builder.RouteBuilder} instances available in the
+     * {@link org.springframework.context.ApplicationContext}.
      */
-    public abstract List<RouteBuilder> routes();
+    public List<RouteBuilder> routes() {
+        if (this.applicationContext != null) {
+            Map<String, RouteBuilder> routeBuildersMap = applicationContext.getBeansOfType(RouteBuilder.class);
+            List<RouteBuilder> routeBuilders = new ArrayList<RouteBuilder>(routeBuildersMap.size());
+            for (RouteBuilder routeBuilder : routeBuildersMap.values()) {
+                routeBuilders.add(routeBuilder);
+            }
+            return routeBuilders;
+        } else {
+            return emptyList();
+        }
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/8a93ae75/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/AutodetectNoRoutesConfigTest.java
----------------------------------------------------------------------
diff --git a/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/AutodetectNoRoutesConfigTest.java b/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/AutodetectNoRoutesConfigTest.java
new file mode 100644
index 0000000..419fda2
--- /dev/null
+++ b/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/AutodetectNoRoutesConfigTest.java
@@ -0,0 +1,48 @@
+/**
+ * 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.autowire;
+
+import static junit.framework.Assert.assertEquals;
+import org.apache.camel.CamelContext;
+import org.apache.camel.spring.javaconfig.CamelConfiguration;
+import org.apache.camel.spring.javaconfig.test.JavaConfigContextLoader;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
+
+@ContextConfiguration(locations = "org.apache.camel.spring.javaconfig.autowire.NoRoutesConfig", loader = JavaConfigContextLoader.class)
+public class AutodetectNoRoutesConfigTest extends AbstractJUnit4SpringContextTests {
+
+    @Autowired
+    CamelContext camelContext;
+
+    @Test
+    public void shouldAutodetectRouteBuilders() throws InterruptedException {
+        // When
+        int routesNumber = camelContext.getRoutes().size();
+
+        //Then
+        assertEquals(0, routesNumber);
+    }
+
+}
+
+@Configuration
+class NoRoutesConfig extends CamelConfiguration {
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/8a93ae75/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/AutodetectingConfigTest.java
----------------------------------------------------------------------
diff --git a/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/AutodetectingConfigTest.java b/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/AutodetectingConfigTest.java
new file mode 100644
index 0000000..ef04b95
--- /dev/null
+++ b/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/AutodetectingConfigTest.java
@@ -0,0 +1,68 @@
+/**
+ * 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.autowire;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.spring.javaconfig.test.JavaConfigContextLoader;
+import org.junit.Test;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
+
+@ContextConfiguration(locations = "org.apache.camel.spring.javaconfig.autowire.AutowiringContextConfig", loader = JavaConfigContextLoader.class)
+public class AutodetectingConfigTest extends AbstractJUnit4SpringContextTests {
+
+    @EndpointInject(uri = "mock:autowire")
+    MockEndpoint autowireMockEndpoint;
+
+    @EndpointInject(uri = "mock:module")
+    MockEndpoint moduleMockEndpoint;
+
+    @Produce
+    ProducerTemplate producer;
+
+    String message = "Hello!";
+
+    @Test
+    public void shouldAutodetectRouteBuilders() throws InterruptedException {
+        // Given
+        autowireMockEndpoint.expectedMessageCount(1);
+        autowireMockEndpoint.message(0).body().isEqualTo(message);
+
+        // When
+        producer.sendBody("direct:autowire", message);
+
+        // Then
+        autowireMockEndpoint.assertIsSatisfied();
+    }
+
+    @Test
+    public void shouldWireRouteBuildersFromModule() throws InterruptedException {
+        // Given
+        moduleMockEndpoint.expectedMessageCount(1);
+        moduleMockEndpoint.message(0).body().isEqualTo(message);
+
+        // When
+        producer.sendBody("direct:module", message);
+
+        // Then
+        moduleMockEndpoint.assertIsSatisfied();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/8a93ae75/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/AutowiringContextConfig.java
----------------------------------------------------------------------
diff --git a/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/AutowiringContextConfig.java b/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/AutowiringContextConfig.java
new file mode 100644
index 0000000..b24cfab
--- /dev/null
+++ b/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/AutowiringContextConfig.java
@@ -0,0 +1,38 @@
+/**
+ * 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.autowire;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.spring.javaconfig.CamelConfiguration;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
+
+@Configuration
+@ComponentScan("org.apache.camel.spring.javaconfig.autowire")
+public class AutowiringContextConfig extends CamelConfiguration {
+}
+
+@Component
+class MockedRoute extends RouteBuilder {
+
+    @Override
+    public void configure() throws Exception {
+        from("direct:autowire").to("mock:autowire");
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/8a93ae75/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/ModuleConfig.java
----------------------------------------------------------------------
diff --git a/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/ModuleConfig.java b/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/ModuleConfig.java
new file mode 100644
index 0000000..4078751
--- /dev/null
+++ b/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/ModuleConfig.java
@@ -0,0 +1,40 @@
+/**
+ * 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.autowire;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class ModuleConfig {
+
+    @Bean
+    public MockedRouteLoadedByModule mockedRouteLoadedByModule() {
+        return new MockedRouteLoadedByModule();
+    }
+
+}
+
+class MockedRouteLoadedByModule extends RouteBuilder {
+
+    @Override
+    public void configure() throws Exception {
+        from("direct:module").to("mock:module");
+    }
+
+}