Я занимаюсь разработкой webservice на основе CXF. Один из запросов заключается в том, что клиент должен иметь возможность загружать дополнительный файл PDF в качестве части сообщения. Это было довольно тривиально:Как проверить, нет ли вложений MTOM
Я добавил это с геттер и сеттер для моего объекта передачи:
@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. Так как намного легче переслать inputstrem в желаемый outpustream (записать в файл)
- Я не нашел в DataHandler или DataSource (pdf2.getDataSource()) API любой подходящий метод или поле для определения существования файла. Я вижу в отладке, что пустой DataHandler содержит DataSource, длина которого равна 9, что намного меньше, чем правильный PDF-файл. К сожалению, свойство length недоступно.
Любая идея, как определить, был ли отправлен файл или нет?