在springboot下面使用xstream 将xml字符串转换成对象时出现 相同对象不能互转的问题:
原因是因为SpringBoot重新加载了对象,若未指定classloader的时候,SpringBoot未正确使用classloader,
需要指定classloader。
添加代码如下:
xstream.setClassLoader(clazz.getClassLoader());
eg:
XStream xstream =new XStream();
xstream.autodetectAnnotations(true);
xstream.ignoreUnknownElements();
xstream.alias("response", GreenLineWHResponse.class);
xstream.alias("returnresult", ReturnResult.class);
xstream.alias("pageactionout", LxWhPageActionOut.class);
xstream.alias("data_row", LxWhDoctorSchedule.class);
xstream.aliasField("data", GreenLineWHResponse.class, "m_doctorSchedule");
xstream.setClassLoader(GreenLineWHResponse.class.getClassLoader());
GreenLineWHResponse resp=(GreenLineWHResponse)xstream.fromXML(rtnMessage);
ReturnResult result =resp.getReturnResult();
checkRtn(result); //检查返回结果
flag = HyEnumHoptRtn.SUCCESS.getStatus();
infos=resp.getDoctorSchedule();
XStream xstream = new XStream();
xstream.addPermission(AnyTypePermission.ANY);
Class<?>[] classes = new Class[] {GreenLineWHResponse.class, ReturnResult.class,LxWhOrderInfo.class};
xstream.allowTypes(classes);
xstream.autodetectAnnotations(true);
xstream.ignoreUnknownElements();
xstream.setClassLoader(GreenLineWHResponse.class.getClassLoader());
xstream.alias("response", GreenLineWHResponse.class);
xstream.alias("returnresult", ReturnResult.class);
xstream.aliasField("outputvalues", GreenLineWHResponse.class,"m_lxWhOrderInfo");
GreenLineWHResponse resp=(GreenLineWHResponse)xstream.fromXML(rtnMessage);