使用Java的SOAPMessage无法更改肥皂URI在信封(Cannot change soap

2019-06-23 21:42发布

我试图创建一个简单的SOAP消息从客户端发送,但我(似乎)无法改变信封中的“肥皂”的命名空间的URI。

这是SOAP头看起来应该像:

<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope/"  soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/"> ... </soap:Envelope>

所以,我有以下代码:

    final SOAPMessage sm = MessageFactory.newInstance().createMessage();

    final SOAPPart sp = sm.getSOAPPart();
    final SOAPEnvelope se = sp.getEnvelope();
    final SOAPHeader sh = se.getHeader();
    final SOAPBody sb = se.getBody();

    se.removeNamespaceDeclaration(se.getPrefix());
    se.addNamespaceDeclaration("soap", "http://www.w3.org/2001/12/soap-envelope");
    se.setPrefix("soap");
    sb.setPrefix("soap");
    sh.setPrefix("soap");
    se.setEncodingStyle("http://www.w3.org/2001/12/soap-encoding/");

然而,当我打印在发送之前的消息,下面是我的信封:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/">

注意在XMLNS的URI的区别了:“应该成为的”部分和实际的肥皂。

如果我改变的第一个参数addNamespaceDeclaration调用“肥皂水”,而不是“肥皂”,这是下面的信封,我得到:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapy="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/">

我猜它可能有一些做的事实,呼叫addNamespaceDeclaration而不是像changeNamespaceDeclaration ,并且它被忽略考虑命名空间已经存在,但我无法找到的东西,工作(我已经尝试过setAttributeNS ) 。

编辑:我刚刚意识到setAttributeNS是愚蠢的,因为这是改变了命名空间,而不是URI。 再次编辑:我有点困惑,因为我继续寻找我有时看到的命名云soap:"Namespace" ,所以在这个意义上,我确实想更改命名空间......但我以为命名空间是“肥皂”的一部分。 任何澄清?

这是我的第一篇文章,所以我很抱歉,如果我要求的东西已经得到解决,但我已经搜查各地,大部分我所发现的有关更改名称空间(如从SOAP-ENV,这是默认的命名空间,肥皂),而不是URI本身。 提前致谢。

-M

Answer 1:

一般来说,你不应该需要手动修改SOAP命名空间。 什么你可能想实现的是创建一个SOAP 1.2消息(具有不同的命名空间比SOAP 1.1)。 尝试删除从您的代码命名空间的所有改变线和第一线更改为

final SOAPMessage sm = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage();

如果你真的需要指定要使用哪个前缀,该代码似乎工作:

SOAPMessage sm = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage();
sm.getSOAPPart().getEnvelope().setPrefix("soap");
sm.getSOAPPart().getEnvelope().removeNamespaceDeclaration("env");
sm.getSOAPHeader().setPrefix("soap");
sm.getSOAPBody().setPrefix("soap");


文章来源: Cannot change soap URI in envelope using java SoapMessage
标签: java uri