CXF に基づいて Web サービスを開発しています。要求の 1 つは、クライアントがオプションの PDF ファイルをメッセージの一部としてアップロードできるようにすることです。これはかなり些細なことでした:
これをゲッターとセッターで転送オブジェクトに追加しました:
@XmlMimeType("application/octet-stream")
@XmlElement(name = "InvoicePdf", required = false)
private DataHandler invoicePdf = null;
MTOM のサポートも有効にしました。
Endpoint endpoint = Endpoint.publish("/myWs", new WsImpl(getServletContext()));
SOAPBinding binding = (SOAPBinding) endpoint.getBinding();
binding.setMTOMEnabled(true);
そして使用法:
DataHandler pdf2 = p_invoice.getInvoicePdf();
//pdf2.getInputStream();
//pdf2.writeTo(outputstream);
すべてがうまく機能します。ファイルを受信して処理できます。ただし、オプションであるため、クライアントがファイルをアップロードしない場合があります。問題は、クライアントがファイルを送信していなくても、私はそれに気付かないことです。
- pdf2 はヌルではありません
- pdf2.getInputStream() は null ではありません
- pdf2.getInputStream() にはいくつかのデータが含まれています。入力ストリームの解析と PDF 署名の検索をスキップしたいと思います。入力ストリームを目的の出力ストリームに転送する方がはるかに簡単であるため (ファイルへの書き込み)
- DataHandler または DataSource (pdf2.getDataSource() ) API で、ファイルの存在を判断するための適切なメソッドまたはフィールドが見つかりませんでした。デバッグで、空の DataHandler に長さが 9 の DataSource が含まれていることがわかります。これは、正しい PDF ファイルよりもはるかに少ない値です。残念ながら、長さのプロパティにはまったくアクセスできません。
ファイルが送信されたかどうかを判断する方法はありますか?