¿Qué es O/XMapper?
Una nueva característica de Spring 3.0 es O/XMapper. El concepto de mapper O/X no es nuevo. O representa el objeto y x representa xml. Su propósito es convertir de un lado a otro entre objetos Java (casi siempre un Plainoldjavaobject, o abreviado como POJO) y documentos XML.
Por ejemplo, puede tener un frijol simple con varios atributos, y su negocio necesita convertir ese objeto Java en un documento XML. O/XMapper de Spring puede resolver ese problema para usted. Si a su vez, debe convertir un documento XML en un simple Javabean, el O/XMapper de Spring también es competente.
Una cosa a tener en cuenta: SpringO/XMapper es solo una interfaz unificada implementada por marcos de terceros populares. Para aprovechar la funcionalidad O/X de Spring, necesita una utilidad que convierta de un lado a otro entre los objetos Java y el XML. Castor es una herramienta de terceros tan popular, y este artículo utilizará esta herramienta. Otras herramientas de este tipo incluyen XMLBeans, Java Architecture for XMLBinding (JAXB), JIBX y XStream.
Marshalling and Union
Al realizar el mapeo O/X, a menudo ve los términos que se ensanchan y la desamar.
Marshalling se refiere al proceso de convertir un Javabean en un documento XML, lo que significa que todos los campos y valores de campo de un Javabean se poblarán en el archivo XML como elementos o atributos XML. A veces, el mariscal también se llama serialización.
Como es de esperar, la soltera es el proceso exacto opuesto de mariscal, que es convertir un documento XML a un Javabean, lo que significa que todos los elementos o atributos del documento XML están poblados en Javabean como campos de Java. A veces, la desamar también se llama deserialización.
Beneficios de usar O/XMapper de Spring
Uno de los beneficios más directos del uso de O/XMapper de Spring es que la configuración se puede simplificar aprovechando otras características del marco de Spring. La biblioteca de frijoles de Spring admite el uso de objetos que usan la inyección instanciada de O/X Marshaller (es decir, "inyección de dependencia" mencionada anteriormente). Reitere que esto acelerará el desarrollo y la implementación de aplicaciones.
Siguiendo las prácticas de diseño sólidas orientadas a objetos, el marco Spring/X define solo dos interfaces: Marshaller y Unmarshaller, que se utilizan para realizar funciones O/X, que es otro beneficio significativo de usar este marco. La implementación de estas interfaces está completamente abierta para desarrolladores independientes, y los desarrolladores pueden cambiarlas fácilmente sin modificar el código. Por ejemplo, si comienza con Castor para la conversión de O/X, pero luego encuentra que carece de alguna funcionalidad que necesita, en este punto puede cambiar a XMLBeans sin ningún cambio de código. Lo único que debe hacer es cambiar el archivo de configuración de Spring para usar el nuevo marco O/X.
Otro beneficio de usar O/XMapper de Spring es la jerarquía de excepciones unificadas. El marco de Spring sigue el patrón establecido utilizando su módulo de acceso a datos envolviendo el objeto de excepción original en una excepción de tiempo de ejecución creada por Spring para O/XMapper. Dado que la excepción original lanzada por un proveedor de terceros está envuelto en la excepción de tiempo de ejecución de primavera, puede descubrir la causa raíz de la excepción. No tiene que molestarse en modificar el código para detectar la excepción, ya que la excepción está envuelta en una excepción de tiempo de ejecución. Las siguientes excepciones de tiempo de ejecución extienden la excepción subyacente XMLMappingException: GenericMarshallingFailureException, ValidationFailureException, MarshallingFailureException y unmarshallingFailureException.
Empezando con señor
Lista de configuración:
APLECTIONCONEXT.XMLSPRING ARCHIVO DE CONFIGURACIÓN
<Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschemainstance" xsi: schemalocation = "http://wwww.springfreFrame http://www.springframework.org/schema/beans/spring-beans-3.0.xsd "> <bean id =" oxmdemo "> <Property name =" marshaller "ref =" CastormarShaller "/> <name de propiedad =" Unmarshaller "Ref =" Castormarshaller "/> </> </</> <! Paquete: Castor-1.3.2-core.jar, Castor-1.3.2-xml.jar-> <bean id = "CastormarShaller"> <Property Name = "MappingLocation" value = "classpath: mapping.xml"/> </bean> </beans>
Al organizar y desacoplar, el formato de mapeo aplicado debe usarse para tener éxito al no agruparse (hay una pregunta aquí. No sé si solo se puede formatear mediante el mapeo a desagrado debido a mi propio problema de escritura, de lo contrario, se informará un error que el raíz no se puede encontrar).
archivo mapping.xml
<mapping> <class name = "com.mdf.springoxm.customer"> <map-to xml = "customer"/> <field name = "flag" type = "boolean"> <bind-xml name = "flag" node = "elemento"/> </field> <field name = "name" type = "string"> <bind-xml name = "name" node = "elemento/" field " name = "Sex" type = "String"> <bind-xml name = "sex" node = "elemento"/> </field> </class> </mapping>
Personalizar archivos de Bean
Cliente.java
paquete com.mdf.springoxm; public class Customer {private String Name; private String Sex; private Boolean Flag; public String getName () {return name;} public void setName (name de cadena) {this.name = name;} public String getsex () {return sex;} public void setsex (string sex) {this.sex;} boolean getSex () bandera;} public void setFlag (bandera booleana) {this.flag = flag;}}archivo xmldemo.java
paquete com.mdf.springoxm; import java.io.fileInputStream; import java.io.fileOutputStream; import java.io.ioException; import javax.xml.transform.stream.streamresult; import javax.xml.transform.stream.streamSource; importar org.springfricework.oxm.oxm.oxm.oxm.oxm.oxm.ox.oxm.ox.oxm.oxm.oxm.oxm.oxm.oxm.oxm.oxm.oxm.oxm.oxm.oxm.oxm.ox.oxm.xer; org. getunMarShaller () {return unmarShaller;} public void setUnmarShaller FileOutputStream (filePath); getMarShaller (). Marshal (objeto, nuevo streamResult (OS));} finalmente {if (os! = Null) {os.close ();}}} public object ConvertFromXMlToObject (String xmlfile) tira ioexception {fileInputStream es = null; try {is = neweS FileInputStream (xmlFile); return getunmarshal (). Unmarshal (new StreamSource (is));} finalmente {if (is! = Null) {is.close ();}}}}prueba
importar org.springframework.context.applicationContext; import org.springframework.context.support.classpathxmlaPplicationContex Xml_file_name = "customer.xml"; public static void main (string [] args) lanza ioexception {applicationContext appContext = new classpathxmlaPplicationContext ("applicationContext.xml"); oxmdemo converter = (oxmdemo) appContext.getBean ("oxmdemo"; Customer (); customer.setName ("yiibai"); customer.setflag (true); customer.setSEx ("Haikou Haidiandao"); system.out.println ("Convertir objeto a xml") ;/ desde el objeto a xml converter.convertFromObjectToxml (Customer, XML_File_Name); System.out (do. Do Doule /n"); sysystem.out.println("Convert XML vuelve al objeto! "); // de xml a objeto Customer Customer2 = (Customer) Converter.ConvertFromXmltoObject (xml_file_name); System.out.println (Customer2); System.Println (" hecho ");}}Resultados de la prueba:
11 de mayo de 2016 2:27:52 PM org.springframework.context.support.classpathxmlaPlaPlicationContext Preparerefresh Información: Refrescante org.springframework.context.support.classpathxmlapplicationContext@1221be2: startup date [miércoles 11 de 14:27:51 cst 2016]; La jerarquía de la raíz del contexto 11 de mayo de 2016 2:27:52 PM org.springframework.beans.factory.xml.xmlBeanDefinitionRitionReadBeanDefinitions Información: Carga de definiciones XML de fran Información de AfterPropertIesset: configurada usando [Rath Class Rathed [Mapping.xml]] ¡Convertir el objeto a XML! ¡Hecho convertir xml de nuevo al objeto! com.mdf.springoxm.customer@b419da hecho
Resumir
Lo anterior trata sobre el ejemplo de entrada de OXM de primavera en este artículo, espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!