gpt4 book ai didi

java - XStream 类无法解析

转载 作者:行者123 更新时间:2023-12-04 05:20:14 27 4
gpt4 key购买 nike

使用以下设置时出现 XStream 错误。我一定是疯了。怎么了?

请求类

@XStreamAlias("RequestTO")
public class RequestTO {

@XStreamImplicit
private List<SkuMerchTO> skuNumbers;
...
}

嵌套对象类
@XStreamAlias("skuMerch")
public class SkuMerchTO {

@XStreamAlias("skuNumber")
@XStreamAsAttribute
private Integer skuNumber;

@XStreamAlias("dept")
@XStreamAsAttribute
private Short department;

@XStreamAlias("class")
@XStreamAsAttribute
private Short cls;

@XStreamAlias("subClass")
@XStreamAsAttribute
private Short subClass;
...
}

将 XML 解码为对象的 XStream 代码:
XStream stream = new XStream();
stream.processAnnotations(SkuMerchTO.class);
stream.processAnnotations(RequestTO.class);
RequestTO request = (RequestTO)stream.fromXML(requestXml);

XML 输入字符串:
<RequestTO>
<skuMerch skuNumber="123456" dept="1" class="2" subClass="3"/>
<skuMerch skuNumber="234567" dept="4" class="5" subClass="6"/>
</RequestTO>

堆栈跟踪中的错误:
---- 调试信息 ----
消息 : 2 : 2
原因异常:com.thoughtworks.xstream.mapper.CannotResolveClassException
原因消息:2:2
类(class):[...]RequestTO
必需类型:[...]SkuMerchTO
路径:/RequestTO/skuNumberList/skuMerch
行号:3
.-------------------------------
com.thoughtworks.xstream.converters.ConversionException: 2 : 2 : 2 : 2
---- 调试信息 ----
消息 : 2 : 2
原因异常:com.thoughtworks.xstream.mapper.CannotResolveClassException
原因消息:2:2
类(class):[...]RequestTO
必需类型:[..]SkuMerchTO
路径:/RequestTO/skuNumberList/skuMerch
行号:3
.-------------------------------

如果我创建对象并执行 toXML 我得到这个:
<RequestTO>
<skuMerch skuNumber="0" dept="1" class="2" subClass="2"/>
<skuMerch skuNumber="1" dept="1" class="2" subClass="2"/>
<skuMerch skuNumber="2" dept="1" class="2" subClass="2"/>
</RequestTO>

编辑:热闹的是,如果这样做:
 stream.fromXML(stream.toXML(object));  

它仍然在来自 XML 部分失败!

最佳答案

名为 class 的属性对 XStream 有特殊意义,this question建议您可以通过类似的方式告诉 XStream 为此目的使用不同的属性

stream.aliasSystemAttribute("__class", "class");

这将导致 XStream 使用 __class作为“特殊”属性,并处理 class作为一个正常的。或者,如果您知道您不需要 class 的 XStream 魔法处理。对于您可以说的任何对象
stream.aliasSystemAttribute(null, "class");

告诉它根本不要使用此功能。

您可能还需要使用 itemFieldName="skuMerch"@XStreamImplicit注释,根据 XStream annotation tutorial .

关于java - XStream 类无法解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13768586/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com