0

Springを使用してWebアプリを実行しており、シリアル化ツールとしてxstreamを使用しています。カスタムコンバーターを含めるようにマーシェラーを定義しましたが、xmlを読み取るときに、xstreamが一部のフィールドを正しく解析できないため、登録したコンバーターが無視されるようです。

マーシャラーのinit関数は次のとおりです。

public void init() {
    XStream xstream = new XStream() {

        protected MapperWrapper wrapMapper(MapperWrapper next) {
            return new MapperWrapper(next) {

                public boolean shouldSerializeMember(Class definedIn, String fieldName) {
                    return definedIn != Object.class ? super.shouldSerializeMember(definedIn, fieldName) : false;
                }

            };
        }

    };
    xstream.setMode(XStream.NO_REFERENCES);
    xstream.addDefaultImplementation(ArrayList.class, PersistentList.class);
    xstream.addDefaultImplementation(ArrayList.class, PersistentBag.class);
    xstream.addDefaultImplementation(HashMap.class, PersistentMap.class); 
    xstream.addDefaultImplementation(java.util.HashSet.class, PersistentSet.class);

    xstream.alias("Array", PersistentBag.class);
    xstream.alias("list", PersistentBag.class);

    Mapper mapper = xstream.getMapper();
    xstream.registerConverter(new HibernateCollectionConverter(mapper));
    xstream.registerConverter(new HibernateMapConverter(mapper));
    xstream.registerConverter(new DateConverter());
    xstream.registerConverter(new TimeStampCustomConverter());
    xstream.registerConverter(new LongConverter());
    xstream.registerConverter(new IntConverter());
    xstream.registerConverter(new DoubleConverter());

}

私は何が欠けていますか?

4

1 に答える 1

1

クラスの特定のインスタンスにコンバーターなどを登録するため、メソッドのローカル変数以外の場所にXStream構成済みへの参照を保存する必要があります。または、 を返すメソッドにして、マーシャラーが必要なときはいつでもそれを呼び出します。XStreaminit()XStream

protected XStream createXStream() {
  XStream xs = new XStream();
  // ...
  xs.registerConverter(...);
  return xs;
}
于 2012-12-28T21:10:02.613 に答える