正 文

用 AXIOM 促进 XML 处理


www.7dspace.com  更新日期:2005-10-26 2:35:01  七度空间


      AXIOM 和 StAX

      了解这些背景之后,现在看看 AXIO 的 StAX API。该 API 中最重要的方法如下:

(OMElement).getXMLStreamReader();
(OMElement).getXMLStreamReaderWithoutCaching();

      通过 StAX API 对某个元素调用第一个方法,可以访问该元素的 XML Infoset,同时缓冲(如果需要)树中未构造的部分以供将来使用。顾名思义,第二个方法用于访问同样的信息,但是通过关闭缓冲机制优化了性能。在编写需要使用数据绑定框架的存根和 skeleton 程序时,这是最有用的方法。

      但是请注意,如果在调用上述方法之前已经建立了树,AXIOM 将模拟 StAX 解析器。因此有些树节点的事件是通过模拟而来的,而对于另一些节点则直接连接到底层的解析器。AXIOM 的优点在于这些内部处理对用户是透明的。但是,在切换到原始 API 时,必须指明是否需要缓冲数据。

      为了说明 StAX API 的用法,我将展示如何使用 XMLBeans 生成的代码连接到 AXIOM。

清单 5.XMLBeans 生成的订单代码

public class PurchaseOrderSkel {

   public void submitPurchaseOrder(
         PurchaseOrderDocument doc) throws Exception {
  
   }

      public void submitPurchaseOrderWrapper(
               OMElement payload) {
            try {
                  XMLStreamReader reader= payload.
                        getXMLStreamReaderWithoutCaching();
                  PurchaseOrderDocument doc
                     = PurchaseOrderDocument.Factory.parse(reader);
                           submitPurchaseOrder(doc);
            } catch (Exception ex) {
                  ex.printStacktrace();
            }
      }
   }

      清单 5 中的代码(通常用代码生成工具生成)展示了一个 skeleton,它使用 XMLBeans 生成的类(即 PurchaseOrderDocument)进行数据绑定。这个 skeleton 包含两个服务实现方法。第一个允许服务实现者使用数据绑定对象,第二个则允许直接访问 AXIOM API。主要看看这几行:

XMLStreamReader reader= payload.
   getXMLStreamReaderWithoutCaching();
PurchaseOrderDocument doc
   = PurchaseOrderDocument.Factory.parse(reader);

      为了创建对象,首先对 SOAP 栈(如 Apache Axis)压入服务实现的载荷获得对 StAX API 的引用。因为现在在处理链的最末端,所以可以安全地把解析器直接连接到 XMLBeans 解除封送器以获得最佳性能。

7页,页码:[1] [2] [3] [4] [5] [6] [7] 

上一篇:用JAXB生成一个XML文档
下一篇:架设局域网升级服务器 用WSUS打补丁
作者:Eran Chinthaka  来源:developerWorks中国 ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐