2009-05-21 11 views
12

J'ai cette "tâche" Maven pour générer des classes Java à partir d'un fichier XSD en utilisant JAXB.Préfixage des classes générées par 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> 

Pour un type XSD "Utilisateur", il génère une classe nommée "User" (duh). Cependant, j'ai aussi une classe d'entité JPA appelée "User" (bien que dans un paquet différent). Puis-je modifier la configuration XML ci-dessus pour permettre à JAXB de préfixer les classes générées avec quelque chose comme "XML"?

Répondre

19

Ceci est une exigence commune. Vous pouvez le faire en fournissant un fichier de liaison JAXB supplémentaire pour personnaliser la manière dont JAXB traduit les noms de types de schéma en noms de classes Java.

Ces fichiers se terminent normalement en extension ".xjb". Vous devez créer un pour votre schéma, par exemple:

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

Une fois que vous avez fait cela, déposez le fichier XJB quelque part dans votre répertoire de construction et à Maven de faire usage lors de la traduction:

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

Et voici un indice pour la route: si vous êtes dans un chemin qui contient des espaces (par exemple "Documents and Settings \ user \ project") alors JAXB tombera avec des erreurs étranges.

+0

La configuration de maven-jaxb2-plugin requiert les balises "bindingIncludes" et "bindingInclude", pas "includeBindings" et "includeBinding" – kevinmrohr

Questions connexes