6

我在 Kettle 下使用 XStream 将 XML 反序列化为 Java 对象,它总是给我一个例外: nodecom.thoughtworks.xstream.mapper.CannotResolveClassException

然后我将我的代码与 Kettle 分开并作为一个简单的 Java 应用程序进行了尝试。它工作正常。例如:

public static void main(String[] args) {
    person p = new person("JJ", "MM");
    XStream xstream = new XStream(new DomDriver());
    xstream.alias("personname", person.class);
    String xml = xstream.toXML(p);
    person pp = (person) xstream.fromXML(xml);
    System.out.println(pp.toString());
}


public class person {

    private String firstname;
    private String lastname;

    public person(String first, String last) {
        this.firstname = first;
        this.lastname = last;
    }

    public String getFirstname() {
        return this.firstname;
    }

    public String getLastname() {
        return this.lastname;
    }

    public void setFirstname(String name) {
        this.firstname = name;
    }

    public void setLastname(String name) {
        this.lastname = name;
    }

}

这段代码运行良好。但是,当我将此代码移动到 Kettle 插件中时,它无法从 XML 文件中读取元数据。

4

2 回答 2

9

我能够解决这个问题。例如,我必须设置类加载器XStream来反序列化xml字符串。

所以在调用之前xstream.fromXml(xml)这样做:

 xstream.setClassLoader(person.class.getClassLoader());

这将解决xstream.mapper.CannotResolveClassException异常。这真的很奇怪。希望这可以帮助。

于 2012-03-01T02:57:54.480 回答
3
*xstream.alias("personname", person.class);*

将其更改为包含类名,它将起作用

xstream.alias("person", person.class);
于 2012-08-01T02:50:24.717 回答