Press "Enter" to skip to content

How to handle HTTP Errors and Exceptions in SAP Cloud Integration

0

This HowTo blog explains an API-driven integration pattern: We want to create or update an object through an API which DOES NOT provide an UPSERT functionality… First a HTTP GET is performed (read the object) and if a HTTP 404 is returned (not found), we create the object through a HTTP POST, otherwise (HTTP 200 is returned and the object can be read) we update the object through another API call (e.g. HTTP PUT).

Scenario

Test Scenario:

To simplify the scenario we focus only on the HTTP GET and write the message into the MPL after the call:

HTTP GET w/out error handling

Problem:

We have to call a READ API (via HTTP GET) which returns an error (HTTP 404 – not found) and the integration flow fails:

Error w/out Exception Handling

Exception Handling:

So we have to catch the exception, but the processing stops, even when we catch the exception in a local integration processing:

Exception Subprocess

Even worse, all looks good, but the processing simply stops with the Message End event in the “Catch 404” Exception Subprocess. As you can see, there is no attachment written from the Groovy Script. It is designed like this – there is no way to return processing into the main iFlow. Whats even worse: you cannot use the Router in the Exception Subprocess (to handle the HTTP Status differently):

Message stops with Exception Handling

Solution Alternative 1:

To continue the processing after a HTTP 404 (or any other error), we can use the approach below. The HTTP GET is outsourced into a separate integration flow (here in the same iFlow) and called via ProcessDirect adapter. The exception is caught in there and then the processing continues in the “Call PD” Local Integration Process.

Exception Handling in separate Integration Process

The disadvantage of this approach (apart from the increased design complexity) is the fact that you have 2 messages in the monitor (even if they share the same correlation id):

Message processing is continued successfully

Solution Alternative 2:

The better approach is to continue the processing from the Exception Subprocess where a Local Integration Process is called. Like this, the main Integration Process is not reached, but the goal can be still executed:

Continue processing from subprocess

The result is a successful call where the MPL attachment is written from the CREATE Local Integration Process:


Solution Alternative 3:

There is even a smarted approach which I learned today (thanks Peter). Since HTTP Receiver Adapter Version 1.10 we can uncheck the following flag in the configuration:

Deactivate “Throw Exception On Failure”
Continue Processing

The iFlow looks like in the very inital approach now.

Of course the response can be evaluated in the main process with a router like for all the other solutions.

Check HTTP response

Summary:

Solution 3 is the easiest approach for sure and this option has been introduced recently by SAP (with adapter version 1.10). In case you might be using another adapter which does not have this flag, you can still go for the other approaches!

Print Friendly, PDF & Email