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ď č. 1Najprv 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>