2

JAX-WS 2 を使用すると、他の人が同様に話している問題が見られます。問題は、SOAP メッセージがハンドラー内で受信され、その SOAP メッセージが大きい場合 (たまたま大量のコンテンツを含むインライン SOAP 本文要素が原因であるか、MTOM 添付ファイルが原因であるかに関係なく)、危険なほど簡単に取得できることです。 OutOfMemory エラー。

その理由は、getMessage() の呼び出しが、ネットワーク上の SOAP メッセージ全体を読み取り、ネットワーク上にあったものを表すオブジェクトを作成する一連のイベントを開始するように見えるためです。

例えば:

...
public boolean handleMessage(SOAPMessageContext context)
{
    // for a large message, this will cause an OutOfMemoryError
    System.out.println( context.getMessage().countAttachments() );
...

私の質問は次のとおりです。これに対処するための既知のメカニズム/回避策はありますか? 具体的には、添付ファイル (たとえば MTOM の場合) も強制的にバキュームすることなく、SOAP メッセージの SOAP 部分にアクセスできれば便利です。

4

4 に答える 4