技术开发 频道

XMLBeans帮助业务流程开发


  保存这个文件,在WorkShop中,系统将会自动生成这个Schema所对应的多个XMLBeans Class文件,类似结构如图所示:

  可以看到,对应的Schema生成了Customer,InsuredItem,PolicyInfoDocument以及PolicyInfoDocument.PolicyInfo类。所有类的结构与Schema文件的名字无关,类的package与Schema的命名空间(xmlns:po="http://temp.openuri.org/XMLBeansApp/PolicyInfo)有关,接下来,我们就可以使用这些类来操作XML了。

  在Web Service方法中使用XMLBeans来处理XML对象

  XML最强大的功能就是可以使数据以一种结构化的,容易阅读的文档进行传递,实际上,这种功能会引起Web服务的增值。为了提供某种服务,供应商必须接受某种可读的文档而不是定义一种自定义的二进制数据格式。使用XMLBeans,我们可以将文档直接解析为对应的Java对象,这样就可以大大降低开发上的开销并且保证数据的有效性。

  新建一个service文件夹,右键点击该文件夹,选择New->Web Service

  在File name中输入PolicyService作为该Web Service的名称。

  右键点击这个Web Service选择Add Method添加两个Web Service方法:calculatePremium,getAllInsuredItem用于计算保单保费和获取保单的标的列表。
final static String m_namespaceDeclaration = "declare namespace xq='http://temp.openuri.org/XMLBeansApp/PolicyInfo'"; /** * :operation */ public XmlObject[] getAllInsuredItem(XmlObject policyInfo) { String query = "/xq:policy-info/xq:insured-item"; String queryExpression =m_namespaceDeclaration+query; return policyInfo.selectPath(queryExpression); }
  可以像从数据库检索数据一样,使用 XQuery 和 XPath 检索 XML 的特定部分。XQuery 和 XPath 提供一种语法,用来指定您感兴趣的元素和特性。XMLBean API 提供用来执行 XQuery 和 XPath 表达式的两个方法以及使用它们的两种不同方式。这两个方法是 selectPath 和execQuery,可以从 XmlObject(或从它继承的对象)或 XmlCursor 调用它们。这两个方法的结果略有不同。

  上面这段代码从policyInfo.xml中返回表示标的列表的XmlObject数组。
/** * :operation */ public PolicyInfoDocument calculatePremium(XmlObject policyInfo) { double si=0; double premium=0; PolicyInfoDocument poDoc = (PolicyInfoDocument)policyInfo; PolicyInfo po = poDoc.getPolicyInfo(); //获取标的列表 InsuredItem[] insuredItems = po.getInsuredItemArray(); //累加标的保费,保额 for(int i=0;i<insuredItems.length;i++){ si = si+insuredItems[i].getSumInsured()*insuredItems[i].getQuantity(); premium = premium+ insuredItems[i].getPremium()*insuredItems[i].getQuantity(); } po.setSumInsured(si); po.setPremium(premium); return poDoc; }
  上面这段代码说明了如何利用XMLBeans来处理XML,通过poDoc.getPolicyInfo(),我们直接解析XML文档对象并获取了代表保单的XMLBean,接着我们就可以像处理普通Java对象一样来处理XMLBean,我们遍历每个保单标的,然后累加它们的保额,保费,并将结果设置到保单对象上,最后我们返回这个设置了保额保费的保单XML对象poDoc。

  测试Web Service方法

  让我们测试一下这个Web Service,看看它是否能够正常工作。在WorkShop中测试Web Service非常方便,确保当前在Web Service视图中,直接点击Start按钮。

  在测试页面的SOAP body:中粘贴如下测试XML文件
<?xml version="1.0" ?> <xq:policy-info xmlns:xq="http://temp.openuri.org/XMLBeansApp/PolicyInfo"> <xq:policyID>100221</xq:policyID> <xq:productName>PKG-CMD</xq:productName> <xq:productID>255145</xq:productID> <xq:effDate>2006-01-07T14:16:00-05:00</xq:effDate> <xq:expDate>2007-01-07T14:16:00-05:00</xq:expDate> <xq:sumInsured>0</xq:sumInsured> <xq:premium>0</xq:premium> <xq:customer> <xq:name>edison chen</xq:name> <xq:phone>66668888</xq:phone> </xq:customer> <xq:insured-item> <xq:name>insuredA</xq:name> <xq:quantity>1</xq:quantity> <xq:sumInsured>5000</xq:sumInsured> <xq:premium>50</xq:premium> </xq:insured-item> <xq:insured-item> <xq:name>insuredB</xq:name> <xq:quantity>2</xq:quantity> <xq:sumInsured>1000</xq:sumInsured> <xq:premium>10</xq:premium> </xq:insured-item> <xq:insured-item> <xq:name>insuredC</xq:name> <xq:quantity>1</xq:quantity> <xq:sumInsured>8000</xq:sumInsured> <xq:premium>80</xq:premium> </xq:insured-item> </xq:policy-info>











0
相关文章