使用XStream以单独的“成功”和“失败”形式反序列化XML响应?

时间:2010-05-18 22:16:37

标签: java xstream

我计划使用XStream和Java在对象和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处理此成功与失败响应案例的建议都将受到赞赏。提前谢谢!

2 个答案:

答案 0 :(得分:0)

我几年前曾短暂地使用过XStream,但是如果你想要两个不同的类,那么为什么两个案例中没有两个不同的根标签(例如成功和失败)?

如果您也使用XStream生成XML,那么这些类可以有一个公共基类或接口,如果需要在服务器端使用的话。

答案 1 :(得分:0)

在实际使用它时,我发现第一种情况(包括两个案例的一个类中的字段)似乎工作得很好,所以也许这就是要走的路。

在这种情况下,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;
  [...]
}