nodecom.thoughtworks.xstream.mapper.CannotResolveClassException при использовании xstream под Kettle - PullRequest
6 голосов
/ 01 марта 2012

Я использую XStream в Kettle для десериализации 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 ]

9 голосов
/ 01 марта 2012

Мне удалось решить проблему.Мне пришлось установить загрузчик классов для экземпляра XStream, который я использую для десериализации строки xml.

Поэтому перед вызовом xstream.fromXml(xml) сделайте следующее:

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

решит исключение xstream.mapper.CannotResolveClassException.Это действительно странно.Надеюсь, это поможет.

3 голосов
/ 01 августа 2012
*xstream.alias("personname", person.class);*

измените его на имя класса, оно будет работать

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