2012-02-14 3 views
2

У меня возникла проблема, связанная с разбором SOAP-сообщения.
Это сообщение:Мыло с вложениями SAAJ

------=_Part_3_5438437.1107262647279 

Content-Type: text/xml 

<?xml version="1.0" encoding="UTF-8"?> 
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap-env:Body> 
    <content> 
    [...] 
    </content> 
    </soap-env:Body> 
</soap-env:Envelope> 

------=_Part_3_5438437.1107262647279 
Content-Type: text/plain; charset=ISO-8859-1 

text 
------=_Part_3_5438437.1107262647279-- 

Это отрывок из моего сервлете, которые должны получать и анализировать сообщения:

messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL); 
message = messageFactory.createMessage(mimeHeaders, req.getInputStream()); 

Чтобы проверить сервлет, я использую JMeter. Я поместил SOAP-сообщение в исходное тело HTTP-запроса. В заголовке я кладу это: Content-типа многослойную/связанные; граница = ---- = _ Part_3_5438437.1107262647279

Проблема № 1: кажется, что синтаксический анализ в SAAJ прослушивается, потому что отладка я вижу эту границу рассматривается как ---- null, как будто = может использоваться как токен и не более того. Поэтому я удалил его, как из тела, так и из заголовка. Это огромная проблема, потому что я не могу изменить ввод, который я получаю, но давайте притворимся, что смогу какое-то время. Итак, это переводит меня на проблему номер 2: теперь граница правильно разобрана, но я получаю это исключение: com.sun.xml.messaging.saaj.SOAPExceptionImpl: Плохой контент-тип для SOAP Часть: текст/обычная

Хорошо, я знаю, что знаю, как его решить, мне нужно добавить тип в заголовок Content-type: Тип содержимого multipart/related; type = text/xml; border = ----_ Part_3_5438437.1107262647279

Да, но, конечно, у меня есть еще один неприятный исключение: com.sun.xml.messaging.saaj.SOAPExceptionImpl: Невозможно усваивают сообщение в com.sun.xml.messaging.saaj.soap.MessageImpl.parseContentTy pe (MessageImpl.java:337)

Я использую saaj-impl-1.3.18 и saaj-api-1.3.3.
ява версия "1.6.0_29"
Java (TM) SE Runtime Environment (сборка 1.6.0_29-b11-402-11D50b)
Java HotSpot (TM) 64-разрядного сервера VM (сборка 20.4-b02-402, смешанный режим)

ответ

2

решение номер 2 проблемы лежит в пустой линии здесь:

------=_Part_3_5438437.1107262647279 

Content-Type: text/xml 

Он должен уйти, в противном случае предполагается, что тип контента на текст/равнину по умолчанию. Спасибо Брайану Джо http://twitter.com/brianwjoh за указание этого.
Для проблемы номер 1 я решил это просто, установив граничное значение между ". То же самое относится к типу.

type="text/xml";boundary="----=_Part_3_5438437.1107262647279" 
Смежные вопросы