This site contains the documentation that is relevant to older WSO2 product versions and offerings.
For the latest WSO2 documentation, visit https://wso2.com/documentation/.

Fault Mediator

The Fault Mediator (also called the Makefault Mediator) transforms the current message into a fault message, but does NOT send it. The Send Mediator needs to be invoked to send a fault message created this way. The fault message's To header is set to the Fault-To of the original message if such a header exists in the original message. You can create the fault message as a SOAP 1.1, SOAP 1.2, or plain-old XML (POX) fault.

For more information on faults and errors, see Error Handling.



Syntax

<makefault [version="soap11|soap12|pox"]>
   <code (value="literal" | expression="xpath")/>
   <reason (value="literal" | expression="xpath")>
   <node>?
   <role>?
   <detail>?
</makefault>

UI Configuration

Choose one of the following versions for the Fault Mediator:

SOAP 1.1

For this version, the following options are available:

  • Fault Code
    • versionMismatch - SOAP version mismatch error.
    • mustUnderstand - SOAP error regarding "must understand" error.
    • Client - Client side error.
    • Server - Server side error.
  • Value/Expression
  • Fault String- The detailed fault string of the fault code. It can be given either as a string value or an expression.

    You can click the Namespaces link to add namespaces if you are providing an expression. You will be provided another panel named "Namespace Editor," where you can provide any number of namespace prefixes and URL that you have used in the XPath expression.

  • Fault Actor
  • Detail - Some information about the fault can be added to this field.
SOAP 1.2

For this version, the following options are available:

  • Code
    • versionMismatch - SOAP version mismatch error.
    • mustUnderstand - SOAP error regarding "must understand" error.
    • dataEncodingUnknown - SOAP encoding error.
    • Sender - Sender-side error.
    • Receiver - Receiver-side error.
  • Value/Expression
  • Reason- Reason describing the fault code.

    You can click on the "Namespaces" link to add namespaces if you are providing an expression. You will be provided another panel named "Namespace Editor," where you can provide any number of namespace prefixes and URL that you have used in the XPath expression.

  • Role - SOAP 1.2 role names.
  • Node - SOAP 1.2 node name.
  • Detail - Some information about the fault can be added to the field.

 

Plain-old XML (POX)

For this version, the following options are available:

  • Reason - The fault message. You can specify the reason as a string value or as an expression.

    You can click the Namespaces link to add namespaces if you are providing an expression. You will be provided another panel named "Namespace Editor," where you can provide any number of namespace prefixes and URL that you have used in the XPath expression.

  • Detail - Optionally provide additional details about the fault.

You can configure the Mediator using XML. Click on "switch to source view" in the "Mediator" window.


Examples

Following are examples of different usages of the Fault Mediator.

Example one

In the following example, the testmessage string value is given as the reason for the SOAP error versionMismatch.

<makefault xmlns="http://ws.apache.org/ns/synapse" version="soap11">
   <code xmlns:soap11Env="http://schemas.xmlsoap.org/soap/envelope/" value="soap11Env:VersionMismatch" />
   <reason value="test message " />
   <role></role>
</makefault>

Example two

The following sample proxy validates the content type using the Filter Mediator based on the Content-Type header property. If the result is true, it sends an exception back to the client using the Fault Mediator. Else, if the result is false, it continues the flow.

<proxy xmlns="http://ws.apache.org/ns/synapse" name="CheckContentType" transports="https http" startOnLoad="true" trace="disable">
<description/>
<target>
    <inSequence>
        <log level="custom">
            <property name="_______Content-Type" expression="get-property('transport','Content-Type')"/>
        </log>
        <filter source="get-property('transport','Content-Type')" regex="application/xhtml\+xml">
        <then>
            <log>
                <property name="Content-Type" expression="get-property('transport','Content-Type')"/>
                <property name="Decision" value="Exception, due to unexpected Content-Type."/>
            </log>
            <makefault version="soap11">
                <code xmlns:soap11Env="http://schemas.xmlsoap.org/soap/envelope/" value="soap11Env:Client"/>
                <reason value="Content-Type Error"/>
                <role/>
                <detail>Content-Type: application/xhtml+xml is not a valid content type.</detail>
            </makefault>
            <header name="To" scope="default" action="remove"/>
            <send/>
        </then>
        <else>
            <log>
                <property name="Content-Type" expression="get-property('transport','Content-Type')"/>
                <property name="Decision" value="Continue the mediation flow..."/>
            </log>
            <send>
                <endpoint>
                    <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
                </endpoint>
            </send>
        </else>
    </filter>
</inSequence>
<outSequence>
    <send/>
</outSequence>
</target>
<publishWSDL uri="http://localhost:9000/services/SimpleStockQuoteService?wsdl"/>
</proxy>