2011-11-01 1 views
5

XML 파일이 XStream에 의해 얼마 전에 저장되어 있으며 패키지 수준을 넘어서 보이지 않는 클래스 인 RandomAccessSubList에 대한 참조를 포함하므로 XStream이 throw합니다. 이 오류 :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을 처리해야한다. (no-args 생성자는 필요 없다.) xstream의 이전 버전 인 jdk 7을 사용했기 때문에 문제가 발생했다. 1). 여기 http://code.google.com/p/pitestrunner/issues/detail?id=4을 참조하십시오. jdk 6으로 돌아가서 문제를 해결했습니다 (업그레이드 할 수없는 여러 가지 이유로). 나에게로 찾고 있던 사람에게

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

감사 : 나는 누군가가 그것을 필요로하는 경우 RandomAccessSubList 근무 변환기를 작성했다는 것을 실현하기 전에

!