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=""?
谢谢
不幸的是,似乎无法以某种方式强制显示空 namespace
。另请参阅 toString()
函数的 java docs for QName:
The commonly accepted way of representing a QName as a String was
defined by James Clark. Although this is not a standard specification,
it is in common use, e.g. Transformer.setParameter(String name, Object
value). 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. An
appropriate use of this method is for debugging or logging for human
consumption.
另一方面,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
可以解决问题。
我正在调用第三方 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
。另请参阅 toString()
函数的 java docs for QName:
另一方面,The commonly accepted way of representing a QName as a String was defined by James Clark. Although this is not a standard specification, it is in common use, e.g. Transformer.setParameter(String name, Object value). 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. An appropriate use of this method is for debugging or logging for human consumption.
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
可以解决问题。