Uso simpleframework (http://simple.sourceforge.net/) en un proyecto para mis necesidades de serialización/deserialización, pero no funciona como se esperaba (bueno, al menos no como espero) cuando se trata de valores de Cadena vacíos/nulos.simpleframework, deserializar un elemento vacío en una cadena vacía en lugar de nulo
Si serializo un objeto con un valor de cadena vacío, se mostrará como un elemento xml vacío.
Así que este
MyObject object = new MyObject();
object.setAttribute(""); // attribute is String
habría serializar como
<object>
<attribute></attribute>
</object>
Pero deserializar ese atributo vacío va a terminar como nula, en lugar de una cadena vacía.
¿Estoy completamente loco por pensar que debería ser una cadena vacía en lugar de nula? ¿Y cómo demonios puedo hacer que funcione de la manera que quiero?
Ah, y si serializo el objeto con un atributo nulo, terminará mostrando <object/>
como uno podría esperar.
Editar:
añadido un caso de prueba sencilla que estoy corriendo currenty
@Test
public void testDeserialization() throws Exception {
StringWriter writer = new StringWriter();
MyDTO dto = new MyDTO();
dto.setAttribute("");
Serializer serializer = new Persister();
serializer.write(dto, writer);
System.out.println(writer.getBuffer().toString());
MyDTO read = serializer.read(MyDTO.class, writer.getBuffer().toString(),true);
assertNotNull(read.getAttribute());
}
@Root
public class MyDTO {
@Element(required = false)
private String attribute;
public String getAttribute() {
return attribute;
}
public void setAttribute(String attribute) {
this.attribute = attribute;
}
}
Editar, fijo:
Por alguna razón el valor InputNode es nulo cuando una cadena vacía se pasa a ella . Resolví el problema creando un Convertidor personalizado para Cadena.
new Converter<String>() {
@Override
public String read(InputNode node) throws Exception {
if(node.getValue() == null) {
return "";
}
return node.getValue();
}
@Override
public void write(OutputNode node, String value) throws Exception {
node.setValue(value);
}
});
¡Muchas gracias! – Boy
funciona como un encanto –