Prefixing JAXB generierten Klassen
-
23-08-2019 - |
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 lassenLö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