2012-02-29 14 views
6

estoy usando xstream bajo Hervidor deserializar XML a un objeto Java y siempre me da la excepción: nodecom.thoughtworks.xstream.mapper.CannotResolveClassExceptionnodecom.thoughtworks.xstream.mapper.CannotResolveClassException durante el uso de xstream bajo Hervidor

Luego probé mi código separado de Kettle y como una simple aplicación de Java. y funciona bien Por ejemplo:

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

} 

Y este código funciona bien. Sin embargo, cuando muevo este código al complemento Kettle, falla en el paso para leer los metadatos del archivo XML.

Respuesta

9

Pude solucionar el problema. Tuve que configurar el cargador de clases para la instancia XStream que estoy usando para deserializar la cadena xml.

Así que antes de llamar xstream.fromXml(xml) hacer esto:

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

Esto va a resolver la excepción xstream.mapper.CannotResolveClassException. Esto es muy extraño. Espero que esto ayude.

+3

alguna idea de por qué * * esto es necesario? – Baczek

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

cambio para incluir nombre de la clase, que funcionará

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