我遇到与解析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请求的原始帖子主体中。 在标题中我把它: 内容类型multipart / related; boundary = ---- = _ Part_3_5438437.1107262647279
问题1:似乎SAAJ中的解析被窃听,因为调试我看到边界被视为---- null,好像=可以用作令牌而已。所以我从身体和头部都删除了它。这是一个很大的问题,因为我不能改变我收到的输入,但让我假装我可以暂时。 好吧,这让我转到第2个问题:现在边界被正确解析,但是我得到了这个例外: com.sun.xml.messaging.saaj.SOAPExceptionImpl:SOAP部件的错误内容类型:text / plain
好的,我相信我知道如何解决它,我必须在Content-type标头中添加类型: 内容类型multipart / related; type = text / xml; boundary = ----_ Part_3_5438437.1107262647279
是的,但我当然有另一个令人讨厌的异常: com.sun.xml.messaging.saaj.SOAPExceptionImpl:无法内化消息 在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位服务器VM(版本20.4-b02-402,混合模式)
答案 0 :(得分:2)
问题2的解决方案在于空行:
------=_Part_3_5438437.1107262647279
Content-Type: text/xml
它必须消失,否则默认情况下假定内容类型为text / plain。 感谢Brian Joh http://twitter.com/brianwjoh指出这一点 对于问题1,我只是通过将边界值置于“之间来解决它。”同样适用于类型。
type="text/xml";boundary="----=_Part_3_5438437.1107262647279"