[英]XStream - com.thoughtworks.xstream.converters.ConversionException
I'm trying to parse an XML document, here's the structure of the document 我正在尝试解析XML文档,这是文档的结构
<students>
<student student_id="1">
<firstname>Lily</firstname>
<lastname>Brown</lastname>
<marks>
<first>62</first>
<second>90</second>
<third>94</third>
<forth>93</forth>
</marks>
</student>
</students>
but I'm getting this error 但我收到这个错误
Exception in thread "main" com.thoughtworks.xstream.converters.ConversionException:
---- Debugging information ----
cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : firstname
class : java.util.ArrayList
required-type : java.util.ArrayList
converter-type : com.thoughtworks.xstream.converters.collections.CollectionConverter
path : /students/student/firstname
line number : 4
class[1] : xstream$Students
converter-type[1] : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
version : 1.4.10
Does anyone know how to fix it, below are the classes and the parsing part 有谁知道如何解决它,下面是类和解析部分
Students.class 学生班
@XStreamAlias("students")
public static class Students{
@XStreamImplicit(itemFieldName = "student")
public List<Student> student = new ArrayList<Student>();
}
Student.class 学生班
@XStreamAlias("student")
public static class Student {
String firstname;
String lastname;
@XStreamImplicit(itemFieldName = "marks")
private List<Marks> marks;
@XStreamAlias("student_id")
@XStreamAsAttribute
int student_id;
}
Marks.class 商标课
@XStreamAlias("marks")
public static class Marks{
int first;
int second;
int third;
int forth;
}
executed code 执行代码
FileReader fileReader = new FileReader("src/100.xml");
Class<?>[] classes = new Class[] { Students.class, Student.class, Marks.class };
XStream xstream = new XStream();
xstream.useAttributeFor(Student.class, "student_id");
xstream.alias("students", Students.class);
xstream.alias("student", Student.class);
xstream.alias("marks", Marks.class);
XStream.setupDefaultSecurity(xstream);
xstream.allowTypes(classes);
Students students = (Students) xstream.fromXML(fileReader);
Thanks a lot! 非常感谢!
please try after adding @XStreamAlias("firstname")
and @XStreamAlias("lastname")
for the respective fields in the Student
class. 请为
Student
类中的相应字段添加@XStreamAlias("firstname")
和@XStreamAlias("lastname")
。
[updated] [更新]
okay, couple of changes... 好,有几处变更...
1) As I understand your code 'marks' in Student is not an array, so change it to type 'Marks' in Student. 1)据我了解,您在Student中的代码“标记”不是数组,因此请将其更改为在Student中键入“标记”。
@XStreamAlias("student")
public class Student {
String firstname;
String lastname;
@XStreamAlias("marks")
private Marks marks;
@XStreamAsAttribute
@XStreamAlias("studentid")
String student_id;
}
2) In your code, replace xstream.alias("student", Student.class);
2)在您的代码中,替换
xstream.alias("student", Student.class);
with xstream.addImplicitArray(Students.class, "student", Student.class);
与
xstream.addImplicitArray(Students.class, "student", Student.class);
or 要么
try this code to read xml 尝试这段代码以读取xml
Class<?>[] classes = new Class[] { Students.class, Student.class, Marks.class };
XStream xstream = new XStream();
xstream.autodetectAnnotations(true);
xstream.processAnnotations(Students.class);
Students students = (Students) xstream.fromXML(xml);
hope that helps. 希望能有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.