0

我创建了以下 BPEL 脚本。

<?xml version="1.0" encoding="utf-8" ?>
<process name="ProcessInvoice"
    targetNamespace="http://invoiceregistry.me.cz/"
    xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
    xmlns:invrwsdl="http://invoiceregistry.me.cz/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"
    expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0">

    <import
        location="InvoiceRegistryWS.wsdl"
        namespace="http://invoiceregistry.me.cz/"
        importType="http://schemas.xmlsoap.org/wsdl/" />

    <partnerLinks>
        <partnerLink 
            name="InvoiceRegistryPartnerLink" 
            partnerLinkType="invrwsdl:InvoiceRegistryPartnerLinkType" 
            partnerRole="InvoiceRegistryServiceRole" />
    </partnerLinks>

    <variables>
        <variable name="newInvoice" messageType="invrwsdl:insertNewInvoice" />
        <variable name="response" messageType="invrwsdl:insertNewInvoiceResponse" />
    </variables>

    <sequence>
        <assign name="PrepareInsertNewInvoiceRequest">
            <copy>
                <from>
                    <literal>
                        <invoice>
                            <buyerId>entity-02</buyerId>
                            <sellerId>entity-03</sellerId>
                            <price>
                                <currency>CZK</currency>
                                <value>1000000</value>
                            </price>
                        </invoice>
                    </literal>
                </from>
                <to variable="newInvoice" part="parameters" />
            </copy>
        </assign>

      <invoke
            name="InsertNewInvoice"
            partnerLink="InvoiceRegistryPartnerLink"
            operation="insertNewInvoice"
            inputVariable="newInvoice"
            outputVariable="response" />

    </sequence>

</process>

我终于成功地部署到我的本地 Apache ODE(在 Tomcat 上运行)安装中。

现在我想知道如何开始这个过程。以下网址:

http://localhost:8080/ode/processes/ProcessInvoice?wsdl

返回以下错误消息:

Requested resource not found!

在哪里可以找到 WSDL 文件?除了手动向它发送 SOAP 消息之外,还有其他方法可以启动该过程吗?

4

1 回答 1

1

除了手动向它发送 SOAP 消息之外,还有其他方法可以启动该过程吗?

不,那里没有。每个流程都需要一个启动活动。我想知道为什么 ODE 部署首先是您的流程,但这可能是没有 WSDL 的原因。引用BPEL 规范,第 5.5 节

在 WS-BPEL 中创建流程实例总是隐含的;可以对接收消息的活动(即<receive>活动和 <pick>活动)进行注释,以指示该活动的发生导致创建业务流程的新实例。这是通过将createInstance此类活动的属性设置为“是”来完成的……开始活动是一个<receive>或一个用属性<pick>注释的活动 。createInstance="yes"[SA00015] 每个可执行的业务流程必须至少包含一个启动活动...

因此,您应该receiveassign. 要完成这项工作,您还需要一个入站 ( myRole) partnerLink。这是您的流程正在实现的接口。它应该看起来像这样:

<partnerLinks>
       <partnerLink 
            name="InvoiceRegistryPartnerLink" ... />
        <partnerLink 
            name="MyRolePartnerLink" 
            partnerLinkType="invrwsdl:MyRolePartnerLinkType" 
            myRole="BPELServiceRole" />
</partnerLinks>
...
<receive partnerLink="MyRolePartnerLink" portType="MyPortType" operation="SomeStartingOperation" createInstance="yes" />
...

如果您已经有一个您的流程正在实施的 WSDL,那么只需替换portTypeoperation命名等。您可能还需要定义 a partnerLink,如果您还没有这样做的话。

于 2013-05-21T08:30:05.193 回答