You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Rupert Westenthaler (Commented) (JIRA)" <ji...@apache.org> on 2012/04/03 11:00:45 UTC

[jira] [Commented] (EXEC-54) Problem with argument containing spaces

    [ https://issues.apache.org/jira/browse/EXEC-54?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13245078#comment-13245078 ] 

Rupert Westenthaler commented on EXEC-54:
-----------------------------------------

Came along the same "Issue" but with a different conclusion. (see http://markmail.org/message/xbcseasols7ae2mc for details)

In short:

Commons Exec does NOT double quote the parameter. The problem is that the "java" executable does not support quoted jar files (see also http://stackoverflow.com/questions/5569591/unable-to-access-jarfile-in-linux-land).

So I assume this issue can be closed. However I would still be interested in an utility that can be used to escape (instead of quote) parsed parameters. This would be very handy when calling executable (like java) that do not interpret quotation marks.
                
> 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
>            Assignee: Siegfried Goeschl
>              Labels: arguments, quotes, spaces
>
> 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.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira