技术开发 频道

XMLBeans帮助业务流程开发


  在测试XML文件中,可以发现<xq:sumInsured>0</xq:sumInsured>,<xq:premium>0</xq:premium>,表示保单的保额,保费都还是0。而三个标的项都有数据,点击calculatePremium按钮,测试计算保额保费的WebService方法。察看测试结果。

  从Service Response中可以看到,sumInsured和premium变为了15000和150,分别是标的项累加计算的结果。这个Web Service方法,为我们完成了保单保额保费的计算,并且返回了一个XML文档,用于随后的操作。

  使用XQuery实现数据转换

  数据转换是指数据从一种格式向另一种格式的映射和转换。我们可以利用WebLogic Workshop 的 mapper 功能实现数据转换。一种数据转换可以具有多个源输入,但是只能有一个输出目标。例如,可以将数据从三个输入数据源转换到一个目标源,如下图所示。

  在我们的实例场景中,保单信息XML(policy.xsd),和保险产品费率列表XML(quoteRate.xsd)是转换源,在保险产品费率列表中找到匹配保单信息中对应保险产品的费率信息。转换后得到一个新的XML结构(policy.xsd)的XML作为流程的最终输出。
  
  创建转换文件

  鼠标右键单击 process文件夹并从下拉菜单选择“新建”—>“转换文件”。

  在“文件名”字段中,输入 policytran.dtf,点击Create创建转换文件,右键点击设计视图选择“Add Transformation Method”,添加转换方法,如图所示:

  右键点击该方法,选择“Config XQuery Transformation”,分别选择policyInfo.xsd中的policy-info和quoteRate.xsd中的rate-quote作为转换源,选择policy.xsd的policy作为目标输出。打开转换设计视图,如图所示:

   我们将两个XML文件关联起来,只需拖动两个文档对应的字段即可,这里是productID,其他字段的对应关系也只需通过拖动操作来完成。

  让我们看一下,转换对应的xquery文件:
declare namespace ns0 = "http://temp.openuri.org/XMLBeansApp/PolicyInfo" declare namespace ns1 = "http://temp.openuri.org/XMLBeansApp/RateQuote" declare namespace ns2 = "http://temp.openuri.org/XMLBeansApp/Policy" let -info1 := , -quote1 := where data(-info1/ns0:productID) = data(-quote1/ns1:product-rate[1]/ns1:productID) return <ns2:policy> <ns2:policyID>{ data(-info1/ns0:policyID) }</ns2:policyID> <ns2:productName>{ data(-info1/ns0:productName) }</ns2:productName> <ns2:effDate>{ data(-info1/ns0:effDate) }</ns2:effDate> <ns2:expDate>{ data(-info1/ns0:expDate) }</ns2:expDate> <ns2:rate>{ data(-quote1/ns1:product-rate[1]/ns1:rate) }</ns2:rate> <ns2:sumInsured>{ data(-info1/ns0:sumInsured) }</ns2:sumInsured> <ns2:premium>{ data(-info1/ns0:premium) }</ns2:premium> <ns2:pay>{ (-quote1/ns1:product-rate[1]/ns1:rate)*(-info1/ns0:premium) }</ns2:pay> { let := -info1/ns0:customer return <ns2:customer> <ns2:name>{ data(/ns0:name) }</ns2:name> <ns2:phone>{ data(/ns0:phone) }</ns2:phone> </ns2:customer> } { for -item1 in -info1/ns0:insured-item return <ns2:insured-item> <ns2:name>{ data(-item1/ns0:name) }</ns2:name> <ns2:sumInsured>{ (-item1/ns0:quantity)*(-item1/ns0:sumInsured) }</ns2:sumInsured> <ns2:premium>{ (-item1/ns0:quantity)*(-item1/ns0:premium) }</ns2:premium> </ns2:insured-item> } </ns2:policy>
  打开TestView视图,填入测试数据,然后点击Test,可以直接测试这个转换方法。

  结束语

  XMLBeans早已成为Apache的开源项目,通过高性能、开放源代码的实现,XMLBeans克服了将XML和Java一起使用的传统困难。此外,它还提供了有效性检验和可执行规范的功能。通过保持XML文档和Java对象的同步,XMLBeans提供了面向服务开发所需的Java和XML的结合。随着SOA在越来越多应用中的实施,相信XMLBeans一定会得到更广泛的应用。

  本文通过一个保险实例流程的开发过程,介绍了如何使用XMLBeans在Web Service方法中处理XML,以及借助WebLogic的mapper工具方便地进行数据转换。

  本文示例下载:XMLBeansApp.zip











0
相关文章