2013-08-20 5 views
0

Я занимаюсь разработкой 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 недоступно.

Любая идея, как определить, был ли отправлен файл или нет?

ответ

0

Решение состоит в том, чтобы пропустить тег xml для этого вложения в сообщении SOAP. Поэтому моя ошибка заключалась в отправке пустой теги:

<InvoicePdf></InvoicePdf> 

Тогда вы получите поведение, о котором идет речь. Однако, если вы полностью пропустите этот тег, DataHandel имеет значение null, поэтому я могу отличить, был ли отправлен файл или нет.

 Смежные вопросы

  • Нет связанных вопросов^_^