Domanda

ho questo "compito" Maven per generare le classi Java da un file XSD utilizzando 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", si genera una classe denominata "Utente" (duh). Tuttavia, ho anche una classe di entità JPA denominata "Utente" (anche se in un pacchetto differente). Posso cambiare la configurazione XML qui sopra per lasciare JAXB prefisso le classi generate con qualcosa come "XML"?

È stato utile?

Soluzione

Questo è un requisito comune. Potete farlo, fornendo un file di collegamento aggiuntivo JAXB per personalizzare il modo in JAXB traduce 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>

Ed ecco un suggerimento per la strada. Se ci si trova in un percorso che contiene spazi ( "Documents and Settings \ Utente \ progetto" per esempio), allora JAXB cadrà sopra con strani errori

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top