在ode中运行bpel进程时出错

时间:2013-04-17 18:29:24

标签: eclipse tomcat eclipse-plugin bpel

我正在努力学习使用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

1 个答案:

答案 0 :(得分: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的流程,并在测试每个增量时进行功能的增量更新。这样,你最终会得到一些有用的东西。