簡體   English   中英

XStream - unmarshalling - XML中指定的類型不可見

[英]XStream - unmarshalling - Type specified in XML not visible

我剛才有一些XStream存儲的XML文件,它們包含對RandomAccessSubList的引用,這個類在包級別之外是不可見的,並且沒有默認構造函數,所以XStream拋出了這個錯誤:

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編寫一個轉換器,因為它在util包之外是不可見的。 如何告訴XStream忽略該屬性的類,或者如何為我無法引用的類指定轉換器?

提前致謝!

我找到了它的底部 - 結果xstream應該處理那個xml(它不需要一個no-args構造函數),問題出現了,因為我使用的是舊版xstream(1.3.1)的jdk 7。 請參見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;
}

感謝任何為我着想的人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM