2012-05-24 15 views
0

Я пытаюсь разобрать файл XML для объектов с использованием XStream, но я получаю это исключение:Java XSTREAM CannotResolveClassException

Исключение в потоке «основные» com.thoughtworks.xstream.mapper.CannotResolveClassException: серверы на com.thoughtworks.xstream.mapper.DefaultMapper.realClass (DefaultMapper.java:56) на com.thoughtworks.xstream.mapper.MapperWrapper.realClass (MapperWrapper.java:30) на com.thoughtworks.xstream. mapper.DynamicProxyMapper.realClass (DynamicProxyMapper.java:55) [...]

Вот мой XML:

<servers> 
    <server> 
     <ip>10.196.113.27</ip> 
    </server> 
    <server> 
     <ip>10.196.113.31</ip> 
    </server> 
    </servers> 

Вот мой код:

public class ServerIP { 
    private String ip; 

    public String getIp() { 
     return ip; 
    } 

    public void setIp(String ip) { 
     this.ip = ip; 
    } 
} 

public class ServerHandler { 

    private String fileName = "servers.xml"; 
    private String path = "J:\\workspace\\LOG730\\src\\Q3\\"; 
    private XStream xstream = new XStream(new DomDriver()); 

    public void readFromXML() { 
     try { 
      FileInputStream fis = new FileInputStream(path + fileName); 
      ServerIP server = (ServerIP) xstream.fromXML(fis, new ServerIP()); 
      System.out.println("Host: " + server.getIp()); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } 

Исключение вызвано следующим образом:

ServerHandler serverHandler = new ServerHandler(); 
    serverHandler.readFromXML(); 

ответ

6

Попробуйте добавить класс серверов для хранения ваших экземпляров ServerIP и добавить эти строки:

xstream.alias("servers", Servers.class); 
xstream.alias("server", ServerIP.class); 

Здесь вы можете найти простой учебник по псевдонимам: http://x-stream.github.io/alias-tutorial.html

3
@XStreamAlias("server") 
public class ServerIP { 
    private String ip; 

    public String getIp() { 
     return ip; 
    } 

    public void setIp(String ip) { 
     this.ip = ip; 
    } 
} 

Извините за неполный ответ, я был отвлечен и опубликован до его завершения. Тем временем @Teg указал в этом направлении.

+1

Для использования аннотаций является хорошим дополнением на ответы – Teg