1

オブジェクトに変換したい XML オブジェクトがありますが、XStream でそれを行うのに問題があります。問題は、「RESULT」タグが異なる API サービスとは異なるため、異なるクラスにエイリアスを付ける方法がわからないことです。以下の例は、LOGIN サービスの例です。Envelope/Body/RESULT/ は同じですが、その中に異なる属性を持つ別のサービス (ログアウトなど) があるかもしれません。Envelope と Body を活用して冗長なコードを削減する方法がわかりません。

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

現在、EnvelopeResponse、BodyResponse、および ResultResponse クラスのクラスを作成していますが、他のすべてのクラスを拡張したいですか? それはそれについて行く方法ですか?つまり、私の LoginResponse クラスは、LogoutResponse と同じように ResultResponse.class から拡張されています。

私は試した

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

複数のサービスがあるため、もう 1 レベルの抽象化を追加することをお勧めします。

すなわち

<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 に答える