在Kettle下使用xstream时nodecom.thoughtworks.xstream.mapper.CannotResolveClassException

时间:2012-02-29 23:24:17

标签: xstream kettle

我在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文件中读取元数据的步骤失败。

2 个答案:

答案 0 :(得分:9)

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

所以在致电xstream.fromXml(xml)之前,请执行此操作:

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

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

答案 1 :(得分:3)

*xstream.alias("personname", person.class);*

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

xstream.alias("person", person.class);