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 要素「メッセージ」からインスタンス化されたメッセージが収集され、アダプターが入力のメッセージ属性からメッセージを非整列化しようとしたときに検索されます。動作に近づきましたが、入力クラスに対してアダプターを起動できません。
何か案は?