1

Simple XML lib (バージョン 2.6.5 / 2.6.6)でjava.util.concurrent.TimeUnitをシリアライズするにはどうすればよいですか?

シリアライズしたいクラスは次のとおりです。

@Root(name="settings")
public class Config
{
    // some more code

    @Element(name="timeunit", required=true)
    private static final TimeUnit timeunit = TimeUnit.SECONDS;


    // some more code
}

シンプルな使用:

File f = // ...
Config cfg = new Config();
Serializer ser = new Persister();

ser.write(cfg, f);

そして、私はこの例外を取得しています:

org.simpleframework.xml.transform.TransformException: Transform of class java.util.concurrent.TimeUnit$4 not supported

これまで @Default などの他のアノテーションをテストしましたが、同じ問題がありました。なぜSimpleがTimeUnitsに問題があるのか​​ 疑問に思っています-他のすべてのタイプ(クラス/プリミティブタイプ)は問題なく動作します。

4

1 に答える 1

1

考えられる解決策は次のとおりです。

注釈:

@Element(name="timeunit", required=true)
@Convert(TimeUnitConverter.class)
private static final TimeUnit timeunit = TimeUnit.SECONDS;

コンバータ:

public class TimeUnitConverter implements Converter<TimeUnit>
{
    @Override
    public TimeUnit read(InputNode node) throws Exception
    {
        return TimeUnit.valueOf(node.getValue().toUpperCase());
    }


    @Override
    public void write(OutputNode node, TimeUnit value) throws Exception
    {
        node.getAttributes().remove("class"); /* Not required */
        node.setValue(value.toString().toLowerCase());
    }

}
于 2012-08-30T19:53:45.523 に答える