impl types xsd jaxb xjc

types - impl - JAXB: ¿Cómo cambiar los nombres de las clases generadas por XJC cuando se especifica el tipo attr en XSD?



xjc wsdl (3)

Bueno, finalmente encontré cómo hacerlo. Mi archivo de enlace externo es:

<?xml version="1.0"?> <jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" jxb:extensionBindingPrefixes="xjc"> <jxb:globalBindings> <xjc:simple/> </jxb:globalBindings> </jxb:bindings>

y el comando -extension debe ejecutarse con la opción -extension .

Encontré la solución en esta página:

http://weblogs.java.net/blog/kohsuke/archive/2006/03/why_does_jaxb_p.html

Saludos, Miguel

Soy un principiante de JAXB y tengo problemas molestos cuando genero clases Java con xjc. Tengo un XSD como este:

<xs:element name="item" type="itemType"/> ... <xs:complexType name="itemType"> <xs:attribute name="id" type="xs:string" use="required"> ... </xs:complexType>

y xjc está generando una clase llamada ItemType.java , pero quiero que el nombre sea Item.java . Es decir, quiero las clases generadas como si el XSD fuera así:

<xs:element name="item"> <xs:complexType> <xs:attribute name="id" type="xs:string" use="required"> ... </xs:complexType> </xs:element>

No habrá reutilización de itemType en ningún otro elemento, solo la gente que construye el XSD le gusta de esta manera. Supongo que puede haber una manera de hacerlo con enlaces personalizados, pero todavía no he encontrado cómo.

¿Alguna ayuda?

Gracias, Miguel


Este es el archivo de enlace externo que utilizo para cambiar el nombre de un tipo complejo. Compila con wsdl2java de cxf.

<?xml version="1.0" encoding="UTF-8"?> <jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <jaxws:bindings node="wsdl:definitions/wsdl:types/xsd:schema[1]"> <jxb:bindings node="//xs:complexType[@name=''VatNumber_exception'']"> <jxb:class name="VatNumException"/> </jxb:bindings> </jaxws:bindings> </jaxws:bindings>


JAXB proporciona dos formas de lograr esto:

1. Intenciones de esquema en línea

Puede usar anotaciones de esquema JAXB para controlar los nombres de clase.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.1"> <xs:complexType name="itemType"> <xs:annotation> <xs:appinfo> <jaxb:class name="Item"/> </xs:appinfo> </xs:annotation> <xs:attribute name="id" type="xs:string" use="required"/> </xs:complexType> </xs:schema>

2. Archivo de enlace externo

Esta personalización también se puede hacer a través de un archivo de enlace externo:

<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="your-schema.xsd"> <jxb:bindings node="//xs:complexType[@name=''itemType'']"> <jxb:class name="Item"/> </jxb:bindings> </jxb:bindings> </jxb:bindings>

La línea de comando xjc sería:

xjc -d out -b binding.xml your-schema.xsd