Repository: camel
Updated Branches:
  refs/heads/master 5865d2e4a -> 5fbf7c5d6


CAMEL-9201: Improved support for programmatic lookup


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

Branch: refs/heads/master
Commit: 93631c85f4250b3843a7ada987c99aeed909a11d
Parents: 5865d2e
Author: Antonin Stefanutti <anto...@stefanutti.fr>
Authored: Tue Feb 23 12:30:05 2016 +0100
Committer: Antonin Stefanutti <anto...@stefanutti.fr>
Committed: Tue Feb 23 12:30:05 2016 +0100

----------------------------------------------------------------------
 components/camel-cdi/pom.xml                    | 17 ++++
 .../org/apache/camel/cdi/CdiCamelExtension.java |  4 +-
 .../java/org/apache/camel/cdi/CdiSpiHelper.java |  4 +
 .../src/main/java/org/apache/camel/cdi/Uri.java | 26 ++++++
 .../camel/cdi/test/ProgrammaticLookupTest.java  | 89 ++++++++++++++++++++
 5 files changed, 138 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/93631c85/components/camel-cdi/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-cdi/pom.xml b/components/camel-cdi/pom.xml
index 6c10e00..fb23bce 100644
--- a/components/camel-cdi/pom.xml
+++ b/components/camel-cdi/pom.xml
@@ -264,6 +264,8 @@
                 <exclude>**/*Cdi12Test.java</exclude>
                 <!-- OWB does not call the InjectionTarget#preDestroy method 
-->
                 <exclude>**/UnstoppedCamelContext*Test.java</exclude>
+                <!-- Reactivate when OWB-1122 is fixed -->
+                <exclude>**/ProgrammaticLookupTest.java</exclude>
               </excludes>
             </configuration>
           </plugin>
@@ -317,6 +319,21 @@
     <profile>
       <id>owb-1.2</id>
 
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <configuration>
+              <excludes>
+                <!-- Reactivate when OWB-1122 is fixed -->
+                <exclude>**/ProgrammaticLookupTest.java</exclude>
+              </excludes>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+
       <dependencies>
 
         <!-- provided dependencies -->

http://git-wip-us.apache.org/repos/asf/camel/blob/93631c85/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
----------------------------------------------------------------------
diff --git 
a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
 
b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
index 9f80a0f..4cacd4a 100755
--- 
a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
+++ 
b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
@@ -172,7 +172,7 @@ public class CdiCamelExtension implements Extension {
             Class<?> type = CdiSpiHelper.getRawType(am.getBaseType());
             if (Endpoint.class.isAssignableFrom(type) || 
ProducerTemplate.class.equals(type)) {
                 Set<Annotation> qualifiers = CdiSpiHelper.getQualifiers(am, 
manager);
-                producerQualifiers.put(am.getJavaMember(), 
qualifiers.isEmpty() ? 
Collections.<Annotation>singleton(DefaultLiteral.INSTANCE) : qualifiers);
+                producerQualifiers.put(am.getJavaMember(), qualifiers);
                 Set<Annotation> annotations = new 
HashSet<>(am.getAnnotations());
                 annotations.removeAll(qualifiers);
                 annotations.add(Excluded.INSTANCE);
@@ -239,7 +239,7 @@ public class CdiCamelExtension implements Extension {
                 }
             } else {
                 if (Endpoint.class.isAssignableFrom(type) || 
ProducerTemplate.class.isAssignableFrom(type)) {
-                    
qualifiers.addAll(CdiSpiHelper.excludeElementOfTypes(contextQualifiers, 
Any.class, Default.class, Named.class));
+                    
qualifiers.addAll(CdiSpiHelper.excludeElementOfTypes(contextQualifiers, 
Default.class, Named.class));
                 }
             }
             // TODO: would be more correct to add a bean for each Camel 
context bean

http://git-wip-us.apache.org/repos/asf/camel/blob/93631c85/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java
----------------------------------------------------------------------
diff --git 
a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java 
b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java
index d2cb4af..8a7c8c5 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java
@@ -138,6 +138,10 @@ final class CdiSpiHelper {
                 qualifiers.add(annotation);
             }
         }
+        if (qualifiers.isEmpty()) {
+            qualifiers.add(DefaultLiteral.INSTANCE);
+        }
+        qualifiers.add(AnyLiteral.INSTANCE);
         return qualifiers;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/93631c85/components/camel-cdi/src/main/java/org/apache/camel/cdi/Uri.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/Uri.java 
b/components/camel-cdi/src/main/java/org/apache/camel/cdi/Uri.java
index 0fff3d1..538f882 100755
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/Uri.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/Uri.java
@@ -20,6 +20,7 @@ import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
+import javax.enterprise.util.AnnotationLiteral;
 import javax.enterprise.util.Nonbinding;
 import javax.inject.Qualifier;
 
@@ -60,4 +61,29 @@ public @interface Uri {
      */
     @Deprecated
     @Nonbinding String context() default "";
+
+    final class Literal extends AnnotationLiteral<Uri> implements Uri {
+
+        private static final long serialVersionUID = 1L;
+
+        private final String uri;
+
+        private Literal(String uri) {
+            this.uri = uri;
+        }
+
+        public static Literal of(String uri) {
+            return new Literal(uri);
+        }
+
+        @Override
+        public String value() {
+            return uri;
+        }
+
+        @Override
+        public String context() {
+            return "";
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/93631c85/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ProgrammaticLookupTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ProgrammaticLookupTest.java
 
b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ProgrammaticLookupTest.java
new file mode 100644
index 0000000..eb1eb18
--- /dev/null
+++ 
b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ProgrammaticLookupTest.java
@@ -0,0 +1,89 @@
+/**
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.EndpointInjectRoute;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class ProgrammaticLookupTest {
+
+    @Any
+    @Inject
+    Instance<CamelContext> contexts;
+
+    @Any
+    @Inject
+    private Instance<ProducerTemplate> producers;
+
+    @Any
+    @Inject
+    private Instance<Endpoint> endpoints;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(EndpointInjectRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void verifyCamelContext() {
+        assertThat("Context instance status is incorrect!", 
contexts.get().getStatus(), is(equalTo(ServiceStatus.Started)));
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        ProducerTemplate inbound = 
producers.select(Uri.Literal.of("direct:inbound")).get();
+        MockEndpoint outbound = endpoints.select(MockEndpoint.class, 
Uri.Literal.of("mock:outbound")).get();
+
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test");
+
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}

Reply via email to