2012-09-04 10 views
5

Im' tratando de utilizar el 'código -Xinject' extensión de xjc para añadir algo de código para mis clases generadas. Para el siguiente esquema XSD sencilla ...código de Inserción con XJC + + xsd JXB utilizando las opciones de "código -Xinject -Ampliación"

<?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> 

.. Me he asociado la continuación de la unión:

<?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> 

Correr xjc produce el siguiente resultado:

$ 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 

pero el archivo 'generated/MyItem.java' no contiene el nuevo método "toString". ¿Cómo debo solucionar esto? ¿Qué es ese mensaje "ubicación desconocida"?

Nota:

$ xjc -version 
xjc 2.2.4 

EDIT:

cambiando elemento xsd: a xsd: complexType hace el trabajo:

<?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> 

y

<?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> 

ahora puedo ver el código en el archivo "generada/MyItemType.java"

$ tail generated/MyItemType.java 


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

} 

pero ¿cómo puedo saber xjc para generar el código sin cambiar el archivo xsd?

Respuesta

2

Por favor intente /xs:schema/xs:element[@name='MyItem']/xs:complexType.

+0

Tenía exactamente el mismo problema y su respuesta es la solución correcta. ¡Gracias! – jhyot

Cuestiones relacionadas