Сериализация сторонних классов с помощью Simple XML (org.simpleframework.xml)

Я решил использовать Простую сериализацию XML и застрял с основной проблемой. Я пытаюсь сериализовать экземпляр класса java.util.UUID как конечное поле в этом небольшом классе:

@Root
public class Identity {
    @Attribute
    private final UUID id;

    public Identity(@Attribute UUID id) {
        this.id = id;
    } 
}

Учебное пособие показывает, как сериализовать сторонние объекты, регистрируя конвертеры следующим образом:

Registry registry = new Registry();
registry.bind(UUID.class, UUIDConverter.class);
Strategy strategy = new RegistryStrategy(registry);
Serializer serializer = new Persister(strategy);

serializer.write( object, stream );

Подходящий конвертер для UUID довольно прост:

public class UUIDConverter implements Converter {
    @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());
    }
}

Но этот простой код у меня просто не работал, во время сериализации объектов с полями UUID было сгенерировано исключение Преобразование класса java.util.UUID не поддерживается .

Я пробовал нечто похожее с пользовательским Matcher (которого не было в учебнике), который работает для меня: классы

Serializer serializer = new Persister(new MyMatcher());

serializer.write( object, stream );

и Matcher выглядят так:

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 {
    @Override
    public UUID read(String value) throws Exception {
        return UUID.fromString(value);
    }
    @Override
    public String write(UUID value) throws Exception {
        return value.toString();
    }
}

Вопросы:

  • Всегда ли рекомендуется использовать пользовательский Matcher для потоковой передачи сторонних классов?
  • В каком случае я могу использовать Converter?
  • Есть ли лучшие учебники / примеры для Simple XML?

Спасибо.

17
задан quietmint 1 November 2012 в 22:59
поделиться