2015-04-17 3 views
1

Я обращена ниже за исключением во время десериализации с помощью XStream:исключение XStream преобразования на десериализации

com.thoughtworks.xstream.converters.ConversionException: Сервис Элемент типа com.config.Service не определен как поле типа com.config.Service

---- Отладочная информация ----

класс: com.config.ServiceNServiceConfigurations

требуется тип: com.con fig.Service

путь:/корень/услуги/услуги

Мой XML является:

<root> 
    <services> 
     <service> 
     <Id>10</Id> 
     <Name>CM</Name> 
     </service> 
     <service> 
     <Id>11</Id> 
     <Name>TM</Name> 
     </service> 
    </services> 
    <serviceConfigurations> 
     <serviceConfiguration> 
     <Key>XYZ</Key> 
     <Value>42</Value> 
     </serviceConfiguration> 
     <serviceConfiguration> 
     <Key>ABC</Key> 
     <Value>5</Value> 
     </serviceConfiguration> 
    </serviceConfigurations> 
</root> 

Я создал один класс, соответствующий корневой тег, как показано ниже:

public class ServiceNServiceConfigurations implements Serializable { 
    private List<ServiceConfiguration> serviceConfigurations; 
    private List<Service> services; 
    // setter and getter methods 
} 
public class Service implements Serializable { 
    private String Id; 
    private String Name; 
    // setter and getter methods 
} 
public class ServiceConfiguration implements Serializable{ 
    private String key; 
    private String value; 
    // setter and getter methods 
} 

В тестовом классе для десериализации я написал ниже код:

XStream xstream = new XStream(); 
     xstream.alias("root", com.config.ServiceNServiceConfigurations.class); 
     xstream.alias("service",com.config.Service.class); 
     xstream.alias("serviceConfiguration",com.config.ServiceConfiguration.class); 
     xstream.addImplicitCollection(ServiceNServiceConfigurations.class, "services", Service.class); 
     xstream.addImplicitCollection(ServiceNServiceConfigurations.class, "serviceConfigurations", ServiceConfiguration.class); 
     xstream.aliasField("Key", com.config.ServiceConfiguration.class, "key"); 
     xstream.aliasField("Value", com.config.ServiceConfiguration.class, "value"); 
     At below line Conversion Exception is coming 
obj = xstream.fromXML(xmlSerialized); 

Просьба направлять меня туда, где я ошибаюсь.

Благодаря

ответ

0

Вы должны удалить addImplicitCollection конфигурации, потому что ваши коллекции не подразумевается.

XStream xstream = new XStream(); 
     xstream.alias("root", com.config.ServiceNServiceConfigurations.class); 
     xstream.alias("service",com.config.Service.class); 
     xstream.alias("serviceConfiguration",com.config.ServiceConfiguration.class); 
     xstream.aliasField("Key", com.config.ServiceConfiguration.class, "key"); 
     xstream.aliasField("Value", com.config.ServiceConfiguration.class, "value"); 

Если они будут подразумеваться ваш XML будет выглядеть следующим образом:

<root> 
    <serviceConfiguration> 
    <Key>XYZ</Key> 
    <Value>42</Value> 
    </serviceConfiguration> 
    <serviceConfiguration> 
    <Key>ABC</Key> 
    <Value>5</Value> 
    </serviceConfiguration> 
    <service> 
    <Id>10</Id> 
    <Name>CM</Name> 
    </service> 
    <service> 
    <Id>11</Id> 
    <Name>TM</Name> 
    </service> 
</root> 
Смежные вопросы