11

呵呵,我可以从整个 SOAP 消息的字符串表示中创建一个 SOAPMessage 吗?我尝试这样做的原因是我有一个用于捕获 SOAP 消息的 Web 服务的 SOAP 处理程序。我需要将整个 SOAP 消息保存在 Web 服务中以发送到另一个组件。现在,Web 服务剥离了 SOAP 信封信息。因此,在处理程序中,我制作了 SOAP 消息的副本,对其进行了 base64 编码,删除了原始正文内容,并添加了编码字符串。在 Web 服务中,我试图解码正文(编码的 SOAP 消息)并将其重构为 SOAPMessage 以发送到另一个组件。

4

2 回答 2

57

根据 Javadocjavax.xml.soap.MessageFactory创建方法用必要的对象(如信封、正文、标头)预先填充 SOAP 消息,以确保正确形成消息。但是,createMessage接受消息数据的唯一方法变体将其作为InputStream. 因此需要String进行InputStream转换,即从字符串字节创建一个新的字节流。

为简洁起见,这是一个简化的示例。在应用程序代码中,可以通过将其提取到字段/常量、指定所需的 SOAP 协议版本、不同的字符集等来避免在每个方法调用上创建工厂。

private SOAPMessage getSoapMessageFromString(String xml) throws SOAPException, IOException {
    MessageFactory factory = MessageFactory.newInstance();
    SOAPMessage message = factory.createMessage(new MimeHeaders(), new ByteArrayInputStream(xml.getBytes(Charset.forName("UTF-8"))));
    return message;
}
于 2013-05-27T14:44:05.623 回答
1

我分两步做到了这一点。首先创建了一个 DOM Document,然后从 Document 中创建了 SOAPMessage。

于 2012-11-07T21:50:38.100 回答