DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG· RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://issues.apache.org/bugzilla/show_bug.cgi?id=39140>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND· INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=39140 Summary: [cli] A weakness of parser Product: Commons Version: unspecified Platform: All OS/Version: other Status: NEW Severity: normal Priority: P2 Component: CLI AssignedTo: [email protected] ReportedBy: [EMAIL PROTECTED] I found a weakness of Jakarta Commons CLI and want to explain it with a simple example: Our program provides 2 options: 1. -a or --algo <name>: The -a option requires an argument. 2. -k or --key <value>: The -k option requires an argument too. a) If you pass the following command line arguments everything will be ok: -a Caesar k A After evaluation: Caesar is the parameter of the -a option and A is the parameter of the -k option. b) However an org.apache.commons.cli.MissingArgumentException: no argument for:k is thrown if you pass the following input: -a Caesar -k a The Parser assumes that the argument a after the -k option, is the -a option missing the hyphen. At the end of this description there is Java code for executing this problem. Information: The handling of this command line -a Caesar -k a works in Getopt without any problem: Caesar is the parameter of the -a option and a of the -k option. After parsing a valid option Getopt always takes the next (available) command line argument as the options parameter if the option requires an argument means if you pass to the command line k -a Caesar After evaluation: a is the parameter of the -k option the Caesar argument is just ignored If the options parameter (<value>) represents an optional argument the next argument is not required, if it represents a valid option means if you pass to the command line k -a Caesar After evaluation: Caesar is the parameter of the -a option k option is set without a parameter in this case a default value makes sense. Last but not least here is the code snippet for the CLI Test: import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.apache.commons.cli.PosixParser; public class TestCommonsCLI { /** * @param args */ public static void main(String[] args) { Options options = new Options(); Option algorithm = new Option("a" , "algo", true, "the algorithm which it to perform executing"); algorithm.setArgName("algorithm name"); options.addOption(algorithm); Option key = new Option("k" , "key", true, "the key the setted algorithm uses to process"); algorithm.setArgName("value"); options.addOption(key); CommandLineParser parser = new PosixParser(); try { CommandLine line = parser.parse( options, args); if(line.hasOption('a')){ System.out.println("algo: "+ line.getOptionValue( "a" )); } if(line.hasOption('k')){ System.out.println("key: " + line.getOptionValue('k')); } } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } -- Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
