我有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
请帮忙。
答案 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);