1 | |
|
2 | |
|
3 | |
|
4 | |
|
5 | |
|
6 | |
|
7 | |
|
8 | |
|
9 | |
|
10 | |
|
11 | |
package org.mule.module.client; |
12 | |
|
13 | |
import org.mule.api.DefaultMuleException; |
14 | |
import org.mule.api.MuleException; |
15 | |
import org.mule.api.MuleMessage; |
16 | |
import org.mule.api.transformer.Transformer; |
17 | |
import org.mule.module.client.i18n.ClientMessages; |
18 | |
|
19 | |
import java.lang.reflect.InvocationHandler; |
20 | |
import java.lang.reflect.Method; |
21 | |
import java.lang.reflect.Proxy; |
22 | |
|
23 | |
|
24 | |
|
25 | |
|
26 | |
|
27 | |
|
28 | |
public class MuleProxyListener implements InvocationHandler |
29 | |
{ |
30 | |
private Class listenerClass; |
31 | |
private AbstractEventTransformer eventTransformer; |
32 | |
private String componentName; |
33 | |
private Object proxy; |
34 | |
private MuleClient client; |
35 | |
|
36 | |
public MuleProxyListener(Class listenerClass, String componentName) throws MuleException |
37 | 0 | { |
38 | 0 | setListenerClass(listenerClass); |
39 | 0 | setEventTransformer(new EventObjectTransformer()); |
40 | 0 | setComponentName(componentName); |
41 | 0 | setClient(new MuleClient()); |
42 | 0 | createProxy(); |
43 | 0 | } |
44 | |
|
45 | |
public MuleProxyListener(Class listenerClass, |
46 | |
AbstractEventTransformer eventTransformer, |
47 | |
String componentName) throws MuleException |
48 | 0 | { |
49 | 0 | setListenerClass(listenerClass); |
50 | 0 | setEventTransformer(eventTransformer); |
51 | 0 | setComponentName(componentName); |
52 | 0 | setClient(new MuleClient()); |
53 | 0 | createProxy(); |
54 | 0 | } |
55 | |
|
56 | |
public MuleProxyListener(Class listenerClass, |
57 | |
AbstractEventTransformer eventTransformer, |
58 | |
String componentName, |
59 | |
MuleClient client) |
60 | 0 | { |
61 | 0 | setListenerClass(listenerClass); |
62 | 0 | setEventTransformer(eventTransformer); |
63 | 0 | setComponentName(componentName); |
64 | 0 | setClient(client); |
65 | 0 | createProxy(); |
66 | 0 | } |
67 | |
|
68 | |
protected void createProxy() |
69 | |
{ |
70 | 0 | proxy = Proxy.newProxyInstance(listenerClass.getClassLoader(), new Class[]{listenerClass}, this); |
71 | 0 | } |
72 | |
|
73 | |
public Class getListenerClass() |
74 | |
{ |
75 | 0 | return listenerClass; |
76 | |
} |
77 | |
|
78 | |
public void setListenerClass(Class listenerClass) |
79 | |
{ |
80 | 0 | this.listenerClass = listenerClass; |
81 | 0 | } |
82 | |
|
83 | |
public Transformer getEventTransformer() |
84 | |
{ |
85 | 0 | return eventTransformer; |
86 | |
} |
87 | |
|
88 | |
public void setEventTransformer(AbstractEventTransformer eventTransformer) |
89 | |
{ |
90 | 0 | this.eventTransformer = eventTransformer; |
91 | 0 | } |
92 | |
|
93 | |
public String getComponentName() |
94 | |
{ |
95 | 0 | return componentName; |
96 | |
} |
97 | |
|
98 | |
public void setComponentName(String componentName) |
99 | |
{ |
100 | 0 | this.componentName = componentName; |
101 | 0 | } |
102 | |
|
103 | |
public MuleClient getClient() |
104 | |
{ |
105 | 0 | return client; |
106 | |
} |
107 | |
|
108 | |
public void setClient(MuleClient client) |
109 | |
{ |
110 | 0 | this.client = client; |
111 | 0 | } |
112 | |
|
113 | |
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable |
114 | |
{ |
115 | 0 | if (args.length == 0) |
116 | |
{ |
117 | 0 | throw new DefaultMuleException(ClientMessages.noArgsForProxy()); |
118 | |
} |
119 | 0 | MuleMessage message = eventTransformer.transform(args[0], method); |
120 | 0 | if (!"void".equals(method.getReturnType().getName())) |
121 | |
{ |
122 | 0 | MuleMessage result = client.sendDirect(componentName, null, message); |
123 | 0 | if (MuleMessage.class.equals(method.getReturnType())) |
124 | |
{ |
125 | 0 | return result; |
126 | |
} |
127 | |
else |
128 | |
{ |
129 | 0 | return (result == null ? null : result.getPayload()); |
130 | |
} |
131 | |
} |
132 | |
else |
133 | |
{ |
134 | 0 | client.dispatchDirect(componentName, message); |
135 | 0 | return null; |
136 | |
} |
137 | |
} |
138 | |
|
139 | |
public Object getProxy() |
140 | |
{ |
141 | 0 | return proxy; |
142 | |
} |
143 | |
} |