2012-09-04 3 views
5

Im‘versucht, die Erweiterung "-Xinject-Code" zu verwenden von xjc einige Code in meine generierten Klassen hinzuzufügen. Für das folgende einfache XSD-Schema ...Einfügen von Code mit XJC + xsd + JXB mit der Optionen "-Xinject-Code -Erweiterung"

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="MyList" > 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element ref="MyItem" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

    <xs:element name="MyItem"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="id" type="xs:int"/> 
     <xs:element name="name" type="xs:string"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

</xs:schema> 

.. Ich habe die folgende Bindung verbunden:

<?xml version="1.0" encoding="UTF-8"?> 
<jxb:bindings 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
xmlns:ci="http://jaxb.dev.java.net/plugin/code-injector" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
jxb:extensionBindingPrefixes="ci " 
jxb:version="2.1" 
> 

<jxb:bindings schemaLocation="test.xsd"> 
    <jxb:bindings node="/xs:schema/xs:element[@name='MyItem']"> 
     <ci:code> 
      @Override 
      public String toString() { return this.getName();} 
     </ci:code> 
    </jxb:bindings> 
</jxb:bindings> 

</jxb:bindings> 

Lauf xjc erzeugt die folgende Ausgabe:

$ xjc -target 2.1 -verbose -Xinject-code -extension -d . -p generated -b test.jxb test.xsd 
parsing a schema... 
compiling a schema... 
[INFO] generating code 
unknown location 

generated/MyItem.java 
generated/MyList.java 
generated/ObjectFactory.java 

aber die Datei 'generated/MyItem.java' enthält nicht die neue Methode toString. Wie soll ich das beheben? Was ist diese Nachricht "unbekannter Ort"?

Hinweis:

$ xjc -version 
xjc 2.2.4 

EDIT:

Ändern xsd: Element xsd: complex macht den Job:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 


<xs:complexType name="MyItemType"> 
    <xs:sequence> 
     <xs:element name="id" type="xs:int"/> 
     <xs:element name="name" type="xs:string"/> 
    </xs:sequence> 
</xs:complexType> 

    <xs:element name="MyList" > 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="MyItem" type="MyItemType" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

</xs:schema> 

und

<?xml version="1.0" encoding="UTF-8"?> 
<jxb:bindings 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
xmlns:ci="http://jaxb.dev.java.net/plugin/code-injector" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
jxb:extensionBindingPrefixes="ci " 
jxb:version="2.1" 
> 

<jxb:bindings schemaLocation="test.xsd"> 
    <jxb:bindings node="/xs:schema/xs:complexType[@name='MyItemType']"> 
     <ci:code> 
      @Override 
      public String toString() { return this.getName();} 
     </ci:code> 
    </jxb:bindings> 
</jxb:bindings> 

</jxb:bindings> 

Ich kann jetzt den Code in der Datei „erzeugt/MyItemType.java“

$ tail generated/MyItemType.java 


      @Override 
      public String toString() { return this.getName();} 

} 

sehen, aber wie kann ich sagen xjc den Code zu generieren, ohne die XSD-Datei zu ändern?

Antwort

2

Bitte versuchen Sie /xs:schema/xs:element[@name='MyItem']/xs:complexType.

+0

Ich hatte genau das gleiche Problem und Ihre Antwort ist die richtige Lösung. Vielen Dank! – jhyot

Verwandte Themen