代碼如下
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());