Kennen Sie ein gutes JAXB-Plugin, das Builder-Musterklassen für die generierten JAXB-Klassen generiert hat? Das Erstellen einer Domäne mit JAXB-generierten Klassen ist sehr unangenehm. Ich habe ein Plugin gesehen, das jemand 2010 zurückgeschrieben hat, aber es verwendet nicht das neueste Maven-Plugin jaxb2-maven-plugin, und es erfordert auch, dass Sie Bindungen für jeden Schematyp angeben, der nicht robust ist.Gibt es ein JAXB Plugin, das Builder generiert?
Antwort
Der folgende Ausschnitt aus einer pom.xml
Datei verwendet Maven cxf-xjc-plugin
die JAXB-Klassen zu generieren und nutzt auch jaxb-fluent-api
tack-on fluent interfaces ... die sind nicht gerade ein kompletter Erbauer auf ihrem eigenen ... aber ich denke, Sie lassen Platz, damit Leute in diese Richtung annehmbar vorwärtskommen.
<!-- Used to generate source code based on XSD (schema) file -->
<!-- http://cxf.apache.org/cxf-xjc-plugin.html -->
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-xjc-plugin</artifactId>
<version>2.7.7</version>
<configuration>
<extensions>
<extension>net.java.dev.jaxb2-commons:jaxb-fluent-api:2.1.8</extension>
</extensions>
</configuration>
<executions>
<execution>
<id>generate-xsd-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>xsdtojava</goal>
</goals>
<configuration>
<sourceRoot>${basedir}/target/generated-sources/cxf-xjc/</sourceRoot>
<xsdOptions>
<xsdOption>
<xsd>${basedir}/src/main/wsdl/your.xsd</xsd>
<packagename>com.your.package.name</packagename>
<extensionArgs>
<extensionArg>-Xfluent-api</extensionArg>
</extensionArgs>
</xsdOption>
</xsdOptions>
</configuration>
</execution>
</executions>
</plugin>
Ja, es gibt jetzt ein Plugin, um fließende Builder für JAXB-generierte Klassen zu generieren. Es gibt ein GitHub Projekt auf
https://github.com/mklemm/jaxb2-rich-contract-plugin
Es enthält ein paar nützliche JAXB Plugins. Sie können Quelle und Binärdateien von Github, oder erhalten Maven Artefakte von The Central Repository
Hope dies hilft. Wenn Sie irgendwelche Fragen haben, fragen Sie mich einfach, ich bin derjenige, der es angefangen hat.
Kann ich das Plugin verwenden, um Builder zu generieren, wenn Klassen von dtd generiert werden? – mejas
Obwohl bisher niemand versucht zu haben scheint, würde ich annehmen, dass es NICHT mit einer DTD funktioniert. –
Meinst du, die Klasse ObjectFactory zu generieren? –
Wenn 'jaxb-fluent-api' irgendwie mit' cxf-xjc-plugin' konfiguriert werden könnte, dann wäre es vielleicht eine großartige Lösung, aber ich bin mir nicht sicher, ob das überhaupt möglich ist. Ansonsten hört es sich so an, als wären Sie bereits über retepTools gestolpert: http://blog.retep.org/2010/05/18/implementing-builders-with-jaxb-generated-objects/2/ – pulkitsinghal
Dieses Plugin erzeugt unveränderlich Klassen und optional Builder - https://github.com/sabomichal/immutable-xjc – miso