2011-11-01 7 views
5

मेरे पास कुछ समय पहले एक्सस्ट्रीम द्वारा संग्रहीत कुछ एक्सएमएल फाइलें हैं, और इसमें RandomAccessSubList, एक वर्ग जो संदर्भ स्तर से परे दिखाई नहीं दे रहा है और इसमें कोई डिफ़ॉल्ट कन्स्ट्रक्टर नहीं है, इसलिए XStream फेंकता है इस त्रुटि:एक्सस्ट्रीम - unmarshalling - एक्सएमएल में निर्दिष्ट प्रकार दिखाई नहीं दे रहा है

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* 

और इस एक्सएमएल है:

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

आदि

मैं सिर्फ RandomAccessSubList के लिए एक कनवर्टर नहीं लिख सकते हैं becau से यह उपयोग पैकेज के बाहर दिखाई नहीं दे रहा है। मैं XStream को इस विशेषता के लिए कक्षा को अनदेखा करने के लिए कैसे कह सकता हूं या मैं उस वर्ग के लिए कनवर्टर निर्दिष्ट कैसे कर सकता हूं जिसे मैं संदर्भित नहीं कर सकता?

अग्रिम धन्यवाद!

उत्तर

8

मुझे इसके नीचे पहुंच गया - एक्सस्ट्रीम को एक्सएमएल (इसे नो-एर्ग कन्स्ट्रक्टर की आवश्यकता नहीं है) को संभालना चाहिए, समस्या उत्पन्न हुई क्योंकि मैं xstream (1.3 के पुराने संस्करण के साथ 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; 
} 

धन्यवाद!

संबंधित मुद्दे