2012-02-29 24 views
6

Tôi đang sử dụng xStream dưới Ấm để deserialize XML để một đối tượng Java và nó luôn luôn mang lại cho tôi những ngoại lệ: nodecom.thoughtworks.xstream.mapper.CannotResolveClassExceptionnodecom.thoughtworks.xstream.mapper.CannotResolveClassException khi sử dụng xStream dưới Ấm

Sau đó, tôi đã cố gắng mã của tôi riêng từ Ấm đun nước và như một ứng dụng Java đơn giản. và nó hoạt động tốt. Ví dụ:

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; 
    } 

} 

Và mã này hoạt động tốt. Tuy nhiên, khi tôi di chuyển mã này vào plugin Kettle, nó không thành công ở bước để đọc dữ liệu meta từ tệp XML.

Trả lời

9

Tôi đã có thể khắc phục vấn đề. Tôi phải đặt trình nạp lớp cho ví dụ XStream Tôi đang sử dụng để loại bỏ chuỗi xml.

Vì vậy, trước khi gọi xstream.fromXml(xml) làm điều này:

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

này sẽ giải quyết xstream.mapper.CannotResolveClassException ngoại lệ. Điều này thật kỳ quái. Hi vọng điêu nay co ich.

+3

bất kỳ ý tưởng * tại sao * này là cần thiết? – Baczek

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

thay đổi nó để bao gồm tên lớp, nó sẽ làm việc

xstream.alias("person", person.class); 
Các vấn đề liên quan