/ / JAXB: package.package. <Type> je už definovaný v package.package. <Type>. <Type> - java, xml, xpath, xsd, jaxb

JAXB: package.package <Typ> je alrready definovaný v package.package. <Type>. <Type> - java, xml, xpath, xsd, jaxb

Snažím sa generovať java triedy z XSD pomocou JAXB.

XSD sú v mojej spoločnosti oficiálnymi xsds, takže ich nemôžem modifikovať iba pre svoj projekt. Po mnohých pokusoch a vyhľadávaní na tomto webe som sa rozhodol položiť otázku priamo.

Mám to vo svojom XSD:

<xs:element name="Line" minOccurs="0" maxOccurs="999">
<xs:complexType>
<xs:sequence>
<xs:element name="Line" minOccurs="0" maxOccurs="999">
<xs:complexType>
<xs:attribute name="reference" type="xs:toto" use="optional">
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="reference" type="xs:toto" use="optional">

</xs:attribute>
</xs:complexType>
</xs:element>

Výsledkom je: package.Index.Line je už definovaný v balíčku.Index

Po pohľade na vygenerovaný kód vidím, že máme statický vnútorný triedny riadok do inej statickej vnútornej triedy (pod iným indexom)

Na riadku sa zobrazuje chyba (v hornom dolnom rohu) Vnorený typ riadku nemôže skryť uzatvárací typ

Ak sa zmení meno (na generácii xsd alebo na triede java), nemám problém.

Pokúsil som sa vytvoriť záväzný súbor:

<jaxb:bindings schemaLocation="file:../path/myschema.xsd" node="//xs:element[@name="Index"]">
<jaxb:bindings node=".//xs:element[@name="Line"]" multiple="true">
<jaxb:property name="Lines"/>
</jaxb:bindings>
</jaxb:bindings>

Mám rovnaký problém ... Pretože v skutočnosti mám v indexe dva riadky s uzlami, takže sa snažím s týmto:

<jaxb:bindings schemaLocation="file:path/myxsd.xsd" node="//xs:element[@name="Index"]/xs:element[@name="Line"]">
<jaxb:bindings node="//xs:element[@name="Line"]" multiple="true">
<jaxb:property name="Lines"/>
</jaxb:bindings>
</jaxb:bindings>

alebo

<jaxb:bindings schemaLocation="file:path/myxsd.xsd" node="//xs:element[@name="Index"]">
<jaxb:bindings node="//xs:element[@name="Line"]/xs:element[@name="Line"]" multiple="true">
<jaxb:property name="Lines"/>
</jaxb:bindings>
</jaxb:bindings>

Mám však problém s generáciou: com.sun.istack.SAXParseException2: XPath vyhodnotenie "// xs: element [@ name =" Index "] / xs: element [@ name =" Line "]" vedie k prázdnemu cieľovému uzlu

Som úplne stratený. Celý deň jedem nutella, aby som kompenzoval smútok, ktorý cítim T_T

Ak máte návrhy;)

Vopred ďakujem

Geoffrey

odpovede:

0 pre odpoveď č. 1

Najprv nakonfigurujte väzby tak, aby boli generované ako jednotlivé triedy.

<jaxb:globalBindings localScoping="toplevel"/>

Potom použite kompletný XPath pre uvedené prvky, ako je uvedené nižšie.

<bindings version="2.1" xmlns="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema">

<globalBindings localScoping="toplevel"/>

<bindings schemaLocation="yourschema.xsd">
<bindings node="//xs:element[@name="Index"]/xs:complexType/xs:sequence/xs:element[@name="Line"]/xs:complexType">
<class name="Lines1"/>
</bindings>
</bindings>

<bindings schemaLocation="yourschema.xsd">
<bindings node="//xs:element[@name="Index"]/xs:complexType/xs:sequence/xs:element[@name="Line"]/xs:complexType/xs:sequence/xs:element[@name="Line"]/xs:complexType">
<class name="Lines2"/>
</bindings>
</bindings>

</bindings>