我正在尝试创建一个简单的SOAP消息以从客户端发送,但似乎无法更改信封中“soap”命名空间的URI。
下面是SOAP头应该看起来像的内容:
请注意“应该是”部分和实际部分的xmlns:soap URI之间的差异。
如果我将
我猜可能与调用的函数是
编辑:我刚刚意识到
这是我的第一篇帖子,如果我问了已经解决的问题,我很抱歉,但我已经搜索了一些相关的内容,大多数都是与更改命名空间有关(例如从SOAP-ENV(默认命名空间)到soap),而不是URI本身。提前致谢。
-M
下面是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:soap URI之间的差异。
如果我将
addNamespaceDeclaration
调用的第一个参数从“soap”更改为“soapy”,则会得到以下信封:<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”的一部分。有什么澄清吗?这是我的第一篇帖子,如果我问了已经解决的问题,我很抱歉,但我已经搜索了一些相关的内容,大多数都是与更改命名空间有关(例如从SOAP-ENV(默认命名空间)到soap),而不是URI本身。提前致谢。
-M
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:Header/> ... </env:Envelope>
我真的需要信封与我最初发布的内容匹配 - 有其他建议吗?也许我只需要构建消息,因为MessageFactory支持的两个协议都不太对... - MandMenv
或soap
)没有语义意义,它只是引用命名空间的快捷方式(例如http://www.w3.org/2003/05/soap-envelope
)。 - erikxivSOAPMessage
使用起来快捷而且方便,但它似乎不太灵活。最终,我选择使用Document
来满足我的需求 - 它不够快,但它在结构样式方面提供了更多控制权(至少在我的经验中是这样)。我相信,如果我正在与常规的 SOAP 服务通信,那么这就是正确的答案,所以我将标记它为如此(一旦我达到15个声望分:P)。 - MandM