Я получаю следующее решение.
Так как я хотел бы иметь два пространства имен в одной и той же схеме, чтобы понять чтение по теме, import
было необходимо на моем XSD. Моя первоначальная идея заключалась в том, чтобы установить разные пространства имен, но я мог установить пространство имен только для PublishXYZFullModifyUsingXYZFullDesc
и заставить игнорировать пространство имен для XYZFullDesc
(не пустое, что считается недействительным), используя ref .
Основной 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;
}