gpt4 book ai didi

Java SoapMessage 添加空命名空间

转载 作者:行者123 更新时间:2023-12-04 16:56:49 25 4
gpt4 key购买 nike

我正在调用第三方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=""?
谢谢

最佳答案

不幸的是,似乎不可能以某种方式强制显示一个空的 namespace .另见 java docs for QNametoString()功能:

The commonly accepted way of representing a QName as a String wasdefined by James Clark. Although this is not a standard specification,it is in common use, e.g. Transformer.setParameter(String name, Objectvalue). This implementation represents a QName as: "{" + Namespace URI+ "}" + local part. If the Namespace URI .equals(XMLConstants.NULL_NS_URI), only the local part is returned. Anappropriate use of this method is for debugging or logging for humanconsumption.

NULL_NS_URI另一方面是在 java docs for XMLConstants 中定义的作为:

Namespace URI to use to represent that there is no Namespace.Defined by the Namespace specification to be "".


所以这是设计使然。也许你可以以某种方式配置第三方soap接受空 namespaces ?否则可能检查空 namesspaces并使用虚拟或默认 namespace可以做到这一点。

关于Java SoapMessage 添加空命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70191727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com