2.20.3.1. BPEL Example

<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>