【问题标题】:nodecom.thoughtworks.xstream.mapper.CannotResolveClassException while using xstream under Kettle在 Kettle 下使用 xstream 时出现 nodecom.thoughtworks.xstream.mapper.CannotResolveClassException
【发布时间】:2012-02-29 23:24:17
【问题描述】:

我在 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 文件中读取元数据。

【问题讨论】:

    标签: xstream kettle


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 任何想法为什么这是需要的?
    【解决方案2】:
    *xstream.alias("personname", person.class);*
    

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

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

    【讨论】:

      猜你喜欢
      • 2015-12-22
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 2014-05-24
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多