2009-05-21 14 views
12

Tengo esta "tarea" de Maven para generar clases Java desde un archivo XSD usando JAXB.Prefijo de las clases generadas por 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", 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 permitir que JAXB prefija las clases generadas con algo así como "XML"?

Respuesta

19

Este es un requisito común. Puede hacerlo proporcionando un archivo de enlace JAXB adicional para personalizar cómo JAXB traduce los nombres de tipo de esquema en nombres de clase 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> 

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

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

Y aquí hay una pista para la carretera: si se encuentra en una ruta que contiene espacios (por ejemplo, "Documentos y configuración \ usuario \ proyecto"), entonces JAXB se caerá con errores extraños.

+0

La configuración del complemento maven-jaxb2 requiere las etiquetas "bindingIncludes" y "bindingInclude", no "includeBindings" e "includeBinding" – kevinmrohr

Cuestiones relacionadas