2009-05-21 22 views
12

Ho questo "task" Maven per generare classi Java da un file XSD utilizzando JAXB.Prefisso classi generate 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> 

Per un tipo XSD "Utente", genera una classe denominata "Utente" (duh). Tuttavia, ho anche una classe di entità JPA chiamata "Utente" (anche se in un pacchetto diverso). Posso modificare la configurazione XML qui sopra per lasciare che JAXB preceda le classi generate con qualcosa come "XML"?

risposta

19

Questo è un requisito comune. È possibile farlo fornendo un file di collegamento JAXB aggiuntivo per personalizzare il modo in cui JAXB converte i nomi dei tipi di schema in nomi di classi Java.

Questi file normalmente terminano con estensione ".xjb". È necessario creare uno per lo schema, per esempio:

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

Dopo aver fatto questo, rilasciare il file XJB da qualche parte nella vostra directory di compilazione e dire Maven a fare uso di esso durante la traduzione:

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

E qui c'è un suggerimento per la strada: se ci si trova in un percorso che contiene spazi (ad esempio "Documenti e Impostazioni \ utente \ progetto"), JAXB cadrà con strani errori.

+0

La configurazione del plug-in maven-jaxb2 richiede i tag "bindingInclude" e "bindingInclude", non "includeBindings" e "includeBinding" – kevinmrohr

Problemi correlati