usar - ¿Cuál es la mejor manera de convertir un objeto java en xml con apis de código abierto
jaxb java anotaciones (7)
Me preguntaba cuáles son las apis mejores o más usadas para convertir un objeto java en xml. Soy bastante nuevo en el tema. ¿Hay algún tipo de llamada api que puedas hacer para pasar un objeto y devolver xml? ¿O es mucho más tedioso cuando se necesita construir el documento manualmente extrayendo los valores de los objetos?
He estado leyendo sobre xerces, sax y jaxb. Me gustaría continuar a lo largo de esta ruta de código abierto.
¡Gracias!
¿Qué pasa con java.beans.XMLEncoder y java.beans.XMLDecoder?
Ejemplo en http://www.rgagnon.com/javadetails/java-0470.html
Adiós.
Disponible con Java 6 es una API para convertir objetos anotados de Java a XML. El siguiente código muestra cómo convertir un objeto anotado en una cadena XML
final JAXBElement<Type> o = new ObjectFactory().createElement(new Type()); final Marshaller m = JAXBContext.newInstance(Type.class).createMarshaller(); // Do this if you want the result to be more human readable. m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); m.marshal(o, System.out);
Puede ampliar esto añadiendo la validación de esquema (nota muy lenta, pero útil para la depuración)
final JAXBElement<Type> o = new ObjectFactory().createElement(new Type()); final Marshaller m = JAXBContext.newInstance(Type.class).createMarshaller(); final Schema schema = SchemaFactory.newInstance( "http://www.w3.org/2001/XMLSchema").newSchema( getClass().getResource("/META-INF/wsdl/schema.xsd")); m.setSchema(schema); m.marshal(o, System.out);
No necesita hacer una conversión de tipo a JAXBElement si Type es un elemento definido. (es decir, tiene una anotación @XmlRootElement)
Es posible que desee ver XStream: http://x-stream.github.io
Hay muchos marcos de código abierto en este espacio. Sin embargo, Simple como su nombre lo indica, es, de lejos, la forma más fácil de realizar la serialización. Eche un vistazo al Tutorial . Otra característica es que puede realizar serialización polimórfica, lo que significa que no está tan limitado como JAXB, por ejemplo.
Para cualquiera que decida usar JAXB, asegúrese de guardar en el caché JAXBContext. Se sabe que JAXBContext.newInstance es muy caro. Documenté un caso en el que la conversión a xml se usa en el registro y JAXBContext.newInstance no se almacena en caché, ocasionó una sobrecarga de rendimiento de hasta 5 segundos cuando fue invocado por 20 usuarios simultáneos.
http://app-inf.blogspot.com/2012/10/performance-tuning-logging-right-way.html
Esto no es para desalentar a nadie que use JAXB. Una vez que JAXBContext se almacena en caché, el rendimiento es excelente, como se explica en el enlace anterior.
XMLBeans es otro, similar a JAXB. No he mirado JAXB desde hace un tiempo, cuando lo hice fue bastante malo en comparación con XMLBeans, pero eso fue hace años (y prefiero usar cosas que están en el JDK en comparación con las de terceros, pero todavía uso XMLBeans hasta el día de hoy).
JAXB es definitivamente la solución.
¿Por qué? Bueno, está dentro del JDK 6 , por lo que nunca lo encontrarás sin mantenimiento.
Utiliza anotaciones Java para declarar propiedades relacionadas con XML para clases, métodos y campos.
Nota: JAXB también le permite "desglosar" fácilmente los datos XML (que previamente se recopilaron de instancias de objetos Java) de nuevo en instancias de objetos.
Una cosa más de JAXB es: es compatible con otras tecnologías relacionadas con Java, como JAX-RS (una API RESTful de Java, que está disponible como parte de Java EE 6 ). JAX-RS puede servir y recibir objetos JAXB sobre la marcha , sin la necesidad de ordenarlos / desasignarlos. Es posible que desee consultar Netbeans , que contiene soporte inmediato para JAX-RS. Lee este tutorial para comenzar.
editar:
Para ordenar / separar los objetos de Java ''aleatorios'' (o foráneos), JAXB ofrece una posibilidad bastante simple: se puede declarar un XmlAdapter y ''envolver'' las clases de Java existentes para que sean compatibles con JAXB. El uso de dicho XmlAdapter se realiza mediante @XmlJavaTypeAdapter -annotation.