Мыло с насадками SAAJ - PullRequest
       15

Мыло с насадками SAAJ

2 голосов
/ 14 февраля 2012

У меня проблема с анализом SOAP-сообщения.
Это сообщение:

------=_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--

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

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

Для тестирования сервлета я использую JMeter. Я поместил SOAP-сообщение в необработанное тело сообщения HTTP-запроса. В шапке я положил это: Тип содержимого multipart / related; border = ---- = _ Part_3_5438437.1107262647279

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

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

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

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

1 Ответ

2 голосов
/ 15 февраля 2012

Решение проблемы номер 2 заключается в пустой строке здесь:

------=_Part_3_5438437.1107262647279

Content-Type: text/xml

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

 type="text/xml";boundary="----=_Part_3_5438437.1107262647279"
...