2016-02-28 7 views
1

J'essaye d'unmarshall un XML à l'objet en utilisant Castor OXM Unmarshalling au printemps.Unmarshalling de roulette de ressort avec le mappage

XML: 

<LevelA> 
    <LevelB> 
    <item name="itemA">value</item> 
    <item name="itemB">value</item> 
    <item name="itemC">value</item> 
    <item name="itemD">value</item> 
    <item name="itemE">value</item> 
    </LevelB> 
</LevelA> 

Object: 
Class LevelA { 
    LevelB objLevelB; 
    //getter and setter 
    } 

Class LevelB { 
    List<Items> item = new ArrayList<Items>(); 
    //getter and setter 
    } 

Class Items { 
    String Name; 
    String Value; 
    //getter and setter 
    } 


Castor Mapping: 

    <mapping> 
    <class name="LevelA"> 
     <map-to xml="LevelA" /> 
     <field name="objLevelB" type="LevelB"> 
     <bind-xml name="LevelB" /> 
      <class name="LevelB"> 
      <field name="item" type="Items" collection="arraylist"> 
      <bind-xml name="item" node="element" /> 
       <class name="Items"> 
        <field name="Name" type="string"> 
        <bind-xml name="name" node="attribute" /> 
        </field> 
        <field name="Value" type="string"> 
        <bind-xml node="text" /> 
        </field> 
       </class> 
      </field> 
      </class> 
     </field> 
    </class> 
    </mapping> 

Je reçois l'erreur suivante:

org.xml.sax.SAXException: unable to find FieldDescriptor for 'item' in ClassDescriptor of LevelB 

J'ai essayé plusieurs façons et passé assez de temps que j'ai besoin de l'aide de vous tous maintenant.

Toute aide serait utile.

Répondre

0

J'ai découvert le chemin moi-même, voici la cartographie qui a fonctionné pour moi. Je partage la réponse pour aider les autres, dans la même situation.

<?xml version="1.0" encoding="UTF-8"?> 
<mapping> 
    <description> Provides Mapping to Convert Document to POJO</description> 
    <class name="LevelAClass"> 
     <map-to xml="LevelA" /> 
     <field name="objLevelB" type="LevelBClass"> 
      <bind-xml name="LevelB" /> 
     </field> 
    </class> 

    <class name="LevelBClass"> 
     <field name="item" type="LevelCClass" 
      collection="arraylist"> 
      <bind-xml name="item" /> 
     </field> 
    </class> 

    <class name="LevelCClass"> 
     <field name="Name"> 
      <bind-xml name="name" node="attribute" /> 
     </field> 
     <field name="Value"> 
      <bind-xml name="item" node="text" /> 
     </field> 
    </class> 
</mapping>