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.