E ae,
eu venho trabalhando com o Xstream a algum tempo mas sempre com arquivos xml simples.
me deparei com um problema aparentemente bobo.
o xml é este:
<?xml version='1.0' encoding='UTF-8'?>
<eveapi version="2">
<currentTime>2010-12-21 14:33:30</currentTime>
<result>
<rowset columns="groupName,groupID" key="groupID" name="skillGroups">
<row groupID="266" groupName="Corporation Management">
<rowset columns="typeName,groupID,typeID,published" key="typeID" name="skills">
<row groupID="266" published="1" typeID="11584" typeName="Anchoring">
<description>Skill at Anchoring Deployables. Can not be trained on Trial Accounts.</description>
<rank>3</rank>
<rowset columns="typeID,skillLevel" key="typeID" name="requiredSkills"/>
<requiredAttributes>
<secondaryAttribute>charisma</secondaryAttribute>
<primaryAttribute>memory</primaryAttribute>
</requiredAttributes>
<rowset columns="bonusType,bonusValue" key="bonusType" name="skillBonusCollection">
<row bonusType="canNotBeTrainedOnTrial" bonusValue="1"/>
</rowset>
</row>
<row groupID="266" published="0" typeID="3369" typeName="CFO Training">
<description>Skill at managing corp finances. 5% discount on all fees at non-hostile NPC station if acting as CFO of a corp. </description>
<rank>3</rank>
<rowset columns="typeID,skillLevel" key="typeID" name="requiredSkills">
<row skillLevel="2" typeID="3363"/>
<row skillLevel="3" typeID="3444"/>
</rowset>
<requiredAttributes>
<secondaryAttribute>charisma</secondaryAttribute>
<primaryAttribute>memory</primaryAttribute>
</requiredAttributes>
<rowset columns="bonusType,bonusValue" key="bonusType" name="skillBonusCollection"/>
</row>
</rowset>
</row>
</rowset>
</result>
<cachedUntil>2007-12-23 21:51:40</cachedUntil>
</eveapi>
depurando ele monta tranquilamente até a primeira coleção “rowset”. Quando declaro a segunda coleção o xstram meio que se perde.
O Erro é:
Exception in thread "main" com.thoughtworks.xstream.converters.ConversionException: Element row of type eveapi.pojo.SkillTree.ApiSkillTreeResultSkill is not defined as field in type eveapi.pojo.SkillTree.ApiSkillTreeResultSkills
---- Debugging information ----
class : eveapi.pojo.SkillTree.ApiSkillTreeBody
required-type : eveapi.pojo.SkillTree.ApiSkillTreeResultSkills
path : /eveapi/result/rowset/row/rowset/row
line number : 8
-------------------------------
O fato é a classe ApiSkillTreeResultSkill é o item a ser populado na lista dentro de ApiSkillTreeResultSkills
A minha definição esta da sequinte forma:
//--- root
xstream.alias("eveapi", ApiSkillTreeBody.class);
xstream.aliasAttribute(ApiSkillTreeBody.class, "version","eveapi");
//--- result
xstream.alias("result", ApiSkillTreeResult.class);
//-- SkillGroups
xstream.alias("rowset", ApiSkillTreeResultSkillGroups.class);
xstream.aliasAttribute(ApiSkillTreeResultSkillGroups.class, "name","rowset");
xstream.aliasAttribute(ApiSkillTreeResultSkillGroups.class, "key","rowset");
xstream.aliasAttribute(ApiSkillTreeResultSkillGroups.class, "columns","rowset");
xstream.addImplicitCollection(ApiSkillTreeResultSkillGroups.class, "Skillgroups",ApiSkillTreeResultSkillGroup.class);
//-- Group
xstream.alias("row", ApiSkillTreeResultSkillGroup.class);
xstream.aliasAttribute(ApiSkillTreeResultSkillGroup.class, "groupName","row");
xstream.aliasAttribute(ApiSkillTreeResultSkillGroup.class, "groupID","row");
//-- Skills
xstream.alias("rowset", ApiSkillTreeResultSkills.class);
xstream.aliasAttribute(ApiSkillTreeResultSkills.class, "name","rowset");
xstream.aliasAttribute(ApiSkillTreeResultSkills.class, "key","rowset");
xstream.aliasAttribute(ApiSkillTreeResultSkills.class, "columns","rowset");
xstream.addImplicitCollection(ApiSkillTreeResultSkills.class, "skillList", ApiSkillTreeResultSkill.class);
//--Skill
xstream.alias("row", ApiSkillTreeResultSkill.class);
xstream.aliasAttribute(ApiSkillTreeResultSkill.class, "typeName","row");
xstream.aliasAttribute(ApiSkillTreeResultSkill.class, "groupID","row");
xstream.aliasAttribute(ApiSkillTreeResultSkill.class, "typeID","row");
xstream.aliasAttribute(ApiSkillTreeResultSkill.class, "published","row");
Obrigado pela ajuda