首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用XMLEncoder序列化UUID

用XMLEncoder序列化UUID
EN

Stack Overflow用户
提问于 2012-01-20 16:19:57
回答 2查看 844关注 0票数 0

我使用XMLEncoder将对象图写入XML文件。这很好,除了UUID属性(在我的中名为id)之外,我知道我需要一个PersistenceDelegate来完成它。我写了以下一篇:

代码语言:javascript
复制
class UuidPersistenceDelegate extends PersistenceDelegate {
    protected Expression instantiate(Object oldInstance, Encoder out) {
        UUID id = (UUID) oldInstance;
        return new Expression(oldInstance, id.getClass(), "fromString", new Object[]{ "id" } );
    }
}

并将其设置为编码器:

代码语言:javascript
复制
encoder.setPersistenceDelegate(UUID.class, new UuidPersistenceDelegate());

在运行时,当调用encoder.writeObject(.)时,我会得到以下异常:

java.lang.IllegalArgumentException:无效的UUID字符串: id

有人知道怎么让这件事成功吗?

EN

回答 2

Stack Overflow用户

发布于 2014-03-09 13:53:28

我还没见过有人真正正确地回答这个问题,这实际上是可行的:

代码语言:javascript
复制
public class UUIDPersistenceDelegate extends PersistenceDelegate {
private HashSet<UUID> hashesWritten = new HashSet<UUID>();

public Expression instantiate(Object oldInstance, Encoder out) {
    UUID id = (UUID) oldInstance;
    hashesWritten.add(id);
    return new Expression(oldInstance, UUID.class, "fromString", new Object[]{ id.toString() } );
}

protected boolean mutatesTo(Object oldInstance, Object newInstance) {
    return hashesWritten.contains(oldInstance);
}

}

票数 1
EN

Stack Overflow用户

发布于 2012-01-20 19:07:17

欢迎来到这里。您非常接近您的解决方案,这是代码中的一个小问题。您正在将字符串"id“传递到参数中,我确信您不想这样做。试一试:

代码语言:javascript
复制
protected Expression instantiate(Object oldInstance, Encoder out) {
    UUID id = (UUID) oldInstance;
    return new Expression(oldInstance, UUID.class, "fromString", new Object[]{ id.toString() } );
}

输出的XML并不漂亮,但至少可以消除错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8944502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档