天天看点

XmlBean学习心得

说起来真老土,现在才知道XmlBean这个东西,

XmlBean学习心得

用过以后,我再也不想用dom或sax类的xml解析器了,bea公司推荐送给apache的这个东西确实不是一般般的强,简直就是超强。

简单说一下xmlbean的用法。

1. 制作一个xsd文件,可以用一个xml文件转换过来,然后自己改一下,也可以自己写,比较方便的xsd文件制作工具是xmlspy,或者装了wst的eclipse也可以,后者是最容易找到的了。

2. 去apache网站下载xmlbean,在xml那个子项里面。

3. 按照例子运行ant就可以了

给一个ant脚本的例子

<target name="xmlbean_bea">

<taskdef name="xmlbean"

classname="com.bea.xbean.tool.XMLBean"

classpathref="lib.xmlbean" target="_blank" rel="external nofollow" />

<xmlbean

failοnerrοr="true"

destfile = "${build.dir}/${xsd.bea.jarfile}"

debug = "true"

optimize = "true">

<classpath refid="lib.xmlbean" />

<fileset dir="${xsd.bea.dir}" includes="**/*.*"/>

</xmlbean>

</target>

生成出来的jar包中,特供了对该xml各个元素的操作,用起来就象一般的javabean一样的简单。对象都特供了工厂之类对xml文件进行解析和生成。

用开weblogic的人都很熟悉这个东西。

补充一下自己的心得:

1. 默认根据xsd生成的java类,package就是namespace定义的名字,如果没有定义xsd的namespace,package就默认为noNamespace。用这些java类生成出来的xml文件也自动带有namespace。

其实这是很烦的事情,因为我们通常希望生成出来的xml文件没有namespace,而我们希望生成出来的java类可以指定package。这时候就可以配置一个xsdConfig文件,指定那个namespace对于的java类package是什么,例如:下面就是指定没有namespace时,生成的文件去 com.mypackage

<xb:config xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config">

<xb:namespace uri="">

<xb:package>com.mypackage</xb:package>

</xb:namespace>

</xb:config>

2. xsdConfig可以定义出一个namespace和package的对应关系,可如果我有两个无namespace的文件,我打算生成到两个package中,怎么办?

答案:没好办法,把两套xsd/xsdConfig文件放置在两个目录,然后在ant脚本中做两个target,再写一个target调用这两个target好了。如果时再bea的workshop中,需要建立两个schema project。如果有人有更好的办法请告诉我。

3. apache的xmlbean和bea公司的xmlbean有冲突,因为他们都用到了javax.xml.namespace.QName,不幸,他们用的是同名但又不相同的类,而且差异较大。所以如果在一个app中,如果即用了apache的又用了bea的,哪就只有一个能用,就看哪一个QName先被实例化了。

解决办法就是:如果项目中用了weblogic,哪就用bean的xmlbean,反正一样可以用。两者的ant脚本基本一样,就是taskdef不一样而已。

apache的taskdef:

<taskdef name="xmlbean"

classname="org.apache.xmlbeans.impl.tool.XMLBean"

classpathref="lib.xmlbean.apace" target="_blank" rel="external nofollow" />

bean的taskdef

<taskdef name="xmlbean"

classname="com.bea.xbean.tool.XMLBean"

classpathref="lib.xmlbean.bea" target="_blank" rel="external nofollow" />