Difference between revisions of "EclipseLink/Examples/MOXy/Spring/JAXBAnnotations"

From Eclipsepedia

< EclipseLink‎ | Examples‎ | MOXy‎ | Spring
Jump to: navigation, search
(Java Source Files)
Line 2: Line 2:
 
[[Category:EclipseLink/Examples/MOXy/Spring/JAXBAnnotations]]
 
[[Category:EclipseLink/Examples/MOXy/Spring/JAXBAnnotations]]
  
In order to use EclipseLink JAXB with the Spring Framework, you simply need a <code>jaxb.properties</code> file and an <code>eclipselink.jar</code> on the classpath.  No other special configuration is required.  This example will demonstrate how to configure Spring to use EclipseLink JAXB.
+
In order to use EclipseLink JAXB with the Spring Framework, you simply need a <code>jaxb.properties</code> file and an <code>eclipselink.jar</code> on the classpath.  No other special configuration is required.  This document will demonstrate how to configure Spring to use EclipseLink JAXB.
  
 
The latest version of EclipseLink can be found on the [http://www.eclipse.org/eclipselink/downloads/ EclipseLink download] page.
 
The latest version of EclipseLink can be found on the [http://www.eclipse.org/eclipselink/downloads/ EclipseLink download] page.
  
 
== Configuration: applicationContext.xml ==
 
== Configuration: applicationContext.xml ==
The following file will be used to configure the beans used in this example:
+
The following XML file can be used to configure beans:
 
<source lang="xml">
 
<source lang="xml">
 
<?xml version="1.0" encoding="UTF-8"?>
 
<?xml version="1.0" encoding="UTF-8"?>
Line 26: Line 26:
 
* xmlHelper
 
* xmlHelper
 
** This is the class that will do all of the work, i.e. marshal and unmarshal
 
** This is the class that will do all of the work, i.e. marshal and unmarshal
 +
** An instance of <code>org.springframework.oxm.jaxb.Jaxb2Marshaller</code> will be injected by Spring
 
* jaxbMarshaller
 
* jaxbMarshaller
 
** This is an instance of the <code>org.springframework.oxm.jaxb.Jaxb2Marshaller</code> class that will be injected into our xmlHelper
 
** This is an instance of the <code>org.springframework.oxm.jaxb.Jaxb2Marshaller</code> class that will be injected into our xmlHelper

Revision as of 14:59, 27 July 2010

In order to use EclipseLink JAXB with the Spring Framework, you simply need a jaxb.properties 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.

The latest version of EclipseLink can be found on the EclipseLink download page.

Configuration: applicationContext.xml

The following XML file can be used to configure beans:

<?xml version="1.0" encoding="UTF-8"?>
<beans 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    <bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
        <property name="contextPath" value="example.gettingstarted"/>
    </bean>
    <bean id="xmlHelper" class="example.gettingstarted.XMLHelper">
        <property name="marshaller" ref="jaxbMarshaller"/>
    </bean>
</beans>

Two beans are being defined here:

  • xmlHelper
    • This is the class that will do all of the work, i.e. marshal and unmarshal
    • An instance of org.springframework.oxm.jaxb.Jaxb2Marshaller will be injected by Spring
  • jaxbMarshaller
    • This is an instance of the org.springframework.oxm.jaxb.Jaxb2Marshaller class that will be injected into our xmlHelper
    • We use the "contextPath" property to indicate the location of the model classes, jaxb.properties, and an ObjectFactory class or jaxb.index file

Following is the jaxb.properties 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");

Java Source

Following is the XMLHelper class:

example.gettingstarted.XMLHelper.java

package example.gettingstarted;
 
import java.io.IOException;
 
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;
    }
}