Are you aware of any good JAXB Plugin which generated Builder pattern classes for the generated JAXB classes? Composing domain using JAXB generated classes is really nasty. I saw a plugin someone wrote back in 2010 but it doesn't use the newest maven plugin jaxb2-maven-plugin, and it also requires you to specify bindings for each schema type which is not robust.
Just build the maven project using mvn clean install and you will see java classes generated in target/generated-sources/jaxb directory.
This plugin uses the Java API for XML Binding (JAXB), version 2+, to generate Java classes from XML Schemas (and optionally binding files) and to create XML Schemas from annotated Java classes.
We can configure XSD lookup by modifying the configuration section of this plugin in the pom. xml accordingly. Also by default, these Java Classes are generated in the target/generated-resources/jaxb folder. We can change the output directory by adding an outputDirectory element to the plugin configuration.
Open a command prompt. Run the JAXB schema compiler, xjc command from the directory where the schema file is located. The xjc schema compiler tool is located in the app_server_root \bin\ directory. Use the generated JAXB objects within a Java application to manipulate XML content through the generated JAXB classes.
The following snippet from a pom.xml
file, uses maven cxf-xjc-plugin
to generate the JAXB classes and also leverages jaxb-fluent-api
to tack-on fluent interfaces ... which aren't exactly a complete builder pattern on their own ... but I think they leave room for folks to make decent headway in that direction.
<!-- 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>
Yes, there is now a plugin to generate fluent builders for JAXB-generated classes. There is a github project on
https://github.com/mklemm/jaxb2-rich-contract-plugin
It contains a couple of useful JAXB plugins. You can download source and binaries from github, or get maven artifacts from The Central Repository
Hope this helps. If you have any questions, just ask me, I'm the one who started it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With