提问人:Edward Gilmore 提问时间:12/2/2021 更新时间:12/7/2021 访问量:320
Java SoapMessage 添加空命名空间
Java SoapMessage add empty namespace
问:
我正在调用第三方 soap,其中每个元素都必须有一个命名空间。我正在从 Java 调用 .NET 服务。在某些元素中,我必须包含“http:/abc.com”。其他时候,我必须包括 xmlns:“”。例如;
<GetYears xmlns="http://example.com">
<oCar xmlns="">
<make xmlns="http://example.com">Ford</make>
<model xmlns="http://example.com">F250</make>
</oCar>
</GetYears>
我正在使用 javax.xml.soap.*
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
...
QName bodyName = new QName("http://example.com", "GetAircraftDueListItems");
SOAPElement soapBodyElement = soapBody.addBodyElement(bodyName);
QName qName = new QName("", "oCar");
SOAPElement carEement = soapBodyElement.addChildElement(qName);
默认情况下,这将产生以下输出,该输出被服务拒绝,因为 oCar 上缺少命名空间 “”。
<GetYears xmlns="http://example.com">
<oCar>
<make xmlns="http://example.com">Ford</make>
<model xmlns="http://example.com">F250</make>
</oCar>
</GetYears>
似乎忽略了空命名空间。有没有办法强制元素包含 xmlns=“”?
谢谢
答:
0赞
spcial
12/7/2021
#1
不幸的是,似乎不可能以某种方式强制显示一个空的.另请参阅 QName 的 java 文档,了解该函数:namespace
toString()
将 QName 表示为 String 的普遍接受的方法是 由詹姆斯·克拉克(James Clark)定义。虽然这不是标准规范, 它是常用的,例如 Transformer.setParameter(String name, Object 值)。此实现将 QName 表示为:“{” + 命名空间 URI + “}” + 本地部分。如果命名空间 URI .equals(XMLConstants.NULL_NS_URI),则仅返回本地部分。一 此方法的适当使用是为了调试或记录人工 消费。
NULL_NS_URI
另一方面,在 XMLConstants 的 java 文档中定义为:
命名空间 URI,用于表示没有命名空间。 由命名空间规范定义为“”。
所以这是设计使然。也许您可以以某种方式将第三方肥皂配置为接受空的?否则,也许检查空并使用虚拟或默认值就可以解决问题。namespaces
namesspaces
namespace
评论