| |
| <!-- |
| ~ 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 < $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> |