Pregunta

Tengo esta "tarea" Maven para generar clases Java a partir de un archivo XSD utilizando JAXB.

        <!-- XML to Java classes -->
        <plugin>
            <groupId>com.sun.tools.xjc.maven2</groupId>
            <artifactId>maven-jaxb-plugin</artifactId>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <generatePackage>nl.compay.service</generatePackage>
                <schemaDirectory>src/main/webapp/compay</schemaDirectory>
            </configuration>
        </plugin>

Para un tipo XSD "Usuario", que genera una clase llamada "Usuario" (duh). Sin embargo, también tengo una clase de entidad JPA llamada "Usuario" (aunque en un paquete diferente). ¿Puedo cambiar la configuración XML anterior para que se JAXB prefijo las clases generadas con algo como "XML"?

¿Fue útil?

Solución

Este es un requisito común. Usted puede hacer que al proporcionar un archivo adicional vinculante JAXB para personalizar la forma JAXB traduce los nombres de los tipos de esquema en nombres de clases Java.

Estos archivos normalmente terminan en la extensión ".xjb". Es necesario crear uno para su esquema, por ejemplo:

<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:bindings schemaLocation="nl.company.service.xsd" node="/xs:schema">
        <jxb:schemaBindings>
            <jxb:nameXmlTransform>
                <jxb:typeName prefix="XML"/>
                <jxb:anonymousTypeName prefix="XML"/>
            </jxb:nameXmlTransform>
        </jxb:schemaBindings>
    </jxb:bindings>

</jxb:bindings>

Una vez que hayas hecho esto, coloque el archivo xjb algún lugar de su directorio de construcción y decirle a Maven para hacer uso de ella durante la traducción:

<includeBindings>
    <includeBinding>mybindings.xjb</includeBinding>
</includeBindings>

Y aquí va una pista para el camino:. Si se encuentra en una ruta que contiene espacios (por ejemplo, "Documents and Settings \ Usuario \ proyecto"), entonces JAXB caerán encima con errores extraños

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top