当我尝试使用xstream将xml文件编组到POJO中时,我一直收到此错误,我不知道发生了什么,可以用新的眼光看待事物。
Exception in thread "main" com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field org.smurk.webtest.domain.Attribute.class-title
---- Debugging information ----
field : class-title
class : org.smurk.webtest.domain.Attribute
required-type : org.smurk.webtest.domain.Attribute
converter-type : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
path : /classification/attributes/attribute/class-title
line number : 1
class[1] : org.smurk.webtest.domain.Attributes
class[2] : org.smurk.webtest.domain.Classification
version : 1.4.6
-------------------------------
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.handleUnknownField(AbstractReflectionConverter.java:495)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:351)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:257)
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.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:474)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:406)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:257)
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.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:474)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:406)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:257)
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:1157)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1141)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1012)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1003)
at org.smurk.webtest.XmlRead.parseFile(XmlRead.java:31)
at org.smurk.webtest.Main.main(Main.java:15)
这些是相关的域对象:
@XStreamAlias("attribute")
public class Attribute {
@XStreamAlias("class-title")
private ClassTitle classTitle;
@XStreamAlias("type")
private String type;
public ClassTitle getClassTitle() {
return classTitle;
}
public void setClassTitle(ClassTitle classTitle) {
this.classTitle = classTitle;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
@XStreamAlias("class-title")
public class ClassTitle {
@XStreamAlias("title-part")
private TitlePart titlePart;
public TitlePart getTitlePart() {
return titlePart;
}
public void setTitlePart(TitlePart titlePart) {
this.titlePart = titlePart;
}
}
这是xml:
<classification symbol="A01B1/00" level="7" additional-only="false" status="PUBLISHED">
<attributes>
<attribute type="TITLES">
<class-title>
<title-part>
<text scheme="ipc">Hand tools</text>
<explanation>
<text scheme="ipc"> edge trimmers for lawns <class-ref scheme="cpc">A01G3/06</class-ref> ; </text>
<comment>
<text scheme="cpc"> machines for working soil <class-ref scheme="cpc">A01B35/00</class-ref> ; making hand tools <class-ref scheme="cpc">B21D</class-ref>
</text>
</comment>
</explanation>
</title-part>
</class-title>
</attribute>
</attributes>
</>
答案 0 :(得分:1)
为了回答这个问题,似乎我在父类中有一些错误的XStream注释,这导致了层次结构中的错误。
答案 1 :(得分:0)
对我来说,我在下面添加了行以消除异常:
xStream.ignoreUnknownElements();