1

私は完全に立ち往生しており、あなたの助けが必要です... SOAP メッセージ内でバイナリ ファイル (base64 でエンコードされた jpg 画像) を送信するサービスのために、jaxb 2.x を使用して Web サービス スタブを作成しました。すべてが正常に機能し、画像を受信して​​表示することができましたが、Eclipse RCP アプリを製品にエクスポートしようとすると、すぐに LinkageErrors (いつものように javax.xml.namespace.QName など) が発生しました。

その問題を解決して axis2 を「再バンドル」すると、すべて正常に動作するようになりました - スタブ内のバイナリ ファイル部分の解析を除いて、例外 (予期しない要素) が発生します。

よく見ると、axis2-jaxb で生成されたスタブで使用されているリーダー (OMStAXWrapper) が base64 テキスト全体を読み取るのではなく、最初の 10000 バイトのみを読み取ることが明らかになりました。次に、要素の正しい末尾が見つからず、例外がスローされます。

前に述べたように、これは最初は発生しなかったので、単なるパラメーターまたはオプションであることを願っています。すべてのヘルプまたはヒントに感謝します!

編集 JAXB ではなく、JAXWS と wsimport を使用して wsdl ファイルのスタブを作成しました...

4

1 に答える 1

1

少し背景として、OMStAXWrapperはAxiomの一部です。Axiomは、Axis2がSAAJの代わりに使用するWebサービス用のAxis2のカスタムストリーミングユーティリティです。Axisでの以前の経験が何であれ、それがバグだったとしても、私はそれほど驚かないでしょう。

大きなバイナリをSOAP経由で送信したい場合、現時点でこれに最適なテクノロジーはMTOMのようです( Axis2での使用方法についてはこちらを参照してください)。これにより、バイナリ表現をより適切に最適化でき、問題が解決する可能性があります。ただし、クライアントとサーバーの両方がMTOMを話すことができる必要があるため、MTOMを選択できない場合があります。

あるいは、Axiomを使用する代わりに標準のSAAJAPIを使用するようにAxis2を説得することが可能であるはずです。SAAJは低速ですが、バグが少ないはずです。

私の最後の提案は、クライアント用のAxis2を放棄し、より軽量なものを使用することです。Spring-WSは、非常に優れたクライアントAPIを提供します。これは、現在、リモートWebサービスと通信するための私の選択ツールです。AxiomとSAAJ、およびMTOMをサポートし、十分に軽量であるため、問題が発生した理由を簡単に見つけることができます。

于 2009-07-09T18:26:23.000 に答える