1

XStreamを使用して同じクラス要素のXML要素に異なるエイリアスを設定するにはどうすればよいですか?

次のクラスがあり、次の形式の XML を生成する自宅の電話と職場の電話の両方を表す Phone クラスを再利用したいと考えています。

<customer>
  <id>222</id>
  <name>TestCustomer</name>
  <workPhone>
    <workPhoneNumber>12345678</workPhoneNumber>
    <workPhoneExtn>2345</workPhoneExtn>
  </workPhone>
  <workPhone>
    <workPhoneNumber>23456789</workPhoneNumber>
    <workPhoneExtn>2555</workPhoneExtn>
  </workPhone>
  <homePhone>
    <homePhoneNumber>222222222</homePhoneNumber>
    <homePhoneExtn>1234</homePhoneExtn>
  </homePhone>
</customer>

次のコードを使用すると、homephone オブジェクトと workphone オブジェクトのクラス レベルまでのみ、異なるエイリアスを設定できます。

@XStreamAlias("customer")
public class Customer {

    private String id;
    private String name;    

    @XStreamImplicit(itemFieldName = "workPhone")
    private ArrayList<Phone> workPhones;

    @XStreamImplicit(itemFieldName = "homePhone")
    private ArrayList<Phone> homePhones;
}

public class Phone {
    private String number;
    private String extn;
}

上記のクラス定義では、次の XML 構造しか取得できません。

<customer>
  <id>222</id>
  <name>TestCustomer</name>
  <workPhone>
    <number>12345678</number>
    <extn>2345</extn>
  </workPhone>
  <workPhone>
    <number>12345678</number>
    <extn>2355</extn>
  </workPhone>
  <homePhone>
    <number>222222222</number>
    <extn>1234</extn>
  </homePhone>
</customer>

マッパーまたはコンバーターがこれを達成するのに役立つかどうかについて、私は明確に理解していません。

クラスのエイリアスに応じて、エイリアス「workphoneNumber」、「workphoneExtn」/「homePhoneNumber」、「homePhoneExtn」を取るように電話番号と内線番号を設定する方法があるかどうか誰かが提案できますか? マーシャリングとアンマーシャリングの両方で機能するはずです。提案してください。

4

1 に答える 1

0

これを試して:

xstream.alias("workPhone", Person.class);
xstream.alias("homePhone", Person.class);

xstream.aliasField("workPhoneNumber", Person.class, "number");
xstraem.aliasField("homePhoneNumber", Person.class, "number");

...
于 2014-10-13T20:47:10.550 に答える