import org.exolab.castor.mapping.Mapping;

import org.exolab.castor.xml.Marshaller;

import org.exolab.castor.xml.Unmarshaller;

import org.w3c.dom.Document;

import org.xml.sax.InputSource;

1)

public class JasperReportUtil {

/**

* 将DTO转换成XML数据

* @param obj  DTO对象

* @param encoding编码格式

* @return xml字符串

*/

public static String convertDTOtoXML(Object obj, String encoding) {

Mapping mapping = new Mapping();

try {

InputStream mappingFileIn = PrintContractDto.class.getClassLoader().getResourceAsStream("print/dto/PrintContract.xml");

mapping.loadMapping(new InputSource(mappingFileIn));

//1)dto转换成xml

StringWriter sw = new StringWriter();

long startTime = System.currentTimeMillis();

Marshaller marshaller = new Marshaller(sw);

marshaller.setMapping(mapping);

marshaller.setEncoding(encoding);

marshaller.marshal(obj);

sw.flush();

long endTime = System.currentTimeMillis();

System.out.println("DTO装化为XML用时:" + (endTime - startTime) + " ms");

//2xml文件转换成dto

Unmarshaller unmarshaller = new Unmarshaller(mapping);  

PrintContractDto stuDist = (PrintContractDto) unmarshaller.unmarshal(new StringReader(sw.toString()));  

return sw.toString();


} catch (Exception ex) {

System.out.println("单证对象转化为xml数据出错");

}

return null;

}


}


2) 下面是对应的PrintContract.xml文件内容:


<!DOCTYPE mapping PUBLIC   

"-//EXOLAB/Castor Object Mapping DTD Version 1.0//EN"  

"http://castor.exolab.org/mapping.dtd">  

<mapping>

<description>Used for com.siyuan.castor.Student</description>

<class name="print.dto.PrintContractDto" auto-complete="true">

<map-to xml="Contract"/> 

<field name="riskGroup" type="print.dto.RiskGroup" get-method="getRiskGroup" set-method="setRiskGroup">

            <bind-xml name="riskGroup2" node="element"/>

        </field>

</class>

 

 <class name="print.dto.RiskGroup" auto-complete="true">

<!-- 类中的集合修改字段对应的节点名称  -->

<field name="planInfoList" 

      collection="arraylist" 

      type="print.dto.PlanDto" 

      get-method="getPlanInfoList" 

      set-method="setPlanInfoList">

            <bind-xml name="planInfoList2" node="element"/>

        </field>

</class>

</mapping>



3) http://orange5458.iteye.com/blog/1139596