如果标签上没有 ns2:,则无法读取 SOAP 信息。为什么?
Can't read the SOAP information without the ns2: on the tag. Why?
我正在尝试从 SOAP 调用中接收一些信息。我的端点调用成功,但是我的类里面的信息是null
。我只有把<XYZFullDesc
/<order_no>
改成<ns2:XYZFullDesc
/<ns2:order_no>
才能收到信息,但是我需要收到XML 没有任何变化.
我的 Soap 服务需要接收的整个 XML:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header/>
<S:Body>
<ns2:publishXYZFullModifyUsingXYZFullDesc xmlns:ns2="http://www.oracle.com/retail/igsla/integration/services/XYZFullPublishingService/v1">
<XYZFullDesc xmlns="http://www.oracle.com/retail/integration/base/bo/XYZFullDesc/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<order_no>2445460</order_no>
</XYZFullDesc>
</ns2:publishXYZFullModifyUsingXYZFullDesc>
</S:Body>
</S:Envelope>
我现在的XSD是:
<s:schema xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.oracle.com/retail/igsla/integration/services/XYZFullPublishingService/v1"
targetNamespace="http://www.oracle.com/retail/igsla/integration/services/XYZFullPublishingService/v1"
elementFormDefault="qualified">
<s:element name="publishXYZFullModifyUsingXYZFullDesc">
<s:complexType>
<s:sequence>
<s:element name="XYZFullDesc" type="tns:XYZFullDesc"/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="XYZFullDesc">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="order_no" type="s:string"/>
</s:sequence>
</s:complexType>
</s:schema>
我的Spring端点:
private static final String NAMESPACE_URI = "http://www.oracle.com/retail/igsla/integration/services/XYZFullPublishingService/v1";
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "publishXYZFullModifyUsingXYZFullDesc")
@ResponsePayload
public void receberPedidoRequest(@RequestPayload PublishXYZFullModifyUsingXYZFullDesc request) {
// code...
}
那么如何用 ns2
的 presence/absence 来解释这种行为呢?上面的XML不做任何改动怎么读?
我最终得到了以下解决方案。
因为我想在同一个架构上有两个名称空间,以便理解阅读相关主题,import
在我的 XSD 上是必需的。我最初的想法是设置不同的命名空间,但我只能为PublishXYZFullModifyUsingXYZFullDesc
设置一个命名空间,并使XYZFullDesc
的命名空间被忽略(不为空,什么是无效的),使用。
主要XSD:
<s:schema xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:po="http://www.oracle.com/retail/integration/base/bo/XYZFullDesc/v1"
targetNamespace="http://www.oracle.com/retail/abcd/integration/services/XYZFullPublishingService/v1"
elementFormDefault="qualified">
<s:import schemaLocation="po.xsd"
namespace="http://www.oracle.com/retail/integration/base/bo/XYZFullDesc/v1" />
<s:element name="publishXYZFullModifyUsingXYZFullDesc">
<s:complexType>
<s:sequence>
<s:element ref="po:XYZFullDesc"/>
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
导入的po.xsd:
<?xml version="1.0" encoding="utf-16" ?>
<s:schema targetNamespace="http://www.oracle.com/retail/integration/base/bo/XYZFullDesc/v1"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.oracle.com/retail/integration/base/bo/XYZFullDesc/v1"
elementFormDefault="qualified">
<s:element name="XYZFullDesc" type="XYZFullDesc"/>
<s:complexType name="XYZFullDesc">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="order_no" type="s:string"/>
</s:sequence>
</s:complexType>
</s:schema>
生成的Java个存根:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"xyzFullDesc"
})
@XmlRootElement(name = "publishXYZFullModifyUsingXYZFullDesc", namespace = "http://www.oracle.com/retail/abcd/integration/services/XYZFullPublishingService/v1")
public class PublishXYZFullModifyUsingXYZFullDesc {
@XmlElement(name = "XYZFullDesc", required = true) // no namespace, but works for me
protected XYZFullDesc xyzFullDesc;
}
我正在尝试从 SOAP 调用中接收一些信息。我的端点调用成功,但是我的类里面的信息是null
。我只有把<XYZFullDesc
/<order_no>
改成<ns2:XYZFullDesc
/<ns2:order_no>
才能收到信息,但是我需要收到XML 没有任何变化.
我的 Soap 服务需要接收的整个 XML:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header/>
<S:Body>
<ns2:publishXYZFullModifyUsingXYZFullDesc xmlns:ns2="http://www.oracle.com/retail/igsla/integration/services/XYZFullPublishingService/v1">
<XYZFullDesc xmlns="http://www.oracle.com/retail/integration/base/bo/XYZFullDesc/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<order_no>2445460</order_no>
</XYZFullDesc>
</ns2:publishXYZFullModifyUsingXYZFullDesc>
</S:Body>
</S:Envelope>
我现在的XSD是:
<s:schema xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.oracle.com/retail/igsla/integration/services/XYZFullPublishingService/v1"
targetNamespace="http://www.oracle.com/retail/igsla/integration/services/XYZFullPublishingService/v1"
elementFormDefault="qualified">
<s:element name="publishXYZFullModifyUsingXYZFullDesc">
<s:complexType>
<s:sequence>
<s:element name="XYZFullDesc" type="tns:XYZFullDesc"/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="XYZFullDesc">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="order_no" type="s:string"/>
</s:sequence>
</s:complexType>
</s:schema>
我的Spring端点:
private static final String NAMESPACE_URI = "http://www.oracle.com/retail/igsla/integration/services/XYZFullPublishingService/v1";
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "publishXYZFullModifyUsingXYZFullDesc")
@ResponsePayload
public void receberPedidoRequest(@RequestPayload PublishXYZFullModifyUsingXYZFullDesc request) {
// code...
}
那么如何用 ns2
的 presence/absence 来解释这种行为呢?上面的XML不做任何改动怎么读?
我最终得到了以下解决方案。
因为我想在同一个架构上有两个名称空间,以便理解阅读相关主题,import
在我的 XSD 上是必需的。我最初的想法是设置不同的命名空间,但我只能为PublishXYZFullModifyUsingXYZFullDesc
设置一个命名空间,并使XYZFullDesc
的命名空间被忽略(不为空,什么是无效的),使用
主要XSD:
<s:schema xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:po="http://www.oracle.com/retail/integration/base/bo/XYZFullDesc/v1"
targetNamespace="http://www.oracle.com/retail/abcd/integration/services/XYZFullPublishingService/v1"
elementFormDefault="qualified">
<s:import schemaLocation="po.xsd"
namespace="http://www.oracle.com/retail/integration/base/bo/XYZFullDesc/v1" />
<s:element name="publishXYZFullModifyUsingXYZFullDesc">
<s:complexType>
<s:sequence>
<s:element ref="po:XYZFullDesc"/>
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
导入的po.xsd:
<?xml version="1.0" encoding="utf-16" ?>
<s:schema targetNamespace="http://www.oracle.com/retail/integration/base/bo/XYZFullDesc/v1"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.oracle.com/retail/integration/base/bo/XYZFullDesc/v1"
elementFormDefault="qualified">
<s:element name="XYZFullDesc" type="XYZFullDesc"/>
<s:complexType name="XYZFullDesc">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="order_no" type="s:string"/>
</s:sequence>
</s:complexType>
</s:schema>
生成的Java个存根:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"xyzFullDesc"
})
@XmlRootElement(name = "publishXYZFullModifyUsingXYZFullDesc", namespace = "http://www.oracle.com/retail/abcd/integration/services/XYZFullPublishingService/v1")
public class PublishXYZFullModifyUsingXYZFullDesc {
@XmlElement(name = "XYZFullDesc", required = true) // no namespace, but works for me
protected XYZFullDesc xyzFullDesc;
}