1
2
3
4
5
6
7
8
9
10
11 package org.mule.config.spring.parsers.specific;
12
13 import org.mule.api.MuleContext;
14 import org.mule.api.MuleException;
15 import org.mule.api.component.JavaComponent;
16 import org.mule.api.component.LifecycleAdapter;
17 import org.mule.api.component.LifecycleAdapterFactory;
18 import org.mule.api.config.ConfigurationBuilder;
19 import org.mule.api.config.ConfigurationException;
20 import org.mule.api.context.MuleContextFactory;
21 import org.mule.api.model.EntryPointResolverSet;
22 import org.mule.api.service.Service;
23 import org.mule.component.AbstractJavaComponent;
24 import org.mule.component.DefaultJavaComponent;
25 import org.mule.component.PooledJavaComponent;
26 import org.mule.component.simple.PassThroughComponent;
27 import org.mule.component.simple.StaticComponent;
28 import org.mule.config.PoolingProfile;
29 import org.mule.config.spring.SpringXmlConfigurationBuilder;
30 import org.mule.config.spring.parsers.specific.ComponentDelegatingDefinitionParser.CheckExclusiveClassAttributeObjectFactoryException;
31 import org.mule.config.spring.util.SpringBeanLookup;
32 import org.mule.context.DefaultMuleContextFactory;
33 import org.mule.model.resolvers.ArrayEntryPointResolver;
34 import org.mule.model.resolvers.CallableEntryPointResolver;
35 import org.mule.model.resolvers.DefaultEntryPointResolverSet;
36 import org.mule.model.resolvers.ExplicitMethodEntryPointResolver;
37 import org.mule.model.resolvers.MethodHeaderPropertyEntryPointResolver;
38 import org.mule.model.resolvers.NoArgumentsEntryPointResolver;
39 import org.mule.model.resolvers.ReflectionEntryPointResolver;
40 import org.mule.object.PrototypeObjectFactory;
41 import org.mule.object.SingletonObjectFactory;
42 import org.mule.routing.nested.DefaultNestedRouter;
43 import org.mule.tck.AbstractMuleTestCase;
44
45 import org.springframework.beans.factory.BeanDefinitionStoreException;
46
47 public class ComponentDefinitionParserTestCase extends AbstractMuleTestCase
48 {
49
50 private MuleContextFactory muleContextFactory = new DefaultMuleContextFactory();
51
52 public void testDefaultJavaComponentShortcut() throws Exception
53 {
54 ConfigurationBuilder configBuilder = new SpringXmlConfigurationBuilder(
55 "org/mule/config/spring/parsers/specific/component-ok-test.xml");
56 muleContext = muleContextFactory.createMuleContext(configBuilder);
57 Service service = muleContext.getRegistry().lookupService("service1");
58 validateCorrectServiceCreation(service);
59 assertEquals(DefaultJavaComponent.class, service.getComponent().getClass());
60 assertEquals(PrototypeObjectFactory.class, ((AbstractJavaComponent) service.getComponent()).getObjectFactory()
61 .getClass());
62 assertEquals(1, ((JavaComponent) service.getComponent()).getNestedRouter().getRouters().size());
63 assertNotNull(((JavaComponent) service.getComponent()).getEntryPointResolverSet());
64 assertEquals(
65 2,
66 (((DefaultEntryPointResolverSet) ((JavaComponent) service.getComponent()).getEntryPointResolverSet()).getEntryPointResolvers().size()));
67 assertTrue((((DefaultEntryPointResolverSet) ((JavaComponent) service.getComponent()).getEntryPointResolverSet()).getEntryPointResolvers()
68 .toArray()[0] instanceof ArrayEntryPointResolver));
69 assertTrue((((DefaultEntryPointResolverSet) ((JavaComponent) service.getComponent()).getEntryPointResolverSet()).getEntryPointResolvers()
70 .toArray()[1] instanceof CallableEntryPointResolver));
71 }
72
73 public void testDefaultJavaComponentPrototype() throws Exception
74 {
75 ConfigurationBuilder configBuilder = new SpringXmlConfigurationBuilder(
76 "org/mule/config/spring/parsers/specific/component-ok-test.xml");
77 muleContext = muleContextFactory.createMuleContext(configBuilder);
78 Service service = muleContext.getRegistry().lookupService("service2");
79 validateCorrectServiceCreation(service);
80 assertEquals(DefaultJavaComponent.class, service.getComponent().getClass());
81 assertEquals(PrototypeObjectFactory.class, ((AbstractJavaComponent) service.getComponent()).getObjectFactory()
82 .getClass());
83 assertEquals(1, ((JavaComponent) service.getComponent()).getNestedRouter().getRouters().size());
84 assertNotNull(((JavaComponent) service.getComponent()).getEntryPointResolverSet());
85 assertEquals(
86 1,
87 (((DefaultEntryPointResolverSet) ((JavaComponent) service.getComponent()).getEntryPointResolverSet()).getEntryPointResolvers().size()));
88 assertTrue((((DefaultEntryPointResolverSet) ((JavaComponent) service.getComponent()).getEntryPointResolverSet()).getEntryPointResolvers()
89 .toArray()[0] instanceof CallableEntryPointResolver));
90 }
91
92 public void testDefaultJavaComponentSingleton() throws Exception
93 {
94 ConfigurationBuilder configBuilder = new SpringXmlConfigurationBuilder(
95 "org/mule/config/spring/parsers/specific/component-ok-test.xml");
96 muleContext = muleContextFactory.createMuleContext(configBuilder);
97 Service service = muleContext.getRegistry().lookupService("service3");
98 validateCorrectServiceCreation(service);
99 assertEquals(DefaultJavaComponent.class, service.getComponent().getClass());
100 assertEquals(SingletonObjectFactory.class, ((AbstractJavaComponent) service.getComponent()).getObjectFactory()
101 .getClass());
102 assertEquals(1, ((JavaComponent) service.getComponent()).getNestedRouter().getRouters().size());
103 assertNotNull(((JavaComponent) service.getComponent()).getEntryPointResolverSet());
104 assertEquals(
105 1,
106 (((DefaultEntryPointResolverSet) ((JavaComponent) service.getComponent()).getEntryPointResolverSet()).getEntryPointResolvers().size()));
107 assertTrue((((DefaultEntryPointResolverSet) ((JavaComponent) service.getComponent()).getEntryPointResolverSet()).getEntryPointResolvers()
108 .toArray()[0] instanceof ExplicitMethodEntryPointResolver));
109
110 }
111
112 public void testDefaultJavaComponentSpringBean() throws Exception
113 {
114 ConfigurationBuilder configBuilder = new SpringXmlConfigurationBuilder(
115 "org/mule/config/spring/parsers/specific/component-ok-test.xml");
116 muleContext = muleContextFactory.createMuleContext(configBuilder);
117 Service service = muleContext.getRegistry().lookupService("service4");
118 validateCorrectServiceCreation(service);
119 assertEquals(DefaultJavaComponent.class, service.getComponent().getClass());
120 assertEquals(SpringBeanLookup.class, ((AbstractJavaComponent) service.getComponent()).getObjectFactory()
121 .getClass());
122 assertEquals(1, ((JavaComponent) service.getComponent()).getNestedRouter().getRouters().size());
123 assertNotNull(((JavaComponent) service.getComponent()).getEntryPointResolverSet());
124 assertEquals(
125 1,
126 (((DefaultEntryPointResolverSet) ((JavaComponent) service.getComponent()).getEntryPointResolverSet()).getEntryPointResolvers().size()));
127 assertTrue((((DefaultEntryPointResolverSet) ((JavaComponent) service.getComponent()).getEntryPointResolverSet()).getEntryPointResolvers()
128 .toArray()[0] instanceof NoArgumentsEntryPointResolver));
129 }
130
131 private void validatePoolingProfile(Service service)
132 {
133 assertNotNull(((PooledJavaComponent) service.getComponent()).getPoolingProfile());
134 assertNotNull(((PooledJavaComponent) service.getComponent()).getPoolingProfile());
135
136 PoolingProfile profile = ((PooledJavaComponent) service.getComponent()).getPoolingProfile();
137 assertNotNull(profile);
138 assertEquals("exhausted:", PoolingProfile.WHEN_EXHAUSTED_FAIL, profile.getExhaustedAction());
139 assertEquals("initialisation:", PoolingProfile.INITIALISE_ALL, profile.getInitialisationPolicy());
140 assertEquals("active:", 1, profile.getMaxActive());
141 assertEquals("idle:", 2, profile.getMaxIdle());
142 assertEquals("wait:", 3, profile.getMaxWait());
143 }
144
145 public void testPooledJavaComponentShortcut() throws Exception
146 {
147 ConfigurationBuilder configBuilder = new SpringXmlConfigurationBuilder(
148 "org/mule/config/spring/parsers/specific/component-ok-test.xml");
149 muleContext = muleContextFactory.createMuleContext(configBuilder);
150 Service service = muleContext.getRegistry().lookupService("service5");
151 validateCorrectServiceCreation(service);
152 assertEquals(PooledJavaComponent.class, service.getComponent().getClass());
153 assertEquals(PrototypeObjectFactory.class, ((AbstractJavaComponent) service.getComponent()).getObjectFactory()
154 .getClass());
155 assertEquals(1, ((JavaComponent) service.getComponent()).getNestedRouter().getRouters().size());
156 validatePoolingProfile(service);
157 assertNotNull(((JavaComponent) service.getComponent()).getEntryPointResolverSet());
158 assertEquals(
159 1,
160 (((DefaultEntryPointResolverSet) ((JavaComponent) service.getComponent()).getEntryPointResolverSet()).getEntryPointResolvers().size()));
161 assertTrue((((DefaultEntryPointResolverSet) ((JavaComponent) service.getComponent()).getEntryPointResolverSet()).getEntryPointResolvers()
162 .toArray()[0] instanceof MethodHeaderPropertyEntryPointResolver));
163
164 }
165
166 public void testPooledJavaComponentPrototype() throws Exception
167 {
168 ConfigurationBuilder configBuilder = new SpringXmlConfigurationBuilder(
169 "org/mule/config/spring/parsers/specific/component-ok-test.xml");
170 muleContext = muleContextFactory.createMuleContext(configBuilder);
171 Service service = muleContext.getRegistry().lookupService("service6");
172 validateCorrectServiceCreation(service);
173 assertEquals(PooledJavaComponent.class, service.getComponent().getClass());
174 assertEquals(PrototypeObjectFactory.class, ((AbstractJavaComponent) service.getComponent()).getObjectFactory()
175 .getClass());
176 assertEquals(1, ((JavaComponent) service.getComponent()).getNestedRouter().getRouters().size());
177 validatePoolingProfile(service);
178 assertNotNull(((JavaComponent) service.getComponent()).getEntryPointResolverSet());
179 assertEquals(
180 1,
181 (((DefaultEntryPointResolverSet) ((JavaComponent) service.getComponent()).getEntryPointResolverSet()).getEntryPointResolvers().size()));
182 assertTrue((((DefaultEntryPointResolverSet) ((JavaComponent) service.getComponent()).getEntryPointResolverSet()).getEntryPointResolvers()
183 .toArray()[0] instanceof ReflectionEntryPointResolver));
184
185 }
186
187 public void testPooledJavaComponentSingleton() throws Exception
188 {
189 ConfigurationBuilder configBuilder = new SpringXmlConfigurationBuilder(
190 "org/mule/config/spring/parsers/specific/component-ok-test.xml");
191 muleContext = muleContextFactory.createMuleContext(configBuilder);
192 Service service = muleContext.getRegistry().lookupService("service7");
193 validateCorrectServiceCreation(service);
194 assertEquals(PooledJavaComponent.class, service.getComponent().getClass());
195 assertEquals(SingletonObjectFactory.class, ((AbstractJavaComponent) service.getComponent()).getObjectFactory()
196 .getClass());
197 assertEquals(1, ((JavaComponent) service.getComponent()).getNestedRouter().getRouters().size());
198 validatePoolingProfile(service);
199 assertNotNull(((JavaComponent) service.getComponent()).getEntryPointResolverSet());
200 assertEquals(
201 1,
202 (((DefaultEntryPointResolverSet) ((JavaComponent) service.getComponent()).getEntryPointResolverSet()).getEntryPointResolvers().size()));
203 assertTrue((((DefaultEntryPointResolverSet) ((JavaComponent) service.getComponent()).getEntryPointResolverSet()).getEntryPointResolvers()
204 .toArray()[0] instanceof ReflectionEntryPointResolver));
205
206 }
207
208 public void testPooledJavaComponentSpringBean() throws Exception
209 {
210 ConfigurationBuilder configBuilder = new SpringXmlConfigurationBuilder(
211 "org/mule/config/spring/parsers/specific/component-ok-test.xml");
212 muleContext = muleContextFactory.createMuleContext(configBuilder);
213 Service service = muleContext.getRegistry().lookupService("service8");
214 validateCorrectServiceCreation(service);
215 assertEquals(PooledJavaComponent.class, service.getComponent().getClass());
216 assertEquals(SpringBeanLookup.class, ((AbstractJavaComponent) service.getComponent()).getObjectFactory()
217 .getClass());
218 assertEquals(1, ((JavaComponent) service.getComponent()).getNestedRouter().getRouters().size());
219 validatePoolingProfile(service);
220 assertNull(((JavaComponent) service.getComponent()).getEntryPointResolverSet());
221 }
222
223 public void testClassAttributeAndObjectFactory() throws Exception
224 {
225 try
226 {
227 ConfigurationBuilder configBuilder = new SpringXmlConfigurationBuilder(
228 "org/mule/config/spring/parsers/specific/component-bad-test.xml");
229 muleContextFactory.createMuleContext(configBuilder);
230 throw new IllegalStateException("Expected config to fail");
231 }
232 catch (Exception e)
233 {
234 assertEquals(ConfigurationException.class, e.getClass());
235 assertEquals(BeanDefinitionStoreException.class, e.getCause().getClass());
236 assertEquals(CheckExclusiveClassAttributeObjectFactoryException.class, e.getCause().getCause().getClass());
237 }
238 }
239
240 protected void validateCorrectServiceCreation(Service service) throws Exception
241 {
242 assertNotNull(service);
243 assertNotNull(service.getComponent());
244 assertFalse(service.getComponent() instanceof PassThroughComponent);
245 assertTrue(service.getComponent() instanceof JavaComponent);
246 assertEquals(StaticComponent.class, ((JavaComponent) service.getComponent()).getObjectType());
247 assertNotNull(((JavaComponent) service.getComponent()).getNestedRouter());
248 assertTrue(((JavaComponent) service.getComponent()).getNestedRouter().getRouters().get(0) instanceof DefaultNestedRouter);
249 assertTrue(((JavaComponent) service.getComponent()).getLifecycleAdapterFactory() instanceof TestLifecycleAdapterFactory);
250
251 }
252
253 protected MuleContext createMuleContext() throws Exception
254 {
255 return null;
256 }
257
258 }
259
260 class TestLifecycleAdapterFactory implements LifecycleAdapterFactory
261 {
262
263 public LifecycleAdapter create(Object pojoService, JavaComponent component, EntryPointResolverSet resolver)
264 throws MuleException
265 {
266
267 return null;
268 }
269
270 }