XStream.formXML()转换对象时, 报CannotResolveClassException异常分析和解决方法

本文介绍了一种在Java中将XML字符串转换为Java对象的方法,并解决了一个常见的转换错误:无法解析类异常。通过调整参数传递方式,成功实现了XML到Java对象的转换。
一丶问题描述

在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);
    }

这样问题就顺利解决了, 只为分享, 不为啥, 嘿 !

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值