1

我有想要将其转换回对象的 XML 对象,但在使用 XStream 时遇到了麻烦。它的问题是“RESULT”标签与不同的 API 服务不同,所以不知道如何为不同的类取别名。下面的示例将用于 LOGIN 服务示例。我可能有另一个服务,它具有相同的信封/正文/结果/但其中的属性不同,即注销。不知道如何利用信封和正文来减少冗余代码。

<Envelope>
<Body>
    <RESULT>
<SUCCESS>true</SUCCESS>
<SESSIONID>1320948a32098</SESSIONID>
<ORGANIZATION_ID>1</ORGANIZATION_ID>
</RESULT>
  </Body>
</Envelope>

我目前已经为 EnvelopeResponse、BodyResponse 和一个 ResultResponse 类创建了类,我希望我的所有其他类都从中扩展吗?这是解决问题的方法吗?即我的LoginResponse 类从ResultResponse.class 扩展而来,LogoutResponse 也是如此。

我试过了

xStream = new Xstream();
xStream.alias("Envelope", EnvelopeResponse.class);
xStream.alias("Body", BodyResponse.class);
xStream.alias("RESULT", LoginResponse.class); //Dynamic based on what API I'd like in the RESULT

请帮忙。

4

1 回答 1

0

由于您有多个服务,因此添加一个抽象级别将是一个好主意。

IE

<Envelope>
<Body>
    <RESULT>
     <LOGINRESPONSE>
       <SUCCESS>true</SUCCESS>
       <SESSIONID>1320948a32098</SESSIONID>
       <ORGANIZATION_ID>1</ORGANIZATION_ID>
     </LOGINRESPONSE>
   </RESULT>
</Body>
</Envelope>

<Envelope>
<Body>
    <RESULT>
     <LOGOUT>
       <SUCCESS>true</SUCCESS>
     </LOGOUT>
   </RESULT>
</Body>
</Envelope>

然后,您可以将这些服务响应别名为不同的类,

xStream.alias("LOGOUT", LOGOUT.class);

xStream.alias("LOGINRESPONSE", LOGINRESPONSE.class);
于 2012-10-23T09:18:39.523 回答