Serialización de clases de terceros con XML simple (org.simpleframework.xml)
He decidido usarSerialización XML simple y estaba atorado con un problema básico. Estoy tratando de serializarjava.util.UUID
instancia de clase como campo final en esta pequeña clase:
@Root
public class Identity {
@Attribute
private final UUID id;
public Identity(@Attribute UUID id) {
this.id = id;
}
}
Tutorial muestra cómo serializar objetos de terceros registrando convertidores como este:
Registry registry = new Registry();
registry.bind(UUID.class, UUIDConverter.class);
Strategy strategy = new RegistryStrategy(registry);
Serializer serializer = new Persister(strategy);
serializer.write( object, stream );
El convertidor apropiado para UUID es bastante simple:
public class UUIDConverter implements Converter<UUID> {
@Override
public UUID read(InputNode node) throws Exception {
return new UUID.fromString(node.getValue());
}
@Override
public void write(OutputNode node, UUID value) throws Exception {
node.setValue(value.toString());
}
}
Pero este código simple simplemente no funcionó para mí, durante la serialización de objetos con campos UUID se produjo una excepciónTransformación de clase java.util.UUID no compatible.
He intentado algo similar con la costumbreMatcher
(que no estaba en el tutorial) que funciona para mí:
Serializer serializer = new Persister(new MyMatcher());
serializer.write( object, stream );
yMatcher
la clase se ve así:
public static class MyMatcher implements Matcher {
@Override
@SuppressWarnings("unchecked")
public Transform match(Class type) throws Exception {
if (type.equals(UUID.class))
return new UUIDTransform();
return null;
}
}
public class UUIDTransform implements Transform<UUID> {
@Override
public UUID read(String value) throws Exception {
return UUID.fromString(value);
}
@Override
public String write(UUID value) throws Exception {
return value.toString();
}
}
Preguntas:
¿Matcher personalizado siempre es una práctica recomendada para transmitir clases de terceros?¿En qué caso puedo usar Converter?¿Hay mejores tutoriales / ejemplos para XML simple por ahí?Gracias.