`
maomaode
  • 浏览: 118485 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Apache CXF tools support more XercesImpl

    博客分类:
  • XML
阅读更多
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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics