2

我正在尝试学习使用 bpel。我选择 Eclipse Bpel Designer 和 apache ode(在 tomcat 服务器上)进行实验。我试图建模的过程是一个贷款过程。它有 3 项服务:creditRate 服务(用 eclipse bpel 设计器编写并在经过测试之前进行部署)、货币转换器服务和主编排流程。虽然我在从 Eclipse 测试 Web 服务时没有部署错误,但会发生以下错误:

错误 [ExternalService] 向 Axis2 发送消息以获取 ODE mex {PartnerRoleMex#hqejbhcnphr87mcnd0np43 [PID {CreditBuletinNamespace}CreditBuletin-137] 调用 org.apache.ode.bpel.epr.WSAEndpoint@a64453.getRating(...) 状态请求} org 时出错.apache.ode.axis2.OdeFault:未找到绑定操作:服务 { http://www.webserviceX.NET/ }CurrencyConvertor 端口 CurrencyConvertorSoap 名称 getRating。在 org.apache.ode.axis2.util.SoapMessageConverter.createSoapRequest(SoapMessageConverter.java:154)

调用期间失败:错误向 Axis2 发送消息以获取 ODE mex {PartnerRoleMex#hqejbhcnphr87mcnd0np43 [PID {CreditBuletinNamespace}CreditBuletin-137] 调用 org.apache.ode.bpel.epr.WSAEndpoint@a64453.getRating(...) 状态请求} 21 :09:14,421 INFO [BpelRuntimeContextImpl] ActivityRecovery:注册活动 19,失败原因:向 Axis2 发送消息时出错,用于 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

4

1 回答 1

2

您的CreditRating流程运行良好,错误在于CreditBuletin流程。当我用soapUI 测试这个时,我得到一个selectionFailure. BPEL 中的这个错误告诉您,fromto的流程有问题。

在这里概述问题是您的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交换的流程,并在测试每个增量时对功能进行增量更新。这样,你最终会得到一些有用的东西。

于 2013-04-18T10:56:18.793 回答