Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
cancel
Showing results for 
Search instead for 
Did you mean: 
bhalchandraswcg
Contributor

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

Labels in this area