Problem with argument containing spaces
---------------------------------------

                 Key: EXEC-54
                 URL: https://issues.apache.org/jira/browse/EXEC-54
             Project: Commons Exec
          Issue Type: Bug
    Affects Versions: 1.1
         Environment: Mac OsX 10.6.6, JVM 1.6.0
            Reporter: Jeremias Rößler


I am new to Commons Exec, so this could also be an error in usage, but... 

When I use the {{CommandLine}} class to add a argument that contains spaces, 
some quotes are added and are then part of the argument that is given.

For example: When I call {{java "what version"}} I get 
{{java.lang.NoClassDefFoundError: what version}}, and when I call {{java 
"\"what version\""}} (which contains escaped quotes, that are part of the 
command line argument itself), I get {{java.lang.NoClassDefFoundError: "what 
version"}}.

So the following test fails, because as you can see in the last line, Apache 
Exec is producing the latter version where it should have produced the first 
version:

{code:java}
        @Test
        public void testArgumentQuoting() throws Exception {
                String argument = "what version";
                DefaultExecutor executor = new DefaultExecutor();
                DefaultExecuteResultHandler resultHandler = new 
DefaultExecuteResultHandler();
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                PumpStreamHandler streamHandler = new PumpStreamHandler(out, 
out);
                executor.setStreamHandler(streamHandler);
                CommandLine cmdLine = new CommandLine("java");
                cmdLine.addArgument(argument);
                executor.execute(cmdLine, resultHandler);
                resultHandler.waitFor();
                String resultPattern = "Exception in thread \"main\" 
java\\.lang\\.NoClassDefFoundError: ([\\w \"]+)";
                Pattern pattern = Pattern.compile(resultPattern);
                Matcher matcher = pattern.matcher(out.toString());
                Assert.assertTrue(matcher.find());
                // Note: Result should be <what version> and NOT <"what 
version">!
                Assert.assertEquals(argument, matcher.group(1));
        }
{code} 

Note that the same test passes if the space is removed from the argument. 
Please also note, that I am not trying to start an external Java process, but 
this is merely an example that I assume will work on every developers machine.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira


Reply via email to