JAXB quickstart via maven2

Tuesday, January 22, 2008 4:27
Posted in category HowTo & Tutorial
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


<!-- ....-->

javax.xml.bind
jaxb-api
2.1

com.sun.xml.bind
jaxb-impl
2.1.3

2. Adding jaxb2-mojo-plugin


org.codehaus.mojo
jaxb2-maven-plugin

xjc

com.example.myschema <!-- The name of your generated source package -->
${basedir}/src/main/generated-source

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 element = factory.createPurchaseOrder(type);
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(element, System.out);
}
}

and output is


comment

productname
2
part comment

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
  • Technorati
  • YahooMyWeb
  • Furl
  • Slashdot
  • Google Bookmarks
  • Reddit
  • TwitThis
  • StumbleUpon
  • E-mail this story to a friend!

Related posts:

  1. maven profiles
  2. More Runtime Java Stack
  3. hibernate tip: smart id generator
  4. who needs implementations?
  5. Spring is totally losing its invisibility

You can leave a response, or trackback from your own site.
Tags: , ,

5 Responses to “JAXB quickstart via maven2”

  1. DaShaun says:

    May 2nd, 2008 at 3:14 pm

    Thanks, this really helped!

  2. markatharvest says:

    December 23rd, 2008 at 6:59 am

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

    thanks again for sharing

  3. admin says:

    December 23rd, 2008 at 9:34 am

    enjoy it Mark :)

  4. gungus says:

    June 2nd, 2009 at 1:29 pm

    Hi, nicely presented.

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

    Thanks.
    //GG

  5. altuure says:

    June 9th, 2009 at 9:03 am

    thanks gungus, I have updated the post

Leave a Reply