上篇文章介紹瞭程序整合的準備工作、結合MarshallingView視圖完成jaxb2轉換XML、xStream轉換XML工作,這次將介紹castor、jibx轉換XML。
還有MappingJacksonView用Jackson轉換JSON,自己拓展AbstractView定義Jsonlib的視圖完成JSON-lib轉換JSON。
四、 用Castor轉換XML
1、 castor可以通過一個mapping.xml文件對即將轉換的Java對象進行描述,然後可以將Java對象按照描述的情況輸出XML內容。利用castor轉換xml需要添加如下jar包:
如果你還不清楚castor,可以閱讀:
for csblogs:http://www.cnblogs.com/hoojo/archive/2011/04/25/2026819.html
for csdn:aspx”>http://blog.csdn.net/IBM_hoojo/archive/2011/04/25/6360916.aspx
2、 你需要在dispatcher.xml中添加castor的相關視圖,配置如下:
<–
繼承MarshallingView,重寫locateToBeMarshalled方法;
解決對象添加到ModelAndView中,轉換後的xml是BindingResult信息的bug
–>
<bean name=”castorMarshallingView” class=”com.hoo.veiw.xml.OverrideMarshallingView”>
<property name=”marshaller”>
<bean class=”org.springframework.oxm.castor.CastorMarshaller”>
<property name=”mappingLocations”>
<array>
<value>classpath:mapping.xml</value>
</array>
</property>
<property name=”encoding” value=”UTF-8″/>
</bean>
</property>
</bean>
mapping.xml配置
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE mapping PUBLIC “-//EXOLAB/Castor Mapping DTD Version 1.0//EN” “http://castor.org/mapping.dtd”>
<mapping>
<class name=”com.hoo.entity.Account” auto-complete=”true”>
<map-to xml=”Account”/>
<field name=”id” type=”integer”>
<bind-xml name=”id” node=”attribute” />
</field>
<field name=”name” type=”string”>
<bind-xml name=”name” node=”element” />
</field>
<field name=”email” type=”string”>
<bind-xml name=”email” node=”element” />
</field>
<field name=”address” type=”string”>
<bind-xml name=”address” node=”element” />
</field>
<field name=”brithday” type=”com.hoo.entity.Brithday”>
<bind-xml name=”生日” node=”element” />
</field>
</class>
<class name=”com.hoo.entity.Brithday” auto-complete=”true”>
<map-to xml=”brithday” />
<field name=”brithday” type=”string”>
<bind-xml name=”brithday” node=”attribute” />
</field>
</class>
<class name=”com.hoo.entity.MapBean” auto-complete=”true”>
<field name=”map” collection=”map”>
<bind-xml name=”map”>
<class name=”org.exolab.castor.mapping.MapItem”>
<field name=”key” type=”java.lang.String”>
<bind-xml name=”key” node=”attribute” />
</field>
<field name=”value” type=”com.hoo.entity.Account”>
<bind-xml name=”value” auto-naming=”deriveByClass”/>
</field>
</class>
</bind-xml>
</field>
</class>
<class name=”com.hoo.entity.ListBean” auto-complete=”true”>
<map-to xml=”listBean”/>
<field name=”list” collection=”arraylist” type=”com.hoo.entity.Account”>
<bind-xml name=”beans” auto-naming=”deriveByClass”/>
</field>
<field name=”name” type=”string”/>
</class>
<class name=”com.hoo.entity.AccountArray” auto-complete=”true”>
<map-to xml=”account-array”/>
<field name=”size” type=”int” />
<field name=”accounts” collection=”array” type=”com.hoo.entity.Account”>
<bind-xml name=”accounts” auto-naming=”deriveByClass”/>
</field>
</class>
</mapping>
關於mapping.xml配置的介紹,你可以參考http://www.cnblogs.com/hoojo/archive/2011/04/25/2026819.html
這篇文章的第三欄目。
3、 在使用Spring的MarshallingView的時候,轉換的xml結果有時候會帶有BindingResult對象的信息。所以解決辦法是重寫MarshallingView裡面的locateToBeMarshalled方法,這樣就可以解決瞭。下面是重新Marsh