Betwixt施用笔记——一个模板文件搞定复杂结构的Bean

Betwixt使用笔记——一个模板文件搞定复杂结构的Bean
对于复杂结构的beans,是否能够仅使用一个完整的.betwixt模版文件,而不是多个呢?

例如,对于如下的bean:
public class Person{   
    public String getName(){}   
    public void setName(String name){}   
    public Pocket getPocket(){}   
    public void setPocket(Pocket pock){}   
}   
  
public class Pocket{   
    public int getObjNum(){}   
    ……   
    public String[] getObjects(){}   
    ……   
}  

为了获取如下的xml文件:
<person>  
    <name>xiaoxiao</name>  
    <pocket>  
        <number>2</number>  
        <objects>  
            <object>000001</object>  
            <object>000002</object>  
        </objects>  
    </pocket>  
</person>  

我需要准备两个.betwixt模版文件:
Person.betwixt 和 Pocket.betwixt

那么,如何用一个模板文件搞定呢?
betwixt提供一个加载配置文件的方法:
//读取配置文件并加载   
InputSource ins = new InputSource(new FileReader("D:\\workspace\\translate_demo\\cfg\\Person.betwixt"));   
beanWriter.getXMLIntrospector().register(ins);   
  
beanWriter.write(person);  

然后编辑如下的.betwixt模板:
<?xml version="1.0"?>  
<betwixt-config>  
<!--name of the class to map -->  
    <class name="com.translate.demo.Person">  
    <!-- standard definitions (same as in standard .betwixt file)    -->  
        <element name="person">  
            <element name="name" property="name"/>  
            <element name="ych-pocket">  
                <element property="pocket"/>  
            </element>  
        </element>  
    </class>  
    <class name="com.translate.demo.Pocket">  
        <element name="pocket">  
            <element name="number" property="objNum"/>  
            <element name="objects">  
                <element name="object" property="objectName"/>  
            </element>  
        </element>  
    </class>  
</betwixt-config>  


好了,一个模板文件就搞定了~:)

注意:
<element property="pocket"/>

注意这个元素,当元素是一个复杂结构时,这里的name属性会覆盖该结构的模板中的第一层元素名,所以为了结构清晰,这里最好不要写name属性。此时,会使用该结构的类的模板的第一层元素名:
    <class name="com.translate.demo.Pocket">  
        <element name="pocket"> 
            …… 


如果模板文件如下:
                <element name="pocket_hello" property="pocket"/>  
        ……
    <class name="com.translate.demo.Pocket">  
        <element name="pocket"> 
            …… 

那么会使用pocket_hello作为结构名,得到的xml将是:
<person>  
    <name>xiaoxiao</name>  
    <pocket_hello>  
        <number>2</number>  
        <objects>  
            <object>000001</object>  
            <object>000002</object>  
        </objects>  
    </pocket_hello>  
</person>