我正在努力学习使用bpel。我选择Eclipse Bpel Designer和apache ode(在tomcat服务器上)进行实验。我试图建模的过程是贷款流程。它有3个服务:一个creditRate服务(用eclipse bpel设计器编写,部署befo-hand,测试它有效),一个currency converter service,以及主要的编排过程。虽然在出现错误时从eclipse测试Web服务时我没有部署错误:
ERROR [ExternalService]向ODE mex的Axis2发送消息时出错 {PartnerRoleMex #hqejbhcnphr87mcnd0np43 [PID {CreditBuletinNamespace} CreditBuletin-137]调用 org.apache.ode.bpel.epr.WSAEndpoint@a64453.getRating(...)状态 请求} org.apache.ode.axis2.OdeFault:未找到绑定操作: service {http://www.webserviceX.NET/} CurrencyConvertor端口 CurrencyConvertorSoap名称getRating。在 org.apache.ode.axis2.util.SoapMessageConverter.createSoapRequest(SoapMessageConverter.java:154)
和
调用期间失败:向ODE mex发送消息到Axis2时出错 {PartnerRoleMex #hqejbhcnphr87mcnd0np43 [PID {CreditBuletinNamespace} CreditBuletin-137]调用 org.apache.ode.bpel.epr.WSAEndpoint@a64453.getRating(...)状态 请求} 21:09:14,421 INFO [BpelRuntimeContextImpl] ActivityRecovery: 注册活动19,失败原因:发送消息时出错 Axis2 for ODE mex {PartnerRoleMex #hqejbhcnphr87mcnd0np43 [PID {CreditBuletinNamespace} CreditBuletin-137]调用 org.apache.ode.bpel.epr.WSAEndpoint@a64453.getRating(...)状态 请求在第33频道上
有人可以帮我解决问题吗?我搜索了一些解决方案,但没有找到一个有效的解决方案。可能是由于我的知识不足,我没有正确地搜索或者没有做正确的事情。因为这个描述可能令人困惑,所以我附上了我的解决方案,因为我相信他们会告诉我更多我正在尝试做什么以及我做错了多少。 http://www.mediafire.com/?9bjgt44spln1zwr
提前感谢
编辑:执行迭代方法(在第一个答案中消失)似乎外部转换服务没有响应来自ode。这很奇怪,因为该服务在浏览器中工作,并且在处理时没有报告错误。再次因为我的知识匮乏,我相信代码比我的措辞更好。我用外部货币转换器做了一个eclipse项目。任何帮助/指导都非常感激。先感谢您。 http://www.mediafire.com/?56csca1qgt5ka9a答案 0 :(得分:2)
您的CreditRating
进程运行正常,错误在于CreditBuletin
进程。当我用soapUI测试这个时,我得到一个selectionFailure
。 BPEL中的此错误告诉您,流程中from
或to
出现问题。
此处列出的问题是CreditBuletin
流程活动的简化版本,简化为最初receive
,最终reply
以及您的assign
中间的活动。您可以将其粘贴到流程的主sequence
中以重现问题。
<bpel:receive name="receiveInput" partnerLink="clientInput" operation="getLoan" portType="tns:CreditBuletinPT" variable="receiveInput" createInstance="yes"></bpel:receive>
<bpel:assign validate="no" name="AssignFinal">
<bpel:copy>
<bpel:from>
<bpel:literal>
<tns:SumaRON xmlns:tns="CreditBuletinNamespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<output>0</output>
</tns:SumaRON>
</bpel:literal>
</bpel:from>
<bpel:to variable="outputResult" part="parameters"></bpel:to>
</bpel:copy>
<bpel:copy>
<bpel:from>
<![CDATA[$loanWithInterest * bpel:getVariableData('CurrencyRateInputResponse','parameters','ConversionRateResult')]]>
</bpel:from>
<bpel:to part="parameters" variable="outputResult">
<bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0">
<![CDATA[output]]>
</bpel:query>
</bpel:to>
</bpel:copy>
</bpel:assign>
<bpel:reply name="outputResult" partnerLink="clientInput" operation="getLoan" portType="tns:CreditBuletinPT" variable="outputResult"></bpel:reply>
您尝试两次分配相同的变量,首先使用默认初始化。这没有多大意义,但由于某种原因,BPEL编辑器会在默认情况下生成这些初始化。如果您将第二个from
中的copy
语句更改为其他内容,则会得到正确答案,例如
<![CDATA[bpel:getVariableData('receiveInput','parameters','suma')]]>
因此,您的问题来自from
语句,很可能是那些使用getVariableData()
函数的语句。现在,我不想修复你的过程中的所有表达式(因为有很多,这是你的任务),但我建议你看一下它们。从最小的工作流程开始,例如上面交换from
的流程,并在测试每个增量时进行功能的增量更新。这样,你最终会得到一些有用的东西。