javaee impl jaxb xjc

javaee - jaxb impl github



JAXB:: xjc 2.2 no reconoce enlaces para tipos simples (1)

Tengo un montón de esquemas xsd, algunos de los cuales importan otros. Entonces, cada vez que invoco xjc (la tarea Ant o la herramienta de línea de comando) en algunos archivos xsd que importan otros, transfiero un archivo de enlaces para asegurar que las clases importadas no se vuelvan a generar (ya que ya se han generado para el esquema "upstread"). Esta solución se describe en esta publicación SO (respuesta de Blaise Doughan) .

Si bien este enfoque funciona para los tipos xsd: complexType , no parece funcionar para xsd: simpleType types. Aquí hay un ejemplo reducido para demostrar esto. Digamos que tenemos dos esquemas simples muertos uno importando el otro:

a.xsd ---import--> b.xsd

Los archivos son:

a.xsd

<?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="http://example.a" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:import namespace="http://example.b" schemaLocation="b.xsd"/> </xs:schema>

b.xsd

<?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="http://example.b" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:b="http://example.b" elementFormDefault="qualified"> <xs:simpleType name="ResourceType"> <xs:restriction base="xs:string"> <xs:enumeration value="alpha"/> <xs:enumeration value="beta"/> </xs:restriction> </xs:simpleType> <xs:complexType name="ResourceType2"> <xs:sequence> <xs:element name="a" type="xs:integer"/> </xs:sequence> </xs:complexType> </xs:schema>

Básicamente, a.xsd no hace nada y solo importa b.xsd . cuando uno invoca xjc en a.xsd de la siguiente manera:

xjc -d output -p example.a -npa a.xsd

usted obtiene:

output/ └── example └── a ├── ObjectFactory.java ├── ResourceType2.java └── ResourceType.java

Entonces, los archivos se generaron para el esquema importado. Como no queremos eso, definimos el siguiente archivo de enlaces para transmitir:

imported-bindings.xml

<jxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" version="2.1"> <jxb:bindings schemaLocation="b.xsd"> <jxb:bindings node="//xs:simpleType[@name=''ResourceType'']"> <jxb:class ref="example.b.ResourceType"/> </jxb:bindings> <jxb:bindings node="//xs:complexType[@name=''ResourceType2'']"> <jxb:class ref="example.b.ResourceType2"/> </jxb:bindings> </jxb:bindings> </jxb:bindings>

SIN EMBARGO, cuando invoquemos de nuevo xjc en a.xsd con la opción -b de la siguiente manera:

xjc -d output -p a.example a.xsd -b imported-bindings.xml

vemos lo siguiente en el directorio de salida:

output/ └── example └── a ├── ObjectFactory.java └── ResourceType.java

Es decir, la generación del xsd: complexType "ResourceType2" fue suprimida, pero xjc se adelantó y generó el código para el xsd importado : simpleType "ResourceType". ¿Algunas ideas?

ACTUALIZAR Todavía no he conseguido que esto funcione, excepto por una solución utilizando archivos de episodios generados automáticamente


La versión JAXB 2.2.x solo es compatible, supongo.