Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: for the plan.

Jump to: navigation, search


< EclipseLink‎ | Examples‎ | MOXy‎ | Spring

In order to use EclipseLink JAXB with the Spring Framework, you simply need a file and an eclipselink.jar on the classpath. No other special configuration is required. This document will demonstrate how to configure Spring to use EclipseLink JAXB.

Configuration: applicationContext.xml

In Spring, beans are configured using the applicationContext.xml file. The following XML file will be used to configure our beans:

<?xml version="1.0" encoding="UTF-8"?>
    <bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
        <property name="lazyInit" value="true"/>
        <property name="contextPath" value="example.gettingstarted"/>
    <bean id="xmlHelper" class="example.gettingstarted.XMLHelper">
        <property name="metadataFile"><value>classpath:eclipselink-oxm.xml</value></property>
        <property name="marshaller" ref="jaxbMarshaller"/>

Two beans are being defined here:

  • xmlHelper
    • This is the class that will do all of the work, i.e. marshal and unmarshal
    • We use the "metadataFile" property to indicate that we want Spring to inject the XML metadata file eclipselink-oxm.xml into the setMetadataFile method on our xmlHelper bean
    • We use the "marshaller" property to indicate that we want Spring to inject an instance of org.springframework.oxm.jaxb.Jaxb2Marshaller
  • jaxbMarshaller
    • This is an instance of the org.springframework.oxm.jaxb.Jaxb2Marshaller class that will be injected into our xmlHelper bean
    • We use the "contextPath" property to indicate the location of the model classes,, and an ObjectFactory class or jaxb.index file
    • We use the "lazyInit" property set to "true" to allow us to pass in the properties object containing the XML metadata file before the underlying JAXBContext is created

Following is the file that tells Spring to use EclipseLink JAXB:

javax.xml.bind.context.factory = org.eclipse.persistence.jaxb.JAXBContextFactory

Bootstrapping the Application

The standard Spring bean lookup method can be used to gain access to the xmlHelper bean:

// initialize IoC Container
ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// retrieve the XMLHelper instance from the Container
XMLHelper xmlHelper = (XMLHelper) appContext.getBean("xmlHelper");


Here is an example of EclipseLink JAXB used with the Spring Framework.


  • EclipseLink
    • The latest version of EclipseLink can be found on the EclipseLink download page. eclipselink.jar must be on the classpath.
  • Spring Framework
    • The latest version of the Spring Framework can be found on the Spring download page.
    • The JAR files in the dist folder of your Spring install as well as commons-logging.jar found in /projects/spring-build/lib/ivy must be on the classpath.
  • Model Classes

Source/Config Files

This section contains the various source and configuration files for the example.


Following is the XML metadata file that will be applied to the model classes:

<?xml version="1.0" encoding="US-ASCII"?>
<xml-bindings xmlns="" package-name="example.gettingstarted">
        <java-type name="Customer">
            <xml-type name="customer" prop-order="name address phoneNumbers" />
                <xml-element java-attribute="name" xml-path="personal-info/name/text()" />
                <xml-element java-attribute="address" xml-path="contact-info/address" />
                <xml-element java-attribute="phoneNumbers" xml-path="contact-info/phone-number" />
        <java-type name="PhoneNumber">
                <xml-attribute java-attribute="type" />
                <xml-value java-attribute="value" />

This is the class responsible for marshal/unmarshal operations:

package example.gettingstarted;
import java.util.HashMap;
import java.util.Map;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import org.springframework.oxm.XmlMappingException;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
public class XMLHelper {
    private static String ECLIPSELINK_OXM_KEY = "eclipselink-oxm-xml";
    private Map<String, Object> properties;
    private Jaxb2Marshaller marshaller;
     * Unmarshal a given source
    public Object load(Source source) throws XmlMappingException, IOException {
        return marshaller.unmarshal(source);
     * Marshal a given Object to a Result
    public void save(Object obj, Result result) throws XmlMappingException, IOException {
        marshaller.marshal(obj, result);
     * This method is used by Spring to inject the eclipselink-oxm.xml metadata 
     * file to be applied to the model.
    public void setMetadataFile(Resource metadataFile) throws IOException {
        properties = new HashMap<String, Object>();
        properties.put(ECLIPSELINK_OXM_KEY, new StreamSource(metadataFile.getInputStream()));
     * This method is used by Spring to inject an instance of Jaxb2Marshaller
    public void setMarshaller(Jaxb2Marshaller marshaller) {
        this.marshaller = marshaller;

This code demonstrates how the XMLHelper bean can be acquired and used to perform marshal/unmarshal operations on a Customer.

// initialize IoC Container
ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// retrieve the XMLHelper instance from the Container
xmlHelper = (XMLHelper) appContext.getBean("xmlHelper");
// load Customer
Customer customer = (Customer) xmlHelper.load(new StreamSource(new FileInputStream("customer-out.xml")));
// update Customer
PhoneNumber pn = new PhoneNumber();
// save Customer, new StreamResult(new FileOutputStream("customer-out.xml")));


This is a sample instance document.

<?xml version="1.0" encoding="UTF-8"?>
      <name>Jane Doe</name>
         <city>My Town</city>
         <street>123 Any Street</street>
      <phone-number type="work">613-555-1111</phone-number>
      <phone-number type="cell">613-555-2222</phone-number>


This is the jaxb.index file used by the context to identify the classes it will be responsible for.


Back to the top