【问题标题】:Creating a SOAPMessage from String XML of Entire SOAP Message从整个 SOAP 消息的字符串 XML 创建 SOAPMessage
【发布时间】:2012-11-01 15:33:18
【问题描述】:

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

【问题讨论】:

  • 可以使用java.xml.soap包创建SOAP消息

标签: java web-services soap


【解决方案1】:

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

为简洁起见,这是一个简化的示例。在应用程序代码中,可以通过将其提取到字段/常量、指定所需的 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;
}

【讨论】:

  • 您能否详细说明您的答案?谢谢。
  • 添加了更多解释,为简洁起见保持代码不变。
【解决方案2】:

我分两步完成。先创建一个 DOM Document,然后从 Document 中创建 SOAPMessage。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 2012-11-07
    • 2019-05-11
    • 2016-09-17
    相关资源
    最近更新 更多