java.lang.IllegalArgumentException: No enum const class 非法参数异常:没有枚举常量类

5

我使用JAXB 2根据XSD模式解析XML文件,并在ant构建期间将XML标记自动取消编组为Java类。一些枚举被创建。代码如下:

@XmlType(name = "binQuality")
@XmlEnum
public enum BinQuality {

    GOOD,
    BAD,
    UGLY,
    NULL;

    public String value() {
        return name();
    }

    public static BinQuality fromValue(String v) {
        return valueOf(v);
    }
}

在我的代码中,我调用了以下内容:
BinQuality bq = BinQuality.valueOf(him.getToBinQuality());

我在循环中,只有在第91次迭代时才会出现异常。

******* 更新 *******

him.getToBinQuality() 返回有效的枚举值(GOOD/BAD/UGLY/NULL)。以下是日志摘录。

....
2011-07-18 15:28:09 DEBUG (com.st.mas.wmr.persistence.process.ProcessStifOliBinConversionCompleteImpl:183) -> class com.st.mas.wmr.persistence.process.ProcessStifOliBinConversionCompleteImpl|exportToXml|him.getToBin():89|him.getToBinQuality():BAD
2011-07-18 15:28:09 DEBUG (com.st.mas.wmr.persistence.process.ProcessStifOliBinConversionCompleteImpl:183) -> class com.st.mas.wmr.persistence.process.ProcessStifOliBinConversionCompleteImpl|exportToXml|him.getToBin():90|him.getToBinQuality():UGLY
2011-07-18 15:28:09 DEBUG (com.st.mas.wmr.persistence.process.ProcessStifOliBinConversionCompleteImpl:183) -> class com.st.mas.wmr.persistence.process.ProcessStifOliBinConversionCompleteImpl|exportToXml|him.getToBin():91|him.getToBinQuality():BAD 
2011-07-18 15:28:09 WARN  (org.apache.struts.action.RequestProcessor:538) -> Unhandled Exception thrown: class java.lang.IllegalArgumentException

这看起来非常神秘。

使用的Java版本为1.5。

感激不尽。

Will


1
在第91次迭代中,“him”的值是多少? - Jon Skeet
找到了。第91个数据有一个尾随空格。 :) - Will Sumekar
3个回答

8

这是因为在您的第91项中找不到枚举值。这个失败的字符串的值是什么?


4
找到了。第91个数据结尾有一个空格。 :) - Will Sumekar

2

你的XML文件中,枚举值无效(如全小写的'good')或标签为空,因为如果你尝试通过MyEnum.valueOf(null)来评估一个枚举元素,它会抛出IllegalArgumentException异常。


3
如果值为nullvalueof将抛出NullPointerException - Srinivas

1
最有可能的原因是him.getToBinQuality()没有返回正确的字符串,在这种情况下,字符串应该是'GOOD|BAD|UGLY|NULL'
你可以通过在日志上打印该值来轻松调试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接