[ https://issues.apache.org/jira/browse/CLI-71?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Henri Yandell updated CLI-71: ----------------------------- Attachment: BugCLI71Test.java Adding a new test case with the new tests in them. > [cli] A weakness of parser > -------------------------- > > Key: CLI-71 > URL: https://issues.apache.org/jira/browse/CLI-71 > Project: Commons CLI > Issue Type: Bug > Components: CLI-1.x > Environment: Operating System: other > Platform: All > Reporter: Amro Al-Akkad > Fix For: 1.1 > > Attachments: BugCLI71Test.java, BugCLI71Test.java, TestCommonsCLI.java > > > 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 option's 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 option's 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(); > } > } > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]