2016-07-20 5 views
1

Ich habe ein seltsames Problem mit xjc, versucht, Element in einer Java-Eigenschaft zuzuordnen. Ich hätte gerne Test2 Getter und Setter für test3.XJC - [ERROR] Compiler konnte diese Eigenschaftsanpassung nicht berücksichtigen

ich mein Setup-Bindungen, wie sie:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<jaxb:bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    version="2.1"> 
    <jaxb:globalBindings localScoping="toplevel" underscoreBinding="asCharInWord"> 
    </jaxb:globalBindings> 
    <jaxb:bindings schemaLocation="test.xsd"> 
     <jaxb:schemaBindings> 
      <jaxb:package name="test.detail" /> 
     </jaxb:schemaBindings> 
     <jaxb:bindings node="//xsd:element[@name='TEST']"> 
      <jaxb:class name="Test"></jaxb:class> 
     </jaxb:bindings> 
     <jaxb:bindings node="//xsd:element[@name='TEST1']"> 
      <jaxb:class name="Test1" /> 
     </jaxb:bindings> 
     <jaxb:bindings node="//xsd:element[@name='TEST2']"> 
      <jaxb:class name="Test2Impl" /> 
     </jaxb:bindings> 
     <jaxb:bindings node="//xsd:element[@name='TEST3']"> 
      <jaxb:property name="test3" /> 
     </jaxb:bindings> 
    </jaxb:bindings> 
</jaxb:bindings> 

Und meine XSD ist ähnlich wie diese:

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema targetNamespace="" elementFormDefault="qualified" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"> 
    <xsd:element name="TEST1"> 
     <xsd:complexType mixed="true"> 
      <xsd:sequence> 
       <xsd:element name="TEST2" maxOccurs="unbounded"> 
        <xsd:complexType mixed="true"> 
         <xsd:sequence> 
          <xsd:element name="TEST3" minOccurs="0" type="xsd:string" /> 
         </xsd:sequence> 
        </xsd:complexType> 
       </xsd:element> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
    <xsd:element name="TEST"> 
     <xsd:complexType mixed="true"> 
      <xsd:sequence> 
       <xsd:element ref="TEST1" minOccurs="0" /> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

wenn ich versuche, mit xjc -b binding.xjb -d out test.xsd im zu generieren bekommen:

parsing a schema... 
[WARNING] EmptyTargetNamespace: In schema document 'jaxb-generate-test/test.xsd', 
the value of the 'targetNamespace' attribute cannot be an empty string. 
    line 3 of jaxb-generate-test/test.xsd 

[ERROR] compiler was unable to honor this property customization. 
It is attached to a wrong place, or its inconsistent with other bindings. 
    line 20 of jaxb-generate-test/binding.xjb 

[ERROR] (the above customization is attached to the following location in the schema) 
    line 10 of jaxb-generate-test/test.xsd 

Failed to parse a schema. 

Ich habe eine github project erstellt, die Sie testen können.

Antwort

1

Zuerst müssen Sie Ihre XSD reparieren, so dass die Definitionen einem targetNamespace zugeordnet sind und das Element ref korrekt ist.

Versuchen:

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema targetNamespace="http://myns" elementFormDefault="qualified" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:tns="http://myns"> 
    <xsd:element name="TEST1"> 
     <xsd:complexType mixed="true"> 
      <xsd:sequence> 
       <xsd:element name="TEST2" maxOccurs="unbounded"> 
        <xsd:complexType mixed="true"> 
         <xsd:sequence> 
          <xsd:element name="TEST3" minOccurs="0" type="xsd:string" /> 
         </xsd:sequence> 
        </xsd:complexType> 
       </xsd:element> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
    <xsd:element name="TEST"> 
     <xsd:complexType mixed="true"> 
      <xsd:sequence> 
       <xsd:element ref="tns:TEST1" minOccurs="0" /> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

Aber dann haben Sie immer noch die härtere Problem, wie die TEST3 Kind Elemente herauszupicken mit einem ‚test3‘ Getter unter dem Rest des gemischten Inhalt. JAXB wird sie alle in einer einzigen Liste abbilden.

Aus Blick auf andere Beiträge wie this sieht es aus wie die JAXB2 Simplify plugin könnte in der Lage sein, mit Ihrem Anwendungsfall zu helfen.

(Vielleicht wird jemand eine noch bessere Antwort schreiben, die zeigt, wie ausführlicher, aber das ist wahrscheinlich hilfreich genug, dass ich so bin, wie es ist).

+0

Danke @ scott-kurz, dein Vorschlag hat mein Problem gelöst, ich habe alles auf [github] festgelegt (https://github.com/Cavva79/jaxb-generate-test/tree/v1.0.0 "jaxb-generate- Test - Tag v1.0.0 ") – Cavva79

Verwandte Themen