Java使用XStream读取XML

我正在尝试使用XStream反序列化此XML文件,我收到此错误

Exception in thread "main" com.thoughtworks.xstream.converters.ConversionException: Authors : Authors ---- Debugging information ---- message : Authors cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException cause-message : Authors class : java.util.ArrayList required-type : java.util.ArrayList converter-type : com.thoughtworks.xstream.converters.collections.CollectionConverter path : /ListOfDBook/DBook/Authors class[1] : com.test.books.ListOfDBook converter-type[1] : com.thoughtworks.xstream.converters.reflection.ReflectionConverter version : null ------------------------------- at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:79) at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65) at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:355) at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:306) at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:234) at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65) at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50) at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134) at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32) at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1058) at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1042) at com.thoughtworks.xstream.XStream.fromXML(XStream.java:922) at com.test.booktest.BookImport.getBooks(BookImport.java:34) at com.test.booktest.Client.main(Client.java:6) Caused by: com.thoughtworks.xstream.mapper.CannotResolveClassException: Authors at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:56) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:55) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:79) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:74) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:45) at com.thoughtworks.xstream.core.util.HierarchicalStreams.readClassType(HierarchicalStreams.java:29) at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:70) at com.thoughtworks.xstream.converters.collections.CollectionConverter.addCurrentElementToCollection(CollectionConverter.java:79) at com.thoughtworks.xstream.converters.collections.CollectionConverter.populateCollection(CollectionConverter.java:72) at com.thoughtworks.xstream.converters.collections.CollectionConverter.populateCollection(CollectionConverter.java:66) at com.thoughtworks.xstream.converters.collections.CollectionConverter.unmarshal(CollectionConverter.java:61) at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) ... 16 more 

有了这个XML

     Google http://google.com     

有了这些课程

 //ListOfDBook.java public class ListOfDBook { public ArrayList DBook; } //DBook.java public class DBook { public ArrayList Authors; } //DAuthor.java public class DAuthor { String Name; String Url; } //BookImport.java import com.test.books.*; XStream xstream = new XStream(new DomDriver()); xstream.alias("ListOfDBook", ListOfDBook.class); InputStream in = new FileInputStream("Books.xml"); ListOfDBook = (ListOfDBook)xstream.fromXML(in); 

我通过读取XML文件重新创建了类,并且不能更改XML文件。 我做错了吗?

你缺少作者?

 //ListOfDBook.java public class ListOfDBook { public ArrayList DBook; } //DBook.java public class DBook { public ArrayList Authors; } //Author.java public class Author { public ArrayList DAuthors; } //DAuthor.java public class DAuthor { String Name; String Url; } 

编辑2:

您需要使用addImplicitCollection

 import java.util.*; import com.thoughtworks.xstream.*; import com.thoughtworks.xstream.io.*; import com.thoughtworks.xstream.io.xml.*; import java.io.*; public class Test { public static void main(String[] args) throws Exception { XStream xstream = new XStream(new DomDriver()); xstream.alias("ListOfDBook", ListOfDBook.class); xstream.alias("DBook", DBook.class); xstream.alias("Authors", Authors.class); xstream.alias("DAuthor", DAuthor.class); xstream.addImplicitCollection(Authors.class, "dauthors"); xstream.addImplicitCollection(DBook.class, "authors"); xstream.addImplicitCollection(ListOfDBook.class, "dbooks"); InputStream in = new FileInputStream("Books.xml"); ListOfDBook var = (ListOfDBook)xstream.fromXML(in); } } //ListOfDBook.java class ListOfDBook { public List dbooks = new LinkedList(); } //DBook.java class DBook { public List authors = new LinkedList(); } //Authors.java class Authors { public List dauthors = new LinkedList(); } //DAuthor.java class DAuthor { public String Name; public String Url; }