Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
MessageNormalizerInterceptor |
|
| 1.6;1.6 |
1 | /* | |
2 | * $Id: MessageNormalizerInterceptor.java 7976 2007-08-21 14:26:13Z dirk.olmes $ | |
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 CPAL v1.0 | |
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: 7976 $ | |
34 | */ | |
35 | 0 | public abstract class MessageNormalizerInterceptor implements UMOInterceptor |
36 | { | |
37 | 0 | private Object 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 | 0 | originalPayload = invocation.getEvent().getTransformedMessage(); |
57 | ||
58 | // get the updated message | |
59 | 0 | UMOMessage bMessage = before(invocation); |
60 | 0 | if (bMessage != null) |
61 | { | |
62 | // update the current event | |
63 | 0 | RequestContext.rewriteEvent(bMessage); |
64 | // update the message in the invocation | |
65 | 0 | invocation.setMessage(bMessage); |
66 | // remove any method override as it will not apply to the new | |
67 | // message payload | |
68 | 0 | invocation.getMessage().removeProperty(MuleProperties.MULE_METHOD_PROPERTY); |
69 | } | |
70 | // invoke | |
71 | 0 | UMOMessage message = invocation.execute(); |
72 | // Update the message | |
73 | 0 | invocation.setMessage(message); |
74 | 0 | UMOMessage aMessage = after(invocation); |
75 | 0 | if (aMessage == null) |
76 | { | |
77 | 0 | return message; |
78 | } | |
79 | else | |
80 | { | |
81 | 0 | return aMessage; |
82 | } | |
83 | } | |
84 | ||
85 | protected Object getOriginalPayload() | |
86 | { | |
87 | 0 | return originalPayload; |
88 | } | |
89 | ||
90 | protected void setOriginalPayload(Object originalPayload) | |
91 | { | |
92 | 0 | this.originalPayload = originalPayload; |
93 | 0 | } |
94 | } |