我们首先添加所需的命名空间。此处,我们必须定义目标命名空间以及用于访问雇员和航空公司 WSDL 以及此 BPEL 流程 WSDL 的命名空间。我们还必须为所有 BPEL 活动标记声明命名空间(此处采用缺省命名空间,以便不必限定每个 BPEL 标记名)。BPEL 活动命名空间必须为
http://schemas.xmlsoap.org/ws/2003/03/business-process/: targetNamespace=\ xmlns=\xmlns:trv=\ xmlns:emp=\xmlns:aln=\... 合作伙伴链接(partnerLink) ―――在bpel文件中定义此partnerLinks目的在于导入各个wsdl文件中的partnerLink,并且确定在交互过程忠各自的角色如何。 接下来,我们必须定义合作伙伴链接,它们定义与此 BPEL 流程交互的不同方。每个合作伙伴链接都与描述其特性的特定 partnerLinkType 相关。每个合作伙伴链接还最多指定两个属性: ? myRole:表明业务流程本身的角色。 ? partnerRole:表明合作伙伴的角色。 注意: myRole是此bpel流程所扮演的角色,而partnerRole是其合作伙伴所扮演的角色。 合作伙伴链接仅可以指定一个角色,通常同步请求/响应操作也仅能指定一个角色。对于异步操作,它指定两个角色。在本示例中,我们定义四个角色。第一个合作伙伴链接称作客户端,由 travelLT 合作伙伴链接类型描述其特性。此客户端调用该业务流程。我们需要指定 此BPEL 流程 (myRole 属性) 的角色为travelService。我们必须指定第二个角色:partnerRole。此处,该角色为 travelServiceCustomer,它项目名称: 描述 BPEL 流程客户端的特性。 第二个合作伙伴链接称作 employeeTravelStatus,由 employeeLT 合作伙伴链接类型描述其特性。它是 BPEL 流程与 Web 服务之间的一个同步请求/响应关系;我们再次仅指定一个角色。此时,该角色为 partnerRole,这是因为我们描述了 Web 服务(它是此 BPEL 流程的合作伙伴)的角色: 最后两个合作伙伴链接对应于航空公司 Web 服务。由于它们使用同一类型的 Web 服务,因此我们基于一个合作伙伴链接类型 flightLT 指定两个合作伙伴链接。此处,由于我们使用异步回调通信,因此需要两个角色。此 BPEL 流程 (myRole) 对于航空公司 Web 服务的角色为 airlineCustomer,而航空公司 (partnerRole) 的角色为 airlineService: 变量 BPEL 流程中的变量用于存储消息以及对这些消息进行重新格式化和转换。您通常需要为发送到合作伙伴以及从合作伙伴收到的每个消息定义一个变量。就我们的流程而言,我们需要七个变量。我们将它们命名为 TravelRequest、EmployeeTravelStatusRequest、EmployeeTravelStatusResponse、FlightDetails、FlightResponseAA、FlightResponseDA 和 TravelResponse。 我们必须为每个变量指定类型。可以使用 WSDL 消息类型、XML 模式简单类型或 XML 模式元素。在我们的示例中,我们对所有变量使用 WSDL 消息类型: messageType=\ messageType=\ 项目名称: BPEL 流程主体流程主体指定调用合作伙伴 Web 服务的顺序。它通常以 我们将消息接收与客户端合作伙伴链接在一起,并等待对端口类型 TravelApprovalPT 调用 TravelApproval 操作。我们将收到的消息存储到 TravelRequest 变量中: 接下来,我们需要调用雇员出差状态 Web 服务。但在调用之前,我们必须为此 Web 服务准备输入。查看雇员 Web 服务的 WSDL,可以看到我们必须发送由雇员部分组成的消息。我们可以通过复制客户端发送的消息的雇员部分来构造此消息。编写相应的赋值语句: ... 现在,我们就可以调用雇员出差状态 Web 服务了。为了进行同步调用,我们使用 EmployeeTravelStatus 操作。我们已经在 EmployeeTravelStatusRequest 变量中准备了输入消息。由于它是同步调用,因此该调用等待回应并将其存储在 EmployeeTravelStatusResponse 变量中:... inputVariable=\ outputVariable=\ 同步调用会有两个变量:inputVariable、outputVariable。 ... 下一步是调用上述两个航空公司 Web 服务。同样,我们先准备所需的输入消息(这两个 Web 服务的输入消息相同)。FlightTicketRequest 消息包含两部分: ? flightData:它从客户端消息 (TravelRequest) 中检索而得。 ? travelClass:它从 EmployeeTravelStatusResponse 变量中检索而得。 因此,我们编写一个包含两个 copy 元素的赋值: ... 输入数据包含需要传递给航空公司 Web 服务的数据。由于格式相同,因此我们可以使用一个简单复制直接传递它。在实际情况下,通常需要执行转换。为此,可以使用具有 的 XPath 表达式、使用转换服务(如 XSLT 引擎)或使用由特定 BPEL 服务器提供的转换功能。 现在,我们准备调用这两个航空公司 Web 服务。我们将进行并发的异步调用。为表述并发,BPEL 提供了 ? 使用 我们使用 口类型调用 FlightAvailability 操作,发送 FlightDetails 变量中的消息。 使用 ... 'confirmationData','/confirmationData/Price') 项目名称: