JAXB quickstart via maven2

Apache Maven

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

Items.java

@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]
Share and Enjoy:
  • Digg
  • del.icio.us
  • Netvouz
  • DZone
  • Wists
  • LinkedIn
  • Slashdot
  • Google Bookmarks
  • Reddit
  • StumbleUpon
  • email
  • Twitter
  • FriendFeed

Related posts:

  1. JGroups-Spring In Action
  2. maven profiles
  3. Annotations have been more successful than XML
  4. More Runtime Java Stack
  5. Executors.newFixedThreadPool(n) – Suspended Threads

  1. Thanks, this really helped!

  2. Thank you, was very confused with various plugins available, till the time I found your blog.

    thanks again for sharing

    • gungus
    • June 2nd, 2009

    Hi, nicely presented.

    Could you please correct the “mvn jxb2:xjc” to “mvn jaxb2:xjc”.

    Thanks.
    //GG

  1. No trackbacks yet.