Java中的SOAPMessage克隆-错误的名称空间声明

时间:2018-09-24 21:26:33

标签: java soap clone

我有一个需要克隆的SOAPMessage,因为我想将其用作其他SOAPMessage实例的基础。这是SOAPMessage的结构:

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Header />
    <SOAP-ENV:Body>
        <QueryRequest xmlns="somenamespace">
            <QueryList day="2018-08-30" />
        </QueryRequest>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我读到here,克隆SOAPMessage的方式如下:

SOAPMessage soapMessage = .....
ByteArrayOutputStream stream = new ByteArrayOutputStream();
soapMessage.writeTo(stream);
String message = new String(stream.toByteArray(), "utf-8");         
InputStream inputStream = new 
ByteArrayInputStream(message.getBytes());
SOAPMessage clonedMsg = MessageFactory.newInstance().createMessage(null, inputStream);  

这几乎可行,但是结果是:

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Header />
    <SOAP-ENV:Body>
        <QueryRequest>
            <QueryList day="2018-08-30" xmlns="somenamespace"/>
        </QueryRequest>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

因此,基本上,它似乎已经更改了名称空间声明的位置。从理论上讲,我知道这没什么大不了,但是由于这个原因,我正在调用的服务器拒绝SOAP消息,因此我无法更改。问题出在.writeTo()方法之内,因为String已经在错误的节点上包含名称空间声明。

有没有办法使消息与以前完全相同?

谢谢。

0 个答案:

没有答案