gpt4 book ai didi

Java 使用 XStream 读取 XML

转载 作者:数据小太阳 更新时间:2023-10-29 02:22:06 25 4
gpt4 key购买 nike

我正在尝试使用 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

<ListOfDBook xmlns="Test.Books" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<DBook>
<Authors>
<DAuthor>
<Name>Google</Name>
<Url>http://google.com</Url>
</DAuthor>
</Authors>
</DBook>
</ListOfDBook>

有了这些类

//ListOfDBook.java
public class ListOfDBook {
public ArrayList<DBook> DBook;
}

//DBook.java
public class DBook {
public ArrayList<DAuthor> 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;
}

//DBook.java
public class DBook {
public ArrayList<Author> Authors;
}

//Author.java
public class Author {
public ArrayList<DAuthor> 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<DBook> dbooks = new LinkedList<DBook>();
}

//DBook.java
class DBook {
public List<Authors> authors = new LinkedList<Authors>();
}

//Authors.java
class Authors {
public List<DAuthor> dauthors = new LinkedList<DAuthor>();
}

//DAuthor.java
class DAuthor {
public String Name;
public String Url;
}

关于Java 使用 XStream 读取 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18290309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com