如何默认使用xerces做解析器?

benu 2005-03-22 11:19:02
好像jdk自带的crimson解析器不支持schema验证,所以改用Xerces,下的版本是2_6_2, 按照网上看到的一些帖子进行了如下操作
(1)在JAVA_HOME \jre\lib目录下新建了一个jaxp.properties文件,内容为:
javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
javax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl
(2)将xercesImpl.jar xmlParserAPIs.jar 两个jar文件添加到CLASSPATH中去

现在的问题是,
(1)如何确认我从此以后用的解析器就是Xerces?
我用命令行的方式加-verbose编译一个解析xml文件的程序,里面用的是DocumentBuilderFactory DocumentBuilder ,在类的加载信息中发现,所有的类仍然是从rt.jar中加载的,这是否表明我现在使用的解析器仍然是jdk自带的?
...全文
203 23 打赏 收藏 举报
写回复
23 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
znjq1001 2005-03-24
其他程序不用JAXP,呵呵
  • 打赏
  • 举报
回复
benu 2005-03-23
哦,这倒也是,哈
  • 打赏
  • 举报
回复
benu 2005-03-22
刚才又试了一下,把xercesImpl.jar xmlParserAPIs.jar 加到classpath的最前面也没反应
  • 打赏
  • 举报
回复
benu 2005-03-22
修改源码? 怎么修改的?
  • 打赏
  • 举报
回复
rexma 2005-03-22
呵呵,修改一下javax.xml.parsers.SAXParserFactory.newInstance()的源码。
  • 打赏
  • 举报
回复
rexma 2005-03-22
把你的xercesImpl.jar xmlParserAPIs.jar加到classpath的最前面。
  • 打赏
  • 举报
回复
benu 2005-03-22
唉,它怎么就不出错呢
那肯定还是使用的原来的解析器了?
哪儿出的错呢?
  • 打赏
  • 举报
回复
benu 2005-03-22
待俺试试看,哈
  • 打赏
  • 举报
回复
zhang21cnboy 2005-03-22
hoho,把你的xerces的包从加载路进上去掉,看看是否会出错,如果出错,证明用的就是!!!
  • 打赏
  • 举报
回复
DanielYWoo 2005-03-22
>>但用jaxp.proties的方法要方便些

这不是好的做法,假如这台机器还跑着其它的应用程序,他们都会受影响
  • 打赏
  • 举报
回复
benu 2005-03-22
返回的时null, 呵呵,真是奇怪,感觉好像没去读jaxp.properties文件一样
  • 打赏
  • 举报
回复
znjq1001 2005-03-22
理论上应该是没有问题了。
是不是在什么地方设置了System Proper
你在DocumentBuilderFactory.newInstance()前,取系统属性System.getProperty("javax.xml.parsers.DocumentBuilderFactory") 看看有没有值?

要下班了。:)
  • 打赏
  • 举报
回复
benu 2005-03-22
通过这种方法也可以,但用jaxp.proties的方法要方便些,而且更换解析器时可以不用修改代码,所以我想弄明白,呵呵
  • 打赏
  • 举报
回复
znjq1001 2005-03-22
Eclipse不能加参数么? :)
或者你在程序里面 System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "org.apache.xerces.jaxp.DocumentBuilderFactoryImpl"); 试拭

  • 打赏
  • 举报
回复
benu 2005-03-22
啊,我还真的去改了源码并替换了原来rt.jar中对于的class。

不过,添加jaxp.properties的方法应该也是正解,因为这在JDK文档中也这样说了,
追风的方法是优先级最高的,添加jaxp.properties的方式排在第二,只是在我这儿这种方法总是不起作用,我把jaxp。properties输入些乱七八糟的东西,也不报错, 谁能估计是那些原因吗?
我在其余的地方找了好久,也没找到答案
  • 打赏
  • 举报
回复
DanielYWoo 2005-03-22
靠刚才不小心点提交了
System.setProperty(“org.xml.sax.driver”,“org.apache.xerces.parsers.SAXParser”)

还可以在Eclipse里指定VM argument:
org.xml.sax.driver=org.apache.xerces.parsers.SAXParser
  • 打赏
  • 举报
回复
DanielYWoo 2005-03-22
搂主,那些说改JDK的是给你开玩笑的,你别当真阿
znjq1001(追风)给的正解
或者你在程序里面一开始就调用
  • 打赏
  • 举报
回复
benu 2005-03-22
追风的方法可行;多谢

但是这还是没有达到我的目的,我要再eclipse下用啊。

能估计一下我用jaxp.properties的方法出现了什么错误吗?
这个文件中的内容是不是就我上面写的那两句? 位置再JAVA_HOME\jre\lib下,没错吧?
  • 打赏
  • 举报
回复
znjq1001 2005-03-22
(!) java -D org.xml.sax.driver=org.apache.xerces.parsers.SAXParser xxx.class
  • 打赏
  • 举报
回复
benu 2005-03-22
还有,按照文档中说明的顺序,代码中所修改的是不是最后一个"Platform default DocumentBuilderFactory instance",所以,我用第二中方法没有作用,那肯定就是第一种方法决定了使用默认的crimson解析器,如果真的是这样,那么改源码也就没有用了吧,可问题是第一种方法是什么呢?
  • 打赏
  • 举报
回复
加载更多回复(3)
相关推荐
发帖
Java EE

6.7w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
帖子事件
创建了帖子
2005-03-22 11:19
社区公告
暂无公告