我有一个与解析 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 servlet 的摘录,它应该接收并解析消息:
messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
message = messageFactory.createMessage(mimeHeaders, req.getInputStream());
为了测试 servlet,我使用了 JMeter。我将 SOAP 消息放在 HTTP 请求的原始帖子正文中。在标题中我放了这个: Content-type multipart/related;boundary=----=_Part_3_5438437.1107262647279
问题1:似乎SAAJ中的解析有问题,因为调试我看到边界被视为----null,好像=可以用作标记,仅此而已。所以我从正文和标题中删除了它。这是一个很大的问题,因为我无法更改收到的输入,但让我们假装我可以一段时间。好的,这使我前进到问题 2:现在边界已正确解析,但我得到了这个异常:com.sun.xml.messaging.saaj.SOAPExceptionImpl: Bad Content-Type for SOAP Part : text/plain
好的,我相信我知道怎么解决了,我要在Content-type头中添加类型:Content-type multipart/related;type=text/xml;boundary=----_Part_3_5438437.1107262647279
是的,但当然我还有另一个讨厌的例外:com.sun.xml.messaging.saaj.SOAPExceptionImpl: Unable to internalize message 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 Runtime Environment (build 1.6.0_29-b11-402-11D50b)
Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02-402, 混合模式)