我创建了以下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上运行)安装。
现在我想知道如何让这个过程开始。以下URL地址:
http://localhost:8080/ode/processes/ProcessInvoice?wsdl
返回以下错误消息:
Requested resource not found!
我在哪里可以找到WSDL文件?除了手动向其发送SOAP消息之外,还有其他方法可以启动该过程吗?
答案 0 :(得分:1)
除了手动发送SOAP之外,还有其他方法可以启动该过程 消息呢?
不,没有。每个流程都需要一个启动活动。我想知道为什么ODE首先部署你的进程,但可能原因是,为什么没有WSDL。引用the BPEL spec., section 5.5:
在WS-BPEL中创建流程实例始终是隐式的; 接收消息的活动(即
<receive>
活动和<pick>
个活动)可以注释以表明发生 该活动导致业务流程的新实例 创建。这是通过设置此类的createInstance
属性来完成的 “是”的活动.... 开始活动是使用a注释的<receive>
或<pick>
活动createInstance="yes"
属性。 [SA00015]每个可执行的业务 进程必须包含至少一个开始活动...
因此,您应该在receive
之前加入assign
活动。要使其工作,您还需要一个入站(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,那么只需要替换portType
和operation
名称等。如果您还没有,您可能还需要定义partnerLink
已经做到了。