肥皂与附件SAAJ

时间:2012-02-14 18:50:05

标签: java soap saaj

我遇到与解析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,混合模式)

1 个答案:

答案 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"