04 febrero, 2012

Usando OXM de Spring 3.0 con JAXB

OXM (Object to XML Mapping) permite convertir un documento XML desde/hacia un objeto.  Este proceso de conversión también se conoce como serialización XML o enlace de datos.  Un marshaller serializa un objeto a XML, y un unmarshaller deserializa un XML a un objeto.

Características que presenta:
  • Fácil de utilizar
  • Interfaces consistentes
  • Jerarquía de excepciones consistentes
Spring ofrece una abstracción consistente para los marcos más populares de Java, permitiendo cambiar fácilmente de uno a otro. Soporta JaxB, Castor, XMLBean, JiBX y XStream.


JAXB es un framework de mapeo objeto / XML compatible con el esquema XML de W3C. Spring proporciona Jaxb2Marshaller que utiliza JAXB 2.0 API.


La configuración para el uso de Jaxb2Marshaller es:

<beans>
    <bean id="jaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
        <property name="classesToBeBound">
            <list>
                <value>myapp.springrest.domain.Movie</value>                
            </list>
        </property>
    </bean>
</beans>
 

Los pasos para utilizar OXM serían
  • Crear un proyecto y modificar el pom.xml para incluir la siguiente dependencia:
        <dependency>           
            <groupId>org.codehaus.castor</groupId>
            <artifactId>castor</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>xerces</groupId>
            <artifactId>xercesImpl</artifactId>
            <version>2.9.1</version>
        </dependency>
 

  • Crear la clase a serializar, para utilizarlo con JaxB, es necesario incluir la anotación @XmlRootElement(name="example")
  • Crear interfaz O/X Mapper
  • Crear la clase de implementación para la interfaz
  • Incluir el bean con la clase de implementación en el fichero applicationContext.xml , de esta forma podremos utilizar nuestros propios métodos de marshaller y unmarshaller
<?xml version="1.0" encoding="UTF-8"?>
<beans>
    <context:component-scan base-package="com.unitedcoders.examples.spring.oxm.beans" />
    <bean id="oxMapper" class="com.unitedcoders.examples.spring.oxm.mapper.OxMapperImpl">
        <property name="marshaller" ref="jaxbMarshaller" />
        <property name="unmarshaller" ref="jaxbMarshaller" />
    </bean>
    <oxm:jaxb2-marshaller id="jaxbMarshaller">
        <oxm:class-to-be-bound name="com.unitedcoders.examples.spring.oxm.beans.Person" />
    </oxm:jaxb2-marshaller>
</beans>

  • Creamos una clase Main para comprobar
Podéis encontrar más información en este post
           



    No hay comentarios:

    Publicar un comentario