一丶问题描述
在java开发中, 对接第三方webService接口, 需将接收的xml字符串转换为java对象, 使用XStream对象进行转换操作时报错
二 丶问题分析
1丶根据异常描述是: 无法解析类异常 ! 贴上下方代码 :
public static Object xmlToJson(String xmlStr, Object obj) {
XStream xStream = new XStream();
xStream.ignoreUnknownElements();
// XStream设置默认安全防护
//XStream.setupDefaultSecurity(xStream);
// 设置允许的类
xStream.allowTypesByRegExp(new String[]{".*"});
//xstream使用注解转换 应用传过来的类的注解 xml转换为对象时使用
xStream.processAnnotations(obj.class);
// StringEscapeUtils类可以对html js xml sql 等代码进行转义来防止SQL注入及XSS注入
String response = StringEscapeUtils.unescapeHtml(xmlStr);
String s = response.substring(response.indexOf("<returnContent>"), response.indexOf("</return>"));
xStream.autodetectAnnotations(true);
// 将XML反序列化获取对象
return xStream.fromXML(s);
}
2丶根据上方代码块和异常描述, 不难得出就是参数 obj 的问题
3丶我老大说使用具体类试一下, 就重新修改了下代码. 如下:
public static Object xmlToJson(String xmlStr, Class<?> classz) throws IllegalAccessException, InstantiationException {
XStream xStream = new XStream();
xStream.ignoreUnknownElements();
// XStream设置默认安全防护
//XStream.setupDefaultSecurity(xStream);
// 设置允许的类
xStream.allowTypesByRegExp(new String[]{".*"});
//xstream使用注解转换 应用传过来的类的注解 xml转换为对象时使用
xStream.processAnnotations(classz);
// StringEscapeUtils类可以对html js xml sql 等代码进行转义来防止SQL注入及XSS注入
String response = StringEscapeUtils.unescapeHtml(xmlStr);
String s = response.substring(response.indexOf("<returnContent>"), response.indexOf("</return>"));
xStream.autodetectAnnotations(true);
// 将javabeen中的对象序列化为xml格式
xStream.toXML(classz.newInstance());
// 将XML反序列化获取对象
return xStream.fromXML(s);
}
这样问题就顺利解决了, 只为分享, 不为啥, 嘿 !