jax-ws cxf を使用して、SOAP インターフェイスからドキュメントをロードしています。SoapUI (xop/multipart) を介して正しいドキュメントを取得できます。残念ながら、コードを介して添付ファイルを読み込もうとすると、CachedOutputStream
〜 210kb を超えるファイルの が空になります。
私が試したこと:
- WebServiceClient の MTOMFeature を有効にする
- JVM引数をいじって
CachedOutputStream.Threshold
、CachedOutputStream.MaxSize
- 異なるバージョンの apache-cxf (
3.2.1
または3.1.14
)を使用する
デバッグ時:
PhaseInterceptorChain#doIntercept
添付ファイルをロードしてメッセージに追加するAttachmentInInterceptor
(at ) を使用します。currentInterceptor.handleMessage(message);
LazyAttachmentCollection
幸せなケース: ドキュメントは CachedOutputStream にロードされ、for ループの後に利用可能になります。
エラーケース (ファイルが大きすぎますか?): ドキュメントは currentInterceptor.handleMessage が呼び出された直後に利用できますが、ループが終了すると消えます
ただし、上記のどちらの場合でも、正しい tmp ファイルがディスクに保存されます (ドキュメントのコンテンツとまったく同じです)。さらに、ループが終了した場合でも、両方のケースでそのファイルをロードできます。
((org.apache.cxf.attachment.LazyAttachmentCollection)(message.getAttachments())).loadAll();