WSO2 Business Process Server v3.0.1 Documentation

##### Overview

- Home
- Release Note
- WS-BPEL Compliance
- License

##### Downloads

- Releases

##### Installation Guide

- Installing WSO2 BPS

##### Quick Start Guide

- Modeling the process
- Deploying the process
- Testing the process

##### User Guide

- Deploying BPEL Processes
- Deploying Human Tasks
- Managing BPEL processes
- Managing BPEL process instances
- QoS for BPEL processes
- Securing BPEL processes
- Invoking secured partner services
- Versioning
- Management API

##### Human Task Guide

- Human Tasks Quick Start Guide
- Deploying HumanTasks
- Managing Tasks
- Developing a Human Task Artifact
- Human Task Management and Configuration
- Human Task Concepts

##### Administrator Guide

- External data sources Configuration
- Registry Configuration
- Events
- Unified Endpoints
- BPEL Extensions
- Transaction Factory Configuration
- Message Exchange Interceptors
- OpenJPA specific properties
- JMS Transport Configuration
- Process Instance Cleanup Tasks
- Process Hydration and Dehydration
- Enabling Peer-to-Peer(P2P) Communication
- Setting up a BPS Cluster

##### Best Practices

- Process Deployment Best Practices

##### Concepts

- Process Versioning
- Process instance events
- Partner links

##### WS-BPEL Extensions

- Activity Failure and Recovery
- Extension Activities and Extensible Assign Operations
- XPath Extensions
- Iterable ForEach
- Flexible Assigns
- BPEL4People Extension

##### Samples

- HelloWorld
- If-Else
- ForEach
- While
- Repeat Until
- Flow and Links
- Pick
- Synchronous and Asynchronous Service Invocations
- Fault Handling
- Split
- XslTransform
- Compensation Handler
- Event Handler

##### Resources

- FAQ
- External Articles
- Library
- Source Code

##### Community

- Forum
- Mailing Lists

##### Project Information

- Issue Tracking

# Sample Guide - Fault Handling

### Table of Content

- Objective
- Prerequisites
- Overall Idea

### Objective

This sample explains about basic fault handling. 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.

  eg -

      <throw faultName="saw:InputException2" />

- <rethrow/> is used only inside <catch/> or <catchAll/> which will be described later in order to re-throw the originally caught exceptions.

  eg -

      <catchAll>
          <rethrow/>
      </catchAll>

- The 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 handled inside <catchAll/>.

  eg -

      <faultHandlers>
          <catch faultName="saw:InputException2">
              <throw faultName="saw:Exception1Handled"/>
          </catch>
          <catchAll>
              <rethrow/>
          </catchAll>
      </faultHandlers>

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

### Prerequisites

- Log in into BPS server admin console.
- Under Business Processes -> Add BPEL.
- Upload the TestThrowCatchFaultHandling.zip , (all samples are located at our sample repository.)
- Under the Business Processes -> Processes.
- Under the WSDL details widget -> Create instance

### Overall Idea

Refer - TestThrowCatchFaultHandling.zip

In the child scope the input value is checked whether it's equal to `1`. If so an `InputException1` is thrown. Note that the thrown exception has a `"saw:InputException1"` qualified name.

eg -

    <if name="ExceptionCondition1">
        <condition>number($value)=number(1)</condition>
        <throw faultName="saw:InputException1"/>
        <else>
            <throw faultName="saw:TransitionConditionOutOfRangeException1"/>
        </else>
    </if>

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

eg -

    <faultHandlers>
        <catch faultName="saw:InputException1">
            <if name="ExceptionCondition2">
                <condition>true()</condition>
                <throw faultName="saw:InputException2"/>
                <else>
                    <throw faultName="saw:TransitionConditionOutOfRangeException2"/>
                </else>
            </if>
        </catch>
    </faultHandlers>