Skip to main content
Jump to: navigation, search


< EclipseLink‎ | Examples‎ | MOXy‎ | Spring
Revision as of 09:11, 28 July 2010 by (Talk | contribs) (Example)

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="contextPath" value="example.gettingstarted"/>
    <bean id="xmlHelper" class="example.gettingstarted.XMLHelper">
        <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 "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

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.

This is the class responsible for marshal/unmarshal operations:

package example.gettingstarted;
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 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 an instance of Jaxb2Marshaller
    public void setMarshaller(Jaxb2Marshaller marshaller) {
        this.marshaller = marshaller;

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

package example.gettingstarted;
import org.springframework.context.ApplicationContext;
public class XMLHelperTest {
    private static String APP_CTX = "applicationContext.xml";
    private static String CUSTOMER_XML = "classes/customer.xml";
    private XMLHelper xmlHelper;
    public static void main(String[] args) throws Exception {
        XMLHelperTest test = new XMLHelperTest();
    public void setup() {
        // initialize IoC Container
        ApplicationContext appContext = new ClassPathXmlApplicationContext(APP_CTX);
        // retrieve the XMLHelper instance from the Container
        xmlHelper = (XMLHelper) appContext.getBean("xmlHelper");
    public void testLoadAndSaveCustomer() throws Exception {
        System.out.println("Beginning load and save Customer test.");
        // load Customer
        Customer customer = (Customer) xmlHelper.load(new StreamSource(new FileInputStream(CUSTOMER_XML)));
        if (customer == null) {
            System.out.println("Test failed!");
        // update Customer
        int newPhoneCount = customer.getPhoneNumbers().size() + 1;
        PhoneNumber pn = new PhoneNumber();
        // save Customer, new StreamResult(new FileOutputStream(CUSTOMER_XML)));
        // verify Customer was saved correctly, i.e. now has an additional phone number
        customer = (Customer) xmlHelper.load(new StreamSource(new FileInputStream(CUSTOMER_XML)));
        if (customer == null || customer.getPhoneNumbers().size() != newPhoneCount) {
            System.out.println("Test failed!");
        System.out.println("Test passed.");


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