2013-04-28 4 views
1

У меня есть следующий XML:XStream проблема с неявной коллекцией

<appConfig> 
    <database isSource="true" fizz="129"/> 
    <database isSource="false" fizz="29494" /> 
    <buzz bee="always" /> 
</appConfig> 

Это должно отображаться на следующий POJOs:

public class AppConfig { 
    private Database sourceDb; 
    private Database targetDb; 
    private Buzz buzz; 
} 

public class Database { 
    // Omitted for brevity... 
} 

public class Buzz { 
    // Omitted for brevity... 
} 

И настроенный следующий XStream картографа:

XStream oxMapper = new XStream(); 
oxMapper.alias("appConfig", AppConfig.class); 
oxMapper.alias("database", Database.class); 
oxMapper.alias("buzz", Buzz.class); 

Чтобы прочитать и десериализовать XML следующим образом:

ApplicationConfig appCfg = (ApplicationConfig)oxMapper.fromXML(
     getXMLSnippet()); 

Но я получаю эту ошибку:

Element database of type com.myapp.Database is not defined as field in type com.myapp.AppConfig 

Я прочитал this article, который говорит о неявных коллекциях, и считают, что XStream считает мои два Database элементов являются частью списка (неявные коллекций), когда на самом деле они не являются (они должны отображаться на 2 разных свойствах AppConfig).

Как исправить это? Заранее спасибо!

ответ

0

Вы должны установить псевдонимы на имя поля, а не тип. Для вашего примера это должно быть:

oxMapper.alias("sourceDb", Database.class); 
oxMapper.alias("targetDb", Database.class); 
oxMapper.alias("buzz", Buzz.class); 

 Смежные вопросы

  • Нет связанных вопросов^_^