2011-11-01 16 views
5

XStream tarafından bir süre önce saklanan bazı XML dosyaları var ve bunlar paket seviyesinin ötesinde görünmeyen bir sınıf olan RandomAccessSubList'e referanslar içeriyor ve XStream atar, böylece varsayılan kurucu yok Bu hata:XStream - unmarshalling - XML'de belirtilmeyen tip belirtilmemiş

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* 

ve bu XML geçerli:

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

vb sadece RandomAccessSubList için bir dönüştürücü yazamıyor

becau se, kullanım paketi dışında görünmez. XStream'in bu özellik sınıfını görmezden gelmesini nasıl söyleyebilirim veya başvuruda bulunamadığım bir sınıf için nasıl bir dönüştürücü belirtebilirim?

Şimdiden teşekkürler!

cevap

8

Bunun dibine aldım - xstream'in xml ile başlaması gerektiğine dikkat çekiyor (bu, bir arcade yapıcısına ihtiyaç duymuyor), sorun, jdk 7'yi xstream'in eski bir sürümü (1.3. 1). Buraya bakın http://code.google.com/p/pitestrunner/issues/detail?id=4. Jdk 6'ya geri dönmek sorunu çözdü (çeşitli nedenlerle yükseltemiyorum). Benim için içine bakıyordu herkese

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

Teşekkür: Ben kimsenin ihtiyacı olmadığını RandomAccessSubList için çalışan bir dönüştürücü yazdım fark Önce

!