2011-07-18 174 views
4

我使用JAXB 2根據XSD模式解析XML文件,並在構建到Java類期間自動解組XML標記。一些enums被創建。該代碼是:java.lang.IllegalArgumentException:無枚舉常量類

@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()並返回一個有效的枚舉(好/壞/ 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。

欣賞它。

+1

在第91次迭代中,「他」的價值是什麼? –

+0

找到了。第91個數據中有一個尾部空間。 :) –

回答

7

這是因爲您的第91條沒有找到枚舉值。什麼是失敗的字符串的價值?

+4

找到它。第91個數據中有一個尾部空間。 :) –

1

最有可能這是因爲him.getToBinQuality()不返回有效的字符串是在這種情況下,字符串應該是'GOOD|BAD|UGLY|NULL'

您可以輕鬆地打印在日誌中值調試此。

2

您的XML沒有有效的ENUM值(如小寫的'good'),或者它有一個空標記,因爲如果您嘗試通過MyEnum.valueOf(null)來評估枚舉元素,它將拋出IllegalArgumentException。

+3

如果值爲'null','valueof'將拋出'NullPointerException' – Srinivas

相關問題