1

Java の JAXB ライブラリを使用して、次の XML を非整列化しようとしています。

<message name="GetAllRoutesSoapIn">
  <part name="parameters" element="GetAllRoutes"/>
</message>

...

<operation name="GetAllRoutes">
  <input message="GetAllRoutesSoapIn"/>
</operation>

このファイルを階層的にアンマーシャリングするのは簡単です。メッセージには多くのパーツがあり、オペレーションには入力があります。しかし、入力とメッセージの間の関係を確立するのに問題があります。

マーシャリングInputされていないクラスに、 typeMessageではなくtype のフィールドが必要Stringです。

入力クラス

@XmlType
public class Input extends AbstractElement {

// @XmlAttribute
// private String message; 

// Not sure how to implement this. XMLAdapter?
private Message message;

protected Input () {}

...

私の最初のアイデアは、カスタム Message XMLAdapter を作成し、Message クラスと Input の Message プロパティの両方に @XmlJavaTypeAdapter(MessageAdapter.class) で注釈を付けることでした。Adapter クラスでインスタンス化されたすべてのメッセージの静的コレクションを保持します。適切な xml 要素「メッセージ」からインスタンス化されたメッセージが収集され、アダプターが入力のメッセージ属性からメッセージを非整列化しようとしたときに検索されます。動作に近づきましたが、入力クラスに対してアダプターを起動できません。

何か案は?

4

1 に答える 1

1

このタイプの関係は、@XmlID(オブジェクトを一意に識別するフィールド/プロパティで) およびXmlIDREF(そのオブジェクトへの参照で) にマップされます。参照されるオブジェクトは、階層関係と呼んでいるものを介して別のオブジェクトからも参照される必要があることに注意してください。

于 2013-09-07T18:58:05.030 に答える