mis98zb

BlogJava 首页 新随笔 联系 聚合 管理
  7 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks
以前用WebWork的时候,因为选择了xml + xslt的方式,所以就要把object映射到xml。
最初想偷偷懒,不打算使用配置文件。于是就自己写了一个obj2xml,遇到了两个问题:

☆首先就是环的问题。
xml是树形结构,不允许出现环的。而对象关系中,很容易出现环。比如
Parent.getChildren();
Child.getParent();
这样的代码。
我的解决方法是,在映射的时候,用hash map保存一个class到已知obj列表。不在已知列表里的,就先映射,然后加到已知obj列表里。在已知列表里的,就不再映射了。这样速度挺快,查找也方便。这个问题还算好解决。

☆接下来就是垃圾信息的屏蔽。
我是用get*来映射的(当然,集合类型会有特殊的处理)。
但是,get*方法中赫然有getClass存在!而Class类又有一堆get方法!这还算好办,直接屏蔽掉Class类型好了。
问题在于用户自己的一些无用信息。比如
DomainObject.getXXXService();
XXXServiceImpl.getYYYDAO();
YYYDAO.getZZZDAOSupport();
还有就是多余的信息。比如我只想得到用户的基本信息,可是
class Person {
    getName();
    getAge();
    getBirthday();
    getEducationRecord();
}


class EducationRecord{
    getMildSchool();
    getUnivercity();
}
这样一来,本来不需要的教育的信息就会被映射到。由于Person对象可能会关联到很多对象,那样就会有很多无用的信息被包含进来。
对于这种情况,首先的想法就是LazyLoading。对于一般的使用,这是没有问题的。但是我的需求是要把XML发送到客户端。客户端会使用XML中的哪些数据,我的映射程序没有办法捕捉到。因此LazyLoading就毫无用武之地了。
没有办法,只能把责任推倒对被映射的object,让它注意不要包含无用的数据。可是这样一来,就要专门为映射准备一些bean,然后用BeanUtil给他们赋值,再传递给obj2xml。

最后实在没有办法,干脆彻底抛弃我的obj2xml,自己写了一个xmlResult,使用vm来生成xml。
虽然为需要写一些vm,但是比起专门准备一堆bean再用obj2xml映射,还是要简单直接一些。
可能这也是没有什么特别好用的obj/xml映射工具的原因吧!
posted on 2006-05-04 09:00 mis98zb 阅读(1270) 评论(2)  编辑  收藏 所属分类: java

评论

# XStream对循环引用的处理 2006-05-04 09:22 sharkmao
<Child>
<name>child</name>
<parent>
<name>parent</name>
<child reference="../.."/>
</parent>
</Child>

另外get方法如果没有对应的属性,那么此get方法会被忽略,避免垃圾信息的污染.  回复  更多评论
  

# re: 关于Object到XML映射的一点想法 2006-05-06 20:16 mis98zb
多谢sharkmao指教!

  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: