Enterprise Java

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='http://bk.org/memberservice/')
@XmlAccessorType(XmlAccessType.FIELD)
public class MemberDetailsRequest {

 public MemberDetailsRequest() {
 }

 public MemberDetailsRequest(Long id) {
  this.id = id;
 }

 private Long id;

 public Long getId() {
  return id;
 }

 public void setId(Long id) {
  this.id = id;
 }
}

and the test for marshaling:

package org.bk.memberservice.binding;

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

import java.io.StringWriter;

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

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

public class TestJaxbRequestBinding {

 @Test
 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();
  memberDetailsRequest.setId(1L);
  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:

<repository>
            <id>EclipseLink Repo</id>
            <url>http://download.eclipse.org/rt/eclipselink/maven.repo</url>
            <name>EclipseLink Repo</name>
        </repository>

  <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>org.eclipse.persistence.moxy</artifactId>
            <version>2.4.0</version>
        </dependency>

The next step is to instruct to set MOXy as the JAXB provider. This is done by placing a jaxb.properties along with any of the JAXB model classes. So in this case, I have placed a jaxb.properties 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!

Reference: EclipseLink MOXy as a JAXB provider from our JCG partner Biju Kunjummen at the all and sundry blog.

Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Inline Feedbacks
View all comments
Back to top button