blob: 9e3ac091f73917c525e1b2f7cbe64f6eed03cbb5 [file] [log] [blame]
<!--
~ Licensed to the Apache Software Foundation (ASF) under one ~ or more
contributor license agreements. See the NOTICE file ~ distributed with
this work for additional information ~ regarding copyright ownership.
The ASF licenses this file ~ to you under the Apache License, Version
2.0 (the ~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at ~ ~
http://www.apache.org/licenses/LICENSE-2.0 ~ ~ Unless required by
applicable law or agreed to in writing, ~ software distributed under
the License is distributed on an ~ "AS IS" BASIS, WITHOUT WARRANTIES
OR CONDITIONS OF ANY ~ KIND, either express or implied. See the
License for the ~ specific language governing permissions and
limitations ~ under the License.
-->
<process xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tns="http://ode/bpel/unit-test/testFlowActivity1" xmlns:wns="http://ode/bpel/unit-test/testFlowActivity1.wsdl"
xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:typens="http://ode/bpel/unit-test/testFlowActivity1.wsdl.types"
xmlns:bpws="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
name="TestActivityFlow" targetNamespace="http://ode/bpel/unit-test/testFlowActivity1"
suppressJoinFailure="yes" queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"
expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0">
<!-- Test Flow using XPath 20 -->
<import location="TestActivityFlow.wsdl"
namespace="http://ode/bpel/unit-test/testFlowActivity1.wsdl"
importType="http://schemas.xmlsoap.org/wsdl/" />
<!--
<import location="../ProbeService/probeService.wsdl"
namespace="http://ode/bpel/unit-test/ProbeService.wsdl"
importType="http://schemas.xmlsoap.org/wsdl/"/>
-->
<!-- test control flow elements -->
<!-- sequence -->
<!-- flow ( links ) -->
<!-- swith -->
<!-- while -->
<partnerLinks>
<partnerLink name="request" partnerLinkType="wns:testFlowActivityRequest"
myRole="testFlowActivityService" />
<!--
<partnerLink name="probe" partnerLinkType="wns:probeRequest"
partnerRole="probeService" initializePartnerRole="yes"/>
-->
</partnerLinks>
<variables>
<variable name="request" messageType="wns:requestMessage" />
<variable name="probeInput" messageType="wns:probeMessage" />
<variable name="reply" messageType="wns:replyMessage" />
<variable name="internalState" messageType="wns:internalProcessData" />
</variables>
<sequence>
<flow>
<links>
<link name="receive-to-assign1" />
<link name="assign1-to-probe1" />
<link name="assign1-to-probe2" />
<link name="probe1-to-probe3" />
<link name="probe2-to-probe3" />
</links>
<assign name="Init" validate="no">
<copy>
<from>
<literal xml:space="preserve"><wns:requestMessage>
<typens:requestID>null</typens:requestID>
<typens:requestText>null</typens:requestText>
<typens:flowIndicator>
<typens:indicatorOne>yes</typens:indicatorOne><typens:indicatorTwo>yes</typens:indicatorTwo>
</typens:flowIndicator>
<loopIndicator>null</loopIndicator>
</wns:requestMessage>
</literal>
</from>
<to variable="request" part="requestMessageData"></to>
</copy>
</assign>
<receive name="receive1" partnerLink="request" portType="wns:testFlowActivityPT"
operation="request" variable="request" createInstance="yes">
<sources>
<source linkName="receive-to-assign1" />
</sources>
</receive>
<!-- Copy input variables to internal accumulators -->
<!-- After the copy the process splits into two execution paths -->
<sequence>
<targets>
<target linkName="receive-to-assign1" />
</targets>
<sources>
<source linkName="assign1-to-probe1" />
<source linkName="assign1-to-probe2" />
</sources>
<assign name="assign1">
<copy>
<from>$request.requestMessageData/typens:requestID
</from>
<to variable="probeInput" part="probeMessageData" query="/typens:probe/typens:probeName" />
</copy>
<copy>
<from variable="request" property="wns:testProbeData" />
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeData" />
</copy>
</assign>
<assign>
<copy>
<from>
<literal><![CDATA[root process splits into A and B]]></literal>
</from>
<to variable="probeInput" part="probeMessageData" query="/typens:probe/typens:probeName" />
</copy>
</assign>
<!--
<invoke name="probe2" partnerLink="probe"
portType="prb:probeMessagePT" operation="probe"
inputVariable="probeInput" outputVariable="probeInput" ></invoke>
-->
<assign>
<copy>
<from>
concat($probeInput.probeMessageData/typens:probeData,$probeInput.probeMessageData/typens:probeName)
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeData" />
</copy>
</assign>
</sequence>
<!--
probe1 outbound status is dependent on the request input testFlow1
-->
<sequence>
<targets>
<target linkName="assign1-to-probe1" />
</targets>
<sources>
<source linkName="probe1-to-probe3">
<transitionCondition>bpws:getVariableProperty("request",
"wns:testFlow1") =
'yes'
</transitionCondition>
</source>
</sources>
<assign>
<copy>
<from>
<literal><![CDATA[process A completes]]></literal>
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeName" />
</copy>
</assign>
<!--
<invoke name="probe3" partnerLink="probe"
portType="prb:probeMessagePT" operation="probe"
inputVariable="probeInput" outputVariable="probeInput" ></invoke>
-->
<assign>
<copy>
<from>
concat($probeInput.probeMessageData/typens:probeData,$probeInput.probeMessageData/typens:probeName)
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeData" />
</copy>
</assign>
</sequence>
<!--
probe2 outbound status is dependent on the request input testFlow2
-->
<sequence>
<targets>
<target linkName="assign1-to-probe2" />
</targets>
<sources>
<source linkName="probe2-to-probe3">
<transitionCondition>
$request.requestMessageData/typens:flowIndicators/typens:indicatorTwo
=
'yes'
</transitionCondition>
</source>
</sources>
<assign>
<copy>
<from>
<literal><![CDATA[process B completes]]></literal>
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeName" />
</copy>
</assign>
<!--
<invoke name="probe4" partnerLink="probe"
portType="prb:probeMessagePT" operation="probe"
inputVariable="probeInput" outputVariable="probeInput" ></invoke>
-->
<assign>
<copy>
<from>
concat($probeInput.probeMessageData/typens:probeData,$probeInput.probeMessageData/typens:probeName)
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeData" />
</copy>
</assign>
</sequence>
<!-- The split execution path from assign1 joins on probe3 -->
<!--
Probe3 will only fire if the transition condition from probe1 and
probe2 both evaluate to true
-->
<sequence>
<targets>
<joinCondition>$probe1-to-probe3 and
$probe2-to-probe3</joinCondition>
<target linkName="probe1-to-probe3" />
<target linkName="probe2-to-probe3" />
</targets>
<assign>
<copy>
<from>
<literal><![CDATA[processes A and B merge on process C]]></literal>
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeName" />
</copy>
</assign>
<!--
<invoke name="probe5" partnerLink="probe"
portType="prb:probeMessagePT" operation="probe"
inputVariable="probeInput" outputVariable="probeInput" ></invoke>
-->
<assign>
<copy>
<from>
concat($probeInput.probeMessageData/typens:probeData,$probeInput.probeMessageData/typens:probeName)
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeData" />
</copy>
</assign>
</sequence>
</flow>
<assign>
<copy>
<from>
<literal><![CDATA[merge into root process]]></literal>
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeName" />
</copy>
</assign>
<!--
<invoke name="probe6" partnerLink="probe"
portType="prb:probeMessagePT" operation="probe"
inputVariable="probeInput" outputVariable="probeInput"></invoke>
-->
<assign>
<copy>
<from>
concat($probeInput.probeMessageData/typens:probeData,$probeInput.probeMessageData/typens:probeName)
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeData" />
</copy>
</assign>
<!--
from the input data loopIndicator set the number of loop interations
-->
<assign>
<copy>
<from>
<literal><![CDATA[test switch statement]]></literal>
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeName" />
</copy>
</assign>
<!--
<invoke name="probe7" partnerLink="probe"
portType="prb:probeMessagePT" operation="probe"
inputVariable="probeInput" outputVariable="probeInput"></invoke>
-->
<assign>
<copy>
<from>
concat($probeInput.probeMessageData/typens:probeData,$probeInput.probeMessageData/typens:probeName)
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeData" />
</copy>
</assign>
<if>
<condition>bpws:getVariableProperty("request",
"wns:loopInd") = 'min'</condition>
<sequence>
<assign name="flow1-min-assign">
<copy>
<from>5</from>
<to variable="internalState" part="internalMessageData"
query="/typens:internal/typens:loop1" />
</copy>
<copy>
<from>
<literal><![CDATA[case min: set loop iterations = 5]]></literal>
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeName" />
</copy>
</assign>
<!--
<invoke name="probe8" partnerLink="probe"
portType="prb:probeMessagePT" operation="probe"
inputVariable="probeInput" outputVariable="probeInput" ></invoke>
-->
<assign>
<copy>
<from>
concat($probeInput.probeMessageData/typens:probeData,$probeInput.probeMessageData/typens:probeName)
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeData" />
</copy>
</assign>
</sequence>
<elseif>
<condition>$request.requestMessageData/loopIndicator
= 'max'</condition>
<sequence>
<assign name="flow1-max-assign">
<copy>
<from>10</from>
<to variable="internalState" part="internalMessageData"
query="/typens:internal/typens:loop1" />
</copy>
<copy>
<from>
<literal><![CDATA[case max: set loop iterations = 10]]></literal>
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeName" />
</copy>
</assign>
<!--
<invoke name="probe9" partnerLink="probe"
portType="prb:probeMessagePT" operation="probe"
inputVariable="probeInput" outputVariable="probeInput" ></invoke>
-->
<assign>
<copy>
<from>
concat($probeInput.probeMessageData/typens:probeData,$probeInput.probeMessageData/typens:probeName)
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeData" />
</copy>
</assign>
</sequence>
</elseif>
<else>
<sequence>
<assign name="flow1-default-assign">
<copy>
<from>0</from>
<to variable="internalState" part="internalMessageData"
query="/typens:internal/typens:loop1" />
</copy>
<copy>
<from>
<literal><![CDATA[otherwise: set loop iterations = 0]]></literal>
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeName" />
</copy>
</assign>
<!--
<invoke name="probe10" partnerLink="probe"
portType="prb:probeMessagePT" operation="probe"
inputVariable="probeInput" outputVariable="probeInput" ></invoke>
-->
<assign>
<copy>
<from>
concat($probeInput.probeMessageData/typens:probeData,$probeInput.probeMessageData/typens:probeName)
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeData" />
</copy>
</assign>
</sequence>
</else>
</if>
<assign name="while-increment-initialize">
<copy>
<from>0</from>
<to variable="internalState" part="internalMessageData"
query="/typens:internal/typens:loop1Counter" />
</copy>
<copy>
<from>
<literal><![CDATA[test loop iterations]]></literal>
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeName" />
</copy>
</assign>
<assign>
<copy>
<from>
concat($probeInput.probeMessageData/typens:probeData,$probeInput.probeMessageData/typens:probeName)
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeData" />
</copy>
</assign>
<!--
<invoke name="probe10" partnerLink="probe"
portType="prb:probeMessagePT" operation="probe"
inputVariable="probeInput" outputVariable="probeInput"></invoke>
-->
<while>
<condition>$internalState.internalMessageData/typens:loop1Counter &lt; $internalState.internalMessageData/typens:loop1</condition>
<sequence>
<assign name="while-increment">
<copy>
<from>($internalState.internalMessageData/typens:loop1Counter + 1)</from>
<to variable="internalState" part="internalMessageData" query="/typens:internal/typens:loop1Counter"/>
</copy>
<copy>
<from>($internalState.internalMessageData/typens:loop1Counter + 1)</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeName"/>
</copy>
</assign>
<assign>
<copy>
<from>concat($probeInput.probeMessageData/typens:probeData,$probeInput.probeMessageData/typens:probeName)</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeData"/>
</copy>
</assign>
<!--
<invoke name="probe11" partnerLink="probe" portType="prb:probeMessagePT"
operation="probe" inputVariable="probeInput" outputVariable="probeInput"/>
-->
</sequence>
</while>
<!-- copy internal accumulators to the reply message -->
<assign>
<copy>
<from>
<literal><![CDATA[test1Process complete]]></literal>
</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeName"/>
</copy>
</assign>
<assign>
<copy>
<from>concat($probeInput.probeMessageData/typens:probeData,$probeInput.probeMessageData/typens:probeName)</from>
<to variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeData"/>
</copy>
</assign>
<!-- <invoke name="probe12" partnerLink="probe" portType="prb:probeMessagePT" operation="probe"
inputVariable="probeInput" outputVariable="probeInput"></invoke>-->
<assign name="assign2">
<copy>
<from variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeName"/>
<to variable="reply" part="replyMessageData" query="/typens:reply/typens:replyID"/>
</copy>
<copy>
<from variable="probeInput" part="probeMessageData" query="/tyens:probe/typens:probeData"/>
<to variable="reply" part="replyMessageData" query="/typens:reply/typens:replyText"/>
</copy>
</assign>
<reply name="reply" partnerLink="request" portType="wns:testFlowActivityPT" operation="request"
variable="reply"></reply>
</sequence>
</process>