我使用JAXB 2来针对XSD架构解析XML文件,并且在构建到Java类的ant期间,XML标记会自动解组。创建了一些enums
。代码是:
@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次迭代中得到异常。
** * ** * * 更新 < EM> * ** * ** *
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。
欣赏它。
威尔
答案 0 :(得分:7)
这是因为您的第91个条目没有找到枚举值。失败的String的值是多少?
答案 1 :(得分:2)
您的XML没有有效的ENUM值(如小写的'good')或者它有一个空标记,因为如果您尝试通过MyEnum.valueOf(null)
评估枚举元素,它将抛出IllegalArgumentException。 / p>
答案 2 :(得分:1)
这很可能是因为him.getToBinQuality()
没有返回有效字符串,在这种情况下字符串应该是'GOOD|BAD|UGLY|NULL'
您可以通过在日志上打印值来轻松调试。