我正在开发基于 CXF 的 web 服务。其中一个请求是客户端应该能够上传可选的 PDF 文件作为消息的一部分。这很简单:
我已将它与 getter 和 setter 添加到我的传输对象中:
@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() 不为空
- pdf2.getInputStream() 包含一些数据。我想跳过解析输入流并寻找 PDF 签名。因为将输入流转发到所需的输出流(写入文件)要容易得多
- 我在 DataHandler 或 DataSource (pdf2.getDataSource() ) API 中没有找到任何合适的方法或字段来确定文件是否存在。我在调试中看到空的 DataHandler 包含长度为 9 的 DataSource,这比正确的 PDF 文件要少得多。不幸的是,长度属性根本无法访问。
知道如何确定文件是否已发送吗?