2012-02-29 80 views
6
我用的水壶下XStream的反序列化XML的Java对象

下XStream和它总是给我的例外: nodecom.thoughtworks.xstream.mapper.CannotResolveClassExceptionnodecom.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文件读取元数据的步骤中失败。

回答

9

我能解决这个问题。我不得不为XStream实例设置类加载器,用于反序列化xml字符串。

所以调用xstream.fromXml(xml)之前:

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

这将解决xstream.mapper.CannotResolveClassException例外。这真的很奇怪。希望这可以帮助。

+3

任何想法* *为什么这是需要的? – Baczek 2012-09-12 08:47:07

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

改变它包括类名,它会工作

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