Spring boot xstream解析UnknownFieldException异常

今天使用xstream解析xml文件,遇到一个特别隐蔽的问题,花费了几乎两个小时才解决。因此,记录一下,帮助其他遇到类似问题的同行们。

刚开始通过spring boot启动一个web服务,访问一个指定url,在controller层会去解析一个xml文件,并进行其他业务处理。可是每次请求都会报类似的异常:

Caused by: com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field workshop.tokenizer.data.Attributes.attribute 

也就是说我配置的实体(通过注解形式)中配置的字段,xstream的注解并没有识别到。查找了各种方法,文章都没有解决问题。后来出于方便测试,不用每次都起spring boot服务,就把解析xml的方法写在一个mian方法里面了,执行,马上成功了。以为解决了问题,结果回到web应用,问题依然存在。

通过这个过程,突然想到会不会是spring boot导致的?于是就针对这方面进行搜索排查。还真找到了一篇类似的文章。详情参考(http://stackoverflow.com/questions/36849817/unknownfieldexception-only-in-spring-boot-app)。
提问者遇到的问题跟我很类似。貌似提问者并没有找到解决方案,也没有采纳下面回复者。不过回答者的答案却提醒了我。于是根据这行代码:

xstream.setClassLoader(DataObjects.class.getClassLoader());

把我对应的代码修改如下:

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());

问题完美解决。

问题的原因:当未指定classloader的时候,spring boot未正确使用classloader。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序新视界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值