【问题标题】:Using XStream to deserialize an XML response with separate "success" and "failure" forms?使用 XStream 以单独的“成功”和“失败”形式反序列化 XML 响应?
【发布时间】:2010-05-18 22:16:37
【问题描述】:

我计划使用带有 Java 的 XStream 在对象和 XML 请求以及 XML 响应和对象之间进行转换,其中 XML 通过 HTTP/HTTPS 流动。在响应方面,我可以得到一个“成功”响应,它似乎会映射到一个 Java 类,或者一个“失败”响应,它似乎会映射到另一个 Java 类。

例如,对于“文件列表”请求,我可以得到肯定的响应,例如,

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <success>true</success>
  <files>
    <file>[...]</file>
    <file>[...]</file>
    <file>[...]</file>
  </files>
</response>

或者我可能会得到否定的回应,例如,

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <success>false</success>
  <error>
    <errorCode>-502</errorCode>
    <systemMessage>[...]AuthenticationException</systemMessage>
    <userMessage>Not authenticated</userMessage>
  </error>
</response>

要处理这个问题,我应该在一个类中包含两种情况下的字段,还是应该以某种方式使用 XStream 来“有条件地”创建两个潜在类之一?

来自两个响应案例的字段在同一个对象中的案例看起来像这样:

Class Response {
  boolean success;
  ArrayList<File> files;
  ResponseError error;
  [...]
}

Class File {
  String name;
  long size;
  [...]
}

Class ResponseError {
  int errorCode;
  String systemMessage;
  String userMessage;
  [...]
}

我不知道“使用 XStream 并在成功或错误的情况下创建不同的对象”是什么样的。有可能以某种方式做到这一点吗?这是更好还是更糟的方式?

无论如何,任何关于如何使用 XStream 处理成功与失败响应案例的建议都将不胜感激。提前致谢!

【问题讨论】:

    标签: java xstream


    【解决方案1】:

    我只是在几年前简单地使用过 XStream,但是如果你想要两个不同的类,为什么不为这两种情况使用两个不同的根标签(例如成功和失败)?

    如果您还使用 XStream 生成 XML,则这些类可以有一个公共基类或接口,如果这对于在服务器端工作是必要的。

    【讨论】:

    • "[...] 为什么不对这两种情况使用两个不同的根标签(例如成功和失败)?" -- 我正在处理旧的 XML 请求/响应协议,响应始终是“响应”根,并且 元素仅在成功为假时才包含。我真的无法改变另一端来采用新技术。
    【解决方案2】:

    在实际处理这个问题时,我发现第一个案例(在两个案例中都包含一个类中的字段)似乎工作得很好,所以也许这就是要走的路。

    在这种情况下,Response 的成功和不成功形式都设置了success 字段,如果不成功,ResponseError 也会返回。

    Class Response {
      boolean success;
      ArrayList<File> files;
      ResponseError error;
      [...]
    }
    
    Class File {
      String name;
      long size;
      [...]
    }
    
    Class ResponseError {
      int errorCode;
      String systemMessage;
      String userMessage;
      [...]
    }
    

    【讨论】:

      猜你喜欢
      • 2011-12-02
      • 1970-01-01
      • 2015-04-13
      • 2022-08-23
      • 2012-02-25
      • 2012-12-26
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多