Hi cli dev team,

I recently upgraded to the commons-cli version 1.3.1 where the BasicParser is 
deprecated. So if I sue the DefaultParser instead, my following sample code 
would not work -

public static void main(String[] args) throws Exception {
        Options options = getOptions();
        if (args != null && args.length == 1 && args[0].equals("-?")) {
            CommandLineUtils.printHelp("adfg", options);
            System.exit(2);
        }
        CommandLineParser parser = new DefaultParser();
        CommandLine cmd = parser.parse(options, args);
        String name1 = cmd.getOptionValue("name1");
        String name2 = cmd.getOptionValue("name2");
        String name3 = cmd.getOptionValue("name3");

        System.out.println("name1 : " + name1);
        System.out.println("name2 : " + name2);
        System.out.println("name3 : " + name3);
    }

    private static Options getOptions() {
        Options options = new Options();
        Option asOption = new Option("name1", true, "name1");
        asOption.setRequired(true);
        options.addOption(asOption);
        Option dsOption = new Option("name2", true, "name2");
        dsOption.setOptionalArg(true);
        dsOption.setRequired(false);
        options.addOption(dsOption);
        Option dcOption = new Option("name3", true, "name3");
        dcOption.setRequired(true);
        options.addOption(dcOption);
        return options;
    }
The input args passed to main method are: -name1 val1 -name2 -name3 val3
Note that I have not passed val for the -name2. If I remove the -name2 it will 
work but its user driven. Previously with BasicParser this use to work.

Here it throws following exception
Exception in thread "main" org.apache.commons.cli.MissingOptionException: 
Missing required option: name3
       at 
org.apache.commons.cli.DefaultParser.checkRequiredOptions(DefaultParser.java:199)
       at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:130)
       at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:76)
       at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:60)
       at test.DefaultParserTest.main(DefaultParserTest.java:26)

It seems a bug in the DefaultParser. Can you please fix this?

Thanks,
-Pooja
  • [cli] Chitnis, Pooja

Reply via email to