xsdスキームからxjcを介して自動クラス生成を使用する場合のJAXB。
alpha.xsd
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="alpha">
<xs:complexType>
<xs:sequence>
<xs:element name="persons">
<xs:complexType>
<xs:sequence>
<xs:element name="person" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="name"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
beta.xml
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="country">
<xs:complexType>
<xs:sequence>
<xs:element name="class">
<xs:complexType>
<xs:sequence>
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="name"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
ご覧のとおりPerson
、これら 2 つのスキーム間で共有される要素があります。私がやりたいことは次のとおりです。
ObjectFactory
クラスが両方のスキーマ クラスで共有されるように、xjc を使用してクラスを生成します (出力クラスは 1 つのパッケージになります)。- ネストされた静的クラスを使用しない (属性を使用
localScoping="toplevel"
) - クラスを使用
Person
してバインドする/alpha/persons/person
ため/country/class/person
、2つの Person クラスが作成されません
この目的は、1 つの xml をアンマーシャリングし、ビジネス ロジックを適用し、一部の要素 ( などPerson
) が同じで両方の xml ファイルで共有される出力として別のものを作成することです。名前空間は両方のファイルで同じになります。
完全な .xjb バインディング設定ファイルを提示していただければ幸いです。これまでのところ、私のものは次のとおりです。
<jxb:bindings version="1.0"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jxb:extensionBindingPrefixes="xjc">
<jxb:globalBindings localScoping="toplevel"/>
</jxb:bindings>
Person
もちろん、バインディング コンパイラを同じエンティティ/要素として表示するように設定する方法がわからないため、名前の衝突エラーが発生します。