Conditions
Conditions allow you to identify error or fault conditions and then specify the actions to be taken when a particular error or fault condition occurs. For example, for a particular error occurring because of a service not being available, you can perform an action such as a retry. Similarly, for another error occurring because of the failure of Schematron validation, you can perform the action of human intervention. This fault can be recovered manually by editing the payload and then resubmitting it through Oracle Enterprise Manager Fusion Middleware Control.
Conditions are defined in the fault-policies.xml
file, as shown in the following example:
<Conditions> <faultName xmlns:medns="http://schemas.oracle.com/mediator/faults" name="medns:mediatorFault"> <condition> <test>contains($fault.mediatorErrorCode,"TYPE_DATA_TRANSFORMATION")</test> <action ref="ora-java"/> </condition> </faultName> <faultName xmlns:medns="http://schemas.oracle.com/mediator/faults" name="medns:mediatorFault"> <condition> <test>contains($fault.mediatorErrorCode, "TYPE_FATAL_MESH")</test> <action ref="ora-retry"/> </condition> </faultName> <faultName xmlns:medns="http://schemas.oracle.com/mediator/faults" name="medns:mediatorFault"> <condition> <test>contains($fault.mediatorErrorCode,"TYPE_DATA_ASSIGN")</test> <action ref="ora-retry-crm-endpoint"/> </condition> </faultName> </Conditions>
Identifying Fault Types Using Conditions
You can categorize the faults that can be captured using conditions into the following types:
-
Mediator-specific faults
For all Mediator-specific faults, the Mediator service engine throws only one fault, namely
{http://schemas.oracle.com/mediator/faults}mediatorFault
. Every Mediator fault is wrapped into this fault. The errors or faults generated by a Mediator can be captured by using the format shown in the following example:<faultName xmlns:medns="http://schemas.oracle.com/mediator/faults" name="medns:mediatorFault"> <!-- mediatorFault is a bucket for all the mediator faults --> <condition> <test> contains($fault.mediatorErrorCode, "TYPE_FATAL_MESH") </test> <!-- Captures TYPE_FATAL_MESH errors --> <action ref="ora-retry"/> </condition> </faultName>
-
Business faults and SOAP faults
These errors or faults can be captured by defining an XPath condition, which is based on the fault payload. The following example provides details:
<faultName xmlns:ns1="http://xmlns.oracle.com/Customer" name="ns1:InvalidCustomer"> <!-- Qname of Business/SOAP fault --> <condition> <test> contains($fault.<PART_NAME>/custid, 1011) </test> <!-- xpath condition based on fault payload --> <action ref="ora-retry"/> </condition> </faultName>
When a reference service returns a business fault, the fault can be handled in the Mediator service component. The returned fault can be forwarded to another component, redirected to an adapter service such as a file adapter, or an event can be raised. However, if both a fault policy and fault handler are defined for a business fault, then the fault policy takes precedence over the fault handler. In such a case, the fault handlers in the Mediator service component are ignored, if the fault policy is successfully executed.
-
Adapter-specific fault
The errors or faults generated by an adapter can be captured by using the format shown in the following example:
<faultName xmlns:medns="http://schemas.oracle.com/mediator/faults" name="medns:mediatorFault"> <condition> <test>$fault.faultCode = "1"</test> <!-- unique constraint violation in DB adapter--> <action ref="ora-retry"/> </condition> </faultName>