0

XMLEncoder を使用して、オブジェクト グラフを XML ファイルに書き込みます。UUID プロパティ (私の JavaBean にidという名前があります) を除いて、それは正常に動作します。それを行うには PersistenceDelegate が必要であることを知っています。私は次のものを書きました:

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" } );
    }
}

それをエンコーダに設定します。

encoder.setPersistenceDelegate(UUID.class, new UuidPersistenceDelegate());

実行時にencoder.writeObject(...)を呼び出すと、次の例外が発生します。

java.lang.IllegalArgumentException: 無効な UUID 文字列: id

これを機能させる方法を知っている人はいますか?

4

2 に答える 2

1

私は誰も実際にこれに適切に答えているのを見たことがなく、それは実際に機能します:

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);
}

}

于 2014-03-09T13:53:28.493 に答える