关于JAXB1.0的一些小研究
在一个项目用到了JAXB1.0,用来解析复杂的XSD文件,
其中我们采用过N多方案处理XSD,包括XMLBeans,当然JDOM,DOM,SAX也都考虑使用,不过,由于后面几种会手写巨多的代码,当然没有被受我这个比较偷懒的人青睐了哟,呵。另外JDK我们用的1.4,迫使我用JAXB1.0,要是用JAXB2.0以上,我们处理XSD就更加如鱼得水了。
不过在项目中采用JAXB1.0,遇到了很多问题,其中:
jaxb1.0解析xsd时,是将xsd的层级结构处理成内部类的形式,
这样,就出现了一个问题,如果xsd层级结构深,复杂的话,内部类的名字会非常的冗长
因为内部类的命名是按层次累加过来的
经过测试,得到一下数据:
windows文件系统, 路径+文件名的长度不能大于255(最大为254)
java虚拟机对class名字的限制是,class名不能超过248(248+".class" = 254)
如果文件名过长,会导致class不能加载的错误 不过我们最后的解决方案:是手工改的名。不知道网友们有没有更好的办法,让我采纳下,十分感谢众多网友共现探讨研究。
附:xjc命令行接口的一些选项列如下:
-nv 对于输入的模式不执行严格的XML验证
-b <file> 指定外部的绑定文件
-d <dir> 指定生成的文件的存放路径
-p <pkg> 指定目标包
-classpath <arg> 指定classpath
-use-runtime <pkg> impl.runtime包不被生成
-xmlschema 输入的模式是一个W3C XML模式(默认)
1 楼 puroc 2008-12-30 我们项目之前遇到一次core dump问题就是有jaxb1引起的。后来换了jaxb2就好了。jaxb2各方面还是不错的,就是启动速度有点慢。 2 楼 旁边的手 2008-12-30 是的,JAXB2.0支持JDK1.5呀,我们项目用的JDK1.4,没有办法呀,
JAXB2.0的话,有XSD就可以直接引进来,如果是JAXB1.0的话,对引入的XSD处理不了,只能处理单个的XSD文件,我们后面把引入拼到一个中去的,还是好费事的,不过相对对XSD数据的处理方便多了。 3 楼 yefeng 2008-12-31 还是直接用JDK1.6吧,1.6已经整合了JAXB2.0。 4 楼 旁边的手 2008-12-31 我知道呀,JDK1.6话,我们用的WEBLOGIC81的话,只能用JDK1.4了,无耐呀。 5 楼 yefeng 2009-01-04 不知道JAXB2.0使用性能怎么样 6 楼 旁边的手 2009-01-11 yefeng 写道
不知道JAXB2.0使用性能怎么样
对xsd生成JAVA对象,更加智能化了,比1.0的爽快多了。