Wspólna klasa dla elementu potomnego w JAXB w różnych xmls / root
WJAXB podczas korzystania z automatycznego generowania klasy przezxjc zxsd schemat.
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>
Jak widać, jestPerson
element, który jest wspólny dla tych dwóch systemów. Chciałbym zrobić:
ObjectFactory
klasa jest współużytkowana dla obu klas schematu (klasy wyjściowe będą w jednym pakiecie)nie używaj zagnieżdżonych klas statycznych (z atrybutemlocalScoping="toplevel"
)posługiwać sięPerson
klasa do wiązania/alpha/persons/person
jak z/country/class/person
więc nie utworzono dwóch klas PersonCelem tego jest unmarshalling jednego xml, zastosowanie logiki biznesowej i utworzenie innego jako wyjścia, w którym niektóre elementy (npPerson
) są takie same i współdzielone dla obu plików xml. Przestrzeń nazw będzie taka sama dla obu plików.
Witałbym, gdybyś mógł przedstawić mi kompletny plik ustawień powiązań .xjb. Do tej pory moja zawiera tylko:
<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>
I oczywiście otrzymuję błąd kolizji nazw, ponieważ nie wiem, jak ustawić kompilator powiązań, aby zobaczyćPerson
jako ten sam podmiot / element.