This is the WSO2 Business Process Server documentation version 3.1.0.View documentation for the latest release.

Unknown macro: {next_previous_link3}
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

Objective

This sample illustrates the basics of fault handling.

Introducing the <throw> Construct

In fault handling, <throw/> and <rethrow/> are used to generate faults where faults occurs.

<throw/>

Faults should be named with a unique scope level qualified name. For example,

<throwfaultName="saw:InputException2"/>
<rethrow/>

Used only inside <catch/> or <catchAll/>, which will be described later in order to re-throw the originally caught exceptions. For example,

<catchAll><rethrow/></catchAll>

 Fault handling is implemented inside <faultHandlers/>. Faults can be handled based on qualified name of the thrown fault using <catch/> or every non-specified faults can be handles inside <catchAll/>. For example,

<faultHandlers>
   <catchfaultName="saw:InputException2">
        <throwfaultName="saw:Exception1Handled"/>
   </catch><catchAll>
   <rethrow/>
   </catchAll>
</faultHandlers>

Note

<faultHandlers/> should be defined in a parent scope.

Deploying the Sample

WSO2 BPS provides a sample, which can be deployed and executed to understand fault handling. Follow the instructions below to deploy and trigger the process.

1. Log in into BPS server management console and select "Processes -> Add" under the "Main" menu.

2. Upload the TestThrowCatchFaultHandling.zip. (Samples are located at our sample repository).

3. In the "Deployed Processes" window, click the "Process ID" to access its "Process Information" window.

4. Under the "WSDL Details" widget, trigger the process using the "TryIt" link to create an instance of it.

Example Usage

Refer TestThrowCatchFaultHandling.zip. In the child scope the input value is checked to see if it is equal to 1. If so, an InputException1 is thrown. Note that the thrown exception has a "saw:InputException1" qualified name. For example,

<ifname="ExceptionCondition1">
       <condition>number($value)=number(1)</condition>
       <throwfaultName="saw:InputException1"/>
       <else>
          <throwfaultName="saw:TransitionConditionOutOfRangeException1"/>
       </else>
</if>

In the parent scope, the exception is filtered against its qualified name. For example,

<faultHandlers>
    <catchfaultName="saw:InputException1">
         <ifname="ExceptionCondition2">
              <condition>true()</condition>
              <throwfaultName="saw:InputException2"/>
              <else>
                  <throwfaultName="saw:TransitionConditionOutOfRangeException2"/>
              </else>
         </if>
    </catch>
</faultHandlers>
  • No labels