浅析Castor数据绑定三

三、实现数据绑定

       实现数据绑定,主要包括编组和解组两个过程。编组就是将JAVA对象转化为XML;解组就是将XML数据转化为JAVA对象。

       对应生成类和映射文件分别采用不同的编组解组过程。

       1、生成类的编组和解组。这类比较简单,因为在生成类时,已经自动根据Schema自动生成了编组解组的对应方法,直接调用即可。

      

Parser3.java

package com.raistlin.test.castor;

 

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.StringWriter;

 

import org.exolab.castor.xml.MarshalException;

import org.exolab.castor.xml.ValidationException;

 

public class Parser3

{

       public Alarm unMarshller() throws MarshalException, ValidationException,

                     FileNotFoundException

       {

              Alarm alarm = null;

              // 解组

              alarm = Alarm.unmarshal(new FileReader("d:/Alarm.xml"));

              return alarm;

       }

 

       public String marshller(Alarm alarm) throws MarshalException,

                     ValidationException

       {

              StringWriter alarmStr = new StringWriter();

              // 编组

              alarm.marshal(alarmStr);

              return alarmStr.toString();

       }

 

       public static void main(String[] args) throws Exception

       {

              Parser3 parser = new Parser3();

             

              Alarm alarm = parser.unMarshller();

             

              String alarmStr = parser.marshller(alarm);

             

              System.out.println(alarmStr);

       }

}

 

       2、映射文件的编组和解组。

 

Parser4.java

package com.raistlin.test.castor;

 

import java.io.IOException;

import java.io.StringWriter;

import java.sql.Timestamp;

import java.util.Calendar;

 

import org.exolab.castor.mapping.Mapping;

import org.exolab.castor.mapping.MappingException;

import org.exolab.castor.xml.MarshalException;

import org.exolab.castor.xml.Marshaller;

import org.exolab.castor.xml.Unmarshaller;

import org.exolab.castor.xml.ValidationException;

import org.xml.sax.InputSource;

 

public class Parser4

{

       public Alarm unMarshal() throws IOException, MappingException,

                     MarshalException, ValidationException

       {

              Alarm alarm = null;

              // 初始化映射规则

              Mapping mapping = new Mapping();

              mapping.loadMapping("d:/AlarmMapping.xml");

              // 解组

              Unmarshaller unMarshaller = null;

              unMarshaller = new Unmarshaller(mapping);

              alarm = (Alarm) unMarshaller.unmarshal(new InputSource(

                            "d:/Alarm.xml"));

              return alarm;

       }

 

       public String marshal(Alarm alarm) throws IOException, MappingException,

                     MarshalException, ValidationException

       {

              StringWriter alarmStr = new StringWriter();

              // 初始化映射规则

              Mapping mapping = new Mapping();

              mapping.loadMapping("d:/AlarmMapping.xml");

              // 编组

              Marshaller marshaller = null;

              marshaller = new Marshaller(alarmStr);

              marshaller.setEncoding("GB2312");

              marshaller.setMapping(mapping);

              marshaller.marshal(alarm);

              return alarmStr.toString();

       }

 

       public static void main(String[] args) throws Exception

       {

              Parser4 parser = new Parser4();

 

              Alarm alarm = parser.unMarshal();

 

              String alarmStr = parser.marshal(alarm);

 

              System.out.println(alarmStr);

       }

}

 

       最后说一下需要注意的地方。

       使用生成类,虽然简单方便,但仍然会有一些缺点。比如部分代码大量重复,不够精练高效;生成代码可能会存在错误(我用过的错误最多的生成代码工具应该是AXISCastor似乎还好);对代码生成工具产生依赖性,因生成工具的稳定性、标准化程度的影响,会给项目带来一些风险;增加维护工作的难度,比如BUG的跟踪,patch的维护等。所在使用生成类时,一定要注意尽量在模型设计完善后,再生成,保持生成类的稳定性,不要做太多的修改。另外,对于修改过的生成类,要将修改部分详细记入维护文档,以方便后来的维护人员维护,包括,将代码重新生成后的恢复原貌、故障问题跟踪以及版本控制等。

       对于映射文件来说,最好先对已有类的字段数据类型做些测试,确保Castor能完全支持。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值