要素名は同じで名前空間が異なる2つのXMLスキーマがあります。xjcを使用すると、コンパイラは同じクラスパスと要素に要素を割り当てます。以下に示すように、根本的な問題は、先頭に数字が付いたXMLスキーマ名前空間の処理にあります。具体的には1.0と1.1です。XJCは、これらの異なるURIを同じクラスパスにコンパイルしています。具体的には_1。これにより、同じクラスパスとの衝突が発生しています。
com.companyabc.namespaces.eda.process._1.TheChangeType
1.0を_1_0にバインドし、1.1を_1_1にバインドするためのbindings.xjbの構文は何ですか?
ありがとう!!!
XMLスキーマ1: http: //namespaces.companyABC.com/EDA/Process/1.0/TheChange
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:p10="http://namespaces.companyABC.com/EDA/Process/1.0"
targetNamespace="http://namespaces.companyABC.com/EDA/Process/1.0"
elementFormDefault="qualified">
<xs:element name="TheChange" type="p10:TheChangeType" />
<xs:complexType name="TheChangeType">
<xs:sequence>
<xs:element name="Field1" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
XMLスキーマ2: http: //namespaces.companyABC.com/EDA/Process/1.1/TheChange
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:p11="http://namespaces.companyABC.com/EDA/Process/1.1"
targetNamespace="http://namespaces.companyABC.com/EDA/Process/1.1"
elementFormDefault="qualified">
<xs:element name="TheChange" type="p11:TheChangeType" />
<xs:complexType name="TheChangeType">
<xs:sequence>
<xs:element name="Field1" type="xs:string" />
<xs:element name="Field2" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
エラー:
[ant:xjc] [ERROR] A class/interface with the same name "com.companyabc.namespaces.eda.process._1.TheChangeType" is already in use. Use a class customization to resolve this conflict.
[ant:xjc] line 3 of file:/D:/source/1.0/TheChange.xsd
これは、XSDスキーマ注釈を使用するソリューションです。ただし、ソリューションは、bindings.xjbとアノテーションのバインディングパターンとして実装する必要があります。注釈を付けるには、各スキーマに注釈を付ける必要があります。これは問題です。
<xsd:annotation>
<xsd:appinfo>
<jaxb:schemaBindings>
<jaxb:package name="com.companyabc.namespaces.eda.process._1_0" />
</jaxb:schemaBindings>
</xsd:appinfo>
</xsd:annotation>
<jaxb:package name="com.companyabc.namespaces.eda.process._1_1" />
このアノテーションは、bindings.xjbのバインディングパターンとしてどのように実装されていますか?