EclipseLink MOXy as a JAXB provider
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.