从整个SOAP消息的String XML创建SOAPMessage

时间:2012-11-01 15:33:18

标签: java web-services soap

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

2 个答案:

答案 0 :(得分:53)

As per Javadocjavax.xml.soap.MessageFactory创建方法预先填充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;
}

答案 1 :(得分:1)

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