我如何从整个SOAP消息的字符串表示形式创建SOAPMessage?我尝试这样做的原因是,我有一个用于Web服务的SOAP处理程序,在那里我捕获SOAP消息。 我需要在Web服务中保留整个SOAP消息以发送到另一个组件。 目前,Web服务会剥离SOAP包络信息。 所以在处理程序中,我复制了SOAP消息,对其进行了Base64编码,删除了原始内容,并添加了编码的字符串。 在Web服务中,我正在尝试解码正文(编码的SOAP消息)并将其重构为SOAPMessage以发送给另一个组件。
我如何从整个SOAP消息的字符串表示形式创建SOAPMessage?我尝试这样做的原因是,我有一个用于Web服务的SOAP处理程序,在那里我捕获SOAP消息。 我需要在Web服务中保留整个SOAP消息以发送到另一个组件。 目前,Web服务会剥离SOAP包络信息。 所以在处理程序中,我复制了SOAP消息,对其进行了Base64编码,删除了原始内容,并添加了编码的字符串。 在Web服务中,我正在尝试解码正文(编码的SOAP消息)并将其重构为SOAPMessage以发送给另一个组件。
根据Javadoc的说明, javax.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;
}