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/02 12:57:41 UTC

svn commit: r562072 - in /activemq/camel/trunk: camel-core/src/main/java/org/apache/camel/component/bean/ camel-core/src/main/java/org/apache/camel/component/pojo/ camel-core/src/main/java/org/apache/camel/impl/ camel-core/src/main/java/org/apache/came...

Author: jstrachan
Date: Thu Aug  2 03:57:37 2007
New Revision: 562072

URL: http://svn.apache.org/viewvc?view=rev&rev=562072
Log:
refactored POJO component to use the Registry; so it works easier with JNDI and Spring together with adding a simple JNDI context implementation; also improved the ServiceExporter to be just a simple factory bean.. Finally moved the bean component into camel-core as its not based on Spring (it uses the Registry)

Added:
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/AmbiguousMethodCallException.java
      - copied, changed from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/AmbiguousMethodCallException.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanComponent.java
      - copied, changed from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/bean/BeanComponent.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java   (contents, props changed)
      - copied, changed from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanInfo.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
      - copied, changed from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanProcessor.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/DefaultMethodInvocationStrategy.java   (contents, props changed)
      - copied, changed from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/DefaultMethodInvocationStrategy.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java   (contents, props changed)
      - copied, changed from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/MethodInfo.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocation.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocationStrategy.java   (contents, props changed)
      - copied, changed from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/MethodInvocationStrategy.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/ParameterInfo.java
      - copied, changed from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/ParameterInfo.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/package.html
      - copied unchanged from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/bean/package.html
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/CamelInvocationHandler.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/CamelInitialContextFactory.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/JndiContext.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/package.html
    activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/bean
      - copied, changed from r562013, activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/pojo
    activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/RegistryTest.java
    activemq/camel/trunk/camel-core/src/test/resources/jndi.properties
    activemq/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/jpa/
Removed:
    activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/bean/
    activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/AmbiguousMethodCallException.java
    activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanInfo.java
    activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanProcessor.java
    activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/MethodInfo.java
    activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/ParameterInfo.java
    activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/DefaultMethodInvocationStrategy.java
    activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/MethodInvocationStrategy.java
Modified:
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoComponent.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoEndpoint.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoInvocation.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/JndiRegistry.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
    activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/PojoRouteTest.java
    activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/timer/TimerRouteTest.java
    activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
    activemq/camel/trunk/components/camel-rmi/src/test/java/org/apache/camel/component/rmi/RmiRouteTest.java
    activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanPostProcessor.java
    activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java
    activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java
    activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelServiceExporter.java
    activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/bean/BeanRouteTest.java
    activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/bind/BeanInfoTest.java
    activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/remoting/SpringRemotingRouteTest.java
    activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/remoting/spring.xml

Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/AmbiguousMethodCallException.java (from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/AmbiguousMethodCallException.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/AmbiguousMethodCallException.java?view=diff&rev=562072&p1=activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/AmbiguousMethodCallException.java&r1=562013&p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/AmbiguousMethodCallException.java&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/AmbiguousMethodCallException.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/AmbiguousMethodCallException.java Thu Aug  2 03:57:37 2007
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.spring.bind;
+package org.apache.camel.component.bean;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.CamelExchangeException;

Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanComponent.java (from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/bean/BeanComponent.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanComponent.java?view=diff&rev=562072&p1=activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/bean/BeanComponent.java&r1=562013&p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanComponent.java&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/bean/BeanComponent.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanComponent.java Thu Aug  2 03:57:37 2007
@@ -17,21 +17,14 @@
  */
 package org.apache.camel.component.bean;
 
-import org.apache.camel.Endpoint;
 import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
 import org.apache.camel.impl.DefaultComponent;
 import org.apache.camel.impl.ProcessorEndpoint;
-import org.apache.camel.spring.bind.BeanProcessor;
-import org.apache.camel.spring.util.MethodInvocationStrategy;
-import org.apache.camel.spring.util.DefaultMethodInvocationStrategy;
-import org.apache.camel.spring.SpringCamelContext;
-import static org.apache.camel.util.ObjectHelper.notNull;
+import org.apache.camel.spi.Registry;
 import org.apache.camel.util.IntrospectionSupport;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.springframework.beans.BeansException;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
 
 import java.util.Map;
 
@@ -42,26 +35,13 @@
  *
  * @version $Revision: 1.1 $
  */
-public class BeanComponent extends DefaultComponent implements ApplicationContextAware {
+public class BeanComponent extends DefaultComponent {
     private static final Log log = LogFactory.getLog(BeanComponent.class);
-    private ApplicationContext applicationContext;
     private MethodInvocationStrategy invocationStrategy;
 
     public BeanComponent() {
     }
 
-    public BeanComponent(ApplicationContext applicationContext) {
-        this.applicationContext = applicationContext;
-    }
-
-    public ApplicationContext getApplicationContext() {
-        return applicationContext;
-    }
-
-    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
-        this.applicationContext = applicationContext;
-    }
-
     public MethodInvocationStrategy getInvocationStrategy() {
         if (invocationStrategy == null) {
             invocationStrategy = createInvocationStrategy();
@@ -77,22 +57,19 @@
     //-----------------------------------------------------------------------
 
     protected Endpoint createEndpoint(String uri, String remaining, Map parameters) throws Exception {
-        notNull(applicationContext, "applicationContext");
-        Object bean = applicationContext.getBean(remaining);
+        Registry registry = getCamelContext().getRegistry();
+        Object bean = registry.lookup(remaining);
+        if (bean == null) {
+            throw new IllegalArgumentException("No such bean: " + remaining + " in registry: " + registry);
+        }
         BeanProcessor processor = new BeanProcessor(bean, getInvocationStrategy());
         IntrospectionSupport.setProperties(processor, parameters);
         return new ProcessorEndpoint(uri, this, processor);
-        //return new BeanEndpoint(uri, this, remaining);
     }
 
     protected MethodInvocationStrategy createInvocationStrategy() {
         CamelContext context = getCamelContext();
-        if (context instanceof SpringCamelContext) {
-            SpringCamelContext springCamelContext = (SpringCamelContext) context;
-            return springCamelContext.getInvocationStrategy();
-        }
-        else {
-            log.warn("Not using a SpringCamelContext so using the default MethodInvocationStrategy");
-        return new DefaultMethodInvocationStrategy();}
+        // TODO add this to the context?
+        return new DefaultMethodInvocationStrategy();
     }
 }

Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java (from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanInfo.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java?view=diff&rev=562072&p1=activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanInfo.java&r1=562013&p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanInfo.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java Thu Aug  2 03:57:37 2007
@@ -14,9 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.spring.bind;
+package org.apache.camel.component.bean;
 
-import org.aopalliance.intercept.MethodInvocation;
 import org.apache.camel.Body;
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
@@ -25,7 +24,6 @@
 import org.apache.camel.Property;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.builder.ExpressionBuilder;
-import org.apache.camel.spring.util.MethodInvocationStrategy;
 import static org.apache.camel.util.ExchangeHelper.convertToType;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java (from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanProcessor.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java?view=diff&rev=562072&p1=activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanProcessor.java&r1=562013&p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/BeanProcessor.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java Thu Aug  2 03:57:37 2007
@@ -14,15 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.spring.bind;
+package org.apache.camel.component.bean;
 
-import static org.apache.camel.util.ObjectHelper.isNullOrBlank;
-import org.aopalliance.intercept.MethodInvocation;
 import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
 import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.component.pojo.PojoInvocation;
 import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.spring.util.MethodInvocationStrategy;
+import static org.apache.camel.util.ObjectHelper.isNullOrBlank;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -61,6 +60,13 @@
         if (log.isDebugEnabled()) {
             log.debug(">>>> invoking method for: " + exchange);
         }
+        Message in = exchange.getIn();
+        PojoInvocation pojoInvoke = in.getBody(PojoInvocation.class);
+        if (pojoInvoke != null) {
+            pojoInvoke.invoke(pojo, exchange);
+            return;
+        }
+
         MethodInvocation invocation;
         if (method != null) {
             invocation = beanInfo.createInvocation(method, pojo, exchange);
@@ -68,7 +74,6 @@
         else {
             // lets pass in the method name to use if its specified
             if (ObjectHelper.isNotNullAndNonEmpty(methodName)) {
-                Message in = exchange.getIn();
                 if (isNullOrBlank(in.getHeader(METHOD_NAME, String.class))) {
                     in.setHeader(METHOD_NAME, methodName);
                 }

Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/DefaultMethodInvocationStrategy.java (from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/DefaultMethodInvocationStrategy.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/DefaultMethodInvocationStrategy.java?view=diff&rev=562072&p1=activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/DefaultMethodInvocationStrategy.java&r1=562013&p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/DefaultMethodInvocationStrategy.java&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/DefaultMethodInvocationStrategy.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/DefaultMethodInvocationStrategy.java Thu Aug  2 03:57:37 2007
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.spring.util;
+package org.apache.camel.component.bean;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/DefaultMethodInvocationStrategy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java (from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/MethodInfo.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java?view=diff&rev=562072&p1=activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/MethodInfo.java&r1=562013&p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/MethodInfo.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java Thu Aug  2 03:57:37 2007
@@ -14,16 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.spring.bind;
+package org.apache.camel.component.bean;
 
-import org.aopalliance.intercept.MethodInvocation;
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
+import org.apache.camel.util.ObjectHelper;
 
 import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.List;
+import java.util.Arrays;
 
 /**
  * @version $Revision: $
@@ -96,7 +97,7 @@
 
     public boolean bodyParameterMatches(Class bodyType) {
         Class actualType = getBodyParameterType();
-        return actualType != null && bodyType.isAssignableFrom(actualType);
+        return actualType != null && ObjectHelper.isAssignableFrom(bodyType, actualType);
     }
 
     public List<ParameterInfo> getParameters() {
@@ -112,20 +113,24 @@
     }
 
     protected Expression createParametersExpression() {
+        final int size = parameters.size();
+        final Expression[] expressions = new Expression[size];
+        for (int i = 0; i < size; i++) {
+            Expression parameterExpression = parameters.get(i).getExpression();
+            expressions[i] = parameterExpression;
+        }
         return new Expression<Exchange>() {
             public Object evaluate(Exchange exchange) {
-                int size = parameters.size();
                 Object[] answer = new Object[size];
                 for (int i = 0; i < size; i++) {
-                    Expression parameterExpression = parameters.get(i).getExpression();
-                    answer[i] = parameterExpression.evaluate(exchange);
+                    answer[i] = expressions[i].evaluate(exchange);
                 }
                 return answer;
             }
 
             @Override
             public String toString() {
-                return "ParametersExpression: " + parameters;
+                return "ParametersExpression: " + Arrays.asList(expressions);
             }
         };
     }

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocation.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocation.java?view=auto&rev=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocation.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocation.java Thu Aug  2 03:57:37 2007
@@ -0,0 +1,35 @@
+/*
+ * 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.bean;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.AccessibleObject;
+
+/**
+ * @version $Revision: $
+ */
+public interface MethodInvocation {
+    Method getMethod();
+
+    Object[] getArguments();
+
+    Object proceed() throws Throwable;
+
+    Object getThis();
+
+    AccessibleObject getStaticPart();
+}

Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocationStrategy.java (from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/MethodInvocationStrategy.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocationStrategy.java?view=diff&rev=562072&p1=activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/MethodInvocationStrategy.java&r1=562013&p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocationStrategy.java&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/MethodInvocationStrategy.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocationStrategy.java Thu Aug  2 03:57:37 2007
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.spring.util;
+package org.apache.camel.component.bean;
 
 import org.apache.camel.Expression;
 

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInvocationStrategy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/ParameterInfo.java (from r562013, activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/ParameterInfo.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/ParameterInfo.java?view=diff&rev=562072&p1=activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/ParameterInfo.java&r1=562013&p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/ParameterInfo.java&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/bind/ParameterInfo.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/ParameterInfo.java Thu Aug  2 03:57:37 2007
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.spring.bind;
+package org.apache.camel.component.bean;
 
 import org.apache.camel.Expression;
 

Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/CamelInvocationHandler.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/CamelInvocationHandler.java?view=auto&rev=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/CamelInvocationHandler.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/CamelInvocationHandler.java Thu Aug  2 03:57:37 2007
@@ -0,0 +1,53 @@
+/*
+ * 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.pojo;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Producer;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * An {@link java.lang.reflect.InvocationHandler} which invokes a
+ * message exchange on a camel {@link Endpoint}
+ *
+ * @version $Revision: $
+ */
+public class CamelInvocationHandler implements InvocationHandler {
+    private final Endpoint endpoint;
+    private final Producer producer;
+
+    public CamelInvocationHandler(Endpoint endpoint, Producer producer) {
+        this.endpoint = endpoint;
+        this.producer = producer;
+    }
+
+    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+        PojoInvocation invocation = new PojoInvocation(proxy, method, args);
+        PojoExchange exchange = new PojoExchange(endpoint.getContext());
+        exchange.setInvocation(invocation);
+
+        producer.process(exchange);
+        Throwable fault = exchange.getException();
+        if (fault != null) {
+            throw new InvocationTargetException(fault);
+        }
+        return exchange.getOut().getBody();
+    }
+}

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoComponent.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoComponent.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoComponent.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoComponent.java Thu Aug  2 03:57:37 2007
@@ -16,18 +16,13 @@
  */
 package org.apache.camel.component.pojo;
 
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.util.HashMap;
-import java.util.Map;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Producer;
-import org.apache.camel.spi.Provider;
 import org.apache.camel.impl.DefaultComponent;
 
+import java.lang.reflect.Proxy;
+import java.util.Map;
+
 /**
  * Represents the component that manages {@link PojoEndpoint}.  It holds the
  * list of named pojos that queue endpoints reference.
@@ -35,18 +30,9 @@
  * @version $Revision: 519973 $
  */
 public class PojoComponent extends DefaultComponent<PojoExchange> {
-    protected final HashMap<String, Object> services = new HashMap<String, Object>();
-
-    public void addService(String uri, Object pojo) {
-        services.put(uri, pojo);
-    }
-
-    public void removeService(String uri) {
-        services.remove(uri);
-    }
 
     public Object getService(String uri) {
-        return services.get(uri);
+        return getCamelContext().getRegistry().lookup(uri);
     }
 
     @Override
@@ -60,19 +46,7 @@
      */
     static public Object createProxy(final Endpoint endpoint, ClassLoader cl, Class interfaces[]) throws Exception {
     	final Producer producer = endpoint.createProducer();
-        return Proxy.newProxyInstance(cl, interfaces, new InvocationHandler() {        	
-        	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-                PojoInvocation invocation = new PojoInvocation(proxy, method, args);
-                PojoExchange exchange = new PojoExchange(endpoint.getContext());                
-                exchange.setInvocation(invocation);
-                producer.process(exchange);                
-                Throwable fault = exchange.getException();
-                if (fault != null) {
-                    throw new InvocationTargetException(fault);
-                }
-                return exchange.getOut().getBody();
-        	}
-        });
+        return Proxy.newProxyInstance(cl, interfaces, new CamelInvocationHandler(endpoint, producer));
     }
     
     /**
@@ -102,7 +76,6 @@
 	static public <T> T createProxy(Endpoint endpoint, Class<T> interfaceClass) throws Exception {
         return (T) createProxy(endpoint, new Class[]{interfaceClass});
     }
-
 
 
 }

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoEndpoint.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoEndpoint.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoEndpoint.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoEndpoint.java Thu Aug  2 03:57:37 2007
@@ -16,16 +16,14 @@
  */
 package org.apache.camel.component.pojo;
 
+import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
-import org.apache.camel.Component;
 import org.apache.camel.impl.DefaultEndpoint;
 import org.apache.camel.impl.DefaultProducer;
 
-import java.lang.reflect.InvocationTargetException;
-
 /**
  * Represents a pojo endpoint that uses reflection
  * to send messages around.
@@ -71,19 +69,7 @@
      */
     public static void invoke(Object pojo, PojoExchange exchange) {
         PojoInvocation invocation = exchange.getInvocation();
-        try {
-            Object response = invocation.getMethod().invoke(pojo, invocation.getArgs());
-            exchange.getOut().setBody(response);
-        }
-        catch (InvocationTargetException e) {
-            exchange.setException(e.getCause());
-        }
-        catch (RuntimeException e) {
-            throw e;
-        }
-        catch (Throwable e) {
-            throw new RuntimeException(e);
-        }
+        invocation.invoke(pojo, exchange);
     }
 
     public PojoExchange createExchange() {

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoInvocation.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoInvocation.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoInvocation.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/pojo/PojoInvocation.java Thu Aug  2 03:57:37 2007
@@ -16,7 +16,10 @@
  */
 package org.apache.camel.component.pojo;
 
+import org.apache.camel.Exchange;
+
 import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
 
 public class PojoInvocation {
 
@@ -41,6 +44,27 @@
 	public Object getProxy() {
 		return proxy;
 	}
+
+    /**
+     * This causes us to invoke the endpoint Pojo using reflection.
+     *
+     * @param pojo
+     */
+    public void invoke(Object pojo, Exchange exchange) {
+        try {
+            Object response = getMethod().invoke(pojo, getArgs());
+            exchange.getOut().setBody(response);
+        }
+        catch (InvocationTargetException e) {
+            exchange.setException(e.getCause());
+        }
+        catch (RuntimeException e) {
+            throw e;
+        }
+        catch (Throwable e) {
+            throw new RuntimeException(e);
+        }
+    }
 
 
 }

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Thu Aug  2 03:57:37 2007
@@ -38,9 +38,11 @@
 import org.apache.camel.util.FactoryFinder;
 import org.apache.camel.util.NoFactoryAvailableException;
 import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.jndi.JndiContext;
 import static org.apache.camel.util.ServiceHelper.startServices;
 import static org.apache.camel.util.ServiceHelper.stopServices;
 
+import javax.naming.Context;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -67,6 +69,19 @@
     private boolean autoCreateComponents = true;
     private LanguageResolver languageResolver = new DefaultLanguageResolver();
     private Registry registry;
+
+    public DefaultCamelContext() {
+    }
+
+    /**
+     * Creates the {@link CamelContext} using the given JNDI
+     * context as the registry
+     *
+     * @param jndiContext
+     */
+    public DefaultCamelContext(Context jndiContext) {
+        setRegistry(new JndiRegistry(jndiContext));
+    }
 
     /**
      * Adds a component to the container.

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/JndiRegistry.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/JndiRegistry.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/JndiRegistry.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/JndiRegistry.java Thu Aug  2 03:57:37 2007
@@ -18,10 +18,12 @@
 package org.apache.camel.impl;
 
 import org.apache.camel.spi.Registry;
+import org.apache.camel.RuntimeCamelException;
 
 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
+import javax.naming.NameNotFoundException;
 import java.util.Hashtable;
 
 /**
@@ -32,6 +34,13 @@
 public class JndiRegistry implements Registry {
     private Context context;
 
+    public JndiRegistry() {
+    }
+
+    public JndiRegistry(Context context) {
+        this.context = context;
+    }
+
     public <T> T lookup(String name, Class<T> type) {
         Object value = lookup(name);
         return type.cast(value);
@@ -41,9 +50,25 @@
         try {
             return getContext().lookup(name);
         }
-        catch (NamingException e) {
+        catch (NameNotFoundException e) {
             return null;
         }
+        catch (NamingException e) {
+            throw new RuntimeCamelException(e);
+        }
+    }
+
+    public void bind(String s, Object o) {
+        try {
+            getContext().bind(s, o);
+        }
+        catch (NamingException e) {
+            throw new RuntimeCamelException(e);
+        }
+    }
+
+    public void close() throws NamingException {
+        getContext().close();
     }
 
     public Context getContext() throws NamingException {

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java Thu Aug  2 03:57:37 2007
@@ -57,6 +57,12 @@
         if (toType.isInstance(value)) {
             return toType.cast(value);
         }
+        else if (toType.isPrimitive()) {
+            Class primitiveType = ObjectHelper.convertPrimitiveTypeToWrapperType(toType);
+            if (primitiveType != toType) {
+                return (T) convertTo(primitiveType, value);
+            }
+        }
         checkLoaded();
         TypeConverter converter = getOrFindTypeConverter(toType, value);
         if (converter != null) {
@@ -74,6 +80,7 @@
         if (boolean.class.isAssignableFrom(toType)) {
             return (T) Boolean.FALSE;
         }
+
         return null;
     }
 

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java Thu Aug  2 03:57:37 2007
@@ -317,4 +317,42 @@
         }
     }
 
+    /**
+     * Returns true if a class is assignable from another class like the
+     * {@link Class#isAssignableFrom(Class)} method but which also includes
+     * coercion between primitive types to deal with Java 5 primitive type wrapping
+     */
+    public static boolean isAssignableFrom(Class a, Class b) {
+        a = convertPrimitiveTypeToWrapperType(a);
+        b = convertPrimitiveTypeToWrapperType(b);
+        return a.isAssignableFrom(b);
+    }
+
+    /**
+     * Converts primitive types such as int to its wrapper type like {@link Integeer}
+     */
+    public static Class convertPrimitiveTypeToWrapperType(Class type) {
+        if (type.isPrimitive()) {
+            if (type == int.class) {
+                return Integer.class;
+            }
+            else   if (type == long.class) {
+                return Long.class;
+            }
+            else   if (type == double.class) {
+                return Double.class;
+            }
+            else   if (type == float.class) {
+                return Float.class;
+            }
+            else   if (type == short.class) {
+                return Short.class;
+            }
+            else   if (type == byte.class) {
+                return Byte.class;
+            }
+        }
+        return type;
+    }
+
 }

Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/CamelInitialContextFactory.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/CamelInitialContextFactory.java?view=auto&rev=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/CamelInitialContextFactory.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/CamelInitialContextFactory.java Thu Aug  2 03:57:37 2007
@@ -0,0 +1,36 @@
+/*
+ * 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.util.jndi;
+
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.naming.spi.InitialContextFactory;
+import java.util.Hashtable;
+
+/**
+ * A factory of the Cameel InitialContext which allows a Map to be used to create a
+ * JNDI context.
+ *
+ * @version $Revision: 1.2 $
+ */
+public class CamelInitialContextFactory implements InitialContextFactory {
+
+    public Context getInitialContext(Hashtable environment) throws NamingException {
+        return new JndiContext(environment, environment);
+    }
+}

Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/JndiContext.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/JndiContext.java?view=auto&rev=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/JndiContext.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/JndiContext.java Thu Aug  2 03:57:37 2007
@@ -0,0 +1,414 @@
+/*
+ * 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.util.jndi;
+
+import javax.naming.Binding;
+import javax.naming.CompositeName;
+import javax.naming.Context;
+import javax.naming.LinkRef;
+import javax.naming.Name;
+import javax.naming.NameClassPair;
+import javax.naming.NameNotFoundException;
+import javax.naming.NameParser;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.NotContextException;
+import javax.naming.OperationNotSupportedException;
+import javax.naming.Reference;
+import javax.naming.spi.NamingManager;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * A default JNDI context
+ *
+ * @version $Revision: 1.2 $ $Date: 2005/08/27 03:52:39 $
+ */
+public class JndiContext implements Context, Serializable {
+    public static final String SEPARATOR = "/";
+
+    private static final long serialVersionUID = -5754338187296859149L;
+
+    protected static final NameParser nameParser = new NameParser() {
+        public Name parse(String name) throws NamingException {
+            return new CompositeName(name);
+        }
+    };
+
+    private final Hashtable environment;        // environment for this context
+    private final Map bindings;         // bindings at my level
+    private final Map treeBindings;     // all bindings under me
+
+    private boolean frozen = false;
+    private String nameInNamespace = "";
+
+    public JndiContext() {
+        this(new Hashtable());
+    }
+
+    public JndiContext(Hashtable env) {
+        this(env, new ConcurrentHashMap());
+    }
+
+    public JndiContext(Hashtable environment, Map bindings) {
+        if (environment == null) {
+            this.environment = new Hashtable();
+        }
+        else {
+            this.environment = new Hashtable(environment);
+        }
+        this.bindings = bindings;
+        treeBindings = new HashMap();
+    }
+
+    public JndiContext(Hashtable environment, Map bindings, String nameInNamespace) {
+        this(environment, bindings);
+        this.nameInNamespace = nameInNamespace;
+    }
+
+    protected JndiContext(JndiContext clone, Hashtable env) {
+        this.bindings = clone.bindings;
+        this.treeBindings = clone.treeBindings;
+        this.environment = new Hashtable(env);
+    }
+
+    protected JndiContext(JndiContext clone, Hashtable env, String nameInNamespace) {
+        this(clone, env);
+        this.nameInNamespace = nameInNamespace;
+    }
+
+    public void freeze() {
+        frozen = true;
+    }
+
+    boolean isFrozen() {
+        return frozen;
+    }
+
+    /**
+     * internalBind is intended for use only during setup or possibly by suitably synchronized superclasses.
+     * It binds every possible lookup into a map in each context.  To do this, each context
+     * strips off one name segment and if necessary creates a new context for it. Then it asks that context
+     * to bind the remaining name.  It returns a map containing all the bindings from the next context, plus
+     * the context it just created (if it in fact created it). (the names are suitably extended by the segment
+     * originally lopped off).
+     *
+     * @param name
+     * @param value
+     * @return
+     * @throws javax.naming.NamingException
+     */
+    protected Map internalBind(String name, Object value) throws NamingException {
+        assert name != null && name.length() > 0;
+        assert !frozen;
+
+        Map newBindings = new HashMap();
+        int pos = name.indexOf('/');
+        if (pos == -1) {
+            if (treeBindings.put(name, value) != null) {
+                throw new NamingException("Something already bound at " + name);
+            }
+            bindings.put(name, value);
+            newBindings.put(name, value);
+        }
+        else {
+            String segment = name.substring(0, pos);
+            assert segment != null;
+            assert !segment.equals("");
+            Object o = treeBindings.get(segment);
+            if (o == null) {
+                o = newContext();
+                treeBindings.put(segment, o);
+                bindings.put(segment, o);
+                newBindings.put(segment, o);
+            }
+            else if (!(o instanceof JndiContext)) {
+                throw new NamingException("Something already bound where a subcontext should go");
+            }
+            JndiContext defaultContext = (JndiContext) o;
+            String remainder = name.substring(pos + 1);
+            Map subBindings = defaultContext.internalBind(remainder, value);
+            for (Iterator iterator = subBindings.entrySet().iterator(); iterator.hasNext();) {
+                Map.Entry entry = (Map.Entry) iterator.next();
+                String subName = segment + "/" + (String) entry.getKey();
+                Object bound = entry.getValue();
+                treeBindings.put(subName, bound);
+                newBindings.put(subName, bound);
+            }
+        }
+        return newBindings;
+    }
+
+    protected JndiContext newContext() {
+        return new JndiContext();
+    }
+
+    public Object addToEnvironment(String propName, Object propVal) throws NamingException {
+        return environment.put(propName, propVal);
+    }
+
+    public Hashtable getEnvironment() throws NamingException {
+        return (Hashtable) environment.clone();
+    }
+
+    public Object removeFromEnvironment(String propName) throws NamingException {
+        return environment.remove(propName);
+    }
+
+    public Object lookup(String name) throws NamingException {
+        if (name.length() == 0) {
+            return this;
+        }
+        Object result = treeBindings.get(name);
+        if (result == null) {
+            result = bindings.get(name);
+        }
+        if (result == null) {
+            int pos = name.indexOf(':');
+            if (pos > 0) {
+                String scheme = name.substring(0, pos);
+                Context ctx = NamingManager.getURLContext(scheme, environment);
+                if (ctx == null) {
+                    throw new NamingException("scheme " + scheme + " not recognized");
+                }
+                return ctx.lookup(name);
+            }
+            else {
+                // Split out the first name of the path
+                // and look for it in the bindings map.
+                CompositeName path = new CompositeName(name);
+
+                if (path.size() == 0) {
+                    return this;
+                }
+                else {
+                    String first = path.get(0);
+                    Object value = bindings.get(first);
+                    if (value == null) {
+                        throw new NameNotFoundException(name);
+                    }
+                    else if (value instanceof Context && path.size() > 1) {
+                        Context subContext = (Context) value;
+                        value = subContext.lookup(path.getSuffix(1));
+                    }
+                    return value;
+                }
+            }
+        }
+        if (result instanceof LinkRef) {
+            LinkRef ref = (LinkRef) result;
+            result = lookup(ref.getLinkName());
+        }
+        if (result instanceof Reference) {
+            try {
+                result = NamingManager.getObjectInstance(result, null, null, this.environment);
+            }
+            catch (NamingException e) {
+                throw e;
+            }
+            catch (Exception e) {
+                throw (NamingException) new NamingException("could not look up : " + name).initCause(e);
+            }
+        }
+        if (result instanceof JndiContext) {
+            String prefix = getNameInNamespace();
+            if (prefix.length() > 0) {
+                prefix = prefix + SEPARATOR;
+            }
+            result = new JndiContext((JndiContext) result, environment, prefix + name);
+        }
+        return result;
+    }
+
+    public Object lookup(Name name) throws NamingException {
+        return lookup(name.toString());
+    }
+
+    public Object lookupLink(String name) throws NamingException {
+        return lookup(name);
+    }
+
+    public Name composeName(Name name, Name prefix) throws NamingException {
+        Name result = (Name) prefix.clone();
+        result.addAll(name);
+        return result;
+    }
+
+    public String composeName(String name, String prefix) throws NamingException {
+        CompositeName result = new CompositeName(prefix);
+        result.addAll(new CompositeName(name));
+        return result.toString();
+    }
+
+    public NamingEnumeration list(String name) throws NamingException {
+        Object o = lookup(name);
+        if (o == this) {
+            return new ListEnumeration();
+        }
+        else if (o instanceof Context) {
+            return ((Context) o).list("");
+        }
+        else {
+            throw new NotContextException();
+        }
+    }
+
+    public NamingEnumeration listBindings(String name) throws NamingException {
+        Object o = lookup(name);
+        if (o == this) {
+            return new ListBindingEnumeration();
+        }
+        else if (o instanceof Context) {
+            return ((Context) o).listBindings("");
+        }
+        else {
+            throw new NotContextException();
+        }
+    }
+
+    public Object lookupLink(Name name) throws NamingException {
+        return lookupLink(name.toString());
+    }
+
+    public NamingEnumeration list(Name name) throws NamingException {
+        return list(name.toString());
+    }
+
+    public NamingEnumeration listBindings(Name name) throws NamingException {
+        return listBindings(name.toString());
+    }
+
+    public void bind(Name name, Object value) throws NamingException {
+        bind(name.toString(), value);
+    }
+
+    public void bind(String name, Object value) throws NamingException {
+        if (isFrozen()) {
+            throw new OperationNotSupportedException();
+        }
+        else {
+            internalBind(name, value);
+        }
+    }
+
+    public void close() throws NamingException {
+        // ignore
+    }
+
+    public Context createSubcontext(Name name) throws NamingException {
+        throw new OperationNotSupportedException();
+    }
+
+    public Context createSubcontext(String name) throws NamingException {
+        throw new OperationNotSupportedException();
+    }
+
+    public void destroySubcontext(Name name) throws NamingException {
+        throw new OperationNotSupportedException();
+    }
+
+    public void destroySubcontext(String name) throws NamingException {
+        throw new OperationNotSupportedException();
+    }
+
+    public String getNameInNamespace() throws NamingException {
+        return nameInNamespace;
+    }
+
+    public NameParser getNameParser(Name name) throws NamingException {
+        return nameParser;
+    }
+
+    public NameParser getNameParser(String name) throws NamingException {
+        return nameParser;
+    }
+
+    public void rebind(Name name, Object value) throws NamingException {
+        bind(name, value);
+    }
+
+    public void rebind(String name, Object value) throws NamingException {
+        bind(name, value);
+    }
+
+    public void rename(Name oldName, Name newName) throws NamingException {
+        throw new OperationNotSupportedException();
+    }
+
+    public void rename(String oldName, String newName) throws NamingException {
+        throw new OperationNotSupportedException();
+    }
+
+    public void unbind(Name name) throws NamingException {
+        throw new OperationNotSupportedException();
+    }
+
+    public void unbind(String name) throws NamingException {
+        throw new OperationNotSupportedException();
+    }
+
+    private abstract class LocalNamingEnumeration implements NamingEnumeration {
+        private Iterator i = bindings.entrySet().iterator();
+
+        public boolean hasMore() throws NamingException {
+            return i.hasNext();
+        }
+
+        public boolean hasMoreElements() {
+            return i.hasNext();
+        }
+
+        protected Map.Entry getNext() {
+            return (Map.Entry) i.next();
+        }
+
+        public void close() throws NamingException {
+        }
+    }
+
+    private class ListEnumeration extends LocalNamingEnumeration {
+        ListEnumeration() {
+        }
+
+        public Object next() throws NamingException {
+            return nextElement();
+        }
+
+        public Object nextElement() {
+            Map.Entry entry = getNext();
+            return new NameClassPair((String) entry.getKey(), entry.getValue().getClass().getName());
+        }
+    }
+
+    private class ListBindingEnumeration extends LocalNamingEnumeration {
+        ListBindingEnumeration() {
+        }
+
+        public Object next() throws NamingException {
+            return nextElement();
+        }
+
+        public Object nextElement() {
+            Map.Entry entry = getNext();
+            return new Binding((String) entry.getKey(), entry.getValue());
+        }
+    }
+}

Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/package.html
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/package.html?view=auto&rev=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/package.html (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/jndi/package.html Thu Aug  2 03:57:37 2007
@@ -0,0 +1,25 @@
+<!--
+    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.
+-->
+<html>
+<head>
+</head>
+<body>
+
+A simple JNDI context which can be used with the JndiRegistry
+
+</body>
+</html>

Copied: activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/bean (from r562013, activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/pojo)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/bean?view=diff&rev=562072&p1=activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/pojo&r1=562013&p2=activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/bean&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/pojo (original)
+++ activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/bean Thu Aug  2 03:57:37 2007
@@ -15,4 +15,4 @@
 # limitations under the License.
 #
 
-class=org.apache.camel.component.pojo.PojoComponent
\ No newline at end of file
+class=org.apache.camel.component.bean.BeanComponent
\ No newline at end of file

Modified: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/PojoRouteTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/PojoRouteTest.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/PojoRouteTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/PojoRouteTest.java Thu Aug  2 03:57:37 2007
@@ -21,6 +21,7 @@
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
+import org.apache.camel.util.jndi.JndiContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
 
@@ -30,14 +31,15 @@
 public class PojoRouteTest extends TestCase {
 	
     public void testPojoRoutes() throws Exception {
-    	
-        CamelContext camelContext = new DefaultCamelContext();
-        
         // START SNIPPET: register
-        PojoComponent component = (PojoComponent)camelContext.getComponent("pojo");
-        component.addService("bye", new SayService("Good Bye!"));
+        // lets populate the context with the services we need
+        // note that we could just use a spring.xml file to avoid this step
+        JndiContext context = new JndiContext();
+        context.bind("bye", new SayService("Good Bye!"));
+
+        CamelContext camelContext = new DefaultCamelContext(context);
         // END SNIPPET: register
-        
+
         // START SNIPPET: route
         // lets add simple route
         camelContext.addRoutes(new RouteBuilder() {

Modified: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/timer/TimerRouteTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/timer/TimerRouteTest.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/timer/TimerRouteTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/timer/TimerRouteTest.java Thu Aug  2 03:57:37 2007
@@ -17,17 +17,16 @@
  */
 package org.apache.camel.component.pojo.timer;
 
-import java.util.concurrent.atomic.AtomicInteger;
-
 import junit.framework.TestCase;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.pojo.PojoComponent;
 import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.util.jndi.JndiContext;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import java.util.concurrent.atomic.AtomicInteger;
+
 /**
  * @version $Revision: 520220 $
  */
@@ -35,33 +34,31 @@
     private static final transient Log log = LogFactory.getLog(TimerRouteTest.class);
 	
     public void testPojoRoutes() throws Exception {
-
-        CamelContext container = new DefaultCamelContext();
-        
         final AtomicInteger hitCount = new AtomicInteger();
 
-        PojoComponent component = new PojoComponent();
-        component.addService("bar", new Runnable(){
+        JndiContext context = new JndiContext();
+        context.bind("bar", new Runnable(){
 			public void run() {
 		        log.debug("hit");
 				hitCount.incrementAndGet();
 			}
         });
-        container.addComponent("pojo", component);
-        
+
+        CamelContext camelContext = new DefaultCamelContext(context);
+
         // lets add some routes
-        container.addRoutes(new RouteBuilder() {
+        camelContext.addRoutes(new RouteBuilder() {
             public void configure() {
                 from("timer://foo?fixedRate=true&delay=0&period=500").to("pojo:bar");
             }
         });
         
-        container.start();
+        camelContext.start();
 
         // now lets wait for the timer to fire a few times.
         Thread.sleep(1000*2);
         assertTrue("", hitCount.get()>= 3 );
         
-        container.stop();
+        camelContext.stop();
     }
 }

Modified: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java Thu Aug  2 03:57:37 2007
@@ -144,4 +144,9 @@
         boolean value = converter.convertTo(boolean.class, null);
         assertFalse(value);
     }
+
+    public void testPrimitiveIntConversion() throws Exception {
+        int value = converter.convertTo(int.class, 4);
+        assertEquals("value", 4, value);
+    }
 }

Added: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/RegistryTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/RegistryTest.java?view=auto&rev=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/RegistryTest.java (added)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/RegistryTest.java Thu Aug  2 03:57:37 2007
@@ -0,0 +1,49 @@
+/*
+ * 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 java.util.Arrays;
+import java.util.List;
+
+/**
+ * @version $Revision: $
+ */
+public class RegistryTest extends TestCase {
+
+    protected JndiRegistry registry = new JndiRegistry();
+
+    public void testBind() throws Exception {
+        List foo = Arrays.asList("a", "b", "c");
+
+        registry.bind("foo", foo);
+
+        List list = registry.lookup("foo", List.class);
+        assertEquals("Should be same!", foo, list);
+    }
+
+    public void testDefaultProviderAllowsValuesToBeCreatedInThePropertiesFile() throws Exception {
+        Object value = registry.lookup("foo");
+        assertEquals("lookup of foo", "bar", value);
+    }
+
+    public void testLookupOfUnknownName() throws Exception {
+        Object value = registry.lookup("No such entry!");
+        assertNull("Should not find anything!", value);
+    }
+}

Added: activemq/camel/trunk/camel-core/src/test/resources/jndi.properties
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/resources/jndi.properties?view=auto&rev=562072
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/resources/jndi.properties (added)
+++ activemq/camel/trunk/camel-core/src/test/resources/jndi.properties Thu Aug  2 03:57:37 2007
@@ -0,0 +1,25 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+# START SNIPPET: jndi
+
+java.naming.factory.initial = org.apache.camel.util.jndi.CamelInitialContextFactory
+
+# the following properties will be copied into the context
+foo = bar
+
+# END SNIPPET: jndi

Modified: activemq/camel/trunk/components/camel-rmi/src/test/java/org/apache/camel/component/rmi/RmiRouteTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-rmi/src/test/java/org/apache/camel/component/rmi/RmiRouteTest.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-rmi/src/test/java/org/apache/camel/component/rmi/RmiRouteTest.java (original)
+++ activemq/camel/trunk/components/camel-rmi/src/test/java/org/apache/camel/component/rmi/RmiRouteTest.java Thu Aug  2 03:57:37 2007
@@ -17,17 +17,17 @@
  */
 package org.apache.camel.component.rmi;
 
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.rmi.registry.LocateRegistry;
-
 import junit.framework.TestCase;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.pojo.PojoComponent;
 import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.util.jndi.JndiContext;
+
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.rmi.registry.LocateRegistry;
 
 /**
  * @version $Revision: 520220 $
@@ -42,11 +42,11 @@
     	// Boot up a local RMI registry
     	LocateRegistry.createRegistry(1099);    	
     	
-        CamelContext camelContext = new DefaultCamelContext();
-        
         // START SNIPPET: register
-        PojoComponent component = (PojoComponent)camelContext.getComponent("pojo");
-        component.addService("bye", new SayService("Good Bye!"));
+        JndiContext context = new JndiContext();
+        context.bind("bye", new SayService("Good Bye!"));
+
+        CamelContext camelContext = new DefaultCamelContext(context);
         // END SNIPPET: register
         
         // START SNIPPET: route

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=562072&r1=562071&r2=562072
==============================================================================
--- 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  2 03:57:37 2007
@@ -17,7 +17,6 @@
  */
 package org.apache.camel.spring;
 
-import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.CamelTemplate;
 import org.apache.camel.Consumer;
@@ -27,10 +26,8 @@
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.spring.util.DefaultMethodInvocationStrategy;
-import org.apache.camel.spring.util.MethodInvocationStrategy;
+import org.apache.camel.component.bean.BeanProcessor;
 import org.apache.camel.spring.util.ReflectionUtils;
-import org.apache.camel.spring.bind.BeanProcessor;
 import org.apache.camel.util.ObjectHelper;
 import static org.apache.camel.util.ObjectHelper.isNotNullAndNonEmpty;
 import org.apache.commons.logging.Log;

Modified: activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/SpringCamelContext.java Thu Aug  2 03:57:37 2007
@@ -20,7 +20,9 @@
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Processor;
-import org.apache.camel.component.bean.BeanComponent;
+import org.apache.camel.component.bean.BeanProcessor;
+import org.apache.camel.component.bean.DefaultMethodInvocationStrategy;
+import org.apache.camel.component.bean.MethodInvocationStrategy;
 import org.apache.camel.component.event.EventComponent;
 import org.apache.camel.component.event.EventEndpoint;
 import org.apache.camel.impl.DefaultCamelContext;
@@ -28,12 +30,9 @@
 import org.apache.camel.spi.ComponentResolver;
 import org.apache.camel.spi.Injector;
 import org.apache.camel.spi.Registry;
-import org.apache.camel.spring.bind.BeanProcessor;
 import org.apache.camel.spring.spi.ApplicationContextRegistry;
 import org.apache.camel.spring.spi.SpringComponentResolver;
 import org.apache.camel.spring.spi.SpringInjector;
-import org.apache.camel.spring.util.DefaultMethodInvocationStrategy;
-import org.apache.camel.spring.util.MethodInvocationStrategy;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.springframework.beans.BeansException;
@@ -110,8 +109,7 @@
 
     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
         this.applicationContext = applicationContext;
-        addComponent("bean", new BeanComponent(applicationContext));
-
+        
         if (applicationContext instanceof ConfigurableApplicationContext) {
             addComponent("event", new EventComponent(applicationContext));
         }

Modified: activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java Thu Aug  2 03:57:37 2007
@@ -24,7 +24,7 @@
 import org.springframework.remoting.support.UrlBasedRemoteAccessor;
 
 /**
- * Creates a Proxy to Camel Pojo Endpoint.
+ * A {@link FactoryBean} to create a Proxy to a a Camel Pojo Endpoint.
  *
  * @author chirino
  */

Modified: activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelServiceExporter.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelServiceExporter.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelServiceExporter.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelServiceExporter.java Thu Aug  2 03:57:37 2007
@@ -17,65 +17,30 @@
  */
 package org.apache.camel.spring.remoting;
 
-import org.apache.camel.CamelContext;
-import org.apache.camel.component.pojo.PojoComponent;
-import org.springframework.beans.factory.DisposableBean;
-import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.FactoryBean;
 import org.springframework.remoting.support.RemoteExporter;
 
 /**
- * Exports a Spring defined service to Camel as a Pojo endpoint.
+ * A {@link FactoryBean} to create a proxy to a service exposing a given {@link #getServiceInterface()}
  *
  * @author chirino
  */
-public class CamelServiceExporter extends RemoteExporter implements InitializingBean, DisposableBean {
-    CamelContext camelContext;
-    PojoComponent pojoComponent;
-    String serviceName;
+public class CamelServiceExporter extends RemoteExporter implements FactoryBean {
+    private boolean singleton = true;
 
-    public void afterPropertiesSet() throws Exception {
-        if (serviceName == null) {
-            throw new IllegalArgumentException("The serviceName must be configured.");
-        }
-        if (pojoComponent == null) {
-            if (camelContext == null) {
-                throw new IllegalArgumentException("A pojoComponent or camelContext must be configured.");
-            }
-            pojoComponent = (PojoComponent) camelContext.getComponent("pojo");
-            if (pojoComponent == null) {
-                throw new IllegalArgumentException("The pojoComponent could not be found.");
-            }
-        }
-        pojoComponent.addService(serviceName, getProxyForService());
+    public Object getObject() throws Exception {
+        return getProxyForService();
     }
 
-    public void destroy() throws Exception {
-        if (serviceName != null) {
-            pojoComponent.removeService(serviceName);
-        }
+    public Class getObjectType() {
+        return getServiceInterface();
     }
 
-    public PojoComponent getPojoComponent() {
-        return pojoComponent;
+    public boolean isSingleton() {
+        return singleton;
     }
 
-    public void setPojoComponent(PojoComponent pojoComponent) {
-        this.pojoComponent = pojoComponent;
-    }
-
-    public CamelContext getCamelContext() {
-        return camelContext;
-    }
-
-    public void setCamelContext(CamelContext camelContext) {
-        this.camelContext = camelContext;
-    }
-
-    public String getServiceName() {
-        return serviceName;
-    }
-
-    public void setServiceName(String serviceName) {
-        this.serviceName = serviceName;
+    public void setSingleton(boolean singleton) {
+        this.singleton = singleton;
     }
 }

Modified: activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/bean/BeanRouteTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/bean/BeanRouteTest.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/bean/BeanRouteTest.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/bean/BeanRouteTest.java Thu Aug  2 03:57:37 2007
@@ -37,7 +37,7 @@
         assertEquals("Returned value", "Bye James!", value);
     }
 
-    public void TODO_testChooseMethodUsingBodyType() throws Exception {
+    public void testChooseMethodUsingBodyType() throws Exception {
         Object value = template.sendBody("bean:myBean", 4);
 
         assertEquals("Returned value", 8L, value);

Modified: activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/bind/BeanInfoTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/bind/BeanInfoTest.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/bind/BeanInfoTest.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/bind/BeanInfoTest.java Thu Aug  2 03:57:37 2007
@@ -18,12 +18,14 @@
 
 import junit.framework.TestCase;
 import org.apache.camel.Exchange;
-import org.apache.camel.spring.util.DefaultMethodInvocationStrategy;
+import org.apache.camel.component.bean.BeanProcessor;
+import org.apache.camel.component.bean.BeanInfo;
+import org.apache.camel.component.bean.DefaultMethodInvocationStrategy;
+import org.apache.camel.component.bean.MethodInvocation;
 import org.apache.camel.impl.DefaultExchange;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.logging.Log;
-import org.aopalliance.intercept.MethodInvocation;
 
 /**
  * @version $Revision: $

Modified: activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/remoting/SpringRemotingRouteTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/remoting/SpringRemotingRouteTest.java?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/remoting/SpringRemotingRouteTest.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/remoting/SpringRemotingRouteTest.java Thu Aug  2 03:57:37 2007
@@ -20,16 +20,23 @@
 import junit.framework.TestCase;
 import org.apache.camel.CamelContext;
 import org.apache.camel.spring.SpringCamelContext;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.logging.Log;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 /**
  * @version $Revision: 520220 $
  */
 public class SpringRemotingRouteTest extends TestCase {
+    private static final Log log = LogFactory.getLog(SpringRemotingRouteTest.class);
+
     public void testPojoRoutes() throws Exception {
 
         ClassPathXmlApplicationContext spring = new ClassPathXmlApplicationContext("org/apache/camel/spring/remoting/spring.xml");
-        spring.getBean("serviceExporter");
+        Object service = spring.getBean("say");
+        log.info("Found service!: " + service);
+        assertTrue("not an ISay!", service instanceof ISay);
+
         CamelContext camelContext = SpringCamelContext.springCamelContext(spring);
 
         // START SNIPPET: invoke

Modified: activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/remoting/spring.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/remoting/spring.xml?view=diff&rev=562072&r1=562071&r2=562072
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/remoting/spring.xml (original)
+++ activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/remoting/spring.xml Thu Aug  2 03:57:37 2007
@@ -26,9 +26,7 @@
   <bean id="sayService" class="org.apache.camel.spring.remoting.SayService"/>
 
   <!--  Exposes the above bean as via the pojo:say endpoint -->
-  <bean id="serviceExporter" class="org.apache.camel.spring.remoting.CamelServiceExporter">
-    <property name="camelContext" ref="camel"/>
-    <property name="serviceName" value="say"/>
+  <bean id="say" class="org.apache.camel.spring.remoting.CamelServiceExporter">
     <property name="service" ref="sayService"/>
     <property name="serviceInterface" value="org.apache.camel.spring.remoting.ISay"/>
   </bean>