You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by js...@apache.org on 2012/08/31 15:51:51 UTC
svn commit: r1379449 - in /camel/trunk/components/camel-cdi/src:
main/java/org/apache/camel/component/cdi/
main/java/org/apache/camel/component/cdi/internal/
test/java/org/apache/camel/cdi/ test/java/org/apache/camel/cdi/support/
Author: jstrachan
Date: Fri Aug 31 13:51:50 2012
New Revision: 1379449
URL: http://svn.apache.org/viewvc?rev=1379449&view=rev
Log:
improved CAMEL-5553 so we can also inject MockEndpoint instances; though we require @Mock as a qualifier unfortunately unless anyone figures out any neater way to differentiate Endpoint and MockEndpoint injection
Added:
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/component/cdi/Mock.java (with props)
Modified:
camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/component/cdi/internal/EndpointInjector.java
camel/trunk/components/camel-cdi/src/test/java/org/apache/camel/cdi/MockEndpointInjectTest.java
camel/trunk/components/camel-cdi/src/test/java/org/apache/camel/cdi/support/MockEndpointInjectedBean.java
Added: camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/component/cdi/Mock.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/component/cdi/Mock.java?rev=1379449&view=auto
==============================================================================
--- camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/component/cdi/Mock.java (added)
+++ camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/component/cdi/Mock.java Fri Aug 31 13:51:50 2012
@@ -0,0 +1,34 @@
+/**
+ *
+ * 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.component.cdi;
+
+import javax.inject.Qualifier;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * A qualifier for injecting instances of {@link org.apache.camel.component.mock.MockEndpoint} into a bean.
+ */
+@Qualifier
+@Retention(RUNTIME)
+@Target({TYPE, METHOD, FIELD, PARAMETER})
+public @interface Mock {
+}
Propchange: camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/component/cdi/Mock.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/component/cdi/internal/EndpointInjector.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/component/cdi/internal/EndpointInjector.java?rev=1379449&r1=1379448&r2=1379449&view=diff
==============================================================================
--- camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/component/cdi/internal/EndpointInjector.java (original)
+++ camel/trunk/components/camel-cdi/src/main/java/org/apache/camel/component/cdi/internal/EndpointInjector.java Fri Aug 31 13:51:50 2012
@@ -20,6 +20,8 @@ package org.apache.camel.component.cdi.i
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.EndpointInject;
+import org.apache.camel.component.cdi.Mock;
+import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.util.ObjectHelper;
import javax.enterprise.inject.Produces;
@@ -35,19 +37,24 @@ public class EndpointInjector {
private CamelContext camelContext;
-/*
- @Produces
- public Endpoint createEndpoint(InjectionPoint point) {
- return createEndpoint(point, Endpoint.class);
- }
-
- // Note that there does not appear to be a way in CDI to say we can inject
- // all types from Endpoint onwards so lets make it easy to also inject mock endpoints too
@Produces
+ @Mock
protected MockEndpoint createMockEndpoint(InjectionPoint point) {
- return createEndpoint(point, MockEndpoint.class);
+ String url = "";
+ String name = "";
+ EndpointInject annotation = point.getAnnotated().getAnnotation(EndpointInject.class);
+ if (annotation != null) {
+ url = annotation.uri();
+ name = annotation.ref();
+ }
+ if (ObjectHelper.isEmpty(name)) {
+ name = point.getMember().getName();
+ }
+ if (ObjectHelper.isEmpty(url)) {
+ url = "mock:" + name;
+ }
+ return camelContext.getEndpoint(url, MockEndpoint.class);
}
-*/
@Produces
public Endpoint createEndpoint(InjectionPoint point) {
@@ -56,20 +63,17 @@ public class EndpointInjector {
if (pointType instanceof Class<?>) {
endpointType = (Class<? extends Endpoint>) pointType;
}
-
EndpointInject annotation = point.getAnnotated().getAnnotation(EndpointInject.class);
if (annotation != null) {
- if (annotation != null) {
- String uri = annotation.uri();
- if (ObjectHelper.isNotEmpty(uri)) {
- return camelContext.getEndpoint(uri, endpointType);
- }
- String ref = annotation.ref();
- if (ObjectHelper.isNotEmpty(ref)) {
- return camelContext.getEndpoint("ref:" + ref, endpointType);
- }
+ String uri = annotation.uri();
+ if (ObjectHelper.isNotEmpty(uri)) {
+ return camelContext.getEndpoint(uri, endpointType);
+ }
+ String ref = annotation.ref();
+ if (ObjectHelper.isNotEmpty(ref)) {
+ return camelContext.getEndpoint("ref:" + ref, endpointType);
}
}
- return null;
+ throw new IllegalArgumentException("Could not create instance of Endpoint for the given injection point " + point);
}
}
Modified: camel/trunk/components/camel-cdi/src/test/java/org/apache/camel/cdi/MockEndpointInjectTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cdi/src/test/java/org/apache/camel/cdi/MockEndpointInjectTest.java?rev=1379449&r1=1379448&r2=1379449&view=diff
==============================================================================
--- camel/trunk/components/camel-cdi/src/test/java/org/apache/camel/cdi/MockEndpointInjectTest.java (original)
+++ camel/trunk/components/camel-cdi/src/test/java/org/apache/camel/cdi/MockEndpointInjectTest.java Fri Aug 31 13:51:50 2012
@@ -18,30 +18,31 @@ package org.apache.camel.cdi;
import org.apache.camel.cdi.support.EndpointInjectedBean;
import org.apache.camel.cdi.support.MockEndpointInjectedBean;
+import org.apache.camel.component.mock.MockEndpoint;
import org.junit.Ignore;
import org.junit.Test;
+import javax.enterprise.inject.Produces;
import javax.inject.Inject;
/**
- * Test endpoint injection
+ * Test mock endpoint injection
*/
public class MockEndpointInjectTest extends CdiTestSupport {
-
@Inject
private MockEndpointInjectedBean bean;
- @Ignore
+ @Test
public void shouldInjectMockEndpoint() {
assertNotNull(bean);
- /*
- TODO
- assertNotNull("Could not find injected endpoint!", bean.getEndpoint());
-
- cannot currently figure out how to be able to inject both Endpoint and MockEndpoint using a @Produces
- plugin without using explicit qualifier annotations to separate the two scenarios which is a bit ugly
- */
+ MockEndpoint foo = bean.getFoo();
+ MockEndpoint bar = bean.getBar();
+ assertNotNull("Could not find injected foo endpoint!", foo);
+ assertNotNull("Could not find injected bar endpoint!", bar);
+
+ assertEquals("foo URI", "mock://foo", foo.getEndpointUri());
+ assertEquals("bar URI", "mock://something", bar.getEndpointUri());
}
}
Modified: camel/trunk/components/camel-cdi/src/test/java/org/apache/camel/cdi/support/MockEndpointInjectedBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cdi/src/test/java/org/apache/camel/cdi/support/MockEndpointInjectedBean.java?rev=1379449&r1=1379448&r2=1379449&view=diff
==============================================================================
--- camel/trunk/components/camel-cdi/src/test/java/org/apache/camel/cdi/support/MockEndpointInjectedBean.java (original)
+++ camel/trunk/components/camel-cdi/src/test/java/org/apache/camel/cdi/support/MockEndpointInjectedBean.java Fri Aug 31 13:51:50 2012
@@ -18,26 +18,42 @@
package org.apache.camel.cdi.support;
import org.apache.camel.EndpointInject;
+import org.apache.camel.component.cdi.Mock;
import org.apache.camel.component.mock.MockEndpoint;
import javax.inject.Inject;
+import javax.inject.Named;
public class MockEndpointInjectedBean {
/*
- TODO disabled - see the TODO in MockEndpointInjectTest.java
+ TODO - cannot currently figure out how to be able to inject both Endpoint and MockEndpoint
+ using a @Produces plugin with a single method without using explicit qualifier annotations
+ to separate the two scenarios which is a bit ugly.
+
+ See discussion here:
+ https://issues.apache.org/jira/browse/CAMEL-5553
+
+ Ideally it would be nice to be able to do this:
@Inject
@EndpointInject(uri = "mock:blah")
private MockEndpoint endpoint;
- public MockEndpoint getEndpoint() {
- return endpoint;
+ */
+
+ @Inject @Mock
+ private MockEndpoint foo;
+
+ @Inject @Mock @EndpointInject(uri = "mock:something")
+ private MockEndpoint bar;
+
+ public MockEndpoint getBar() {
+ return bar;
}
- public void setEndpoint(MockEndpoint endpoint) {
- this.endpoint = endpoint;
+ public MockEndpoint getFoo() {
+ return foo;
}
- */
}