2012-11-01 30 views
10

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

+0

可以使用java.xml.soap包创建一条SOAP消息 – ChadNC

回答

2

我这样做是分两步进行的。首先创建一个DOM Document,然后从Document创建SOAPMessage。

50

As per Javadoc,javax.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; 
} 
+0

您能否详细说明您的答案?谢谢。 –

+1

增加了一些更多的解释,代码只是为了简洁起见。 – tiurin