1

docs のパターンを使用して MTOM アップロードを受け入れる Axis2 1.4.1 に基づく SOAP Web サービスがあります。

public class MTOMService {
    public void uploadFileUsingMTOM(OMElement element) throws Exception {
        OMText binaryNode = (OMText) (element.getFirstElement()).getFirstOMChild();
        DataHandler actualDH;
        actualDH = (DataHandler) binaryNode.getDataHandler();

        // consume data from DataHandler
        InputStream inputStream = actualDH.getInputStream();
    }
}

DataHandler からデータを複数回読み取る必要がある可能性があります。

        inputStream.close();
        // get second InputStream to consume same data from DataHandler again
        InputStream inputStream2 = actualDH.getInputStream();

これは簡単なテストで機能します。これは常に安全だと思いますか?

  • 標準の DataHandler または Axiom によって実装された特定の DataSources について、ドキュメントで決定的なものを見つけることができません (ただし、見逃している可能性があります)。
  • Axis 1.4.1 は、添付ファイルを次のいずれかとして表す Axiom 1.2.9 を使用します。
    • PartOnFile、再利用をサポートするメモリからディスクにスプールされ、SOAPリクエストが終了するまで(私は思う); 経由で読むFileAccessor
    • PartOnMemoryEnhanced、データを複数のbyte配列に格納するため、ガベージ コレクションまで再利用をサポートする必要があります。
  • 今後、Axiom の以降のバージョンでは、ParserInputStreamDataSourceさまざまな破壊的または非破壊的なBehavior列挙型をサポートする別のクラスが使用されますが、Axis トランクは指定しないため、Axiom はデフォルトBehavior.NON_DESTRUCTIVEで再読み取りを許可します。

しかし、これはすべてコードの大まかなスキャンによるものであり、すべてをよく知っているわけではないため、他のコードパスを見逃しているか、単に間違っている可能性があります.

Axis、またはここにある他のインターフェースのいずれかは、DataHandlers が複数回読み取れることを保証しますか? そうでない場合、Axis が添付ファイルを一度だけ読み取り専用モードで渡していることを検出して、最初の読み取りを自分でキャッシュできるようにする良いメカニズムはありますか? リクエストが MTOM かどうかで違いはありますか? ありがとう!

4

1 に答える 1