This
posting discusses an integration pattern where you return a fault as a message
instead of as a fault, to prevent that the execution of the integration is
indicated as having errored.
There are a
couple of situations where you may not want a synchronous integration to return
a fault to its consumer. Examples are:
- Some back-end system is raising a fault which is not really a fault but a way to give the consumer a particular outcome. Like a credit limit check that returns OK when the limit is not reached, but otherwise gives a CreditLimitReached fault.
- A call to the back-end system may time out, telling the integration that the system is not available, which may be a regular state. For example, the integration calls the system to check if it is still running, and if it is tell it to shut down. When the system is already shut down the call will time out.
The reason
you may not want to return a fault to the consumer of your integration, at
least not as a fault, might be that this flags the execution of the integration
to be errored. For example, integrations in the Oracle Integration Cloud (OIC)
will show up in the Dashboard as errored instances. That on its turn should
trigger Systems Administration to have a look why it failed, only to find out
it did not as that is normal behavior. Before you know it, Systems
Administration stops having a look, also when there is something seriously
wrong with your integration.
To prevent
this from happening you may want to handle the fault as an alternate flow
instead of an exception flow. This is what the Fault Encapsulation pattern is
about.
Fault Encapsulation Pattern
In simple
terms, when applying the Fault Encapsulation pattern, you don't return an error
for business faults, but instead encapsulate the error in a "message"
element of the response which is an optional part of the normal response.
The
following "BPEL-ish" diagram shows how this looks.
The invoke to the
back-end system is a scope with a catch block that catches the error, wraps it
in a normal message and then returns the response. In OIC this works in a
similar way.
More
formally:
Context:
A business
fault in a synchronous service operation should not stop its processing, to
allow returning other information than the fault alone.
A business
fault caught by a synchronous service operation that otherwise executed
properly, should not flag the operation as failed to prevent false positive
error notifications. Instead handling of the fault should be part of normal
process execution by the consumer.
Solution:
The fault
in the synchronous service operation is caught using an exception handler that
wraps the fault in a message element. The message element is an optional part
of the regular response message of the synchronous service operation. System
faults in the processing of the synchronous service operation itself are
handled as regular faults, in case of SOAP by raising a SOAP Fault, or in case
of REST by returning a 4xx or 5xx HTTP status code.
Implication:
The
consumer cannot use any regular fault handling mechanisms to handle the
business fault. Instead it will have to check for the message element being
present in the response and act on that.
1 comment:
Seems like you are fond of writing since a long, therefore your posted content is well formulated in a proper way of writing. It's an amazing experience to read your blog post as you have shared a piece of meaningful and required information with the use of proper statics and beautiful words. Thanks for sharing!!
Angularjs Development Services texas
Post a Comment