JAXBのアンマーシャリングに関する問題が発生しています。私はそれが適切にコード化されていると思うが、私のアンマーシャリングされたオブジェクトはnullパラメータで返されます。したがって、アンマーシャリングするとき、JAXBは期待している適切なXML構造を見ていないと仮定しています。しかし、私はエラーメッセージや例外がスローされることはありません。JAXBアンマーシャリングのデバッグ方法
アンマーシャリングプロセスを実行して、オブジェクトにデータを入力できない場所と理由を確認してください。
実際のアンマーシャル・コードはかなり平凡です:
public <T> T unmarshall(Node node, Class<T> clazz) throws JAXBException {
// Creating an unmarshaller
Unmarshaller u = JAXBContext.newInstance(clazz).createUnmarshaller();
// unmarshal an instance node into Java content
return clazz.cast(u.unmarshal(node, clazz).getValue());
}
しかし、私はそれを呼び出すとき、私はタイプclazzの目的は、(予想通り)返されたが、未実装得ます。
アンマーシャリングしようとしているDOMオブジェクトは、サードパーティのAPIによって生成されます。私はアンマーシャリングでいくつかの非常に奇妙な振る舞いに陥ってしまったので、そのプロセスをデバッグできるようにしたいのです。たとえば、DOMオブジェクト内のサブ要素(つまり、doc.getByElementName( "myElement")。item(0))を非整列化しようとすると、静かに失敗します。しかし、文書を文字列に変換し、それを新しい文書に再インポートすると、それはうまく変換されます。
この問題をデバッグする方法がわからなくなってしまっています。
ありがとうございました!あなたが取ることができる
エリック
感謝。前にそれを試みたことはありません。それはショットを与えるだろう。しかし、私がXSDからJAXBクラスを生成したことを前提とすると、それは逆に進んでいるようです。しかし、私はまだそれが優雅な解決策であるとは思わない。 JAXBは完全なブラックボックスのように動作しており、何が何をしているのかを示すインジケータがなくても、なぜ失敗しているのか分かりません。私はそれが何をしているのか、問題がどこにあるのかを「見る」ことができる方法を見つけたいと思っています。 –
提案していただきありがとうございます。私はバリデーターを使ってみましたが、それは私が理解していないエラーを投げています。私はそれのための別のスレッドを作成しました(http://stackoverflow.com/questions/8761930/jaxb-unmarshal-validation-throws-cvc-elt-1-cannot-find-the-declaration-of-eleme)。あなたが何か提案することができれば、私はそれを高く評価します。ありがとう。 –
確かに、それはこれまでに私が見つけた最良のアプローチです。[その他のアプローチ](http://stackoverflow.com/a/10227684/1864054)は、単に良い結果や生産的な結果を得られないからです。しかし、テストメッセージを生成するために 'soapUI'を使用することをお勧めします。なぜなら、(偽の)データ値を持たないメッセージスケルトンを生成するからです。代わりに、AltovaのXMLSpyは不思議に動作します。あなたがする必要があるのは、 'SOAP'メニューの'新しいSOAPリクエストの作成 '項目を選択するだけです。完全に動いている(偽の)メッセージを得ました。 – Withheld