具有动态内部结构的XStream fromXML

时间:2012-10-22 15:14:38

标签: xml-parsing xstream

我有XML对象,我想将其转换回对象但是在使用XStream时遇到了麻烦。它的问题是“RESULT”标记与不同的API服务不同,因此不确定如何为不同的类别名。以下示例适用于LOGIN服务示例。我可能有另一个服务具有相同的Envelope / Body / RESULT /但其中包含不同的属性,即Logout。不知道如何利用Envelope和Body来减少冗余代码。

<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

请帮忙。

1 个答案:

答案 0 :(得分:0)

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

<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);