2012-02-29 8 views
6

Я использую XStream под Kettle десериализации XML в объект Java, и это всегда дает мне исключение: nodecom.thoughtworks.xstream.mapper.CannotResolveClassExceptionnodecom.thoughtworks.xstream.mapper.CannotResolveClassException при использовании XStream под 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.

ответ

9

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

Так перед вызовом xstream.fromXml(xml) сделать это:

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

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

+3

любая идея * почему * это нужно? – Baczek

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

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

xstream.alias("person", person.class); 
Смежные вопросы