You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "David Biesack (JIRA)" <ji...@apache.org> on 2007/08/17 17:34:30 UTC
[jira] Updated: (CLI-144) adding a FileValidator results in
ClassCastException in parser.parseAndHelp(args)
[ https://issues.apache.org/jira/browse/CLI-144?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
David Biesack updated CLI-144:
------------------------------
Description:
When I add a FileValidator.getExistingFileInstance() to an Argument, I get a ClassCastException when I parse args.
Below is a testcase invoke with
java org.apache.commons.cli2.issues.CLI2Sample -classpath commons-cli-2.0-SNAPSHOT.jar --file-name path-to-an-existing-file
Run it and you get:
Exception in thread "main" java.lang.ClassCastException: java.io.File cannot be cast to java.lang.String
at org.apache.commons.cli2.validation.FileValidator.validate(FileValidator.java:122)
at org.apache.commons.cli2.option.ArgumentImpl.validate(ArgumentImpl.java:250)
at org.apache.commons.cli2.option.ParentImpl.validate(ParentImpl.java:123)
at org.apache.commons.cli2.option.DefaultOption.validate(DefaultOption.java:175)
at org.apache.commons.cli2.option.GroupImpl.validate(GroupImpl.java:264)
at org.apache.commons.cli2.commandline.Parser.parse(Parser.java:105)
at org.apache.commons.cli2.commandline.Parser.parseAndHelp(Parser.java:125)
at org.apache.commons.cli2.issues.CLI2Sample.main(CLI2Sample.java:38)
Comment out the withValidator call and it runs with no exception.
I also get a similar ClassCastException if I add a
.withValidator(NumberValidator.getIntegerInstance())
to another option/argument.
Here is the source
package org.apache.commons.cli2.issues;
import java.io.File;
import org.apache.commons.cli2.CommandLine;
import org.apache.commons.cli2.Group;
import org.apache.commons.cli2.builder.ArgumentBuilder;
import org.apache.commons.cli2.builder.DefaultOptionBuilder;
import org.apache.commons.cli2.builder.GroupBuilder;
import org.apache.commons.cli2.commandline.Parser;
import org.apache.commons.cli2.option.DefaultOption;
import org.apache.commons.cli2.validation.FileValidator;
public class CLI2Sample
{
public static void main(String[] args)
{
final DefaultOptionBuilder obuilder = new DefaultOptionBuilder();
final ArgumentBuilder abuilder = new ArgumentBuilder();
final GroupBuilder gbuilder = new GroupBuilder();
DefaultOption fileNameOption = obuilder
.withShortName("f")
.withLongName("file-name")
.withRequired(true)
.withDescription("name of an existing file")
.withArgument(abuilder
.withName("file-name")
.withValidator(FileValidator.getExistingFileInstance())
.create())
.create();
Group options = gbuilder
.withName("options")
.withOption(fileNameOption)
.create();
Parser parser = new Parser();
parser.setHelpTrigger("--help");
parser.setGroup(options);
CommandLine cl = parser.parseAndHelp(args);
}
}
was:
When I add a FileValidator.getExistingFileInstance() to an Argument, I get a ClassCastException when I parse args.
Below is a testcase invoke with
java org.apache.commons.cli2.issues.CLI2Sample -classpath commons-cli-2.0-SNAPSHOT.jar --file-name path-to-an-existing-file
Run it and you get:
Exception in thread "main" java.lang.ClassCastException: java.io.File cannot be cast to java.lang.String
at org.apache.commons.cli2.validation.FileValidator.validate(FileValidator.java:122)
at org.apache.commons.cli2.option.ArgumentImpl.validate(ArgumentImpl.java:250)
at org.apache.commons.cli2.option.ParentImpl.validate(ParentImpl.java:123)
at org.apache.commons.cli2.option.DefaultOption.validate(DefaultOption.java:175)
at org.apache.commons.cli2.option.GroupImpl.validate(GroupImpl.java:264)
at org.apache.commons.cli2.commandline.Parser.parse(Parser.java:105)
at org.apache.commons.cli2.commandline.Parser.parseAndHelp(Parser.java:125)
at org.apache.commons.cli2.issues.CLI2Sample.main(CLI2Sample.java:38)
Comment out the withValidator call and it runs with no exception.
I also get a similar ClassCastException if I add a
.withValidator(NumberValidator.getIntegerInstance())
to another option/argument.
package org.apache.commons.cli2.issues;
import java.io.File;
import org.apache.commons.cli2.CommandLine;
import org.apache.commons.cli2.Group;
import org.apache.commons.cli2.builder.ArgumentBuilder;
import org.apache.commons.cli2.builder.DefaultOptionBuilder;
import org.apache.commons.cli2.builder.GroupBuilder;
import org.apache.commons.cli2.commandline.Parser;
import org.apache.commons.cli2.option.DefaultOption;
import org.apache.commons.cli2.validation.FileValidator;
public class CLI2Sample
{
public static void main(String[] args)
{
final DefaultOptionBuilder obuilder = new DefaultOptionBuilder();
final ArgumentBuilder abuilder = new ArgumentBuilder();
final GroupBuilder gbuilder = new GroupBuilder();
DefaultOption fileNameOption = obuilder//
.withShortName("f")//
.withLongName("file-name")//
.withRequired(true)//
.withDescription("Name of dense data file containing NxM double matrix") //
.withArgument(abuilder//
.withName("file-name")//
.withValidator(FileValidator.getExistingFileInstance())//
.create())//
.create();
Group options = gbuilder//
.withName("options")//
.withOption(fileNameOption)//
.create();
Parser parser = new Parser();
parser.setHelpTrigger("--help");
parser.setGroup(options);
CommandLine cl = parser.parseAndHelp(args);
}
}
cleaned up sample source a bit
> adding a FileValidator results in ClassCastException in parser.parseAndHelp(args)
> ---------------------------------------------------------------------------------
>
> Key: CLI-144
> URL: https://issues.apache.org/jira/browse/CLI-144
> Project: Commons CLI
> Issue Type: Bug
> Components: CLI-2.x
> Affects Versions: 2.0
> Environment: Windows XP
> Reporter: David Biesack
>
> When I add a FileValidator.getExistingFileInstance() to an Argument, I get a ClassCastException when I parse args.
> Below is a testcase invoke with
> java org.apache.commons.cli2.issues.CLI2Sample -classpath commons-cli-2.0-SNAPSHOT.jar --file-name path-to-an-existing-file
> Run it and you get:
> Exception in thread "main" java.lang.ClassCastException: java.io.File cannot be cast to java.lang.String
> at org.apache.commons.cli2.validation.FileValidator.validate(FileValidator.java:122)
> at org.apache.commons.cli2.option.ArgumentImpl.validate(ArgumentImpl.java:250)
> at org.apache.commons.cli2.option.ParentImpl.validate(ParentImpl.java:123)
> at org.apache.commons.cli2.option.DefaultOption.validate(DefaultOption.java:175)
> at org.apache.commons.cli2.option.GroupImpl.validate(GroupImpl.java:264)
> at org.apache.commons.cli2.commandline.Parser.parse(Parser.java:105)
> at org.apache.commons.cli2.commandline.Parser.parseAndHelp(Parser.java:125)
> at org.apache.commons.cli2.issues.CLI2Sample.main(CLI2Sample.java:38)
> Comment out the withValidator call and it runs with no exception.
> I also get a similar ClassCastException if I add a
> .withValidator(NumberValidator.getIntegerInstance())
> to another option/argument.
> Here is the source
> package org.apache.commons.cli2.issues;
> import java.io.File;
> import org.apache.commons.cli2.CommandLine;
> import org.apache.commons.cli2.Group;
> import org.apache.commons.cli2.builder.ArgumentBuilder;
> import org.apache.commons.cli2.builder.DefaultOptionBuilder;
> import org.apache.commons.cli2.builder.GroupBuilder;
> import org.apache.commons.cli2.commandline.Parser;
> import org.apache.commons.cli2.option.DefaultOption;
> import org.apache.commons.cli2.validation.FileValidator;
> public class CLI2Sample
> {
> public static void main(String[] args)
> {
> final DefaultOptionBuilder obuilder = new DefaultOptionBuilder();
> final ArgumentBuilder abuilder = new ArgumentBuilder();
> final GroupBuilder gbuilder = new GroupBuilder();
> DefaultOption fileNameOption = obuilder
> .withShortName("f")
> .withLongName("file-name")
> .withRequired(true)
> .withDescription("name of an existing file")
> .withArgument(abuilder
> .withName("file-name")
> .withValidator(FileValidator.getExistingFileInstance())
> .create())
> .create();
> Group options = gbuilder
> .withName("options")
> .withOption(fileNameOption)
> .create();
> Parser parser = new Parser();
> parser.setHelpTrigger("--help");
> parser.setGroup(options);
> CommandLine cl = parser.parseAndHelp(args);
> }
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.