example comando java jaxb xjc extending

java - comando - Insertar código con XJC+xsd+jxb usando las opciones "-Xinject-code-extension"



xjc java (1)

Estoy tratando de usar la extensión "-Xinject-code" de xjc para agregar algún código a mis clases generadas. Para el siguiente esquema simple xsd ...

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

.. He asociado el siguiente enlace:

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

Ejecutar 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

EDITAR:

cambiando xsd: element 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 "generated / MyItemType.java"

$ tail generated/MyItemType.java @Override public String toString() { return this.getName();} }

pero ¿cómo puedo decirle a xjc que genere el código sin cambiar el archivo xsd?


Pruebe /xs:schema/xs:element[@name=''MyItem'']/xs:complexType .