サーバー側でJAX-WSを使用してWebサービスの作業を完了していました。私が使用したドメインオブジェクトの多くでは、@XmlRootElement
JAXBを使用してXMLファイルをサービスにアンマーシャリングするのを容易にしました。すべてうまくいき、出力はSoapUIを使用して期待したものでした。
ただし、wsimportを使用してクライアントを作成したとき(他の開発者にとって便利なDAOとして)、クライアント統合テストクラスでNullPointerExceptionsが発生し始めました。
Webサービスへの呼び出しは正しく機能し、クライアントは応答を受信しましたが、より複雑なオブジェクトはnullでした。文字列のような単純な属性は、使用可能なデータでいっぱいを返していましたが、より大きなオブジェクトは返していませんでした。
単純な文字列を使用してサービスを再作成し、より複雑なオブジェクトに移行することを繰り返した結果、クライアントがサーバーで宣言されたオブジェクトを受け取ったときに@XmlRootElement
、これらがnullのオブジェクトであることがわかりました。サーバーオブジェクトに注釈がない場合@XmlRootElement
、クライアントはその複雑な栄光のすべてですべてのデータを受信しました。
当初、この欠如は@XmlRootElement
サーバー上のデータのマーシャリングを解除することに適合しましたが、この回答は私を助けてくれました。
@XmlRootElement
そのため、 (サーバー上の!)アノテーションが原因で、wsimportクライアントがWebサービス応答のアンマーシャリングにサイレントに失敗するという現象が懸念されます。この場合、私は両方の側を制御し、それについて何かをすることができました。しかし、サーバーを制御できない場合はどうなりますか?wsimportで生成されたコードだけでこれをどのように解決できますか?