java xml序列化框架,使用简单XML(org.simpleframework.xml)序列化第三方类

申屠浩歌
2023-12-01

我决定使用简单XML序列化,并且遇到了基本问题。我试图java.util.UUID在这个小类中将类实例序列化为final字段:

@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?

有没有更好的简单XML教程/示例?

谢谢。

 类似资料: