JAXB quickstart via maven2
Image via Wikipedia
JAXB is a java framework to XML-Java transformations.
JAXB is 2.1 has a very simple API like castor and jibx And annotation driven transformers. Although those configurations can be written manually JAXB has a code generator to generate java files from XSD files. Here is sample JAXB tutorial using maven2:
1. extending project dependency
<dependencies> <!-- ....--> <dependency> <groupid>javax.xml.bind</groupid> <artifactid>jaxb-api</artifactid> <version>2.1</version> </dependency> <dependency> <groupid>com.sun.xml.bind</groupid> <artifactid>jaxb-impl</artifactid> <version>2.1.3</version> </dependency> </dependencies>
2. Adding jaxb2-mojo-plugin
<plugin>
<groupid>org.codehaus.mojo</groupid>
<artifactid>jaxb2-maven-plugin</artifactid>
<executions>
<execution>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<packagename>com.example.myschema</packagename> <!-- The name of your generated source package -->
<outputdirectory>${basedir}/src/main/generated-source</outputdirectory>
</configuration>
</plugin>
ref:http://mojo.codehaus.org/jaxb2-maven-plugin/xjc-mojo.html
3. adding your XSD files under /src/main/xsd
sample file: model1.xsd
4. generate your java file from XSD
mvn jaxb2:xjc
sample java code:
purchaseordertype.java
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "PurchaseOrderType", propOrder = {
"shipTo",
"billTo",
"comment",
"items"
})
public class PurchaseOrderType {
@XmlElement(required = true)
protected USAddress shipTo;
@XmlElement(required = true)
protected USAddress billTo;
protected String comment;
@XmlElement(required = true)
protected Items items;
@XmlAttribute
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"productName",
"quantity",
"usPrice",
"comment",
"shipDate"
})
public static class Item {
@XmlElement(required = true)
protected String productName;
protected int quantity;
@XmlElement(name = "USPrice", required = true)
protected BigDecimal usPrice;
protected String comment;
protected XMLGregorianCalendar shipDate;
@XmlAttribute(required = true)
protected String partNum;
5. And test your code
public class JAXBTest extends TestCase {
public void testMarshall() throws JAXBException {
JAXBContext jc = JAXBContext.newInstance("com.example.myschema");
ObjectFactory factory = new ObjectFactory();
PurchaseOrderType type = factory.createPurchaseOrderType();
type.setComment("comment");
Items items = factory.createItems();
Items.Item o = factory.createItemsItem();
o.setPartNum("test");
o.setComment("part comment");
o.setProductName("productname");
o.setQuantity(2);
items.getItem().add(o);
type.setItems(items);
JAXBElement<purchaseordertype> element = factory.createPurchaseOrder(type);
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(element, System.out);
}
}
and output is
<purchaseorder> <comment>comment</comment> <items> <item partnum="test"> <productname>productname</productname> <quantity>2</quantity> <comment>part comment</comment> </item> </items> </purchaseorder>
Additional references:
jaxb2-maven-plugin/xjc-mojo
maven jaxb plugins
sun official jaxb reference
![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=85e851a4-bb29-4383-b806-7a84245e3725)



Thanks, this really helped!
Thank you, was very confused with various plugins available, till the time I found your blog.
thanks again for sharing
enjoy it Mark
Hi, nicely presented.
Could you please correct the “mvn jxb2:xjc” to “mvn jaxb2:xjc”.
Thanks.
//GG
thanks gungus, I have updated the post
Hi, would you know what needs to be done in the POM file to generate equals() methods for each of the generated objects?
Solutions I’ve found are only for org.jvnet.jaxb2.maven2
maven-jaxb2-plugin
But I need to use what you have above:
org.codehaus.mojo
jaxb2-maven-plugin