【问题标题】:xstream conversion exception on deserialization反序列化时的 xstream 转换异常
【发布时间】:2015-04-17 19:56:38
【问题描述】:

我在使用 xstream 反序列化时遇到以下异常:

com.thoughtworks.xstream.converters.ConversionException:com.config.Service 类型的元素服务未定义为 com.config.Service 类型中的字段

---- 调试信息----

类:com.config.ServiceNServiceConfigurations

必需类型:com.config.Service

路径:/root/services/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);

请指导我哪里出错了。

谢谢

【问题讨论】:

    标签: java xstream


    【解决方案1】:

    您应该删除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>
    

    【讨论】:

      猜你喜欢
      • 2017-11-07
      • 1970-01-01
      • 2016-10-08
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-28
      相关资源
      最近更新 更多