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
Related posts:
![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