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 2007/08/16 21:22:16 UTC

svn commit: r566805 - in /activemq/camel/trunk/components/camel-spring/src: main/java/org/apache/camel/spring/CamelBeanPostProcessor.java test/java/org/apache/camel/spring/InjectedBean.java test/java/org/apache/camel/spring/InjectedBeanTest.java

Author: jstrachan
Date: Thu Aug 16 12:22:15 2007
New Revision: 566805

URL: http://svn.apache.org/viewvc?view=rev&rev=566805
Log:
added test case and fix for CAMEL-110

Modified:
    activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java
    activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/InjectedBean.java
    activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/InjectedBeanTest.java

Modified: activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java?view=diff&rev=566805&r1=566804&r2=566805
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java Thu Aug 16 12:22:15 2007
@@ -16,38 +16,26 @@
  */
 package org.apache.camel.spring;
 
-import static org.apache.camel.util.ObjectHelper.isNullOrBlank;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlTransient;
-
-import org.apache.camel.CamelContextAware;
-import org.apache.camel.CamelTemplate;
-import org.apache.camel.Consumer;
-import org.apache.camel.Endpoint;
-import org.apache.camel.EndpointInject;
-import org.apache.camel.MessageDriven;
-import org.apache.camel.Processor;
-import org.apache.camel.Producer;
-import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.*;
 import org.apache.camel.component.bean.BeanProcessor;
 import org.apache.camel.spring.util.ReflectionUtils;
 import org.apache.camel.util.ObjectHelper;
+import static org.apache.camel.util.ObjectHelper.isNotNullAndNonEmpty;
+import static org.apache.camel.util.ObjectHelper.isNullOrBlank;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.NoSuchBeanDefinitionException;
 import org.springframework.beans.factory.config.BeanPostProcessor;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 
-import static org.apache.camel.util.ObjectHelper.isNotNullAndNonEmpty;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
 
 /**
  * A post processor to perform injection of {@link Endpoint} and
@@ -220,16 +208,44 @@
             if (type.isInstance(endpoint)) {
                 return endpoint;
             } else if (type.isAssignableFrom(Producer.class)) {
-                try {
-                    return endpoint.createProducer();
-                } catch (Exception e) {
-                    throw new RuntimeCamelException(e);
-                }
+                return createInjectionProducer(endpoint);
             } else if (type.isAssignableFrom(CamelTemplate.class)) {
                 return new CamelTemplate(getCamelContext(), endpoint);
+            } else if (type.isAssignableFrom(PollingConsumer.class)) {
+                return createInjectionPollingConsumer(endpoint);
+            } else {
+                throw new IllegalArgumentException("Invalid type: " + type.getName() + " which cannot be injected via @EndpointInject for " + endpoint);
             }
         }
         return null;
+    }
+
+    /**
+     * Factory method to create a started {@link PollingConsumer} to be injected
+     * into a POJO
+     */
+    protected PollingConsumer createInjectionPollingConsumer(Endpoint endpoint) {
+        try {
+            PollingConsumer pollingConsumer = endpoint.createPollingConsumer();
+            pollingConsumer.start();
+            return pollingConsumer;
+        }
+        catch (Exception e) {
+            throw new RuntimeCamelException(e);
+        }
+    }
+
+    /**
+     * A Factory method to create a started {@link Producer} to be injected into a POJO
+     */
+    protected Producer createInjectionProducer(Endpoint endpoint) {
+        try {
+            Producer producer = endpoint.createProducer();
+            producer.start();
+            return producer;
+        } catch (Exception e) {
+            throw new RuntimeCamelException(e);
+        }
     }
 
     protected Endpoint getEndpointInjection(String uri, String name, String injectionPointName) {

Modified: activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/InjectedBean.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/InjectedBean.java?view=diff&rev=566805&r1=566804&r2=566805
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/InjectedBean.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/InjectedBean.java Thu Aug 16 12:22:15 2007
@@ -19,6 +19,7 @@
 import org.apache.camel.CamelTemplate;
 import org.apache.camel.Endpoint;
 import org.apache.camel.EndpointInject;
+import org.apache.camel.PollingConsumer;
 import org.apache.camel.Producer;
 import org.apache.camel.ProducerTemplate;
 
@@ -29,19 +30,18 @@
     @EndpointInject(uri = "direct:fieldInjectedEndpoint")
     private Endpoint fieldInjectedEndpoint;
     private Endpoint propertyInjectedEndpoint;
-
     @EndpointInject(uri = "direct:fieldInjectedProducer")
     private Producer fieldInjectedProducer;
     private Producer propertyInjectedProducer;
-    
     @EndpointInject(uri = "direct:fieldInjectedCamelTemplate")
     private CamelTemplate fieldInjectedCamelTemplate;
     private CamelTemplate propertyInjectedCamelTemplate;
-
     @EndpointInject
     private ProducerTemplate injectByFieldName;
     private ProducerTemplate injectByPropertyName;
-
+    @EndpointInject(uri = "direct:fieldInjectedEndpoint")
+    private PollingConsumer fieldInjectedPollingConsumer;
+    private PollingConsumer propertyInjectedPollingConsumer;
 
     // Endpoint
     //-----------------------------------------------------------------------
@@ -107,5 +107,25 @@
     @EndpointInject
     public void setInjectByPropertyName(ProducerTemplate injectByPropertyName) {
         this.injectByPropertyName = injectByPropertyName;
+    }
+
+    // PollingConsumer
+    //-------------------------------------------------------------------------
+
+    public PollingConsumer getFieldInjectedPollingConsumer() {
+        return fieldInjectedPollingConsumer;
+    }
+
+    public void setFieldInjectedPollingConsumer(PollingConsumer fieldInjectedPollingConsumer) {
+        this.fieldInjectedPollingConsumer = fieldInjectedPollingConsumer;
+    }
+
+    public PollingConsumer getPropertyInjectedPollingConsumer() {
+        return propertyInjectedPollingConsumer;
+    }
+
+    @EndpointInject(uri = "direct:propertyInjectedPollingConsumer")
+    public void setPropertyInjectedPollingConsumer(PollingConsumer propertyInjectedPollingConsumer) {
+        this.propertyInjectedPollingConsumer = propertyInjectedPollingConsumer;
     }
 }

Modified: activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/InjectedBeanTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/InjectedBeanTest.java?view=diff&rev=566805&r1=566804&r2=566805
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/InjectedBeanTest.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/InjectedBeanTest.java Thu Aug 16 12:22:15 2007
@@ -45,6 +45,14 @@
 
         assertNotNull("No ProducerTemplate injected for getInjectByFieldName()", bean.getInjectByFieldName());
         assertNotNull("No ProducerTemplate injected for getInjectByPropertyName()", bean.getInjectByPropertyName());
+
+        assertNotNull("No PollingConsumer injected for getFieldInjectedPollingConsumer()", bean.getFieldInjectedPollingConsumer());
+        assertNotNull("No PollingConsumer injected for getPropertyInjectedPollingConsumer()", bean.getPropertyInjectedPollingConsumer());
+
+    }
+
+    public void testSendAndReceive() throws Exception {
+
     }
 
     @Override