我在 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 文件读取元数据的步骤中失败。
最佳答案
我能够解决这个问题。我必须为用于反序列化 xml
字符串的 XStream
实例设置类加载器。
因此,在调用 xstream.fromXml(xml)
之前执行以下操作:
xstream.setClassLoader(person.class.getClassLoader());
这将解决xstream.mapper.CannotResolveClassException
异常。这实在是太奇怪了。希望这会有所帮助。
关于xstream - 在 Kettle 下使用 xstream 时,nodecom.thoughtworks.xstream.mapper.CannotResolveClassException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9508292/