commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jeremias Rößler (JIRA) <>
Subject [jira] Commented: (EXEC-54) Problem with argument containing spaces
Date Thu, 10 Feb 2011 07:36:57 GMT


Jeremias Rößler commented on EXEC-54:

Sorry for being not clear enough: My point is that the argument is doubly quoted, and the
first quotes are then escaped and become part of the argument itself, which is definitely
not what is intended. To stick to your example, the argument being given to the process is
not "C:\Document And Settings\documents\432432.pdf" which would be correct, but "\"C:\Document
And Settings\documents\432432.pdf\"" (note the double and escaped quotes).

> Problem with argument containing spaces
> ---------------------------------------
>                 Key: EXEC-54
>                 URL:
>             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,;
> 	}
> {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:


View raw message