Apache CXF tools support more XercesImpl

Apache CXF tools 并没有依赖具体的XercesImpl,而是使用Java5里面的默认的实现。 但如果你的classpath里面有其他版本的XercesImpl, 那么在 这个版本之前,你只能看到类似的输出结果了:UnsupportedOperationException
<link rel="stylesheet" type="text/css" href="http://maomaode.bokeland.com/plugins/plogeshi/styles/plogeshi.css">原因是XercesImpl 版本(2.6.2) 并不支持DocumentBuilderFactory.setSchema, CXF的代码里面用这个方法来校验toolspec的document, 为了支持这个版本,我们放弃了schema validation, 正如你看到的

-            this.parserFactory.setSchema(this.schema);
+            try {
+                this.parserFactory.setSchema(this.schema);                
+            } catch (UnsupportedOperationException e) {
+                LOG.log(Level.WARNING, "DOC_PARSER_NOT_SUPPORTED", e);
+            }
 

这样做还是无法满足其他版本的XercesImpl(2.7.1 以上的版本), 因为没有setSchema的支持,

doc.getElementById(id);
 

将会返回null, 因为这个id是被定义在schema里面的

<attribute name="id" type="ID" use="optional"/""">

所以这里就必须用XPath了,而事实上我认为xpath是最好的从dom里面取信息的方法了
我想这篇文章中所提到的几个观点正好从这个例子里面得到了印证
那就是
* schema 校验应该遵循 “严以待己,宽以待人” (a.k.a Postel’s law)
发送消息前进行校验,因为schema是你自己的, 在接受消息的时候,尽量避免进行schema校验, 同样的,在生产系统上尽量避免schema 校验
* 使用XPath来获取信息
避免使用getElementId这样的方法, 而多采用XPath, 因为前者很可能返回null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值