Ah that sounds good.  Be ideal if I only had to register one interceptor and 
have it drive everything.

So would I be right that if I did the following:

- Add an in interceptor to the start of the in chain
- Implement the handleFault() to do the "finally" code
- In handleMessage() add a new interceptor right at the end of the in chain, 
which also does the "finally" code.

Does this cover every case?  What happens if an exception occurs in the 
outbound chain, does this propogate back and always unwind the in chain too?

Cheers.

Michael Quilleash
Morgan Stanley | Technology
20 Cabot Square | Canary Wharf | Floor 01
London, E14 4QW
Phone: +44 20 7677-4543
[EMAIL PROTECTED]

-----Original Message-----
From: Daniel Kulp [mailto:[EMAIL PROTECTED]
Sent: 23 September 2008 14:15
To: [email protected]
Cc: Quilleash, Michael (IT)
Subject: Re: "Around" interceptor

On Tuesday 23 September 2008 9:04:23 am Quilleash, Michael (IT) wrote:
> Thanks Dan,
>
> I see what you mean.
>
> But I guess that wouldn't work as a "finally" check tho as an
> exeception in the chain causes the rest of the interceptors not to be
> run.  I would still have to add something to the fault chains to do the 
> finally stuff.

Yep.

Note:  your interceptor at the start of the "in" chain can also implement the 
handleFault message which is called when the chain is unwinding but before
the fault chain is called.   You can then get timing information or something
for the "in" chain part separate from the fault stuff.

Dan



>
> Cheers.
>
> Michael Quilleash
> Morgan Stanley | Technology
> 20 Cabot Square | Canary Wharf | Floor 01 London, E14 4QW
> Phone: +44 20 7677-4543
> [EMAIL PROTECTED]
>
> -----Original Message-----
> From: Daniel Kulp [mailto:[EMAIL PROTECTED]
> Sent: 22 September 2008 19:39
> To: [email protected]
> Cc: Quilleash, Michael (IT)
> Subject: Re: "Around" interceptor
>
> On Sunday 21 September 2008 8:13:54 am Quilleash, Michael (IT) wrote:
> > Thanks for the reply Ian.
> >
> > I did see this approach being used by the default interceptors,
> > however I found out that the out/outFault messages are always null
> > when the "in" interceptor is invoked so the interceptor chains
> > aren't available to add new interceptors to.
> >
> > I haven't found an example of any interceptors that add interceptors
> > to different interceptor chains.
>
> Yea, that's very hard to do.  The chains aren't created until they are
> actually needed.   In a "one way" case, there would never even be an "out"
> chain created or called.
>
> On the server side, the "simple" way to do it is to add your "stop"
> interceptor to the VERY VERY end of the chain.   If there is an out
> message, the last interceptor on the "in" chain is the one that sets up the
> out message/chain and calls it.   Thus, your interceptor would be invoked
> after that.
>
> Dan
>
> > Is there a way of doing what you are saying, perhaps by creating the
> > out messages earlier?
> >
> > Cheers.
> >
> > -----Original Message-----
> > From: Ian Roberts [mailto:[EMAIL PROTECTED]
> > Sent: 21 September 2008 12:50
> > To: [email protected]
> > Subject: Re: "Around" interceptor
> >
> > Quilleash, Michael (IT) wrote:
> > > I would need to have:
> > >
> > > In Interceptor - start timing
> > > Out/InFault/OutFault interceptors - stop timing
> > >
> > > To catch all the possible code paths.  Is there any easier way of
> > > doing this?
> >
> > A trick used in a number of CXF built-in interceptors is to have a
> > main interceptor which is added to the chain explicitly, but then
> > have that interceptor add others to the relevant chains for that
> > exchange during its handleMessage.  For example (pseudo-code):
> >
> > class TimingInterceptor {
> >   private Interceptor stopTiming = new StopTimingInterceptor();
> >
> >   handleMessage(Message m) {
> >     Exchange ex = m.getExchange();
> >     ex.put("startTime", System.currentTimeMillis());
> >     ex.getOutMessage().getInterceptorChain().add(stopTiming);
> >     ex.getOutFaultMessage().getInterceptorChain().add(stopTiming);
> >   }
> >
> >   static class StopTimingInterceptor {
> >     handleMessage(Message m) {
> >       Exchange ex = m.getExchange();
> >       long startTime = ex.get("startTime");
> >       // ...
> >     }
> >   }
> > }
> >
> > You only need to add the TimingInterceptor to your input chain and
> > it will manage the rest for you.
> >
> > Ian
> >
> > --
> > Ian Roberts               | Department of Computer Science
> > [EMAIL PROTECTED]  | University of Sheffield, UK
> > --------------------------------------------------------
> >
> > NOTICE: If received in error, please destroy and notify sender.
> > Sender does not intend to waive confidentiality or privilege. Use of
> > this email is prohibited when received in error.
>
> --
> Daniel Kulp
> [EMAIL PROTECTED]
> http://www.dankulp.com/blog
> --------------------------------------------------------
>
> NOTICE: If received in error, please destroy and notify sender. Sender
> does not intend to waive confidentiality or privilege. Use of this
> email is prohibited when received in error.



--
Daniel Kulp
[EMAIL PROTECTED]
http://www.dankulp.com/blog
--------------------------------------------------------

NOTICE: If received in error, please destroy and notify sender. Sender does not 
intend to waive confidentiality or privilege. Use of this email is prohibited 
when received in error.

Reply via email to