<process name="anExampleProcess"> <!-- Partners of the example process --> <partnerLinks> <partnerLink name="client" partnerLinkType="aClientPort" myRole="aProviderRole"/> <partnerLink name="serverOne" partnerLinkType="aServerPort" myRole="aClientRole" partnerRole="aServerRole"/> <partnerLink name="serverTwo" partnerLinkType="aServerPort" myRole="aClientRole" partnerRole="aServerRole"/> </partnerLinks> <!-- Internal variables --> <variables> <variable name="clientRequest" messageType="RequestMessage"/> <variable name="serverOneResponse" messageType="ResponseMessage"/> <variable name="serverTwoResponse" messageType="ResponseMessage"/> <variable name="providerResponse" messageType="ResponseMessage"/> </variables> <!-- Process definition --> <sequence> <!-- Get the request from the client --> <receive partnerLink="client" portType="aClientPort" operation="GetOffer" variable="clientRequest" createInstance="yes"/> <!-- Forward the request to both servers --> <flow> <invoke partnerLink="serverOne" portType="aServerPort" operation="GetOffer" inputVariable="clientRequest" outputVariable="serverOneResponse"/> <invoke partnerLink="serverTwo" ... /> </flow> <!-- Create response from cheapest offer --> <switch> <case condition="bpws:getVariableData ('serverOneResponse','price') < bpws:getVariableData ('serverTwoResponse','price')"> <assign> <copy> <from variable="serverOneResponse"/> <to variable="providerResponse"/> </copy> </assign> </case> <otherwise> ... </otherwise> </switch> <!-- Return the response to the client --> <reply partnerLink="client" portType="aClientPort" operation="GetOffer" variable="providerResponse"/> </sequence> </process>