我试图创建一个简单的SOAP消息从客户端发送,但我(看起来)无法更改信封中“soap”命名空间的URI。
这就是肥皂头应该是这样的:
... 所以我有以下代码:
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/");但是,当我在发送之前打印消息时,以下是我的信封:
注意“应该”部分中的xmlns:soap的URI和实际的区别。
如果我将addNamespaceDeclaration调用的第一个参数更改为“soapy”而不是“soap”,这是我得到的以下信封:
我猜这可能与调用addNamespaceDeclaration而不是像changeNamespaceDeclaration这样的事实有关,并且由于名称空间已经存在,所以它被忽略,但是我找不到有效的东西(我已经尝试了setAttributeNS) 。
编辑:我只是意识到setAttributeNS是愚蠢的,因为这是改变命名空间,而不是URI。
编辑再次:我有点困惑,因为我继续搜索,有时我会看到命名为soap:"Namespace",所以从这个意义上说,我确实想改变命名空间......但我认为命名空间是“肥皂”部分。任何澄清?
这是我的第一篇文章,所以如果我提出了一些已经解决的问题,我表示歉意,但是我已经搜索过,而且我发现的大部分内容都与更改命名空间有关(比如SOAP-ENV,这是默认命名空间,肥皂)而不是URI本身。提前致谢。
-M