When an error occurs during the execution of an interceptor chain, the runtime stops traversing the interceptor chain and
unwinds the chain by calling the handleFault()
method of any interceptors in the chain that have
already been executed.
The handleFault()
method can be used to clean up any resources used by an interceptor during normal
message processing. It can also be used to rollback any actions that should only stand if message processing completes successfully.
In cases where the fault message will be passed on to an outbound fault processing interceptor chain, the
handleFault()
method can also be used to add information to the fault message.
The handleFault()
method receives the same Message
object as the
handleMessage()
method used in normal message processing. Getting the message contents from the
Message
object is described in Getting the message contents.
Example 4.5 shows code used to ensure that the original XML stream is placed back into the message when the interceptor chain is unwound.
Example 4.5. Handling an unwinding interceptor chain
@Override
public void handleFault(SoapMessage message)
{
super.handleFault(message);
XMLStreamWriter writer = (XMLStreamWriter)message.get(ORIGINAL_XML_WRITER);
if (writer != null)
{
message.setContent(XMLStreamWriter.class, writer);
}
}