Skip to main content

On-the-fly Provision of Interceptors

The policy framework, when activated (by loading the PolicyEngine and setting its "enabled" attribute to true), installs a couple of interceptors at bus level which execute early on in their respective interceptor chains:

Role

Chain

Phase

Interceptor

Effective Subject Policies Known

Client

Out

SETUP

ClientPolicy-OutInterceptor

Service, Endpoint, Operation, (Input) Message

Client

In

RECEIVE

ClientPolicy-InInterceptor

Service, Endpoint

Client

InFault

RECEIVE

ClientPolicy-InFault-Interceptor

Service, Endpoint

Server

In

RECEIVE

ServerPolicy-InInterceptor

Service, Endpoint

Server

OutFault

SETUP

ServerPolicy-OutFault-Interceptor

Service, Endpoint, Operation, (Fault) Message

Server

Out

SETUP

ServerPolicy-OutInterceptor

Service, Endpoint, Operation, (Out) Message

The main purpose of these policy interceptors is to add further interceptors that are required to support the effective policy of the underlying message - even if that policy is not yet known at the time the policy interceptor executes (because the operation is not yet known at that time). If the effective message policy is known, the assertions of its selected alternative are inserted into the message in the form of an AssertionInfoMap. This is a map, keyed by assertion type name, of collections of AssertionInfo objects, the latter being stateful (asserted/not asserted) representations of Assertion objects. When the effective message policy is not known, not only the assertions for the selected alternative in the effective endpoint policy are included in the AssertionInfoMap, but also all assertions in all alternatives of all of the operation and message specific policies. Not all of these will be asserted at the end of the chain, but that is fine if it turns out the unasserted assertions apply to operation sayHi when in fact the chain has been processing the message for a greetMe request!

Did this page help you?

If you find any issues with this page or its content – a typo, a missing step, or a technical error – please let us know!