Jump to: navigation, search

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

< EclipseLink‎ | Examples‎ | MOXy‎ | Spring
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, all that is required is a <code>jaxb.properties</code> file and <code>eclipselink.jar</code> (both of these files need to be 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, all that is required is a <code>jaxb.properties</code> file and <code>eclipselink.jar</code> (both files need to be on the classpath).  No other special configuration is required.  This example will demonstrate how to configure Spring to use EclipseLink JAXB.
  
 
Note that the latest version of EclipseLink can be found on the [http://www.eclipse.org/eclipselink/downloads/ EclipseLink download] page.
 
Note that the latest version of EclipseLink can be found on the [http://www.eclipse.org/eclipselink/downloads/ EclipseLink download] page.
Line 28: Line 28:
 
* 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
** We use the "contexPath" property to indicate the location of the model classes, <code>jaxb.properties</code>, and <code>ObjectFactory</code>/<code>jaxb.index</code>
+
** We use the "contexPath" property to indicate the location of the model classes, <code>jaxb.properties</code>, and an <code>ObjectFactory</code> or <code>jaxb.index</code> file
  
 
Following is the <code>jaxb.properties</code> file that tells Spring to use EclipseLink JAXB:
 
Following is the <code>jaxb.properties</code> file that tells Spring to use EclipseLink JAXB:
Line 34: Line 34:
 
javax.xml.bind.context.factory = org.eclipse.persistence.jaxb.JAXBContextFactory
 
javax.xml.bind.context.factory = org.eclipse.persistence.jaxb.JAXBContextFactory
 
</source>
 
</source>
 
Spring supports both the JAXB 1.0 and the JAXB 2.0 API as XML marshalling strategies.  EclipseLink JAXB implements JAXB 2, so for this example we will make use of the <code>org.springframework.oxm.jaxb.Jaxb2Marshaller</code> class. 
 
 
 
 
  
 
== XMLHelper ==
 
== XMLHelper ==
Line 55: Line 50:
 
     private Jaxb2Marshaller marshaller;
 
     private Jaxb2Marshaller marshaller;
  
 +
    /**
 +
    * Unmarshal a given source
 +
    */
 
     public Object load(Source source) throws XmlMappingException, IOException {
 
     public Object load(Source source) throws XmlMappingException, IOException {
 
         return marshaller.unmarshal(source);
 
         return marshaller.unmarshal(source);
 
     }
 
     }
 
      
 
      
 +
    /**
 +
    * Marshal a given Object to a Result.
 +
    */
 
     public void save(Object obj, Result result) throws XmlMappingException, IOException {
 
     public void save(Object obj, Result result) throws XmlMappingException, IOException {
 
         marshaller.marshal(obj, result);
 
         marshaller.marshal(obj, result);
 
     }
 
     }
  
 +
    /**
 +
    * This method is used by Spring to inject an instance of Jaxb2Marshaller
 +
    */
 
     public void setMarshaller(Jaxb2Marshaller marshaller) {
 
     public void setMarshaller(Jaxb2Marshaller marshaller) {
 
         this.marshaller = marshaller;
 
         this.marshaller = marshaller;

Revision as of 14:28, 27 July 2010

In order to use EclipseLink JAXB with the Spring Framework, all that is required is a jaxb.properties file and eclipselink.jar (both files need to be on the classpath). No other special configuration is required. This example will demonstrate how to configure Spring to use EclipseLink JAXB.

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

Configuration: applicationContext.xml

The following configuration file will be used to configure the beans used in this example:

<?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
  • jaxbMarshaller
    • This is an instance of the org.springframework.oxm.jaxb.Jaxb2Marshaller class that will be injected into our xmlHelper
    • We use the "contexPath" property to indicate the location of the model classes, jaxb.properties, and an ObjectFactory 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

XMLHelper

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;
    }
}