2009-06-10 6 views
17

私はJAXBを使用して、XMLファイルをJavaオブジェクトの標準的なものにアンマーシャリングします。 JAXBがこれを完了したら、新しく作成されたオブジェクトでメソッドを呼び出すようにしたいと思います。XMLファイルをオブジェクトに非整列化した後、JAXBがメソッドを呼び出す方法を教えてください。

これを行うメカニズムはありますか?私はオブジェクトを、外部エンティティではなく、1つの場所で建設を続けるためにこれを好むだろう。

ありがとうございました。

+0

私はアンマーシャリングプロセスの後に自動的に呼び出されるメソッドが必要ですか? –

+0

はい。正確に。 JUnitの@BeforeClassのようなもので、構築とミューテータが呼び出された後にメソッドが呼び出されます。 – Elliot

答えて

7

は、非整列化が行われた後、あなたは Unmarshaller-Listener

を必要とするコードを実行できるようにするには、リスナーが プロパティが設定された後か前に呼び出された場合しかし、私は、よく分かりません。

注:リスナーがJAXB- 2.0以降で使用可能です(JDK- )

+0

Ivan、質問を再読してください。私は、コンストラクタとミューテータが呼び出された後にいくつかのコードを実行したい。 – Elliot

+0

私は私の質問を変更しました –

+0

ありがとう、イワン。私はUnmarshaller.Listenerへの参照を前に見つけていませんでした - 答えに感謝します。 – Elliot

12

Unmarshaller.Listenerに加えて、あなたのドメインモデルクラスに自分自身を次のメソッドを追加することができます。

  • public void beforeUnmarshal(Unmarshaller unmarshaller, Object parent)
  • public void afterUnmarshal(Unmarshaller unmarshaller, Object parent)

から: http://java.sun.com/javase/6/docs/api/javax/xml/bind/Unmarshaller.Listener.html

+0

メソッドのシグネチャが間違っているため、動作しません。最初のオブジェクトは "Unmarshaller"型でなければなりません。 – Robert

+0

@Robert - メソッドのシグネチャが修正されました。 –

26

あなたのオブジェクト定義に以下の方法を、簡単な追加することができます。これは、ONC

void afterUnmarshal(Unmarshaller u, Object parent) { 
    ... 
} 

と呼ばれます現在のオブジェクトは完全に非直列化されています。 ドキュメントを参照してくださいunmarshalling callbacks

関連する問題