0

jax-ws cxf を使用して、SOAP インターフェイスからドキュメントをロードしています。SoapUI (xop/multipart) を介して正しいドキュメントを取得できます。残念ながら、コードを介して添付ファイルを読み込もうとすると、CachedOutputStream〜 210kb を超えるファイルの が空になります。

私が試したこと

  • WebServiceClient の MTOMFeature を有効にする
  • JVM引数をいじってCachedOutputStream.ThresholdCachedOutputStream.MaxSize
  • 異なるバージョンの apache-cxf (3.2.1または3.1.14)を使用する

デバッグ時:

PhaseInterceptorChain#doIntercept添付ファイルをロードしてメッセージに追加するAttachmentInInterceptor(at ) を使用します。currentInterceptor.handleMessage(message);LazyAttachmentCollection

  1. 幸せなケース: ドキュメントは CachedOutputStream にロードされ、for ループの後に利用可能になります。

  2. エラーケース (ファイルが大きすぎますか?): ドキュメントは currentInterceptor.handleMessage が呼び出された直後に利用できますが、ループが終了すると消えます

    ただし、上記のどちらの場合でも、正しい tmp ファイルがディスクに保存されます (ドキュメントのコンテンツとまったく同じです)。さらに、ループが終了した場合でも、両方のケースでそのファイルをロードできます。((org.apache.cxf.attachment.LazyAttachmentCollection)(message.getAttachments())).loadAll();

4

1 に答える 1