Indicates to the interceptor that an exception occurred. Allows
an Interceptor to query the exception's information before it is
thrown to the client.
This interception point may throw a system exception. This has the
effect of changing the exception which successive Interceptors
popped from the Flow Stack receive on their calls to
receive_exception
. The exception thrown to the client
will be the last exception thrown by an Interceptor, or the original
exception if no Interceptor changes the exception.
This interception point may also throw a ForwardRequest
exception. If an Interceptor throws this exception, no other
Interceptors' receive_exception
operations are called.
The remaining Interceptors in the Flow Stack are popped and have their
receive_other
interception point called.
If the completion_status
of the exception is not
COMPLETED_NO
, then it is inappropriate for this
interception point to throw a ForwardRequest
exception.
The request s at-most-once semantics would be lost.
Compliant Interceptors shall properly follow
completion_status
semantics if they throw a system
exception from this interception point. If the original exception is
a system exception, the completion_status
of the new
exception shall be the same as on the original. If the original
exception is a user exception, then the completion_status
of the new exception shall be COMPLETED_YES
.
Under some conditions, depending on what policies are in effect, an
exception (such as COMM_FAILURE
) may result in a retry
of the request. While this retry is a new request with respect to
Interceptors, there is one point of correlation between the original
request and the retry: because control has not returned to the
client, the PortableInterceptor.Current
for both the
original request and the retrying request is the same.