Pregunta

Tengo una aplicación que guarda su contexto a XML. En esta aplicación, hay una jerarquía de clases, que implementan una interfaz común y que representan diferentes configuraciones. Por ejemplo, una primera clase de configuración puede estar hecha de 4 campos de flotación pública, se puede hacer otra de un único hashmap.

Estoy tratando de determinar cuál es la mejor manera de manejar la escritura y la lectura en XML de manera genérica. Leí mucho en este sitio sobre Jaxb y Xstream, por ejemplo, que pueden hacer una instancia de clase específica desde XML.

Sin embargo, mi pregunta está relacionada con el hecho de que la clase real puede ser cualquier cosa que implementa una interfaz dada. Cuando lea el archivo XML, ¿cómo adivinaría la clase real para instanciar desde los datos XML? ¿Cómo haces eso en tus aplicaciones?

Pensé que podría escribir el nombre .class en un atributo XML, leerlo y compararlo con todos los nombres de clase posibles, hasta que encuentre una coincidencia. ¿Hay una manera más sensata?

Gracias

¿Fue útil?

Solución

En mi caso, solo tengo un tipo de encabezado que almacena el nombre de clase que se está serializado y al desestruto, solo uso el valor del encabezado para descubrir a qué clase debilitaré los valores.

Otros consejos

xstream ya debe ocuparse de esto y crear el objeto de tipo correcto.

los tutorial parece confirmar que:

Para reconstruir un objeto, puramente del XML:

Person newJoe = (Person)xstream.fromXML(xml);

Si no sabe el tipo, primero deberá asignarlo al tipo de interfaz común:

CommonInterface newObject = (CommonInterface)xstream.fromXML(xml);
// now you can either check its type or call virtual methods

Una mejor práctica utilizaría un analizador/mapeador XML bien documentado. Se ha realizado todo el trabajo de serialización/deserialización, por lo que puede preocuparse por la lógica de su negocio. Castor y Apache Axiom son dos API que he usado para mariscal/solteros (serializar/deserializar) clases de Java y XML.
http://www.castor.org

Axioma de apache

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top