Ho un problema, sto cercando di associare un XML dove ci sono il nome 'Contiene' tre volte.Gli elementi nidificati in XSD causano un'eccezione del ciclo di ereditarietà della classe non valida in JAXB, come posso sovrascrivere correttamente i bind?
Quindi ho letto che è possibile sovrascrivere i nomi dei nodi con un file di bind. Al momento non funziona.
Penso che l'errore provenga da Xpath nel file di bind, ma non ne sono sicuro. Ho provato molto, ma non ci sono mai riuscito.
C'è il mio XSD File:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="fr:gouv:ae:archive:draft:standard_echange_v0.2" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.1">
<xs:element name="ArchiveTransferRequest">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="Comment"/>
<xs:element type="xs:dateTime" name="Date"/>
<xs:element name="TransferRequestIdentifier">....</xs:element>
<xs:element name="TransferringAgency">...</xs:element>
<xs:element name="ArchivalAgency">...</xs:element>
<xs:element name="Contains">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="ArchivalAgencyArchiveIdentifier"/>
<xs:element type="xs:string" name="ArchivalAgreement"/>
<xs:element type="xs:string" name="ArchivalProfile"/>
<xs:element name="DescriptionLanguage">...</xs:element>
<xs:element name="DescriptionLevel">...</xs:element>
<xs:element type="xs:string" name="Name"/>
<xs:element name="ContentDescription">...</xs:element>
<xs:element name="Contains" id="contains" >
<xs:complexType>
<xs:sequence>
<xs:element name="DescriptionLevel">...</xs:element>
<xs:element type="xs:string" name="Name"/>
<xs:element name="ContentDescription">...<xs:element>
<xs:element name="Contains" maxOccurs="unbounded" minOccurs="0">
<xs:annotation>
<xs:documentation>a new contains for a new XML</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
...
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
e il file di legame per modificare la seconda e la thirs 'contiene' nodo.
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="2.1">
<jaxb:bindings schemaLocation="seda_actes.xsd">
<jaxb:bindings node="//xs:element[@name='ArchiveTransferRequest']/xs:complexType/xs:sequence/xs:element[@name='Contains']/xs:complexType/xs:sequence/xs:element[@name='Contains']">
<jaxb:class name="SecondContains"/>
</jaxb:bindings>
<jaxb:bindings node="//xs:element[@name='ArchiveTransferRequest']/xs:complexType/xs:sequence/xs:element[@name='Contains']/xs:complexType/xs:sequence/xs:element[@name='Contains']/xs:complexType/xs:sequence/xs:element[@name='Contains']">
<jaxb:class name="ThirdContains"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
Ma quando eseguo il seguente comando xjc:
xjc -b C:\Users\jtvervliet\Documents\SAE\seda_actes_binding.xml -d C:\Users\jtvervliet\workspace\poc_bordereau\src -p test4.impnat.xml C:\Users\jtvervliet\Documents\SAE\seda_actes.xsd
ho ottenuto questo errore:
analyse dun schéma... compilation dun schéma... Exception in thread "main" java.lang.IllegalArgumentException: Illegal class inheritance loop. Outer class SecondContains may not subclass from inner class: SecondContains at com.sun.codemodel.internal.JDefinedClass._extends(JDefinedClass.java:258) at com.sun.tools.internal.xjc.generator.bean.ImplStructureStrategy$1._extends(ImplStructureStrategy.java:104) at com.sun.tools.internal.xjc.generator.bean.BeanGenerator.(BeanGenerator.java:200) at com.sun.tools.internal.xjc.generator.bean.BeanGenerator.generate(BeanGenerator.java:154) at com.sun.tools.internal.xjc.model.Model.generateCode(Model.java:275) at com.sun.tools.internal.xjc.Driver.run(Driver.java:348) at com.sun.tools.internal.xjc.Driver.run(Driver.java:185) at com.sun.tools.internal.xjc.Driver._main(Driver.java:108) at com.sun.tools.internal.xjc.Driver.access$000(Driver.java:65) at com.sun.tools.internal.xjc.Driver$1.run(Driver.java:88)
Tutte le idee saranno apprezzati :)
Grazie.
cercare di cambiare '@ id = 'Contains'' in' @ name'Contains'' e aggiungere '// xs' invece di '/ xs' – Xstian
Grazie per la risposta, ho modificato il mio post,' @ id = 'Contains'' e è stato un altro test, ma ho ancora provato con '@ name =' Contains'' ottenere gli stessi risultati. Se aggiungo '// xs' invece di'/xs' xjc ritorno: '[ERRORE] L'évalutazione XPath de" // xs: element [@ name = 'ArchiveTransferRequest'] // xs: complexType // xs: sequence // xs: element [@ name = 'Contains'] // xs: complexType // xs: sequence // xs: element [@ name = 'Contains'] "génère un trop grand nombre de noeuds cible (2) ligne 6 sur file:/C:/Users/jtvervliet/Documents/SAE/seda_actes_binding.xml'. Credo che non sappia con precisione quale nodo voglio sovrascrivere. – jdelagorce
Prova a vedere [questa mia risposta] (http://stackoverflow.com/a/29969915/3364187) potrebbe essere utile – Xstian