You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2010/10/21 11:35:38 UTC

svn commit: r1025906 - in /camel/trunk/components/camel-exec/src: main/java/org/apache/camel/component/exec/impl/ test/java/org/apache/camel/component/exec/

Author: davsclaus
Date: Thu Oct 21 09:35:38 2010
New Revision: 1025906

URL: http://svn.apache.org/viewvc?rev=1025906&view=rev
Log:
CAMEL-3263: Args from headers should be String parsed just as args from endpoint.

Modified:
    camel/trunk/components/camel-exec/src/main/java/org/apache/camel/component/exec/impl/DefaultExecBinding.java
    camel/trunk/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecEndpointTest.java
    camel/trunk/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecJavaProcessTest.java

Modified: camel/trunk/components/camel-exec/src/main/java/org/apache/camel/component/exec/impl/DefaultExecBinding.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-exec/src/main/java/org/apache/camel/component/exec/impl/DefaultExecBinding.java?rev=1025906&r1=1025905&r2=1025906&view=diff
==============================================================================
--- camel/trunk/components/camel-exec/src/main/java/org/apache/camel/component/exec/impl/DefaultExecBinding.java (original)
+++ camel/trunk/components/camel-exec/src/main/java/org/apache/camel/component/exec/impl/DefaultExecBinding.java Thu Oct 21 09:35:38 2010
@@ -42,17 +42,25 @@ public class DefaultExecBinding implemen
         ObjectHelper.notNull(exchange, "exchange");
         ObjectHelper.notNull(endpoint, "endpoint");
 
+        // do not convert args as we do that manually later
+        Object args = exchange.getIn().removeHeader(EXEC_COMMAND_ARGS);
         String cmd = getAndRemoveHeader(exchange.getIn(), EXEC_COMMAND_EXECUTABLE, endpoint.getExecutable(), String.class);
-        List<String> argsList = getAndRemoveHeader(exchange.getIn(), EXEC_COMMAND_ARGS, null, List.class);
         String dir = getAndRemoveHeader(exchange.getIn(), EXEC_COMMAND_WORKING_DIR, endpoint.getWorkingDir(), String.class);
         long timeout = getAndRemoveHeader(exchange.getIn(), EXEC_COMMAND_TIMEOUT, endpoint.getTimeout(), Long.class);
         String outFilePath = getAndRemoveHeader(exchange.getIn(), EXEC_COMMAND_OUT_FILE, endpoint.getOutFile(), String.class);
         boolean useStderrOnEmptyStdout = getAndRemoveHeader(exchange.getIn(), EXEC_USE_STDERR_ON_EMPTY_STDOUT, endpoint.isUseStderrOnEmptyStdout(), Boolean.class);
         InputStream input = exchange.getIn().getBody(InputStream.class);
 
+        // try to convert args to list at fist
+        List<String> argsList = exchange.getContext().getTypeConverter().convertTo(List.class, exchange, args);
         if (argsList == null) {
-            // do the URI parsing, only if the arguments are not set
-            argsList = splitToWhiteSpaceSeparatedTokens(endpoint.getArgs());
+            // no we could not do that, then parse it as a string to a list
+            String s = endpoint.getArgs();
+            if (args != null) {
+                // use args from header instead from endpoint
+                s = exchange.getContext().getTypeConverter().convertTo(String.class, exchange, args);
+            }
+            argsList = splitToWhiteSpaceSeparatedTokens(s);
         }
 
         File outFile = outFilePath == null ? null : new File(outFilePath);

Modified: camel/trunk/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecEndpointTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecEndpointTest.java?rev=1025906&r1=1025905&r2=1025906&view=diff
==============================================================================
--- camel/trunk/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecEndpointTest.java (original)
+++ camel/trunk/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecEndpointTest.java Thu Oct 21 09:35:38 2010
@@ -151,7 +151,6 @@ public class ExecEndpointTest extends Ab
         assertNotNull(endpoint.getCommandExecutor());
 
         assertEquals(dir, endpoint.getWorkingDir());
-
     }
 
     @Test
@@ -204,6 +203,5 @@ public class ExecEndpointTest extends Ab
     private ExecEndpoint createExecEndpoint(String uri) throws Exception {
         logger.debug("Using Exec endpoint URI " + uri);
         return (ExecEndpoint)component.createEndpoint(uri);
-
     }
 }

Modified: camel/trunk/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecJavaProcessTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecJavaProcessTest.java?rev=1025906&r1=1025905&r2=1025906&view=diff
==============================================================================
--- camel/trunk/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecJavaProcessTest.java (original)
+++ camel/trunk/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecJavaProcessTest.java Thu Oct 21 09:35:38 2010
@@ -27,9 +27,9 @@ import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.converter.IOConverter;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.apache.commons.io.IOUtils;
-
 import org.junit.Test;
 
 import static org.apache.camel.component.exec.ExecBinding.EXEC_COMMAND_ARGS;
@@ -220,7 +220,40 @@ public class ExecJavaProcessTest extends
         output.assertIsSatisfied();
         assertEquals(ExecutableJavaProgram.LINES_TO_PRINT_FROM_EACH_THREAD, outs.length);
         assertEquals(ExecutableJavaProgram.LINES_TO_PRINT_FROM_EACH_THREAD, errs.length);
+    }
+
+    /**
+     * Test print in stdout using string as args
+     *
+     * @see ExecutableJavaProgram#THREADS
+     * @throws Exception
+     */
+    @Test
+    public void testExecJavaArgsAsString() throws Exception {
+        output.setExpectedMessageCount(1);
+
+        Exchange exchange = producerTemplate.send("direct:input", new Processor() {
+            public void process(Exchange exchange) throws Exception {
+                final String javaAbsolutePath = buildJavaExecutablePath();
+
+                // use string for args
+                String classpath = System.getProperty("java.class.path");
+                String args = "-cp \"" + classpath + "\" " + EXECUTABLE_PROGRAM_ARG + " " + PRINT_IN_STDOUT;
 
+                exchange.getIn().setBody("hello");
+                exchange.getIn().setHeader(EXEC_COMMAND_EXECUTABLE, javaAbsolutePath);
+                exchange.getIn().setHeader(EXEC_COMMAND_ARGS, args);
+                exchange.getIn().setHeader(EXEC_USE_STDERR_ON_EMPTY_STDOUT, true);
+            }
+        });
+
+        output.assertIsSatisfied();
+
+        ExecResult result = exchange.getIn().getBody(ExecResult.class);
+        assertNotNull(result);
+
+        String out = IOConverter.toString(result.getStdout(), exchange);
+        assertEquals(PRINT_IN_STDOUT, out);
     }
 
     /**
@@ -261,7 +294,6 @@ public class ExecJavaProcessTest extends
         Exchange e = sendExchange(READ_INPUT_LINES_AND_PRINT_THEM, 20000, whiteSpaceSeparatedLines, false);
         ExecResult inBody = e.getIn().getBody(ExecResult.class);
         assertEquals(expected, IOUtils.toString(inBody.getStdout()));
-
     }
 
     protected Exchange sendExchange(final Object commandArgument, final long timeout) {