Previous – Idempotent Receiver | Index | Next – Message Channel
This week, we'll learn one of the most common patterns known as
Service Activator.
When do I use this pattern?
Service Activator acts as a translator between the service exposed by the
Message Endpoint and the messaging system. For example, an OData service can be consumed in CPI using a Service Activator commonly known to us developers as
OData Receiver Adapter.
Service Activator in CPI
In CPI, I'll demonstrate the
OData Receiver Adapter as a Service Activator.
Integration Flow

OData Service
The integration flow starts immediately using
Timer Start Event, gets the product from Northwind OData Service using
OData Receiver Adapter, and Logs the message contents using a
Groovy Script.
The Service Activator is implemented as
OData Receiver Adapter. The
OData Receiver Adapter invokes the OData service using HTTPS, the HTTP response body is converted to a nicer format and stored into the message body. whereas headers are copied into message headers. A CamelHttpResponseCode header is also set.
The Log
Groovy Script shows us the content of the
Message. The script is like so:
import com.sap.gateway.ip.core.customdev.util.Message
def Message processData(Message message) {
def messageLog = messageLogFactory.getMessageLog(message)
messageLog.addAttachmentAsString('Headers', message.headers.collect { key, value ->
key + ':\t' + value
}.join('\n'), null)
messageLog.addAttachmentAsString('Body', message.getBody(String), null)
return message
}
Output
Headers
CamelHttpResponseCode: 200
HttpStatusCodes: OK
ODataResponseType: Properties
SAP_MessageProcessingLogID: AF-DILhznrDxdh_O8s9gq-HkSMD8
SAP_MplCorrelationId: AF-DILgcLpXDWMgi0y190B6yKRrJ
SAP_PregeneratedMplId: AF-DILhK89mz6lm-NFvqmuw9SM3M
scriptFile: script1.groovy
scriptFileType: groovy
Body
<Products>
<Product>
<CategoryID>1</CategoryID>
<Discontinued>false</Discontinued>
<SupplierID>1</SupplierID>
<UnitPrice>18.0000</UnitPrice>
<ProductName>Chai</ProductName>
<QuantityPerUnit>10 boxes x 20 bags</QuantityPerUnit>
<UnitsOnOrder>0</UnitsOnOrder>
<ProductID>1</ProductID>
<ReorderLevel>10</ReorderLevel>
<UnitsInStock>39</UnitsInStock>
</Product>
</Products>
As you can see the raw HTTP response from OData service was nicely wrapped in a
Message by the Service Activator.
EIPinCPI Rating - 10/10
CPI has a number of out-of-the-box Service Activators, called as Adapters for most common protocols and applications. A developer can also develop adapters if required. In addition, the Cloud Platform Integration Suite has Open Connectors that allow connection to many applications. Therefore, CPI has a full rating of 10/10 for the Service Activator pattern.
Conclusion
Service Activator pattern enables us to consume and provide services from the messaging system without the consumer/producer having knowledge of the messaging code.
References/Further Readings
Hope this helps,
Bala
Previous – Idempotent Receiver | Index | Next – Message Channel