XStream问题合集(升级版本,字段缺失)

了解具体用法的可以借鉴这篇文章

xstream运用,JAVA对象转xml,xml转JAVA对象-CSDN博客

目录

升级问题

异常报错信息1

com.thoughtworks.xstream.security.ForbiddenClassException

解决方法

需要降低限制权限

异常报错信息2

com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field

解决方法


升级问题

我是xstream-1.4.8.jar升级到xstream-1.4.20.jar

异常报错信息1

com.thoughtworks.xstream.security.ForbiddenClassException

2024-06-05 09:53:24.216 [TID:9935dc2458744822b7a072c85bcfb52b.167.17175524032817531] INFO  [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/ecard]] ERROR EcardPaymentCallbackPageController com.thoughtworks.xstream.security.ForbiddenClassException: com.tpaic.ecard.domain.sale.PayPackage
 com.thoughtworks.xstream.security.ForbiddenClassException: com.tpaic.ecard.domain.sale.PayPackage
	at com.thoughtworks.xstream.security.NoTypePermission.allows(NoTypePermission.java:26)
	at com.thoughtworks.xstream.mapper.SecurityMapper.realClass(SecurityMapper.java:74)
	at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125)
	at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:47)
	at com.thoughtworks.xstream.core.util.HierarchicalStreams.readClassType(HierarchicalStreams.java:29)
	at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:135)
	at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1464)
	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1441)
	at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1321)
	at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1312)

解决方法

需要降低限制权限

//原始代码
/*
     * 将XML报文转化为java对象
     */
    public static Object makeObjectFromXml(String docStr, Class[] classList) {
        XStream xstream = new XStream(new Dom4JDriver());
        xstream.processAnnotations(classList);
        return xstream.fromXML(docStr);
    }


//解决方法
/*
     * 将XML报文转化为java对象
     */
    public static Object makeObjectFromXml(String docStr, Class[] classList) {
        XStream xstream = new XStream(new Dom4JDriver());
        //由于对象默认开启安全防护,尽量限制最低权限
        xstream.addPermission(AnyTypePermission.ANY);
        xstream.processAnnotations(classList);
        return xstream.fromXML(docStr);
    }

异常报错信息2

com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field

Exception in thread "main" com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field com.yun.greedy.modules.util.xstream.Package.Sign
---- Debugging information ----
message             : No such field com.yun.greedy.modules.util.xstream.Package.Sign
field               : Sign
class               : com.yun.greedy.modules.util.xstream.Package
required-type       : com.yun.greedy.modules.util.xstream.Package
converter-type      : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
path                : /Package/Sign
xpath               : /Package/Sign
version             : 1.4.20

解决方法

报错信息是报文的节点字段大于所转对象的字段,只需要在对应的字段上添加下报文中的字段即可

 

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一百减一是零

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

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

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

打赏作者

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

抵扣说明:

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

余额充值