2010-01-05 29 views

Respuesta

13

De hecho, el problema no está tan claramente redactado como debería. Supongo que está utilizando una colección no estándar o está usando un campo de tipo de interfaz para el cual XStream necesita almacenar la clase real.

En el segundo caso sólo puede utilizar alias:

xstream.alias("field name", Interface.class, ActualClassToUse.class);

Ver http://markmail.org/message/gds63p3dnhpy3ef2 para más detalles.

+0

Tuve un problema similar y este resultó ser el problema. Me preocupaba tener que usar alias javacode en lugar de anotaciones, pero se complementaron muy bien ya que puedo determinar la clase real que se usará en el tiempo de ejecución. – Caoilte

+0

¿Hay una alternativa de resorte oxm disponible para esto? – coffeMug

1

¿Puede dar algún ejemplo de salida? Creo que esto generalmente ocurre cuando se usan Colecciones. Sin ver la salida, mi mejor conjetura es que es necesario registrarse alias:

xstream.alias("blog", Blog.class); 

Ver http://x-stream.github.io/alias-tutorial.html para más cobertura en profundidad. De nuevo, pega algo de salida de muestra.

2

uso algo de este tipo para quitar el atributo de clase por completo en lugar de aliasing con otra cosa:

private String generateResponse(final XStream xStream) 
{ 
    StringWriter writer = new StringWriter(); 
    xStream.marshal(this, new PrettyPrintWriter(writer) { 
     @Override 
     public void addAttribute(final String key, final String value) 
     { 
      if (!key.equals("class")) 
      { 
       super.addAttribute(key, value); 
      } 
     } 
    }); 
    return writer.toString(); 
} 
18

leí su código y encontré si la clase no es mapper.defaultImplementationOf(fieldType), se agrega el atributo de clase por defecto para usted, a menos que el nombre del atributo de clase sea nulo;

Así, establece que esto puede eliminar la clase =”algo” atributos

xstream.aliasSystemAttribute(null, "class"); 
+0

¿Hay una alternativa de resorte oxm disponible para esto? – coffeMug

1

se muestra este atributo, al menos, cuando no es obvio el que se utilizará la clase. El uso de la interfaz es un ejemplo. en situaciones como la que puede probar:

xStream.addDefaultImplementation(YourDefaultImplementation.class, YourInterface.class); 

.

Cuestiones relacionadas