camel-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From davscl...@apache.org
Subject svn commit: r895452 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/ camel-core/src/main/java/org/apache/camel/builder/ camel-core/src/main/java/org/apache/camel/component/bean/ camel-core/src/test/java/org/apache/camel/component/bean/ cam...
Date Sun, 03 Jan 2010 17:53:27 GMT
Author: davsclaus
Date: Sun Jan  3 17:53:18 2010
New Revision: 895452

URL: http://svn.apache.org/viewvc?rev=895452&view=rev
Log:
CAMEL-2325: Fixed CamelProxy potentially invoking the proxied bean instead of the intended
bean when routing uses another bean in the route.

Added:
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/CoolService.java
  (with props)
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/MyCoolStuff.java
  (with props)
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/ProduceSplitMethodCallIssueTest.java
  (with props)
    camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/issues/ProduceSplitMethodCallIssueTest.xml
      - copied, changed from r894791, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/issues/stringDataFormatTest.xml
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanConverter.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInvocation.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanProxyTest.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/OrderService.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/issues/ProxyReturnNullIssueTest.java
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java?rev=895452&r1=895451&r2=895452&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java Sun Jan  3 17:53:18
2010
@@ -43,6 +43,7 @@
     String BATCH_COMPLETE = "CamelBatchComplete";
 
     String BEAN_METHOD_NAME           = "CamelBeanMethodName";
+    @Deprecated
     String BEAN_HOLDER                = "CamelBeanHolder";
     String BEAN_MULTI_PARAMETER_ARRAY = "CamelBeanMultiParameterArray";
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java?rev=895452&r1=895451&r2=895452&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java Sun
Jan  3 17:53:18 2010
@@ -32,6 +32,7 @@
 import org.apache.camel.Message;
 import org.apache.camel.NoSuchEndpointException;
 import org.apache.camel.Producer;
+import org.apache.camel.component.bean.BeanInvocation;
 import org.apache.camel.impl.ExpressionAdapter;
 import org.apache.camel.language.bean.BeanLanguage;
 import org.apache.camel.spi.Language;
@@ -450,8 +451,16 @@
     public static <T> Expression mandatoryBodyExpression(final Class<T> type,
final boolean nullBodyAllowed) {
         return new ExpressionAdapter() {
             public Object evaluate(Exchange exchange) {
-                if (nullBodyAllowed && exchange.getIn().getBody() == null) {
-                    return null;
+                if (nullBodyAllowed) {
+                    if (exchange.getIn().getBody() == null) {
+                        return null;
+                    }
+
+                    // if its a bean invocation then if it has no arguments then it should
be threaded as null body allowed
+                    BeanInvocation bi = exchange.getIn().getBody(BeanInvocation.class);
+                    if (bi != null && (bi.getArgs() == null || bi.getArgs().length
== 0 || bi.getArgs()[0] == null)) {
+                        return null;
+                    }
                 }
 
                 try {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanConverter.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanConverter.java?rev=895452&r1=895451&r2=895452&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanConverter.java
(original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanConverter.java
Sun Jan  3 17:53:18 2010
@@ -40,9 +40,8 @@
 
             BeanInvocation bi = (BeanInvocation) value;
             if (bi.getArgs() == null || bi.getArgs().length != 1) {
-                // not possible to convert as we try to convert the data passed in at first
argument
-                return null;
-
+                // not possible to convert at this time as we try to convert the data passed
in at first argument
+                return Void.TYPE;
             }
 
             Class from = bi.getArgs()[0].getClass();

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInvocation.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInvocation.java?rev=895452&r1=895451&r2=895452&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInvocation.java
(original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInvocation.java
Sun Jan  3 17:53:18 2010
@@ -27,11 +27,14 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 /**
  * Invocation of beans that can handle being serialized.
  */
 public class BeanInvocation implements Externalizable {
+    private static final transient Log LOG = LogFactory.getLog(BeanInvocation.class);
     private Object[] args;
     private MethodBean methodBean;
     private transient Method method;
@@ -77,7 +80,13 @@
      */
     public void invoke(Object pojo, Exchange exchange) {
         try {
+            if (LOG.isTraceEnabled()) {
+                LOG.trace("Invoking method: " + getMethod() + " with args: " + getArgs());
+            }
             Object response = getMethod().invoke(pojo, getArgs());
+            if (LOG.isTraceEnabled()) {
+                LOG.trace("Got response: " + response);
+            }
             exchange.getOut().setBody(response);
         } catch (InvocationTargetException e) {
             exchange.setException(ObjectHelper.wrapRuntimeCamelException(e.getCause()));

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java?rev=895452&r1=895451&r2=895452&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
(original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
Sun Jan  3 17:53:18 2010
@@ -86,14 +86,32 @@
 
         Message in = exchange.getIn();
 
-        if (in.getHeader(Exchange.BEAN_MULTI_PARAMETER_ARRAY) == null) {
-            in.setHeader(Exchange.BEAN_MULTI_PARAMETER_ARRAY, isMultiParameterArray());
-        }
-
+        // Now it gets a bit complicated as ProxyHelper can proxy beans which we later
+        // intend to invoke (for example to proxy and invoke using spring remoting).
+        // and therefore the message body contains a BeanInvocation object.
+        // However this can causes problem if we in a Camel route invokes another bean,
+        // so we must test whether BeanHolder and BeanInvocation is the same bean or not
         BeanInvocation beanInvoke = in.getBody(BeanInvocation.class);
         if (beanInvoke != null) {
-            beanInvoke.invoke(bean, exchange);
-            return;
+            if (LOG.isTraceEnabled()) {
+                LOG.trace("Exchange IN body is a BeanInvocation instance: " + beanInvoke);
+            }
+            Class<?> clazz = beanInvoke.getMethod().getDeclaringClass();
+            boolean sameBean = clazz.isInstance(bean);
+            if (LOG.isTraceEnabled()) {
+                LOG.debug("BeanHolder bean: " + bean.getClass() + " and beanInvocation bean:
" + clazz + " is same instance: " + sameBean);
+            }
+            if (sameBean) {
+                beanInvoke.invoke(bean, exchange);
+                // propagate headers
+                exchange.getOut().getHeaders().putAll(exchange.getIn().getHeaders());
+                return;
+            }
+        }
+
+        // set temporary header which is a hint for the bean info that introspect the bean
+        if (in.getHeader(Exchange.BEAN_MULTI_PARAMETER_ARRAY) == null) {
+            in.setHeader(Exchange.BEAN_MULTI_PARAMETER_ARRAY, isMultiParameterArray());
         }
 
         String prevMethod = null;
@@ -110,8 +128,20 @@
         }
         if (invocation == null) {
             throw new IllegalStateException("No method invocation could be created, no matching
method could be found on: " + bean);
-        } 
-   
+        }
+
+        // remove temporary header
+        in.removeHeader(Exchange.BEAN_MULTI_PARAMETER_ARRAY);
+
+        // if there was bean invocation as body and we are invoking the same bean
+        // then invoke it
+        if (beanInvoke != null && beanInvoke.getMethod() == invocation.getMethod())
{
+            beanInvoke.invoke(bean, exchange);
+            // propagate headers
+            exchange.getOut().getHeaders().putAll(exchange.getIn().getHeaders());
+            return;
+        }
+
         Object value = null;
         try {
             value = invocation.proceed();

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanProxyTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanProxyTest.java?rev=895452&r1=895451&r2=895452&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanProxyTest.java
(original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanProxyTest.java
Sun Jan  3 17:53:18 2010
@@ -124,6 +124,22 @@
         }
     }
 
+    public void testBeanProxyCallAnotherBean() throws Exception {
+        Endpoint endpoint = context.getEndpoint("direct:bean");
+        OrderService service = ProxyHelper.createProxy(endpoint, OrderService.class);
+
+        String reply = service.submitOrderStringReturnString("World");
+        assertEquals("Hello World", reply);
+    }
+
+    public void testBeanProxyCallAnotherBeanWithNoArgs() throws Exception {
+        Endpoint endpoint = context.getEndpoint("direct:bean");
+        OrderService service = ProxyHelper.createProxy(endpoint, OrderService.class);
+
+        String reply = service.doAbsolutelyNothing();
+        assertEquals("Hi nobody", reply);
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
@@ -140,7 +156,21 @@
 
                 from("direct:other").transform(constant("<order>FAIL</order>"));
                 // END SNIPPET: e1
+
+                from("direct:bean")
+                    .bean(MyFooBean.class, "hello");
             }
         };
     }
+
+    public static class MyFooBean {
+
+        public String hello(String name) {
+            if (name != null) {
+                return "Hello " + name;
+            } else {
+                return "Hi nobody";
+            }
+        }
+    }
 }

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/OrderService.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/OrderService.java?rev=895452&r1=895451&r2=895452&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/OrderService.java
(original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/OrderService.java
Sun Jan  3 17:53:18 2010
@@ -36,5 +36,7 @@
 
     Integer invalidReturnType(String s);
 
+    String doAbsolutelyNothing();
+
 }
 // END SNIPPET: e1

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/issues/ProxyReturnNullIssueTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/issues/ProxyReturnNullIssueTest.java?rev=895452&r1=895451&r2=895452&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/issues/ProxyReturnNullIssueTest.java
(original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/issues/ProxyReturnNullIssueTest.java
Sun Jan  3 17:53:18 2010
@@ -41,11 +41,7 @@
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("direct:echo").bean(new Echo() {
-                    public String echo(String text) {
-                        return text;
-                    }
-                });
+                from("direct:echo").bean(new MyEchoBean());
             }
         };
     }
@@ -54,4 +50,11 @@
         String echo(String text);
     }
 
+    public static class MyEchoBean implements Echo {
+
+        public String echo(String text) {
+            return text;
+        }
+    }
+
 }

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java?rev=895452&r1=895451&r2=895452&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java
(original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/remoting/CamelProxyFactoryBean.java
Sun Jan  3 17:53:18 2010
@@ -112,7 +112,6 @@
 
     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
{
         this.applicationContext = applicationContext;
-        
     }
 
 }

Added: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/CoolService.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/CoolService.java?rev=895452&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/CoolService.java
(added)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/CoolService.java
Sun Jan  3 17:53:18 2010
@@ -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.spring.issues;
+
+import org.apache.camel.Produce;
+
+/**
+ * @version $Revision$
+ */
+public class CoolService {
+
+    @Produce(uri = "direct:start")
+    private MyCoolStuff stuff;
+
+    public String stuff(String s) {
+        return stuff.cool(s);
+    }
+
+    public String[] split(String s) {
+        return s.split(",");
+    }
+}

Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/CoolService.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/CoolService.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/MyCoolStuff.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/MyCoolStuff.java?rev=895452&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/MyCoolStuff.java
(added)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/MyCoolStuff.java
Sun Jan  3 17:53:18 2010
@@ -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.
+ */
+package org.apache.camel.spring.issues;
+
+/**
+ * @version $Revision$
+ */
+public interface MyCoolStuff {
+
+    String cool(String s);
+}

Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/MyCoolStuff.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/MyCoolStuff.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/ProduceSplitMethodCallIssueTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/ProduceSplitMethodCallIssueTest.java?rev=895452&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/ProduceSplitMethodCallIssueTest.java
(added)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/ProduceSplitMethodCallIssueTest.java
Sun Jan  3 17:53:18 2010
@@ -0,0 +1,43 @@
+/**
+ * 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.spring.issues;
+
+import org.apache.camel.spring.SpringTestSupport;
+import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ * @version $Revision$
+ */
+public class ProduceSplitMethodCallIssueTest extends SpringTestSupport {
+
+    @Override
+    protected AbstractXmlApplicationContext createApplicationContext() {
+        return new ClassPathXmlApplicationContext("org/apache/camel/spring/issues/ProduceSplitMethodCallIssueTest.xml");
+    }
+
+    public void testProduceSplitMethodCallIssue() throws Exception {
+        getMockEndpoint("mock:split").expectedBodiesReceived("Hello A", "Hello B");
+
+        CoolService cool = context.getRegistry().lookup("cool", CoolService.class);
+        String out = cool.stuff("A,B");
+        assertEquals("Hello B", out);
+
+        assertMockEndpointsSatisfied();
+    }
+
+}

Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/ProduceSplitMethodCallIssueTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/issues/ProduceSplitMethodCallIssueTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Copied: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/issues/ProduceSplitMethodCallIssueTest.xml
(from r894791, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/issues/stringDataFormatTest.xml)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/issues/ProduceSplitMethodCallIssueTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/issues/ProduceSplitMethodCallIssueTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/issues/stringDataFormatTest.xml&r1=894791&r2=895452&rev=895452&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/issues/stringDataFormatTest.xml
(original)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/issues/ProduceSplitMethodCallIssueTest.xml
Sun Jan  3 17:53:18 2010
@@ -22,25 +22,17 @@
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
     ">
 
-    <bean id="xs" class="org.apache.camel.model.dataformat.StringDataFormat">
-        <property name="charset" value="utf-8"/>
-    </bean>
+    <bean id="cool" class="org.apache.camel.spring.issues.CoolService"/>
 
-    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
+    <camelContext id="camel" trace="true" xmlns="http://camel.apache.org/schema/spring">
         <route>
-            <from uri="direct:marshal"/>
-            <!-- using a bean id -->
-            <marshal ref="xs"/>
-            <to uri="mock:marshal"/>
-        </route>
-
-        <route>
-            <from uri="direct:unmarshal"/>
-            <!-- using a child node -->
-            <unmarshal>
-                <string charset="UTF-8"/>
-            </unmarshal>
-            <to uri="mock:unmarshal"/>
+            <from uri="direct:start"/>
+            <to uri="log:foo"/>
+            <split>
+                <method bean="cool" method="split"/>
+                <transform><simple>Hello ${body}</simple></transform>
+                <to uri="mock:split"/>
+            </split>
         </route>
     </camelContext>
 



Mime
View raw message