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 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();
                }

        }

}

-- 
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]

Reply via email to