2016-02-28 121 views
1

我想在Spring中使用Castor OXM解組來解析XML到對象。Spring Castor解映射

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> 

我收到以下錯誤:

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

我曾嘗試多種方法,花了足夠的時間,我需要從大家一些幫助吧。

任何幫助將是有用的。

回答

0

想通了,我自己,這裏是映射,爲我工作。在同樣的情況下,我正在分享幫助他人的答案。

<?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>