Frage

Ich habe diese Maven "Aufgabe" Java-Klassen aus einer XSD-Datei mit JAXB zu erzeugen.

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

Für einen XSD-Typen "Benutzer", erzeugt es eine Klasse mit dem Namen "User" (duh). Allerdings habe ich auch eine Entitätsklasse JPA namens „User“ (wenn auch in einem anderen Paket). Kann ich die XML-Konfigurations ändern oben mit so etwas wie „XML“?

die generierten Klassen JAXB Präfix zu lassen
War es hilfreich?

Lösung

Dies ist eine häufige Anforderung. Sie können das tun, indem eine zusätzliche JAXB Einbindemappe Bereitstellung anpassen, wie JAXB die Schema-Typnamen in Java-Klassennamen übersetzt.

Diese Dateien normalerweise in Erweiterung ".xjb" enden. Sie benötigen für Ihr Schema zu erstellen, zum Beispiel:

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

Nachdem Sie das getan haben, fällt die XJB Datei irgendwo in Ihrem Build-Verzeichnis und Maven sagen Gebrauch davon während der Übersetzung zu machen:

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

Und hier ist ein Hinweis auf die Straße. Wenn Sie in einem Pfad sind die Leerzeichen (zum Beispiel „Dokumente und Einstellungen \ Benutzer \ Projekt“) enthält, dann wird JAXB mit seltsamen Fehlern umfallen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top