UnknownFieldException - 没有这样的场

问题描述 投票:3回答:2

我不断收到这个错误,当我尝试马歇尔的XML文件转换成POJO的使用XStream的,林不知道是怎么回事,可以用新鲜的眼光做来看待事物。

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>
</>

java xstream
2个回答
1
投票

只是为了回答这个问题,看来我有一些XStream的注释错误的父类,这进一步导致错误下来的层次结构。


0
投票

对于我来说,我添加以下行来摆脱例外:

xStream.ignoreUnknownElements();
© www.soinside.com 2019 - 2024. All rights reserved.