【问题标题】:UnknownFieldException - No such fieldUnknownFieldException - 没有这样的字段
【发布时间】:2014-01-27 10:53:28
【问题描述】:

当我尝试使用 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>
</>

【问题讨论】:

  • 您能展示一下如何配置您的 XStream 对象吗?

标签: java xstream


【解决方案1】:

只是为了回答这个问题,我的父类中似乎有一些 XStream 注释错误,这导致了层次结构中的错误。

【讨论】:

    【解决方案2】:

    对我来说,我添加了以下行以消除异常:

    xStream.ignoreUnknownElements();
    

    【讨论】:

      猜你喜欢
      • 2014-06-06
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 1970-01-01
      相关资源
      最近更新 更多