У меня проблема с анализом 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, смешанный режим)