By Pankaj Kumar
Today we will look into jaxb2-maven-plugin XJC example to generate java classes from XSD. JAXB is the middleware technology between Java Classes and XML. We can use JAXB to generate XML from Java Object and vice versa.
We use XSD to define the contract data structure, so it’s not common to generate java classes that represent the XML schema. jaxb2-maven-plugin XJC is JAXB Binding compiler tool that can be used to generate Java Classes from XSD files. Here we will learn how to use jaxb2-maven-plugin XJC in a maven project to generate java classes from XSD. First of all we have to create a maven project, then we need to use jaxb2-maven-plugin
plugin to generate java classes from XSD. pom.xml
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>jd</groupId>
<artifactId>jd</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>JD Example XSD to Java</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<!-- Plugin required to build java classes from XSD using XJC -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- The name of your generated source package -->
<arguments>-extension -npa -b ${project.basedir}/src/main/xsd/global.xjb</arguments>
</configuration>
</plugin>
</plugins>
</build>
</project>
Notice the global.xjb
file in arguments, this is where we specify java binding rules. global.xjb
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings version="2.0"
xmlns:jaxb="https://java.sun.com/xml/ns/jaxb"
xmlns:xjc="https://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xs="https://www.w3.org/2001/XMLSchema"
jaxb:extensionBindingPrefixes="xjc">
<jaxb:globalBindings>
<xjc:simple />
<xjc:serializable uid="-1" />
<jaxb:javaType name="java.util.Calendar" xmlType="xs:dateTime"
parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime"
printMethod="javax.xml.bind.DatatypeConverter.printDateTime" />
</jaxb:globalBindings>
</jaxb:bindings>
Here is the XSD that will be used to generate java classes. Employee.xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="https://www.w3.org/2001/XMLSchema"
targetNamespace="https://www.journaldev.com/com/journaldev/employee/data"
xmlns:empns="https://www.journaldev.com/com/journaldev/employee/data"
elementFormDefault="qualified">
<element name="empRequest" type="empns:EmpRequest"></element>
<element name="empResponse" type="empns:EmpResponse"></element>
<complexType name="EmpRequest">
<sequence>
<element name="id" type="int" minOccurs="0" maxOccurs="1" />
<element name="name" type="string" minOccurs="0" maxOccurs="1" />
</sequence>
</complexType>
<complexType name="EmpResponse">
<sequence>
<element name="id" type="int" minOccurs="1" maxOccurs="1" />
<element name="name" type="string" minOccurs="1" maxOccurs="1" />
<element name="role" type="string" minOccurs="1" maxOccurs="unbounded" />
<element name="gender" type="string" minOccurs="1" maxOccurs="1" />
<element name="salary" type="string" minOccurs="1" maxOccurs="1" />
</sequence>
</complexType>
</schema>
Just build the maven project using mvn clean install
and you will see java classes generated in target/generated-sources/jaxb
directory. Finally the project would look something like below image. Further Read: JAXB Tutorial Reference: jaxb2 maven plugin official page, java xjc
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
Java and Python Developer for 20+ years, Open Source Enthusiast, Founder of https://www.askpython.com/, https://www.linuxfordevices.com/, and JournalDev.com (acquired by DigitalOcean). Passionate about writing technical articles and sharing knowledge with others. Love Java, Python, Unix and related technologies. Follow my X @PankajWebDev
Thanks Pankaj. I was looking for an example of the xjc maven plugin usage and yours was exactly what I needed.
- Ricardo
change the goal from xjc to generate if you getting Errors when trying to install with maven.
- A S
You forgot to tell mvn where Employee.xsd is. You need a in your element.
- DeanS
Hi Pankaj, I have one question, what is purpose of -extention and -npa? where you have use this? -extension -npa -b ${project.basedir}/src/main/xsd/global.xjb Thanks
- Jalaram
Proper config for JAXB2 for version below 2.0 is : ${project.basedir}/src/main/xsd/ Employee.xsd
- Azizasm
Just FYI the schema namespaces are NOT https:// … etc, they must be http://
- RM
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.
Full documentation for every DigitalOcean product.
The Wave has everything you need to know about building a business, from raising funding to marketing your product.
Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.
New accounts only. By submitting your email you agree to our Privacy Policy
Scale up as you grow — whether you're running one virtual machine or ten thousand.
Sign up and get $200 in credit for your first 60 days with DigitalOcean.*
*This promotional offer applies to new accounts only.