Bir sorunum var, 'İçeriyor' üç adında bir adın bulunduğu bir XML'yi bağlamaya çalışıyorum.İç içe yerleştirilmiş öğeler XSD'ye neden olur JAXB'de geçersiz sınıf devralma döngüsü istisnası, bağlamaları düzgün bir şekilde nasıl geçersiz kılabilirim?
Düğüm adlarını bir bağ dosyasıyla geçersiz kılmanın mümkün olduğunu okudum. Şu anda çalışmıyor.
Sanırım hata dosyada Xpath'den geliyor, ama emin değilim. Çok denedim ama asla başaramadım.
benim XSD Dosya yok:
<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>
Ve ikinci ve thirs değiştirmek için bağlayıcı dosya düğümü 'İçeren'.
<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>
Ama şu XJC komutu çalıştırdığınızda: Ben bu hatayı var
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
:
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)
Herhangi bir fikir takdir edilecektir :)
teşekkür ederiz.
deneyin @ name'Contains'' 'in' @ id = 'Contains'' değiştirebilir ve eklemek '// xs' yerine kadar/xs' – Xstian
Cevabınız için teşekkür ederiz, mesajımı düzenledim, '@ id = 'İçer' ' başka bir testti, fakat henüz' @ name = 'Contains'', ve ben de denedim aynı sonuçları al. '/ xs' xjc dönüş yerine' // xs 'eklerseniz: '[ERROR] L'évaluation XPath de" // xs: element [@ name =' ArchiveTransferRequest '] // xs: complexType // xs: sequence // xs: element [@ name = 'içerir'] // xs: complexType // xs: sequence // xs: element [@ name = 'içerir'] "génère un trop grand nombre de noeuds cible (2) ligne 6 sur dosyası:/C:/Kullanıcılar/jtvervliet/Belgeler/SAE/seda_actes_binding.xml'. Hangi düğümü geçersiz kılmak istediğimi tam olarak bilmediğini ihmal etmeyin. – jdelagorce
[Bu benim cevabım] 'ı görmeye çalışın (http://stackoverflow.com/a/29969915/3364187) yararlı olabilir – Xstian