jaxb
http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.5/tutorial/doc/JAXBUsing.html
- With JAXB you can:
- Generate JAXB Java classes from an XML schema
- Use schema-derived JAXB classes to unmarshal and marshal XML content in a Java application
- Create a Java content tree from scratch using schema-derived JAXB classes
- Validate XML content during unmarshalling and at runtime
- Customize JAXB schema-to-Java bindings
XSD data types
XSD type |
Java type |
xsd:string |
java.lang.String |
xsd:integer |
java.math.BigInteger |
xsd:int |
int |
xsd.long |
long |
xsd:short |
short |
xsd:decimal |
java.math.BigDecimal |
xsd:float |
float |
xsd:double |
double |
xsd:boolean |
boolean |
xsd:byte |
byte |
xsd:QName |
javax.xml.namespace.QName |
xsd:dateTime |
javax.xml.datatype.XMLGregorianCalendar |
xsd:base64Binary |
byte[] |
xsd:hexBinary |
byte[] |
xsd:unsignedInt |
long |
xsd:unsignedShort |
int |
xsd:unsignedByte |
short |
xsd:time |
javax.xml.datatype.XMLGregorianCalendar |
xsd:date |
javax.xml.datatype.XMLGregorianCalendar |
xsd:g |
javax.xml.datatype.XMLGregorianCalendar |
xsd:anySimpleType |
java.lang.Object |
xsd:anySimpleType |
java.lang.String |
xsd:duration |
javax.xml.datatype.Duration |
xsd:NOTATION |
javax.xml.namespace.QName |
xjc command generation example
- cd /tmp
- mkdir -p xjctest/xsd
- cd xjctest
nano simple.xjb
<jaxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" jaxb:extensionBindingPrefixes="xjc" jaxb:version="2.0"> <jaxb:globalBindings generateValueClass="true"> <xjc:simple /> <xjc:serializable uid="12343"/> <!-- marks generated class as Serializable--> <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>
nano xsd/test.xsd
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="test" type="Test"/> <xs:complexType name="Test"> <xs:sequence> <xs:element name="name" type="xs:string" minOccurs="0"/> <xs:element name="birthDate" type="xs:dateTime" minOccurs="0"/> <xs:element name="dummyInt" type="xs:int" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:schema>
Run command
- xjc xsd/test.xsd -b simple.xjb -extension -npa
parsing a schema... compiling a schema... generated/ObjectFactory.java generated/Test.java org/w3/_2001/xmlschema/Adapter1.java
To generate a proper Date it might be necessary to use an adapter for xjb.
Generate Java classes with Maven, xjc and XSD
- mkdir -p /tmp/xjctest/src/main/resources
nano pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.allowed.bitarus</groupId> <artifactId>xjctest</artifactId> <version>0.1.0</version> <build> <plugins> <plugin> <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> <version>0.11.0</version> <executions> <execution> <goals> <goal>generate</goal> </goals> </execution> </executions> <configuration> <schemaDirectory>src/main/resources</schemaDirectory> <schemaIncludes> <include>*.xsd</include> </schemaIncludes> <bindingDirectory>src/main/resources</bindingDirectory> <bindingIncludes> <include>*.xjb</include> </bindingIncludes> </configuration> </plugin> </plugins> </build> </project>
- Copy test.xsd and and simple.xjb to /tmp/xjctest/src/main/resources
- run mvn clean install