2011-11-01 8 views
5

XStreamで保存されたXMLファイルがあります。パッケージレベルを超えて表示されないクラスであるRandomAccessSubListへの参照を含みます。このエラー:XStream - 非整列 - XMLで指定された型は表示されません。

com.thoughtworks.xstream.converters.ConversionException: Cannot construct java.util.RandomAccessSubList as it does not have a no-args constructor : Cannot construct java.util.RandomAccessSubList as it does not have a no-args constructor 

---- Debugging information ---- 
message    : Cannot construct java.util.RandomAccessSubList as it does not have a no-args constructor 
cause-exception  : com.thoughtworks.xstream.converters.reflection.ObjectAccessException 
cause-message  : Cannot construct java.util.RandomAccessSubList as it does not have a no-args constructor* 

と、これはXMLです:

<customTimes class="java.util.RandomAccessSubList"> 
    <l class="list"> 
    <long>1302174300146</long> 
    <long>1302174305231</long> 
    <long>1302174310312</long> 

など

私はちょうどRandomAccessSubListのためのコンバータを書き込むことはできませんbecauそれはutilパッケージの外には見えません。この属性のクラスを無視するようにXStreamに指示する方法、または参照できないクラスに対してコンバータを指定する方法はありますか?

ありがとうございます!

答えて

8

私はそれの底にいました - xstreamはxmlを処理する必要があります(引数なしのコンストラクタは必要ありません)。問題はxstreamの古いバージョンでjdk 7を使用していたために発生しました。 1)。ここをクリックhttp://code.google.com/p/pitestrunner/issues/detail?id=4を参照してください。 jdk 6に戻って問題を修正しました(私はアップグレードできません)。

私は誰もがそれを必要とする場合RandomAccessSubListのために働いコンバータ書いたことを実現する前に:私のために探していた人には

public class RandomAccessSubListConverter extends CollectionConverter { 

public RandomAccessSubListConverter(Mapper mapper) { 
    super(mapper); 
} 

@Override 
public boolean canConvert(Class arg0) {  
    return arg0.getName().equals("java.util.RandomAccessSubList"); 
} 

@Override 
public Object unmarshal(HierarchicalStreamReader reader, 
     UnmarshallingContext context) {   
    reader.moveDown(); 
    ArrayList arrayList = new ArrayList(); 
    populateCollection(reader, context, arrayList); 
    reader.moveUp(); 
    return arrayList; 
} 

感謝を!

関連する問題