java - requestmapping - XStream o Simple
spring post request body example (9)
Te recomendaría que eches un vistazo a Simple
Necesito decidir cuál usar. Mi caso es bastante simple. Necesito convertir un POJO / Bean simple a XML, y luego volver. Nada especial.
Una cosa que estoy buscando es que también incluya las propiedades principales. Lo mejor sería si puede funcionar en súper tipo, que puede ser solo una interfaz de marcador.
Si alguien puede comparar estos dos con contras y pros, y qué cosa falta en cuál. Sé que XStream también es compatible con JSON, eso es una ventaja. Pero Simple parecía más simple de un vistazo, si hacemos a un lado a JSON. ¿Cuál es el futuro de Simple en términos de desarrollo y comunidad? XStream es bastante popular, creo, incluso la palabra, "XStream", tocó muchos hilos en SO.
Gracias.
Hasta ahora, nunca he usado Simple framework.
Basado en mi experiencia con Xstream. Funcionó bien en XML. Sin embargo, para JSON, el resultado no es tan preciso como se esperaba cuando intento serializar un bean que contiene una Lista de Hashtable.
Solo por leer la documentación (estoy enfrentando el mismo problema que tú, pero aún no lo he intentado de ninguna manera, tómalo con un grano de sal):
XSTREAM
- Muy, muy fácil para Google. Es trivial encontrar ejemplos, publicaciones en el foro y publicaciones en blogs al respecto.
- Funciona de la caja. (Puede necesitar más retoques, por supuesto, pero le dará algo inmediatamente).
- Convertir una variable a un atributo requiere crear una clase de convertidor separada y registrar eso con XStream. (No es difícil para valores simples, pero es un poco más de trabajo).
- No maneja las versiones en absoluto, a menos que agregue XMT (otra biblioteca); si el XML generado por su clase cambia, no se deserializará en absoluto. (Una vez que agregue XMT, puede modificar sus clases como desee y hacer que XStream lo maneje bien, siempre y cuando cree una línea creciente de funciones incrementales de control de versiones).
- Todos los ajustes requieren que escriba código, ya sea para implementar sus propias funciones de (de) serialización o para llamar a las funciones de XStream para alterar las técnicas de (de) serialización utilizadas.
- Nota de sintaxis trivial: necesita convertir la salida del deserializador a su clase.
SENCILLO
- La página de inicio es la única fuente confiable de información; enumera una media docena de artículos externos, y hay una lista de correo, pero no se puede encontrar en el salvaje Internet.
- Requiere anotar tu código antes de que funcione.
- Es fácil crear un archivo XML más compacto utilizando atributos en lugar de nodos XML para cada propiedad.
Maneja el control de versiones al no ser estricto en el análisis cuando la clase es correcta, pero la versión es diferente. (es decir, si agregó dos campos y eliminó uno desde la última versión, ignorará el campo eliminado y no arrojará una excepción, pero no configurará los campos agregados). Al igual que XStream, no parece tener una forma de migrar datos de una versión a la siguiente, pero a diferencia de XStream, no hay una biblioteca externa para intervenir y manejarlo. Presumiblemente, la forma de manejar esto es con alguna función externa (¿y tal vez una variable de "versión" en su clase?), Entonces lo hace
Stuff myRestoredStuff = serializer.read (Stuff.class, file); myRestoredStuff.sanityCheck ();
Los ajustes de serialización comúnmente utilizados se realizan agregando / editando anotaciones, pero existe soporte para escribir sus propias funciones de serialización (de) para anular los métodos estándar si necesita hacer algo innecesario.
- Nota de sintaxis trivial: necesitas pasar la clase del objeto restaurado al deserializador (pero no necesitas lanzar el resultado).
Echaba un vistazo rápido a simple mientras leía ; como una enmienda a la útil publicación de Paul Marshalls, pensé que mencionaría que Simple parece apoyar el control de versiones a través de anotaciones-
http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php#version
Simple es mucho más lento que XStream (en objetos de serialización a xml)
http://pronicles.blogspot.com/2011/03/xstream-vs-simple.html
¿Por qué no usar JAXB en su lugar?
- Cobertura del 100% del esquema
- Enorme base de usuarios
- Implementaciones múltiples (en caso de que aciertes un error en uno)
- Incluido en Java SE 6, compatible con JDK 1.5
- Capa de enlace para JAX-WS (servicios web)
- Capa de unión para JAX-RS (Rest)
- Compatible con JSON (cuando se usa con bibliotecas como Jettison)
Recursos útiles:
Pensé que comparto esto aquí. Para hacer que XStream ignore los campos faltantes (cuando ha eliminado una propiedad):
XStream xstream = new XStream() {
@Override
protected MapperWrapper wrapMapper(MapperWrapper next) {
return new MapperWrapper(next) {
@Override
public boolean shouldSerializeMember(Class definedIn,
String fieldName) {
if (definedIn == Object.class) {
return false;
}
return super.shouldSerializeMember(definedIn, fieldName);
}
};
}
};
Esto también se puede extender para manejar versiones y cambiar el nombre de propiedad.
Crédito a Peter Voss: https://pvoss.wordpress.com/2009/01/08/xstream
Una desventaja "simple" (juego de palabras) de Simple y Jaxb es que requieren anotar sus objetos antes de que puedan ser serializados a XML. ¿Qué sucede el día en que desea serializar rápidamente el código de otra persona con objetos que no están anotados? Si puede ver que eso suceda algún día, XStream se adapta mejor. (A veces, en realidad, se reduce a requisitos simples como este para tomar decisiones).