commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bugzi...@apache.org
Subject DO NOT REPLY [Bug 39140] New: - [cli] A weakness of parser
Date Wed, 29 Mar 2006 10:59:47 GMT
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: commons-dev@jakarta.apache.org
        ReportedBy: amro.alakkad@googlemail.com


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: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


Mime
View raw message