Search code examples
xstream

XStream. UnknownFieldException


Please, tell me why an Exception is generated? I am getting exception, when I try to de-serialize xml to java object.

com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field addressservice.Region.region.

---- Debugging information ----
field               : region
class               : addressservice.Region
required-type       : addressservice.Region
converter-type      : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
path                : /AddressServiceConfig/regions/region
line number         : 3
class[1]            : addressservice.AddressServiceConfig
version             : 1.4.7

My XML:

<addressServiceConfig>
    <regions>
        <region>
            <regionName>region1</regionName>
            <provinces>
                <province>
                    <name>province11</name>
                    <code>11</code>
                </province>
                <province>
                    <name>province12</name>
                    <code>12</code>
                </province>

            </provinces>
        </region>
        <region>
            <regionName>region2</regionName>
            <provinces>
                <province>
                    <name>province21</name>
                    <code>21</code>
                </province>
                <province>
                    <name>province22</name>
                    <code>22</code>
                </province>
            </provinces>
        </region>
    </regions>

    <pathToCodeposFiles></pathToCodeposFiles>
</addressServiceConfig>

My Classes

@XStreamAlias("addressServiceConfig")
public class AddressServiceConfig
{
    private String pathToCodeposFiles;
    @XStreamImplicit(itemFieldName = "region")
    private List<Region> regions;
}

@XStreamAlias("region")
public class Region
{
    private String regionName;
    @XStreamImplicit(itemFieldName = "province")
    private List<Province> provinces;
}

@XStreamAlias("province")
public class Province
{
    private int code;

    private String name;
}

Please help.


Solution

  • Your xml definition does not have implicit collections regions and provinces but explicit ones.

    You should remove @XStreamImplicit(itemFieldName = "region") and @XStreamImplicit(itemFieldName = "province") from your class definitions.

    Explicit regions collection:

    <addressServiceConfig>
      <regions>
        <region>
        ...
        </region>
        <region>
        ...
        </region>
      </regions>
    </addressServiceConfig>
    

    Implicit regions collection:

    <addressServiceConfig>
      <region>
      ...
      </region>
      <region>
      ...
      </region>
    </addressServiceConfig>