XJC
XJC is a Java SE tool that compiles an XML schema file into fully annotated Java classes.
It is distributed within the JDK package and is located at /bin/xjc path.
Generating Java code from simple XSD file
Section titled “Generating Java code from simple XSD file”XSD schema (schema.xsd)
Section titled “XSD schema (schema.xsd)”The following xml schema (xsd) defines a list of users with attributes name and reputation.
<?xml version="1.0"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns="http://www.stackoverflow.com/users" elementFormDefault="qualified" targetNamespace="http://www.stackoverflow.com/users"> <xs:element name="users" type="ns:Users"/>
<xs:complexType name="Users"> <xs:sequence> <xs:element type="ns:User" name="user" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType>
<xs:complexType name="User"> <xs:attribute name="name" use="required" type="xs:string"/> <xs:attribute name="reputation" use="required"> <xs:simpleType> <xs:restriction base="xs:int"> <xs:minInclusive value="1"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:complexType></xs:schema>Using xjc
Section titled “Using xjc”This requires the path to the xjc tool (JDK binaries) to be in the OS path variable.
The code generation can be started using
xjc schema.xsdThis will generate java files in the working directory.
Result files
Section titled “Result files”There will be some additional comments, but basically the java files generated look like this:
package com.stackoverflow.users;
import java.util.ArrayList;import java.util.List;import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)@XmlType(name = "Users", propOrder = { "user"})public class Users {
protected List<User> user;
public List<User> getUser() { if (user == null) { user = new ArrayList<User>(); } return this.user; }
}package com.stackoverflow.users;
import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlAttribute;import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)@XmlType(name = "User")public class User {
@XmlAttribute(name = "name", required = true) protected String name; @XmlAttribute(name = "reputation", required = true) protected int reputation;
public String getName() { return name; }
public void setName(String value) { this.name = value; }
public int getReputation() { return reputation; }
public void setReputation(int value) { this.reputation = value; }
}package com.stackoverflow.users;
import javax.xml.bind.JAXBElement;import javax.xml.bind.annotation.XmlElementDecl;import javax.xml.bind.annotation.XmlRegistry;import javax.xml.namespace.QName;
@XmlRegistrypublic class ObjectFactory {
private final static QName _Users_QNAME = new QName("http://www.stackoverflow.com/users", "users");
public ObjectFactory() { }
public Users createUsers() { return new Users(); }
public User createUser() { return new User(); }
@XmlElementDecl(namespace = "http://www.stackoverflow.com/users", name = "users") public JAXBElement<Users> createUsers(Users value) { return new JAXBElement<Users>(_Users_QNAME, Users.class, null, value); }
}package-info.java
Section titled “package-info.java”@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.stackoverflow.com/users", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)package com.stackoverflow.users;Syntax
Section titled “Syntax”- xjc [ options ] schema file/URL/dir/jar … [-b bindinfo ] …
Parameters
Section titled “Parameters”|Parameter|Details |---|---|---|---|---|---|---|---|---|--- |schema file|The xsd schema file to convert to java
Remarks
Section titled “Remarks”The XJC tool is available as part of the JDK. It allows creating java code annotated with JAXB annotations suitable for (un)marshalling.