camel-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From davscl...@apache.org
Subject svn commit: r1310724 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/impl/ test/java/org/apache/camel/ test/java/org/apache/camel/impl/
Date Sat, 07 Apr 2012 10:36:28 GMT
Author: davsclaus
Date: Sat Apr  7 10:36:28 2012
New Revision: 1310724

URL: http://svn.apache.org/viewvc?rev=1310724&view=rev
Log:
CAMEL-5149: The default injector should perform bean post processing to setup @Produce and
the likes on the bean

Added:
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultInjector.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/InjectorDefaultsTest.java
      - copied, changed from r1310679, camel/trunk/camel-core/src/test/java/org/apache/camel/InjectorDefaultsToReflectionTest.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultInjectorTest.java
Removed:
    camel/trunk/camel-core/src/test/java/org/apache/camel/InjectorDefaultsToReflectionTest.java
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java

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=1310724&r1=1310723&r2=1310724&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 Sat
Apr  7 10:36:28 2012
@@ -120,7 +120,6 @@ import org.apache.camel.util.CastUtils;
 import org.apache.camel.util.EndpointHelper;
 import org.apache.camel.util.EventHelper;
 import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.util.ReflectionInjector;
 import org.apache.camel.util.ServiceHelper;
 import org.apache.camel.util.StopWatch;
 import org.apache.camel.util.TimeUtils;
@@ -2098,8 +2097,8 @@ public class DefaultCamelContext extends
         try {
             return (Injector) finder.newInstance("Injector");
         } catch (NoFactoryAvailableException e) {
-            // lets use the default
-            return new ReflectionInjector();
+            // lets use the default injector
+            return new DefaultInjector(this);
         }
     }
 

Added: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultInjector.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultInjector.java?rev=1310724&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultInjector.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultInjector.java Sat Apr
 7 10:36:28 2012
@@ -0,0 +1,70 @@
+/**
+ * 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.impl;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.spi.Injector;
+import org.apache.camel.util.ReflectionInjector;
+
+/**
+ * A default implementation of {@link Injector} which just uses reflection to
+ * instantiate new objects using their zero argument constructor,
+ * and then performing bean post processing using {@link DefaultCamelBeanPostProcessor}.
+ * <p/>
+ * For more complex implementations try the Spring or Guice implementations.
+ *
+ * @see ReflectionInjector
+ */
+public class DefaultInjector implements Injector  {
+
+    // use the reflection injector
+    private final Injector delegate = new ReflectionInjector();
+    private final DefaultCamelBeanPostProcessor postProcessor;
+
+    public DefaultInjector(CamelContext context) {
+        postProcessor = new DefaultCamelBeanPostProcessor(context);
+    }
+
+    @Override
+    public <T> T newInstance(Class<T> type) {
+        T answer = delegate.newInstance(type);
+        if (answer != null) {
+            try {
+                postProcessor.postProcessBeforeInitialization(answer, answer.getClass().getName());
+                postProcessor.postProcessAfterInitialization(answer, answer.getClass().getName());
+            } catch (Exception e) {
+                throw new RuntimeCamelException("Error during post processing of bean " +
answer, e);
+            }
+        }
+        return answer;
+    }
+
+    @Override
+    public <T> T newInstance(Class<T> type, Object instance) {
+        T answer = delegate.newInstance(type, instance);
+        if (answer != null) {
+            try {
+                postProcessor.postProcessBeforeInitialization(answer, answer.getClass().getName());
+                postProcessor.postProcessAfterInitialization(answer, answer.getClass().getName());
+            } catch (Exception e) {
+                throw new RuntimeCamelException("Error during post processing of bean " +
answer, e);
+            }
+        }
+        return answer;
+    }
+}

Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/InjectorDefaultsTest.java (from
r1310679, camel/trunk/camel-core/src/test/java/org/apache/camel/InjectorDefaultsToReflectionTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/InjectorDefaultsTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/InjectorDefaultsTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/InjectorDefaultsToReflectionTest.java&r1=1310679&r2=1310724&rev=1310724&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/InjectorDefaultsToReflectionTest.java
(original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/InjectorDefaultsTest.java Sat Apr
 7 10:36:28 2012
@@ -16,17 +16,17 @@
  */
 package org.apache.camel;
 
+import org.apache.camel.impl.DefaultInjector;
 import org.apache.camel.spi.Injector;
-import org.apache.camel.util.ReflectionInjector;
 
 /**
  * @version 
  */
-public class InjectorDefaultsToReflectionTest extends ContextTestSupport {
+public class InjectorDefaultsTest extends ContextTestSupport {
 
-    public void testInjectorIsReflectionByDefault() throws Exception {
+    public void testInjectorIsDefaultByDefault() throws Exception {
         Injector injector = context.getInjector();
-        assertIsInstanceOf(ReflectionInjector.class, injector);
+        assertIsInstanceOf(DefaultInjector.class, injector);
     }
 
     public void testNewInstance() throws Exception {

Added: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultInjectorTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultInjectorTest.java?rev=1310724&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultInjectorTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultInjectorTest.java Sat
Apr  7 10:36:28 2012
@@ -0,0 +1,51 @@
+/**
+ * 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.impl;
+
+import junit.framework.TestCase;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+
+/**
+ *
+ */
+public class DefaultInjectorTest extends TestCase {
+
+    public void testDefaultInjector() throws Exception {
+        CamelContext context = new DefaultCamelContext();
+        context.start();
+
+        // use the injector (will use the default)
+        // which should post process the bean to inject the @Produce
+        MyBean bean = context.getInjector().newInstance(MyBean.class);
+
+        Object reply = bean.doSomething("World");
+        assertEquals("WorldWorld", reply);
+    }
+
+    public static class MyBean {
+
+        @Produce(uri = "language:simple:${body}${body}")
+        ProducerTemplate template;
+
+        public Object doSomething(String body) {
+            return template.requestBody(body);
+        }
+    }
+
+}



Mime
View raw message