KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mule > interceptors > MessageNormalizerInterceptor


1 /*
2  * $Id: MessageNormalizerInterceptor.java 3798 2006-11-04 04:07:14Z aperepel $
3  * --------------------------------------------------------------------------------------
4  * Copyright (c) MuleSource, Inc. All rights reserved. http://www.mulesource.com
5  *
6  * The software in this package is published under the terms of the MuleSource MPL
7  * license, a copy of which has been included with this distribution in the
8  * LICENSE.txt file.
9  */

10
11 package org.mule.interceptors;
12
13 import org.mule.config.MuleProperties;
14 import org.mule.impl.RequestContext;
15 import org.mule.umo.Invocation;
16 import org.mule.umo.UMOException;
17 import org.mule.umo.UMOInterceptor;
18 import org.mule.umo.UMOMessage;
19
20 /**
21  * <code>MessageNormalizerInterceptor</code> can be used as a simple pre/post
22  * message normalizer for a given component. This is useful in situations where you
23  * have an existing component that may accept a one or more child objects of the
24  * incoming object. For example, you may Have a BankQuoteRequest object that contains
25  * customer, credit and loan details, but one component is only interested in
26  * enriching the customer information. Rather than have your component understand how
27  * to deal with a BankLoanRequest this interceptor can be used to extract the
28  * customer and pass that to the component. Once the component have finshed
29  * processing this interceptor update the BankLoanRequest with the new customer
30  * information.
31  *
32  * @author <a HREF="mailto:ross.mason@symphonysoft.com">Ross Mason</a>
33  * @version $Revision: 3798 $
34  */

35 public abstract class MessageNormalizerInterceptor implements UMOInterceptor
36 {
37     private Object JavaDoc originalPayload = null;
38
39     /**
40      * This method is invoked before the event is processed
41      *
42      * @param invocation the message invocation being processed
43      */

44     public abstract UMOMessage before(Invocation invocation) throws UMOException;
45
46     /**
47      * This method is invoked after the event has been processed
48      *
49      * @param invocation the message invocation being processed
50      */

51     public abstract UMOMessage after(Invocation invocation) throws UMOException;
52
53     public final UMOMessage intercept(Invocation invocation) throws UMOException
54     {
55         // store the original payload as we will need it later
56
originalPayload = invocation.getEvent().getTransformedMessage();
57
58         // get the updated message
59
UMOMessage bMessage = before(invocation);
60         if (bMessage != null)
61         {
62             // update the current event
63
RequestContext.rewriteEvent(bMessage);
64             // update the message in the invocation
65
invocation.setMessage(bMessage);
66             // remove any method override as it will not apply to the new
67
// message payload
68
invocation.getMessage().removeProperty(MuleProperties.MULE_METHOD_PROPERTY);
69         }
70         // invoke
71
UMOMessage message = invocation.execute();
72         // Update the message
73
invocation.setMessage(message);
74         UMOMessage aMessage = after(invocation);
75         if (aMessage == null)
76         {
77             return message;
78         }
79         else
80         {
81             return aMessage;
82         }
83     }
84
85     protected Object JavaDoc getOriginalPayload()
86     {
87         return originalPayload;
88     }
89
90     protected void setOriginalPayload(Object JavaDoc originalPayload)
91     {
92         this.originalPayload = originalPayload;
93     }
94 }
95
Popular Tags