Thursday, July 26, 2012

EclipseLink MOXy as a JAXB provider

EclipseLink MOXy is a JAXB provider and is a compelling alternative to the default JAXB provider built into JDK.

First a simple test to marshal a Java object to XML:

This is the model:

@XmlRootElement(name="MemberDetailsRequest", namespace="")
public class MemberDetailsRequest {

 public MemberDetailsRequest() {

 public MemberDetailsRequest(Long id) { = id;

 private Long id;

 public Long getId() {
  return id;

 public void setId(Long id) { = id;

and the test for marshalling:
package org.bk.memberservice.binding;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static;


import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;

import org.bk.memberservice.message.MemberDetailsRequest;
import org.junit.Test;

public class TestJaxbRequestBinding {

 public void testJaxbBinding() throws Exception{
  JAXBContext jaxbContext = JAXBContext.newInstance(MemberDetailsRequest.class);
  assertThat((jaxbContext instanceof org.eclipse.persistence.jaxb.JAXBContext), is(true));
  Marshaller marshaller = jaxbContext.createMarshaller();
  MemberDetailsRequest memberDetailsRequest = new MemberDetailsRequest();
  StringWriter writer = new StringWriter();
  marshaller.marshal(memberDetailsRequest, writer);
  String marshalledXml = writer.toString();
  assertThat(marshalledXml, containsString("MemberDetailsRequest"));

The highlighted line checks to make sure that MOXy's JAXBContext is the one created.

So to use MOXy as the JAXB provider, first step is to get the jar files,

I had a little difficulty finding the MOXy jars to be used in a Maven pom file, this is what worked for me:

            <id>EclipseLink Repo</id>
            <name>EclipseLink Repo</name>


The next step is to instruct to set MOXy as the JAXB provider. This is done by placing a along with any of the JAXB model classes. So in this case, I have placed a into my package holding MemberDetailsRequest class, and the contents are the following:
javax.xml.bind.context.factory = org.eclipse.persistence.jaxb.JAXBContextFactory

and that's it!

Blaise Dougan's Blog: and his very enthusiastic participation in Stack Overflow

No comments:

Post a Comment