【问题标题】:Repeating element deserialize using XStream使用 XStream 重复元素反序列化
【发布时间】:2012-09-04 15:51:53
【问题描述】:

在向另一个进程发送消息时,我正在使用 XStream 1.4.3 在 Java 和 XML 文档之间移动。大多数一切都有效。但是,我似乎无法获得一份回复文档来正确反序列化。回复如下:

<AddToBatchResponse>
    <MerchantOrderNumber>1525675</MerchantOrderNumber>
    <MerchantOrderNumber>1525676</MerchantOrderNumber>
    <ResponseReasonCode>100</ResponseReasonCode>
    <AuthResponseType>S</AuthResponseType>
</AddToBatchResponse>

当 XStream 到达第二个 MerchantOrderNumber 时,它会给出错误提示“重复字段 MerchantOrderNumber”。我尝试了不同的设计,但它就是行不通。下面是相关的Java代码:

调用类的片段

xstream.alias("AddToBatchResponse", AddToBatchResponse.class);
xstream.alias("MerchantOrderNumber", OrderNumber.class);
xstream.addImplicitCollection(AddToBatchResponse.class, "orderNumbers");
response = (AddToBatchResponse)xstream.fromXML(responseXml);

AddToBatchResponse.java(省略 getter 和 setter)

public class AddToBatchResponse {
protected List<OrderNumber> orderNumbers;
protected String ResponseReasonCode; 
protected String AuthResponseType;  
    ...

OrderNumber.java

public class OrderNumber {
protected String MerchantOrderNumber;
...

谁能告诉我我做错了什么?谢谢。

【问题讨论】:

  • 应该提到 - 我想在不使用注释的情况下这样做。
  • 您在 XStream 中使用什么解析器?使用默认的 XPP3,我无法重现您的错误。
  • StAX 解析器 - 你认为这是个问题吗?
  • 我只能假设 StAX 解析器在处理 XML 时更加严格。您实际上是如何实例化您的 xstream 实例的?
  • xstream = new XStream(new StaxDriver());

标签: java xml deserialization xstream


【解决方案1】:

好吧,没有答案 - 所以这就是我所做的:

我使用正则表达式 + 字符串操作来提取和处理代码中的额外元素。不优雅,不可取,但它有效。如果有人找到这个问题的答案,请分享。

【讨论】:

猜你喜欢
  • 2012-02-25
  • 1970-01-01
  • 2011-03-04
  • 2011-11-21
  • 1970-01-01
  • 2021-09-06
  • 2015-04-13
  • 2013-04-02
  • 1970-01-01
相关资源
最近更新 更多