使用XStream將xml轉對象,兩個相同的類居然不能強轉

代碼如下

public static <T> T  toBean(String xmlStr,Class<T> cls){
        XStream xstream = new XStream(new DomDriver());
        xstream.setClassLoader(cls.getClassLoader());
        xstream.processAnnotations(cls);
        T obj=(T)xstream.fromXML(xmlStr);
        return obj;
    }

報錯

在開發過程中對xml進行轉換,結果報了下面的錯誤:

com.ruoyi.cp.bean.WxAppXmlMessage 
cannot be cast to 
com.ruoyi.cp.bean.WxAppXmlMessage

解決

真不可思議,相同的類居然不能轉,我在test類中和main方法中進行測試都沒問題,一起動項目運行就報錯。

最後查了很多資料,發現是 ClassLoader 引起的。

當兩個不同的ClassLoader對象加載具有相同名稱的類時,會發生這種情況。 Java中兩個類的相等性取決於加載它的完全限定名稱和類加載器。

因此,如果兩個獨立的類加載器從同一位置加載類,那麼這些類型的對象將無法被轉換爲彼此的類型,即使它們的類被稱爲相同。

修改後的代碼

public static <T> T  toBean(String xmlStr,Class<T> cls){
        XStream xstream = new XStream(new DomDriver());
        xstream.setClassLoader(cls.getClassLoader());
        xstream.processAnnotations(cls);
        T obj=(T)xstream.fromXML(xmlStr);
        return obj;
    }

沒錯,就只添加了一行 xstream.setClassLoader(cls.getClassLoader());

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章