Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

BPMN REST tasks allow you to invoke REST endpoints within your BPMN processes. This can be achieved by adding a Service Task and handling the REST invocation part in a level implementation. BPS has provided this functionality out of the box to avoid the hassle of doing implementations by process developers.

Adding a REST task to a process

Note
titlePre-requisites
  • To add a REST task, you need to add a Java task in place within the BPMN process where you need to do the invocation. Therefore, you have to first create a BPMN process
  • This guide demonstrates adding a REST task using the Eclipse BPMN Designer. Use the update site, to add this plugin to your eclipse if you have not already done so. You can do the same in any other editor by adding the same property values.
  1. Add a “Service task” from the tools palette in the place where you need to invoke the endpoint. 
  2. Go to the properties panel of Service Task and select the Main config tab. 
  3. Select Java Task as the Task Type.
  4. Add the following fields to the Documentation section by clicking the New button.

    Field NameString ValueExpression
    serviceURL 
     

    <REST ENDPOINT URL>
    methodHTTP method (GET or POST only)
     

    outputVariableName of the variable to save response
     

    basicAuthUsernameUsername if the endpoints are secured
     

    basicAuthPasswordPassword for the username above
     

    inputRequest payload
     

    headersheader values in the format "headerName1:headerValue1,headerName2:header Value2"
     

The following code block provides an example service task definition to use as the REST task.

Code Block
languagexml
<serviceTask id="servicetask1" name="REST task1" activiti:class="org.wso2.carbon.bpmn.extensions.rest.RESTTask">
    <extensionElements>
        <activiti:field name="serviceURL">
            <activiti:expression>http://10.0.3.1:9773/restSample1_1.0.0/services/rest_sample1/${m ethod}
            </activiti:expression>
        </activiti:field>
        <activiti:field name="basicAuthUsername">
            <activiti:expression>bobcat</activiti:expression>
        </activiti:field>
        <activiti:field name="basicAuthPassword">
            <activiti:expression>bobcat</activiti:expression>
        </activiti:field>
        <activiti:field name="method">
            <activiti:string>
                <![CDATA[POST]]>
            </activiti:string>
        </activiti:field>
        <activiti:field name="input">
            <activiti:expression>Input for task1</activiti:expression>
        </activiti:field>
        <activiti:field name="outputVariable">
            <activiti:string>
                <![CDATA[v1]]>
            </activiti:string>
        </activiti:field>
        <activiti:field name="headers">
            <activiti:string>
                <![CDATA[key1:value1,key2:value2]]>
            </activiti:string>
        </activiti:field>
    </extensionElements>
</serviceTask>

Using JSON payloads

The example code block above uses the text request inputs. JSON input can also be sent with the request. To send JSON input, add a field with the name “outputMappings” and provide how to map the JSON response to the variables. The following code block provides an example definition with JSON input.

Code Block
languagexml
<serviceTask id="servicetask2" name="Rest task2" activiti:class="org.wso2.carbon.bpmn.extensions.rest.RESTTask">
    <extensionElements>
        <activiti:field name="serviceRef">
            <activiti:expression>conf:/test1/service2</activiti:expression>
        </activiti:field>
        <activiti:field name="method">
            <activiti:string>
                <![CDATA[POST]]>
            </activiti:string>
        </activiti:field>
        <activiti:field name="input">
            <activiti:expression>{ "companyName":"ibm", "industry":"${industry}", "address":{ "country":"USA", "state":"${state}"} }
            </activiti:expression>
        </activiti:field>
        <activiti:field name="outputMappings">
            <activiti:string>
                <![CDATA[var2:customer.name,var3:item.price]]>
            </activiti:string>
        </activiti:field>
    </extensionElements>
</serviceTask>

Changing the endpoint after process deployment

The REST endpoint can not be changed after deploying the process using the above method. If you want to change the endpoint after deploying the process, you need to point to a registry location which contains an endpoint reference. For more information on how to do this, see Endpoint References.

...