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