2011-02-17 23 views
10

Intento serializar la colección incrustada usando simple. Por ejemplo:Framework SimpleXml - colecciones incrustadas

Map<String, List<MyClass>> 

que ya se han agregado anotaciones necesarias en MiClase, he intentado con @ElementMap pero no funciona: Exception in thread "main" org.simpleframework.xml.transform.TransformException: Transform of class java.util.ArrayList not supported

si es sólo

@ElementMap Map<String, MyClass> 

que funciona bien . No sé cómo lidiar con la colección integrada. Sé acerca de la anotación @ElementList pero no sé cómo usarla en este caso. ¿Algún consejo?

Respuesta

9

Me encuentro con el mismo problema. La única forma en que logré que funcionase ha sido una Lista de envolver hack cursis en otra clase.

public class MyWrapper { 

    @ElementList(name="data") 
    private List<MyClass> data = new ArrayList<MyClass>(); 

    public MyWrapper(List<MyClass> data) { 
     this.data = data; 
    } 

    public List<MyClass> getData() { 
     return this.data; 
    } 

    public void setData(List<MyClass> data) { 
     this.data = data; 
    } 

} 

Y entonces, en lugar de

@ElementMap Map<String,List<MyClass>> 

... tendrías:

@ElementMap Map<String,MyWrapper> 

En mi caso, el mapa es totalmente privado a mi clase (es decir, otras clases nunca hablo directamente con el Mapa), por lo que el hecho de que tenga esta capa adicional aquí no hace mucha diferencia. El XML que se produce, por supuesto, es asqueroso, pero de nuevo, en mi caso, es soportable porque no hay nada fuera de mi clase que lo esté consumiendo. Desearía tener una solución mejor que esta, pero por el momento, estoy perplejo.

+0

¡Gracias por la respuesta! También lo pensé :) Pude serializar ese objeto usando mi propio convertidor que implementa la interfaz org.simpleframework.xml.convert.Converter. Pero no estoy contento con ambas soluciones. Espero que haya una manera más simple de hacerlo de la caja. Estamos hablando de serializar colecciones de Java, no es una ciencia de cohetes :) –

+0

Acabo de probar mi propio convertidor por sugerencia, de hecho creo que es la mejor (aunque no la ideal) opción de las dos. Al menos con el convertidor no estoy contaminando mis objetos de dominio con estructuras que están solo ahí para hacer feliz al serializador: p –