当前位置: 首页 > news >正文

WSDL为document类型时BPEL赋值操作问题的解决

document类型的BPEL赋值操作问题的解决


文章仅供大家参考,所有评论 , 错误报告 , 其他信息以及批评 , 请邮寄到 Jeffery.Lee AT gmail.com 或者访问我的个人blog同我交流 ( http://ibuddie.spaces.live.com/ ) 。本文遵从 GNU 的自由文档许可证 (Free Document License) 的条款,欢迎转载,如若修改、散布,请注明文章原始出处和来源。

问题描述:

JSSOA环境下中ESB上部署的子服务的WSDL文件,大多基于document类型的并自动生成,在进行服务组合时进行相应的assign操作时与传统的RPC风格会有较大的不同,目前使用的BPEL设计器对document风格支持并不完善。在贷款服务组合例子中,就遇到变量赋值的问题。

流程在调用完Assessor服务并得到返回值为“low”时(表示贷款风险低),将自动返回一个值为yes变量给用户。BPEL代码在具体实现时根据相应子服务的WSDL类型不同,需要做不同的处理:

如果是RPC风格的话,只要将yes赋值给相应变量的part即可,因为一个part对应的一种类型,而一个messge可以由多个不同的part组成和描述的。例如:

<bpel:assign name="AssignYestoAccept">

…………

<bpel:copy>

<bpel:from>

<bpel:literal>yes</bpel:literal>

</bpel:from>

<bpel:to part="accept" variable="approval"/>

</bpel:copy>

</bpel:assign>

在这个例子中part具体的类型是标准的string类型,定义如下

<wsdl:message name="approvalMessage">

<wsdl:part name="accept" type="xsd:string" />

</wsdl:message>

我们目前的ejb服务生成的WSDL是基于document风格,一个part对应的是一个element,而一个message中只包含一个part,这个part的名字皆为parameters。例如:

<wsdl:message name="loanResponse">

<wsdl:part name="parameters" element="tns:requestResponse"/>

</wsdl:message>

而这个part的具体定义是在相应的element中实现,例如:

<xsd:element name="requestResponse">

<xsd:complexType>

<xsd:sequence>

<xsd:element maxOccurs="1" minOccurs="1" name="out" nillable="true" type="xsd:string"/>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

BPEL该如何实现相应的赋值操作呢?BPELassign操作支持基于XPath语言对part对应类型的相应element元素的访问,例如:

<bpel:assign>

<bpel:copy>

<bpel:from variable="request-bpel" part="payload" query="/getRequest/parameter1" />

<bpel:to variable="request-add" part="payload" query="/getRequest /addParameter1" />

</bpel:copy>

</bpel:assign>

以上定义依然是基于RPC风格,因为上面这个例子中的part依然对应的是一个type,而不是element

目前BPEL相关资料关于document类型下的assign操作具体使用介绍很少,大多围绕RPC风格进行。当前使用的ActiveBPEL Designer在可视化环境下没有提供直接针对document风格的assign操作辅助设计。在一个BPEL的教程中提到document风格的处理方法,内容如下:

If we had used document-style web services, which use messages defined as XML elements, we would have to use a slightly different XPath query expression. Instead of the part name we would use the element name for the first step in the query expression.

可惜并未给出实例,围绕该思路针对我们目前的贷款组合服务,对BPEL代码反复进行修改,但BPEL引擎执行时会认为结点选择出错,围绕相关XPath语句反复修改测试,一直无法通过。

<bpel:assign name="YesToReplyAssign">

…………

<bpel:copy>

<bpel:from>

<bpel:literal>

yes

</bpel:literal>

</bpel:from>

<bpel:to part="parameters" variable="LoanResponse">

<bpel:query>………… </bpel:query>

</bpel:to>

</bpel:copy>

</bpel:assign>

解决方案

<from>入手,直接以XML语言对相应part进行赋值。BPEL改写为:

<bpel:assign name="YesToReplyAssign">

…………

<bpel:copy>

<bpel:from>

<bpel:literal>

<js:requestResponse>

<js:out>yes</js:out>

</js:requestResponse>

</bpel:literal>

</bpel:from>

<bpel:to part="parameters" variable="LoanResponse"/>

</bpel:copy>

</bpel:assign>

流程服务重新部署并工作完全正常

相关文章:

  • elementui 复杂 表单验证_详解element-ui中form验证杂记
  • python mp3_Python修改MP3文件的方法
  • JDOM入门...
  • 伽罗华有限域_有限域 伽罗瓦域
  • 一句话Solaris技巧与WIN32对比[欢迎评论]
  • 显示前半内容后半内容用省略号_js封装的一行半显示省略号。(字数自由控制)...
  • ios比较字符串判断为空_iOS-判断字符串为空你以为这么简单吗?
  • 可笑的UMLed
  • dct变换可以用什么方法代替_DCT变换
  • python 数据框按行拼接_python-从其他数据框按行查找
  • Oracle最差实践(一)
  • ln函数怎么看奇偶性_【小白必看】python函数是什么?python函数的定义? python函数怎么使用?...
  • vaspkit使用_vaspkit.014安装使用说明
  • Asp.Net IIS 管理类(全)
  • html包含头尾文件_HTML文件的结构包括头部(Head)、主体(Body)两大部分
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【翻译】babel对TC39装饰器草案的实现
  • Angular数据绑定机制
  • Hexo+码云+git快速搭建免费的静态Blog
  • Invalidate和postInvalidate的区别
  • Javascript设计模式学习之Observer(观察者)模式
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • socket.io+express实现聊天室的思考(三)
  • Twitter赢在开放,三年创造奇迹
  • 基于webpack 的 vue 多页架构
  • 理清楚Vue的结构
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 算法系列——算法入门之递归分而治之思想的实现
  • 原生 js 实现移动端 Touch 滑动反弹
  • zabbix3.2监控linux磁盘IO
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (23)Linux的软硬连接
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转载)虚函数剖析
  • .Net CoreRabbitMQ消息存储可靠机制
  • .net 微服务 服务保护 自动重试 Polly
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • [1]-基于图搜索的路径规划基础
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [Bugku]密码???[writeup]
  • [CSS]CSS 的背景
  • [C语言]——函数递归
  • [Flexbox] Using order to rearrange flexbox children
  • [HackMyVM]靶场Crossbow
  • [HUBUCTF 2022 新生赛]
  • [java] 23种设计模式之责任链模式