上面的错误文本提到了实例的名称,并告诉我们地址的末尾缺少一些应有的元素。在这个小示例中,这是有点用处的,但没有行号很难找到起点。现在我们将这个代码文本与新版本 中的新增错误代码特性进行比较:
| /home/user>validate errorcode.xsd errorcode.xml errorcode.xml:4: error: cvc-complex-type.2.4a: Expected elements 'city state' instead of 'country' here in element address://xmlbeans.beaworld.com/ errorcode.xml:4: error: cvc-complex-type.2.4c: Expected elements 'zipcode' before the end of the content in element address://xmlbeans.beaworld.com/ |
与XMLBeans的1.0版本中的错误文本相比,新的错误文本有很大的改进。两个错误文本都提到了实例,但新错误代码还提供了行号、问题严重程度、附录C模式参考以及更清楚的错误消息。而且,使用新的错误代码,我们发现错误代码cvc-complex-type.2.4a和cvc-complex-type.2.4c还提及更多造成故障的问题。同样,这些错误代码也分别对应于模式规范中一个可使用URL访问的位置。
刚刚我们介绍了如何通过命令行获取详细的错误文本,现在介绍如何以编程方式获取错误信息:
| 1 // Create the error listener and XmlOptions 2 LinkedList list = new LinkedList(); 3 XmlOptions opts = new XmlOptions().setErrorListener(list); 4 5 // Load the instance 6 File instance = new File("<SOME_PATH> rrorcodes.xml"); 7 AddressDocument ad = AddressDocument.Factory.parse(instance); 8 9 // If there are errors, making a method call like this will 10 // populate the error listener 11 ad.validate(opts); 12 13 // Since we know there are errors, let's 14 // look at how to get at the data 15 for(int i=0; i < errors.size(); i++) { 16 17 // Cast list object to an XmlError // type XmlError e = (XmlError) 18 errors.get(i); 19 20 // Now, let's get at all the information about the error 21 // This will be the location of the error in the instance 22 System.out.println("["+e.getLine()+","+e.getColumn()+"]-" + e.getSeverity()) 23 // Information about the error 24 System.out.println(e.getErrorCode() + ": " +e.getMessage()); 25 } |
请看此代码片断,以编程方式访问错误信息并不比从命令行获取类似信息困难多少。
性能提升
用户可能不会注意到以前的特性,但一定会注意到它对开发工作的影响。如果新版本无法带来性能提升,那它还有什么好处呢?
与在XMLBeans 1.0中一样,性能对于2.0版本极为重要。在大多数情况下,与1.0相比,2.0版本性能有了10%到60%的提升。导致性能提升的原因有许多,其中最重要的是完全不同的存储架构。在1.0版本中,使用了一个名为splay tree的数据结构使所有存储在XML Store中的内容与影响XML数据的操作同步。对于不熟悉它的用户,splay tree可以理解为支持O(log N)次Find、Insert和Delete操作的平衡树。这种数据结构与其他此类树的差别在于它不维持显式的平衡条件。其详细程度超出了用户在大多数情况下的需要。2.0版本使用了一个较为简单的架构,提供较少的复制和较少的对象。
在对XML数据执行任何操作时,XMLBeans都会加载一个XML Store。XMLBeans总是加载一个XML Store,然后在Store上提供一个绑定视图。与直接解组到Java对象的其他Java/XML绑定框架相比,此绑定视图与完整的XML Infoset真实性通常导致额外的开销。这使得XMLBeans的性能一直是一个障碍,从而消弱了额外的特性与信息所带来的好处。对于运行时性能,人们主要关注的就是XML Store方面,并尽可能地使Store的性能得到提高。
在对XML Store进行改写时,新增了一个特性,该特性使得使用XMLBeans进行编程可以有更好的性能,并且更易于使用。此特性即DOM Level II支持。DOM是Document Object Model(文档对象模型)的简写,它提供了一个用于处理XML数据的接口。Level II则指定哪些接口是可用的。它与SAX的区别在于XML信息保存在内存中。
| 共11页: 上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] 10 [11] 下一页 | ||
|
|
|||
| · 51CTO主编推荐经典专题 · RAID——磁盘阵列基础 · 充电计划之热门IT认证.. · 51CTO技术自测 挑战自.. · CISSP认证成长之路 · AMD Phenom三核处理器.. · 国际文档格式标准开战 · 2007年互联网大会 |
· 我是黑客我怕谁——讲.. · ARP攻击防范与解决方案 · Solaris 10 配置管理 · Solaris基础知识入门 · RIP路由协议专栏 · MPLS路由协议专栏 · OSPF路由协议专栏 · 思科路由器产品 |
||
|
|||
| · Java基础教程 · VPN技术 · ARP攻击防范与解决方案 · SQL Server 2005全解 · SOA 面向服务架构 · SQL Server 2005全解 · Java编程开发手册 · RAID——磁盘阵列基础 |
· 三层交换技术专题 · SQL Server入门到精通 · Windows Server 2003企.. · Windows远程桌面应用 · C#技术开发指南 · VPN技术 · Solaris 10 配置管理 · C#技术开发指南 |
||
|
|||
| · ARP攻击防范与解决方案 · VPN技术 · SQL Server 2005全解 · Java基础教程 · SQL Server入门到精通 · SQL Server 2005全解 · SOA 面向服务架构 · Java编程开发手册 |
· C#技术开发指南 · 三层交换技术专题 · C#技术开发指南 · Windows远程桌面应用 · RAID——磁盘阵列基础 · Windows Server 2003企.. · 邮件服务器专题 · wimax技术与趋势 |
||
| ·DB2 Viper快速入门 ·DB2 9数据库的镜像分割与.. |
·将XML应用程序从DB2 8.x.. ·DB2 9中的pureXML:如何.. |
| ·服务器中的“傻瓜机”在.. ·盖茨也喜欢登录Youtube看.. |
· · |
| ·拯救系统管理员 ·美国选民:我为什么选布什 |
·VMware公司中文命名挑战赛 ·我们真缺乏创新吗? |
| ·J0ker的CISSP之路:复习-.. ·J0ker的CISSP之路:复习-I.. |
·9月第3周安全回顾 内网安.. ·教你几招识别和防御Web网.. |
| · NGN:下一代网络 · 网络访问中断大排查 · FTTx光纤接入 |
· 教你使用Anti ARP Sniff.. · 网络嗅探教程:使用Snif.. · 常见病毒手工清除方法大.. |
| · C++是垃圾语言?! · 2007年IT界七大抄袭事件 · Java实用开发全集 |
· 解析Ajax开发框架 走进A.. · 基于Google Maps与Ajax.. · 基于Google Maps与Ajax.. |
| · 热门 IT 培训认证官方资.. · Ubuntu 中文开源频道 · Solaris基础知识入门 |
· 费力不讨好 数据中心主.. · AMD Phenom三核处理器解.. · 51CTO主编推荐经典专题 |
| · 甲骨文Oracle 11g正式发.. · Oracle数据库开发之PL/S.. · Oracle数据库开发基础教.. |
· 存储2006,一个并购的大.. · IDC宣布浪潮蝉联存储市.. · 双机热备技术 |