View Javadoc

1   /*
2    * $Id: MuleNamespaceHandler.java 23195 2011-10-17 19:09:23Z pablo.kraan $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.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.config.spring.handlers;
12  
13  import org.mule.api.config.MuleProperties;
14  import org.mule.api.config.ThreadingProfile;
15  import org.mule.api.processor.LoggerMessageProcessor;
16  import org.mule.api.source.MessageSource;
17  import org.mule.cache.CachingMessageProcessor;
18  import org.mule.cache.ObjectStoreCachingStrategy;
19  import org.mule.component.DefaultInterfaceBinding;
20  import org.mule.component.DefaultJavaComponent;
21  import org.mule.component.PooledJavaComponent;
22  import org.mule.component.SimpleCallableJavaComponent;
23  import org.mule.component.simple.EchoComponent;
24  import org.mule.component.simple.LogComponent;
25  import org.mule.component.simple.NullComponent;
26  import org.mule.component.simple.PassThroughComponent;
27  import org.mule.config.spring.factories.ChoiceRouterFactoryBean;
28  import org.mule.config.spring.factories.CompositeMessageSourceFactoryBean;
29  import org.mule.config.spring.factories.DefaultMemoryQueueStoreFactoryBean;
30  import org.mule.config.spring.factories.DefaultPersistentQueueStoreFactoryBean;
31  import org.mule.config.spring.factories.FileQueueStoreFactoryBean;
32  import org.mule.config.spring.factories.InboundEndpointFactoryBean;
33  import org.mule.config.spring.factories.MessageProcessorChainFactoryBean;
34  import org.mule.config.spring.factories.MessageProcessorFilterPairFactoryBean;
35  import org.mule.config.spring.factories.OutboundEndpointFactoryBean;
36  import org.mule.config.spring.factories.PollingMessageSourceFactoryBean;
37  import org.mule.config.spring.factories.QueueProfileFactoryBean;
38  import org.mule.config.spring.factories.SimpleMemoryQueueStoreFactoryBean;
39  import org.mule.config.spring.factories.TransactionalMessageProcessorsFactoryBean;
40  import org.mule.config.spring.parsers.AbstractMuleBeanDefinitionParser;
41  import org.mule.config.spring.parsers.cache.CacheDefinitionParser;
42  import org.mule.config.spring.parsers.cache.CachingStrategyDefinitionParser;
43  import org.mule.config.spring.parsers.collection.ChildListDefinitionParser;
44  import org.mule.config.spring.parsers.collection.ChildListEntryDefinitionParser;
45  import org.mule.config.spring.parsers.collection.ChildMapDefinitionParser;
46  import org.mule.config.spring.parsers.collection.ChildMapEntryDefinitionParser;
47  import org.mule.config.spring.parsers.delegate.InheritDefinitionParser;
48  import org.mule.config.spring.parsers.generic.ChildDefinitionParser;
49  import org.mule.config.spring.parsers.generic.MuleOrphanDefinitionParser;
50  import org.mule.config.spring.parsers.generic.NameTransferDefinitionParser;
51  import org.mule.config.spring.parsers.generic.NamedDefinitionParser;
52  import org.mule.config.spring.parsers.generic.OrphanDefinitionParser;
53  import org.mule.config.spring.parsers.generic.ParentDefinitionParser;
54  import org.mule.config.spring.parsers.processors.CheckExclusiveAttributes;
55  import org.mule.config.spring.parsers.processors.CheckExclusiveAttributesAndChildren;
56  import org.mule.config.spring.parsers.processors.CheckRequiredAttributesWhenNoChildren;
57  import org.mule.config.spring.parsers.specific.AggregatorDefinitionParser;
58  import org.mule.config.spring.parsers.specific.AsyncMessageProcessorsDefinitionParser;
59  import org.mule.config.spring.parsers.specific.BindingDefinitionParser;
60  import org.mule.config.spring.parsers.specific.BridgeDefinitionParser;
61  import org.mule.config.spring.parsers.specific.ComponentDefinitionParser;
62  import org.mule.config.spring.parsers.specific.ComponentDelegatingDefinitionParser;
63  import org.mule.config.spring.parsers.specific.ConfigurationDefinitionParser;
64  import org.mule.config.spring.parsers.specific.DefaultNameMuleOrphanDefinitionParser;
65  import org.mule.config.spring.parsers.specific.DefaultThreadingProfileDefinitionParser;
66  import org.mule.config.spring.parsers.specific.ExceptionTXFilterDefinitionParser;
67  import org.mule.config.spring.parsers.specific.ExpressionTransformerDefinitionParser;
68  import org.mule.config.spring.parsers.specific.FilterDefinitionParser;
69  import org.mule.config.spring.parsers.specific.FilterRefDefinitionParser;
70  import org.mule.config.spring.parsers.specific.FlowDefinitionParser;
71  import org.mule.config.spring.parsers.specific.FlowRefDefinitionParser;
72  import org.mule.config.spring.parsers.specific.GlobalPropertyDefinitionParser;
73  import org.mule.config.spring.parsers.specific.IgnoreObjectMethodsDefinitionParser;
74  import org.mule.config.spring.parsers.specific.InboundRouterDefinitionParser;
75  import org.mule.config.spring.parsers.specific.InterceptorDefinitionParser;
76  import org.mule.config.spring.parsers.specific.InterceptorStackDefinitionParser;
77  import org.mule.config.spring.parsers.specific.MessageEnricherDefinitionParser;
78  import org.mule.config.spring.parsers.specific.MessageFilterDefinitionParser;
79  import org.mule.config.spring.parsers.specific.MessageProcessorChainDefinitionParser;
80  import org.mule.config.spring.parsers.specific.MessageProcessorDefinitionParser;
81  import org.mule.config.spring.parsers.specific.MessagePropertiesTransformerDefinitionParser;
82  import org.mule.config.spring.parsers.specific.ModelDefinitionParser;
83  import org.mule.config.spring.parsers.specific.NotificationDefinitionParser;
84  import org.mule.config.spring.parsers.specific.NotificationDisableDefinitionParser;
85  import org.mule.config.spring.parsers.specific.ObjectFactoryDefinitionParser;
86  import org.mule.config.spring.parsers.specific.PoolingProfileDefinitionParser;
87  import org.mule.config.spring.parsers.specific.QueueStoreDefinitionParser;
88  import org.mule.config.spring.parsers.specific.RegExFilterDefinitionParser;
89  import org.mule.config.spring.parsers.specific.ResponseDefinitionParser;
90  import org.mule.config.spring.parsers.specific.RetryNotifierDefinitionParser;
91  import org.mule.config.spring.parsers.specific.RetryPolicyDefinitionParser;
92  import org.mule.config.spring.parsers.specific.RouterDefinitionParser;
93  import org.mule.config.spring.parsers.specific.SecurityFilterDefinitionParser;
94  import org.mule.config.spring.parsers.specific.ServiceDefinitionParser;
95  import org.mule.config.spring.parsers.specific.ServiceOverridesDefinitionParser;
96  import org.mule.config.spring.parsers.specific.SimpleComponentDefinitionParser;
97  import org.mule.config.spring.parsers.specific.SimpleServiceDefinitionParser;
98  import org.mule.config.spring.parsers.specific.SplitterDefinitionParser;
99  import org.mule.config.spring.parsers.specific.StaticComponentDefinitionParser;
100 import org.mule.config.spring.parsers.specific.ThreadingProfileDefinitionParser;
101 import org.mule.config.spring.parsers.specific.TransactionDefinitionParser;
102 import org.mule.config.spring.parsers.specific.TransactionManagerDefinitionParser;
103 import org.mule.config.spring.parsers.specific.ValidatorDefinitionParser;
104 import org.mule.config.spring.parsers.specific.endpoint.EndpointRefParser;
105 import org.mule.config.spring.parsers.specific.endpoint.support.ChildEndpointDefinitionParser;
106 import org.mule.config.spring.parsers.specific.endpoint.support.OrphanEndpointDefinitionParser;
107 import org.mule.config.spring.util.SpringBeanLookup;
108 import org.mule.context.notification.ListenerSubscriptionPair;
109 import org.mule.endpoint.EndpointURIEndpointBuilder;
110 import org.mule.enricher.MessageEnricher;
111 import org.mule.enricher.MessageEnricher.EnrichExpressionPair;
112 import org.mule.exception.DefaultMessagingExceptionStrategy;
113 import org.mule.expression.ExpressionConfig;
114 import org.mule.expression.transformers.BeanBuilderTransformer;
115 import org.mule.expression.transformers.ExpressionArgument;
116 import org.mule.expression.transformers.ExpressionTransformer;
117 import org.mule.interceptor.LoggingInterceptor;
118 import org.mule.interceptor.TimerInterceptor;
119 import org.mule.model.resolvers.ArrayEntryPointResolver;
120 import org.mule.model.resolvers.CallableEntryPointResolver;
121 import org.mule.model.resolvers.DefaultEntryPointResolverSet;
122 import org.mule.model.resolvers.ExplicitMethodEntryPointResolver;
123 import org.mule.model.resolvers.LegacyEntryPointResolverSet;
124 import org.mule.model.resolvers.MethodHeaderPropertyEntryPointResolver;
125 import org.mule.model.resolvers.NoArgumentsEntryPointResolver;
126 import org.mule.model.resolvers.ReflectionEntryPointResolver;
127 import org.mule.model.seda.SedaModel;
128 import org.mule.model.seda.SedaService;
129 import org.mule.object.PrototypeObjectFactory;
130 import org.mule.object.SingletonObjectFactory;
131 import org.mule.processor.IdempotentRedeliveryPolicy;
132 import org.mule.processor.InvokerMessageProcessor;
133 import org.mule.processor.NullMessageProcessor;
134 import org.mule.processor.strategy.AsynchronousProcessingStrategy;
135 import org.mule.processor.strategy.QueuedAsynchronousProcessingStrategy;
136 import org.mule.processor.strategy.QueuedThreadPerProcessorProcessingStrategy;
137 import org.mule.processor.strategy.ThreadPerProcessorProcessingStrategy;
138 import org.mule.retry.notifiers.ConnectNotifier;
139 import org.mule.retry.policies.RetryForeverPolicyTemplate;
140 import org.mule.retry.policies.SimpleRetryPolicyTemplate;
141 import org.mule.routing.CollectionSplitter;
142 import org.mule.routing.ExpressionMessageInfoMapping;
143 import org.mule.routing.ExpressionSplitter;
144 import org.mule.routing.FirstSuccessful;
145 import org.mule.routing.ForwardingCatchAllStrategy;
146 import org.mule.routing.IdempotentMessageFilter;
147 import org.mule.routing.IdempotentSecureHashMessageFilter;
148 import org.mule.routing.LoggingCatchAllStrategy;
149 import org.mule.routing.MapSplitter;
150 import org.mule.routing.MessageChunkAggregator;
151 import org.mule.routing.MessageChunkSplitter;
152 import org.mule.routing.MessageFilter;
153 import org.mule.routing.Resequencer;
154 import org.mule.routing.RoundRobin;
155 import org.mule.routing.SimpleCollectionAggregator;
156 import org.mule.routing.UntilSuccessful;
157 import org.mule.routing.WireTap;
158 import org.mule.routing.filters.EqualsFilter;
159 import org.mule.routing.filters.ExceptionTypeFilter;
160 import org.mule.routing.filters.ExpressionFilter;
161 import org.mule.routing.filters.MessagePropertyFilter;
162 import org.mule.routing.filters.PayloadTypeFilter;
163 import org.mule.routing.filters.WildcardFilter;
164 import org.mule.routing.filters.logic.AndFilter;
165 import org.mule.routing.filters.logic.NotFilter;
166 import org.mule.routing.filters.logic.OrFilter;
167 import org.mule.routing.outbound.ChainingRouter;
168 import org.mule.routing.outbound.DefaultOutboundRouterCollection;
169 import org.mule.routing.outbound.EndpointSelector;
170 import org.mule.routing.outbound.ExceptionBasedRouter;
171 import org.mule.routing.outbound.ExpressionMessageSplitter;
172 import org.mule.routing.outbound.ExpressionRecipientList;
173 import org.mule.routing.outbound.FilteringOutboundRouter;
174 import org.mule.routing.outbound.ListMessageSplitter;
175 import org.mule.routing.outbound.MessageChunkingRouter;
176 import org.mule.routing.outbound.MulticastingRouter;
177 import org.mule.routing.outbound.OutboundPassThroughRouter;
178 import org.mule.routing.outbound.SequenceRouter;
179 import org.mule.routing.outbound.StaticRecipientList;
180 import org.mule.routing.requestreply.SimpleAsyncRequestReplyRequester;
181 import org.mule.security.PasswordBasedEncryptionStrategy;
182 import org.mule.security.SecretKeyEncryptionStrategy;
183 import org.mule.security.UsernamePasswordAuthenticationFilter;
184 import org.mule.security.filters.MuleEncryptionEndpointSecurityFilter;
185 import org.mule.service.ForwardingConsumer;
186 import org.mule.service.ServiceAsyncReplyCompositeMessageSource;
187 import org.mule.service.ServiceCompositeMessageSource;
188 import org.mule.transaction.XaTransactionFactory;
189 import org.mule.transaction.lookup.GenericTransactionManagerLookupFactory;
190 import org.mule.transaction.lookup.JBossTransactionManagerLookupFactory;
191 import org.mule.transaction.lookup.JRunTransactionManagerLookupFactory;
192 import org.mule.transaction.lookup.Resin3TransactionManagerLookupFactory;
193 import org.mule.transaction.lookup.WeblogicTransactionManagerLookupFactory;
194 import org.mule.transaction.lookup.WebsphereTransactionManagerLookupFactory;
195 import org.mule.transformer.codec.Base64Decoder;
196 import org.mule.transformer.codec.Base64Encoder;
197 import org.mule.transformer.codec.XmlEntityDecoder;
198 import org.mule.transformer.codec.XmlEntityEncoder;
199 import org.mule.transformer.compression.GZipCompressTransformer;
200 import org.mule.transformer.compression.GZipUncompressTransformer;
201 import org.mule.transformer.encryption.DecryptionTransformer;
202 import org.mule.transformer.encryption.EncryptionTransformer;
203 import org.mule.transformer.simple.AutoTransformer;
204 import org.mule.transformer.simple.BeanToMap;
205 import org.mule.transformer.simple.ByteArrayToHexString;
206 import org.mule.transformer.simple.ByteArrayToObject;
207 import org.mule.transformer.simple.ByteArrayToSerializable;
208 import org.mule.transformer.simple.CombineCollectionsTransformer;
209 import org.mule.transformer.simple.HexStringToByteArray;
210 import org.mule.transformer.simple.MapToBean;
211 import org.mule.transformer.simple.ObjectToByteArray;
212 import org.mule.transformer.simple.ObjectToString;
213 import org.mule.transformer.simple.SerializableToByteArray;
214 import org.mule.transformer.simple.StringAppendTransformer;
215 import org.mule.transformer.simple.ValueExtractorTransformer;
216 import org.mule.util.store.InMemoryObjectStore;
217 import org.mule.util.store.ManagedObjectStore;
218 import org.mule.util.store.TextFileObjectStore;
219 
220 import static org.mule.transformer.simple.ValueExtractorTransformer.ValueExtractorTemplate;
221 
222 /**
223  * This is the core namespace handler for Mule and configures all Mule configuration elements under the
224  * <code>http://www.mulesoft.org/schema/mule/core/${version}</code> Namespace.
225  */
226 public class MuleNamespaceHandler extends AbstractMuleNamespaceHandler
227 {
228     @Override
229     public void init()
230     {
231         registerIgnoredElement("mule");
232         registerIgnoredElement("description");
233 
234         //Common elements
235         registerBeanDefinitionParser("configuration", new ConfigurationDefinitionParser());
236         registerBeanDefinitionParser("global-property", new GlobalPropertyDefinitionParser());
237         registerBeanDefinitionParser("default-threading-profile", new DefaultThreadingProfileDefinitionParser(MuleProperties.OBJECT_DEFAULT_THREADING_PROFILE));
238         registerBeanDefinitionParser("default-dispatcher-threading-profile", new DefaultThreadingProfileDefinitionParser(MuleProperties.OBJECT_DEFAULT_MESSAGE_DISPATCHER_THREADING_PROFILE));
239         registerBeanDefinitionParser("default-receiver-threading-profile", new DefaultThreadingProfileDefinitionParser(MuleProperties.OBJECT_DEFAULT_MESSAGE_RECEIVER_THREADING_PROFILE));
240         registerBeanDefinitionParser("default-service-threading-profile", new DefaultThreadingProfileDefinitionParser(MuleProperties.OBJECT_DEFAULT_SERVICE_THREADING_PROFILE));
241         registerBeanDefinitionParser("threading-profile", new ThreadingProfileDefinitionParser("threadingProfile", MuleProperties.OBJECT_DEFAULT_SERVICE_THREADING_PROFILE));
242         registerBeanDefinitionParser("custom-agent", new DefaultNameMuleOrphanDefinitionParser());
243 
244         // Exception Strategies
245         registerBeanDefinitionParser("default-exception-strategy", new ChildDefinitionParser("exceptionListener", DefaultMessagingExceptionStrategy.class));
246         registerDeprecatedBeanDefinitionParser("default-service-exception-strategy", new ChildDefinitionParser("exceptionListener", DefaultMessagingExceptionStrategy.class), "Use default-exception-strategy instead.");
247         registerBeanDefinitionParser("custom-exception-strategy", new ChildDefinitionParser("exceptionListener", null));
248         registerBeanDefinitionParser("commit-transaction", new ExceptionTXFilterDefinitionParser("commitTxFilter"));
249         registerBeanDefinitionParser("rollback-transaction", new ExceptionTXFilterDefinitionParser("rollbackTxFilter"));
250 
251         // Reconnection Strategies
252         registerBeanDefinitionParser("reconnect", new RetryPolicyDefinitionParser(SimpleRetryPolicyTemplate.class));
253         registerBeanDefinitionParser("reconnect-forever", new RetryPolicyDefinitionParser(RetryForeverPolicyTemplate.class));
254         registerBeanDefinitionParser("reconnect-custom-strategy", new RetryPolicyDefinitionParser());
255         registerBeanDefinitionParser("reconnect-notifier", new RetryNotifierDefinitionParser(ConnectNotifier.class));
256         registerBeanDefinitionParser("reconnect-custom-notifier", new RetryNotifierDefinitionParser());
257 
258         // Queue Store
259         registerMuleBeanDefinitionParser("queue-store", new ParentDefinitionParser()).addAlias(AbstractMuleBeanDefinitionParser.ATTRIBUTE_REF, "queue-store");
260         registerMuleBeanDefinitionParser("custom-queue-store", new QueueStoreDefinitionParser()).addIgnored("name");
261         registerBeanDefinitionParser("default-in-memory-queue-store", new QueueStoreDefinitionParser(DefaultMemoryQueueStoreFactoryBean.class));
262         registerBeanDefinitionParser("default-persistent-queue-store", new QueueStoreDefinitionParser(DefaultPersistentQueueStoreFactoryBean.class));
263         registerBeanDefinitionParser("simple-in-memory-queue-store", new QueueStoreDefinitionParser(SimpleMemoryQueueStoreFactoryBean.class));
264         registerBeanDefinitionParser("file-queue-store", new QueueStoreDefinitionParser(FileQueueStoreFactoryBean.class));
265         
266         registerBeanDefinitionParser("pooling-profile", new PoolingProfileDefinitionParser());
267         registerBeanDefinitionParser("queue-profile", new ChildDefinitionParser("queueProfile", QueueProfileFactoryBean.class));
268         registerMuleBeanDefinitionParser("notifications", new NamedDefinitionParser(MuleProperties.OBJECT_NOTIFICATION_MANAGER)).addAlias("dynamic", "notificationDynamic");
269         registerBeanDefinitionParser("notification", new NotificationDefinitionParser());
270         registerBeanDefinitionParser("disable-notification", new NotificationDisableDefinitionParser());
271         registerMuleBeanDefinitionParser("notification-listener", new ChildDefinitionParser("allListenerSubscriptionPair", ListenerSubscriptionPair.class)).addAlias("ref", "listener").addReference("listener");
272 
273         //Connector elements
274         registerBeanDefinitionParser("dispatcher-threading-profile", new ThreadingProfileDefinitionParser("dispatcherThreadingProfile", MuleProperties.OBJECT_DEFAULT_MESSAGE_DISPATCHER_THREADING_PROFILE));
275         registerBeanDefinitionParser("receiver-threading-profile", new ThreadingProfileDefinitionParser("receiverThreadingProfile", MuleProperties.OBJECT_DEFAULT_MESSAGE_RECEIVER_THREADING_PROFILE));
276         registerBeanDefinitionParser("service-overrides", new ServiceOverridesDefinitionParser());
277         registerBeanDefinitionParser("custom-connector", new MuleOrphanDefinitionParser(true));
278 
279         //Transformer elements
280 
281         registerMuleBeanDefinitionParser("transformer", new ParentDefinitionParser()).addAlias(AbstractMuleBeanDefinitionParser.ATTRIBUTE_REF, "messageProcessor");
282 
283         registerBeanDefinitionParser("custom-transformer", new MessageProcessorDefinitionParser());
284         registerBeanDefinitionParser("auto-transformer", new MessageProcessorDefinitionParser(AutoTransformer.class));
285         registerBeanDefinitionParser("message-properties-transformer", new MessagePropertiesTransformerDefinitionParser());
286 
287         registerMuleBeanDefinitionParser("expression-transformer", new ExpressionTransformerDefinitionParser(
288             ExpressionTransformer.class));
289 
290         registerBeanDefinitionParser("return-argument", new ChildDefinitionParser("argument", ExpressionArgument.class));
291 
292         registerBeanDefinitionParser("bean-builder-transformer", new MessageProcessorDefinitionParser(BeanBuilderTransformer.class));
293 
294         final ChildDefinitionParser beanPropertyParser = new ChildDefinitionParser("argument", ExpressionArgument.class);
295         beanPropertyParser.addAlias("property-name", "name");
296         registerBeanDefinitionParser("bean-property", beanPropertyParser);
297 
298         registerBeanDefinitionParser("base64-encoder-transformer", new MessageProcessorDefinitionParser(Base64Encoder.class));
299         registerBeanDefinitionParser("base64-decoder-transformer", new MessageProcessorDefinitionParser(Base64Decoder.class));
300 
301         registerBeanDefinitionParser("xml-entity-encoder-transformer", new MessageProcessorDefinitionParser(XmlEntityEncoder.class));
302         registerBeanDefinitionParser("xml-entity-decoder-transformer", new MessageProcessorDefinitionParser(XmlEntityDecoder.class));
303         registerBeanDefinitionParser("gzip-compress-transformer", new MessageProcessorDefinitionParser(GZipCompressTransformer.class));
304         registerBeanDefinitionParser("gzip-uncompress-transformer", new MessageProcessorDefinitionParser(GZipUncompressTransformer.class));
305         registerBeanDefinitionParser("encrypt-transformer", new MessageProcessorDefinitionParser(EncryptionTransformer.class));
306         registerBeanDefinitionParser("decrypt-transformer", new MessageProcessorDefinitionParser(DecryptionTransformer.class));
307         registerBeanDefinitionParser("byte-array-to-hex-string-transformer", new MessageProcessorDefinitionParser(ByteArrayToHexString.class));
308         registerBeanDefinitionParser("hex-string-to-byte-array-transformer", new MessageProcessorDefinitionParser(HexStringToByteArray.class));
309 
310         registerBeanDefinitionParser("byte-array-to-object-transformer", new MessageProcessorDefinitionParser(ByteArrayToObject.class));
311         registerBeanDefinitionParser("object-to-byte-array-transformer", new MessageProcessorDefinitionParser(ObjectToByteArray.class));
312         registerBeanDefinitionParser("object-to-string-transformer", new MessageProcessorDefinitionParser(ObjectToString.class));
313         registerBeanDefinitionParser("byte-array-to-serializable-transformer", new MessageProcessorDefinitionParser(ByteArrayToSerializable.class));
314         registerBeanDefinitionParser("serializable-to-byte-array-transformer", new MessageProcessorDefinitionParser(SerializableToByteArray.class));
315         registerBeanDefinitionParser("byte-array-to-string-transformer", new MessageProcessorDefinitionParser(ObjectToString.class));
316         registerBeanDefinitionParser("string-to-byte-array-transformer", new MessageProcessorDefinitionParser(ObjectToByteArray.class));
317 
318         registerBeanDefinitionParser("append-string-transformer", new MessageProcessorDefinitionParser(StringAppendTransformer.class));
319 
320         registerBeanDefinitionParser("map-to-bean-transformer", new MessageProcessorDefinitionParser(MapToBean.class));
321         registerBeanDefinitionParser("bean-to-map-transformer", new MessageProcessorDefinitionParser(BeanToMap.class));
322 
323         registerBeanDefinitionParser("combine-collections-transformer", new MessageProcessorDefinitionParser(CombineCollectionsTransformer.class));
324         
325         //Transaction Managers
326         registerBeanDefinitionParser("custom-transaction-manager", new TransactionManagerDefinitionParser());
327         registerBeanDefinitionParser("jndi-transaction-manager", new TransactionManagerDefinitionParser(GenericTransactionManagerLookupFactory.class));
328         registerBeanDefinitionParser("weblogic-transaction-manager", new TransactionManagerDefinitionParser(WeblogicTransactionManagerLookupFactory.class));
329         registerBeanDefinitionParser("jboss-transaction-manager", new TransactionManagerDefinitionParser(JBossTransactionManagerLookupFactory.class));
330         registerBeanDefinitionParser("jrun-transaction-manager", new TransactionManagerDefinitionParser(JRunTransactionManagerLookupFactory.class));
331         registerBeanDefinitionParser("resin-transaction-manager", new TransactionManagerDefinitionParser(Resin3TransactionManagerLookupFactory.class));
332         registerBeanDefinitionParser("websphere-transaction-manager", new TransactionManagerDefinitionParser(WebsphereTransactionManagerLookupFactory.class));
333 
334         //Endpoint elements
335         registerBeanDefinitionParser("endpoint", new OrphanEndpointDefinitionParser(EndpointURIEndpointBuilder.class));
336         registerBeanDefinitionParser("inbound-endpoint", new ChildEndpointDefinitionParser(InboundEndpointFactoryBean.class));
337         registerBeanDefinitionParser("outbound-endpoint", new ChildEndpointDefinitionParser(OutboundEndpointFactoryBean.class));
338         registerBeanDefinitionParser("custom-transaction", new TransactionDefinitionParser());
339         registerBeanDefinitionParser("xa-transaction", new TransactionDefinitionParser(XaTransactionFactory.class));
340         registerBeanDefinitionParser("idempotent-redelivery-policy", new ChildDefinitionParser("redeliveryPolicy", IdempotentRedeliveryPolicy.class));
341 
342         // Message Processors
343         registerMuleBeanDefinitionParser("processor", new ParentDefinitionParser()).addAlias(AbstractMuleBeanDefinitionParser.ATTRIBUTE_REF, "messageProcessor");
344         registerMuleBeanDefinitionParser("custom-processor", new MessageProcessorDefinitionParser()).addIgnored("name");
345         registerBeanDefinitionParser("processor-chain", new MessageProcessorChainDefinitionParser());
346         registerBeanDefinitionParser("sub-flow", new MuleOrphanDefinitionParser(MessageProcessorChainFactoryBean.class, false));
347         registerBeanDefinitionParser("response", new ResponseDefinitionParser());
348         registerMuleBeanDefinitionParser("message-filter", new MessageFilterDefinitionParser());
349         registerMuleBeanDefinitionParser("invoke",
350             new MessageProcessorDefinitionParser(InvokerMessageProcessor.class)).addAlias("method",
351             "methodName").addAlias("methodArguments", "argumentExpressionsString").addAlias(
352             "methodArgumentTypes", "ArgumentTypes");
353         registerMuleBeanDefinitionParser("enricher",
354             new MessageEnricherDefinitionParser("messageProcessor", MessageEnricher.class)).addIgnored(
355             "source")
356             .addIgnored("target")
357             .registerPreProcessor(
358                 new CheckExclusiveAttributesAndChildren(new String[]{"source", "target"},
359                     new String[]{"enrich"}))
360             .registerPreProcessor(
361                 new CheckRequiredAttributesWhenNoChildren(new String[][]{new String[]{"target"}}, "enrich"))
362             .addCollection("enrichExpressionPairs");
363         registerMuleBeanDefinitionParser("enrich", new ChildDefinitionParser("enrichExpressionPair",
364             EnrichExpressionPair.class));
365 
366         registerBeanDefinitionParser("value-extractor-transformer", new MessageProcessorDefinitionParser(ValueExtractorTransformer.class));
367         registerMuleBeanDefinitionParser("extract", new ChildDefinitionParser("valueExtractorTemplate",
368                                                                              ValueExtractorTemplate.class));
369 
370         registerBeanDefinitionParser("async", new AsyncMessageProcessorsDefinitionParser());
371         registerBeanDefinitionParser("transactional", new ChildDefinitionParser("messageProcessor",
372             TransactionalMessageProcessorsFactoryBean.class));
373         registerMuleBeanDefinitionParser("logger", new ChildDefinitionParser("messageProcessor",
374             LoggerMessageProcessor.class));
375 
376         // Message Sources
377         registerBeanDefinitionParser("custom-source", new ChildDefinitionParser("messageSource", null, MessageSource.class));
378         registerBeanDefinitionParser("composite-source", new ChildDefinitionParser("messageSource", CompositeMessageSourceFactoryBean.class));
379         registerBeanDefinitionParser("poll", new ChildEndpointDefinitionParser(PollingMessageSourceFactoryBean.class));
380 
381         // Models
382         registerBeanDefinitionParser("model", new ModelDefinitionParser());
383         registerBeanDefinitionParser("seda-model", new InheritDefinitionParser(new OrphanDefinitionParser(SedaModel.class, true), new NamedDefinitionParser()));
384 
385         registerBeanDefinitionParser("entry-point-resolver-set", new ChildDefinitionParser("entryPointResolverSet", DefaultEntryPointResolverSet.class));
386         registerBeanDefinitionParser("legacy-entry-point-resolver-set", new ChildDefinitionParser("entryPointResolverSet", LegacyEntryPointResolverSet.class));
387         registerBeanDefinitionParser("custom-entry-point-resolver-set", new ChildDefinitionParser("entryPointResolverSet"));
388 
389         registerBeanDefinitionParser("custom-entry-point-resolver", new ChildDefinitionParser("entryPointResolver"));
390         registerBeanDefinitionParser("callable-entry-point-resolver", new ChildDefinitionParser("entryPointResolver", CallableEntryPointResolver.class));
391         registerMuleBeanDefinitionParser("property-entry-point-resolver", new ChildDefinitionParser("entryPointResolver", MethodHeaderPropertyEntryPointResolver.class)).addAlias("property", "methodProperty");
392         registerBeanDefinitionParser("method-entry-point-resolver", new ChildDefinitionParser("entryPointResolver", ExplicitMethodEntryPointResolver.class));
393         registerBeanDefinitionParser("reflection-entry-point-resolver", new ChildDefinitionParser("entryPointResolver", ReflectionEntryPointResolver.class));
394         registerBeanDefinitionParser("no-arguments-entry-point-resolver", new ChildDefinitionParser("entryPointResolver", NoArgumentsEntryPointResolver.class));
395         registerBeanDefinitionParser("array-entry-point-resolver", new ChildDefinitionParser("entryPointResolver", ArrayEntryPointResolver.class));
396         registerMuleBeanDefinitionParser("include-entry-point", new ParentDefinitionParser());
397         registerMuleBeanDefinitionParser("exclude-entry-point", new ParentDefinitionParser()).addAlias("method", "ignoredMethod");
398         registerMuleBeanDefinitionParser("exclude-object-methods", new IgnoreObjectMethodsDefinitionParser());
399 
400         // Services
401         registerBeanDefinitionParser("seda-service", new ServiceDefinitionParser(SedaService.class));
402         registerBeanDefinitionParser("service", new ServiceDefinitionParser(SedaService.class));
403         registerBeanDefinitionParser("custom-service", new ServiceDefinitionParser());
404 
405         // Flow Constructs
406         registerBeanDefinitionParser("flow", new FlowDefinitionParser());
407         registerBeanDefinitionParser("simple-service", new SimpleServiceDefinitionParser());
408         registerBeanDefinitionParser("bridge", new BridgeDefinitionParser());
409         registerBeanDefinitionParser("validator", new ValidatorDefinitionParser());
410 
411         registerBeanDefinitionParser("flow-ref", new FlowRefDefinitionParser());
412         
413         // Processing Strategies
414         registerMuleBeanDefinitionParser("asynchronous-processing-strategy",
415             new OrphanDefinitionParser(AsynchronousProcessingStrategy.class, false)).addMapping(
416             "poolExhaustedAction", ThreadingProfile.POOL_EXHAUSTED_ACTIONS).addIgnored("name");
417         registerMuleBeanDefinitionParser("queued-asynchronous-processing-strategy",
418             new OrphanDefinitionParser(QueuedAsynchronousProcessingStrategy.class, false)).addMapping(
419             "poolExhaustedAction", ThreadingProfile.POOL_EXHAUSTED_ACTIONS).addIgnored("name");
420         registerMuleBeanDefinitionParser("thread-per-processor-processing-strategy",
421             new OrphanDefinitionParser(ThreadPerProcessorProcessingStrategy.class, false)).addMapping(
422             "poolExhaustedAction", ThreadingProfile.POOL_EXHAUSTED_ACTIONS).addIgnored("name");
423         registerMuleBeanDefinitionParser("queued-thread-per-processor-processing-strategy",
424             new OrphanDefinitionParser(QueuedThreadPerProcessorProcessingStrategy.class, false)).addMapping(
425             "poolExhaustedAction", ThreadingProfile.POOL_EXHAUSTED_ACTIONS).addIgnored("name");
426         registerMuleBeanDefinitionParser("custom-processing-strategy", new OrphanDefinitionParser(false)).addIgnored(
427             "name");
428 
429         // Components
430         registerBeanDefinitionParser("component", new ComponentDelegatingDefinitionParser(DefaultJavaComponent.class));
431         registerBeanDefinitionParser("pooled-component", new ComponentDelegatingDefinitionParser(PooledJavaComponent.class));
432 
433         registerMuleBeanDefinitionParser("binding", new BindingDefinitionParser("interfaceBinding", DefaultInterfaceBinding.class));
434 
435         // Simple Components
436         registerBeanDefinitionParser("pass-through-component", new ComponentDefinitionParser(PassThroughComponent.class));
437         registerBeanDefinitionParser("log-component", new SimpleComponentDefinitionParser(SimpleCallableJavaComponent.class, LogComponent.class));
438         registerBeanDefinitionParser("null-component", new SimpleComponentDefinitionParser(SimpleCallableJavaComponent.class, NullComponent.class));
439         registerBeanDefinitionParser("static-component", new StaticComponentDefinitionParser());
440         registerIgnoredElement("return-data"); // Handled by StaticComponentDefinitionParser
441 
442         // We need to use DefaultJavaComponent for the echo component because some tests invoke EchoComponent with method name and therefore we need an entry point resolver
443         registerBeanDefinitionParser("echo-component", new SimpleComponentDefinitionParser(DefaultJavaComponent.class, EchoComponent.class));
444 
445         // Object Factories
446         registerBeanDefinitionParser("singleton-object", new ObjectFactoryDefinitionParser(SingletonObjectFactory.class, "objectFactory"));
447         registerBeanDefinitionParser("prototype-object", new ObjectFactoryDefinitionParser(PrototypeObjectFactory.class, "objectFactory"));
448         registerBeanDefinitionParser("spring-object", new ObjectFactoryDefinitionParser(SpringBeanLookup.class, "objectFactory"));
449 
450         // Life-cycle Adapters Factories
451         registerBeanDefinitionParser("custom-lifecycle-adapter-factory", new ChildDefinitionParser("lifecycleAdapterFactory"));
452 
453         //Stores
454         registerBeanDefinitionParser("in-memory-store", new ChildDefinitionParser("store", InMemoryObjectStore.class));
455         registerBeanDefinitionParser("simple-text-file-store", new ChildDefinitionParser("store", TextFileObjectStore.class));
456         registerBeanDefinitionParser("custom-object-store", new ChildDefinitionParser("store", null));
457         registerBeanDefinitionParser("managed-store", new ChildDefinitionParser("store",ManagedObjectStore.class));
458 
459         //Routers
460         registerBeanDefinitionParser("inbound", new ChildDefinitionParser("messageSource", ServiceCompositeMessageSource.class, true));
461         registerBeanDefinitionParser("outbound", new ChildDefinitionParser("outboundMessageProcessor", DefaultOutboundRouterCollection.class, true));
462         registerBeanDefinitionParser("async-reply", new ChildDefinitionParser("asyncReplyMessageSource", ServiceAsyncReplyCompositeMessageSource.class, true));
463 
464         //Inbound Routers
465         registerBeanDefinitionParser("forwarding-router", new InboundRouterDefinitionParser(ForwardingConsumer.class));
466         registerBeanDefinitionParser("idempotent-receiver-router", new InboundRouterDefinitionParser(IdempotentMessageFilter.class));
467         registerBeanDefinitionParser("idempotent-secure-hash-receiver-router", new InboundRouterDefinitionParser(IdempotentSecureHashMessageFilter.class));
468         registerBeanDefinitionParser("selective-consumer-router", new InboundRouterDefinitionParser(MessageFilter.class));
469         registerBeanDefinitionParser("wire-tap-router", new InboundRouterDefinitionParser(WireTap.class));
470         registerBeanDefinitionParser("custom-correlation-aggregator-router", new InboundRouterDefinitionParser());
471         registerBeanDefinitionParser("collection-aggregator-router", new InboundRouterDefinitionParser(SimpleCollectionAggregator.class));
472         registerBeanDefinitionParser("message-chunking-aggregator-router", new InboundRouterDefinitionParser(MessageChunkAggregator.class));
473         registerBeanDefinitionParser("correlation-resequencer-router", new InboundRouterDefinitionParser(Resequencer.class));
474         registerBeanDefinitionParser("custom-inbound-router", new InboundRouterDefinitionParser(null));
475 
476         //Outbound Routers
477         registerBeanDefinitionParser("pass-through-router", new RouterDefinitionParser(OutboundPassThroughRouter.class));
478         registerBeanDefinitionParser("filtering-router", new RouterDefinitionParser(FilteringOutboundRouter.class));
479         registerBeanDefinitionParser("chaining-router", new RouterDefinitionParser(ChainingRouter.class));
480         registerBeanDefinitionParser("endpoint-selector-router", new RouterDefinitionParser(EndpointSelector.class));
481         registerBeanDefinitionParser("exception-based-router", new RouterDefinitionParser(ExceptionBasedRouter.class));
482         registerBeanDefinitionParser("recipient-list-exception-based-router", new RouterDefinitionParser(ExceptionBasedRouter.class));
483         registerBeanDefinitionParser("list-message-splitter-router", new RouterDefinitionParser(ListMessageSplitter.class));
484         registerBeanDefinitionParser("expression-splitter-router", new RouterDefinitionParser(ExpressionMessageSplitter.class));
485         registerBeanDefinitionParser("message-chunking-router", new RouterDefinitionParser(MessageChunkingRouter.class));
486         registerBeanDefinitionParser("multicasting-router", new RouterDefinitionParser(MulticastingRouter.class));
487         registerBeanDefinitionParser("static-recipient-list-router", new RouterDefinitionParser(StaticRecipientList.class));
488         registerBeanDefinitionParser("expression-recipient-list-router", new RouterDefinitionParser(ExpressionRecipientList.class));
489         registerBeanDefinitionParser("recipients", new ChildListDefinitionParser("recipients"));
490         registerBeanDefinitionParser("custom-outbound-router", new RouterDefinitionParser(null));
491         registerBeanDefinitionParser("reply-to", new EndpointRefParser("replyTo"));
492         registerBeanDefinitionParser("sequence-router", new RouterDefinitionParser(SequenceRouter.class));
493 
494         //Response Routers
495         registerBeanDefinitionParser("custom-async-reply-router", new InboundRouterDefinitionParser(null));
496         registerBeanDefinitionParser("single-async-reply-router", new InboundRouterDefinitionParser(NullMessageProcessor.class));
497         registerBeanDefinitionParser("collection-async-reply-router", new InboundRouterDefinitionParser(SimpleCollectionAggregator.class));
498 
499         // Routing: Intercepting Message Processors
500         registerBeanDefinitionParser("idempotent-message-filter", new InboundRouterDefinitionParser(IdempotentMessageFilter.class));
501         registerBeanDefinitionParser("idempotent-secure-hash-message-filter", new InboundRouterDefinitionParser(IdempotentSecureHashMessageFilter.class));
502         registerBeanDefinitionParser("wire-tap", new InboundRouterDefinitionParser(WireTap.class));
503         registerBeanDefinitionParser("custom-aggregator", new AggregatorDefinitionParser());
504         registerBeanDefinitionParser("collection-aggregator", new AggregatorDefinitionParser(SimpleCollectionAggregator.class));
505         registerBeanDefinitionParser("message-chunk-aggregator", new AggregatorDefinitionParser(MessageChunkAggregator.class));
506         registerBeanDefinitionParser("resequencer", new InboundRouterDefinitionParser(Resequencer.class));
507         registerBeanDefinitionParser("splitter", new SplitterDefinitionParser(ExpressionSplitter.class));
508         registerBeanDefinitionParser("collection-splitter", new SplitterDefinitionParser(CollectionSplitter.class));
509         registerBeanDefinitionParser("map-splitter", new SplitterDefinitionParser(MapSplitter.class));
510         registerBeanDefinitionParser("message-chunk-splitter", new SplitterDefinitionParser(MessageChunkSplitter.class));
511         registerBeanDefinitionParser("custom-splitter", new SplitterDefinitionParser());
512 
513         // Routing: Routing Message Processors
514 
515         // Routing: Conditional Routers
516         registerBeanDefinitionParser("choice", new ChildDefinitionParser("messageProcessor", ChoiceRouterFactoryBean.class));
517         registerBeanDefinitionParser("when", (ChildDefinitionParser)new ChildDefinitionParser("route", MessageProcessorFilterPairFactoryBean.class).registerPreProcessor(new CheckExclusiveAttributesAndChildren(new String[]{
518             "expression"}, new String[]{"{http://www.mulesoft.org/schema/mule/core}abstractFilterType"})));
519         registerBeanDefinitionParser("otherwise", new ChildDefinitionParser("defaultRoute", MessageProcessorFilterPairFactoryBean.class));
520 
521         registerBeanDefinitionParser("all", new ChildDefinitionParser("messageProcessor", MulticastingRouter.class));
522         registerBeanDefinitionParser("recipient-list", new ChildDefinitionParser("messageProcessor", ExpressionRecipientList.class));
523 
524         registerBeanDefinitionParser("request-reply", new ChildDefinitionParser("messageProcessor", SimpleAsyncRequestReplyRequester.class));
525         registerBeanDefinitionParser("first-successful", new ChildDefinitionParser("messageProcessor", FirstSuccessful.class));
526         registerBeanDefinitionParser("until-successful", new ChildDefinitionParser("messageProcessor", UntilSuccessful.class));
527         registerBeanDefinitionParser("round-robin", new ChildDefinitionParser("messageProcessor", RoundRobin.class));
528         registerBeanDefinitionParser("dead-letter-queue", new ChildDefinitionParser("deadLetterQueue", MessageProcessorFilterPairFactoryBean.class));
529 
530         registerBeanDefinitionParser("custom-router", new ChildDefinitionParser("messageProcessor"));
531 
532         //Message Info Mappings
533         registerBeanDefinitionParser("expression-message-info-mapping", new ChildDefinitionParser("messageInfoMapping", ExpressionMessageInfoMapping.class));
534         registerBeanDefinitionParser("custom-message-info-mapping", new ChildDefinitionParser("messageInfoMapping"));
535 
536         //Catch all Strategies
537         registerBeanDefinitionParser("logging-catch-all-strategy", new ChildDefinitionParser("catchAllStrategy", LoggingCatchAllStrategy.class));
538         registerBeanDefinitionParser("custom-catch-all-strategy", new ChildDefinitionParser("catchAllStrategy", null));
539         registerBeanDefinitionParser("forwarding-catch-all-strategy", new ChildDefinitionParser("catchAllStrategy", ForwardingCatchAllStrategy.class));
540         registerBeanDefinitionParser("custom-forwarding-catch-all-strategy", new ChildDefinitionParser("catchAllStrategy", null));
541 
542         //Common Filters
543         registerMuleBeanDefinitionParser("filter", new FilterRefDefinitionParser());
544         registerBeanDefinitionParser("and-filter", new FilterDefinitionParser(AndFilter.class));
545         registerBeanDefinitionParser("or-filter", new FilterDefinitionParser(OrFilter.class));
546         registerBeanDefinitionParser("not-filter", new FilterDefinitionParser(NotFilter.class));
547         registerBeanDefinitionParser("regex-filter", new RegExFilterDefinitionParser());
548         registerBeanDefinitionParser("exception-type-filter", new FilterDefinitionParser(ExceptionTypeFilter.class));
549         registerBeanDefinitionParser("message-property-filter", new FilterDefinitionParser(MessagePropertyFilter.class));
550         registerBeanDefinitionParser("payload-type-filter", new FilterDefinitionParser(PayloadTypeFilter.class));
551         registerBeanDefinitionParser("wildcard-filter", new FilterDefinitionParser(WildcardFilter.class));
552         registerBeanDefinitionParser("equals-filter", new FilterDefinitionParser(EqualsFilter.class));
553         registerBeanDefinitionParser("expression-filter", new FilterDefinitionParser(ExpressionFilter.class));
554         registerBeanDefinitionParser("custom-filter", new FilterDefinitionParser());
555 
556         //Utils / Standard Types
557         registerMuleBeanDefinitionParser("properties", new ChildMapDefinitionParser("properties")).addCollection("properties");
558         registerMuleBeanDefinitionParser("property", new ChildMapEntryDefinitionParser("properties")).addCollection("properties");
559         registerMuleBeanDefinitionParser("add-message-properties", new ChildMapDefinitionParser("addProperties")).addCollection("addProperties");
560         registerMuleBeanDefinitionParser("add-message-property", new ChildMapEntryDefinitionParser("addProperties")).addCollection("addProperties");
561         registerMuleBeanDefinitionParser("rename-message-property", new ChildMapEntryDefinitionParser("renameProperties")).addCollection("renameProperties");
562         registerBeanDefinitionParser("delete-message-property", new ChildListEntryDefinitionParser("deleteProperties", ChildMapEntryDefinitionParser.KEY));
563         registerMuleBeanDefinitionParser("jndi-provider-properties", new ChildMapDefinitionParser("jndiProviderProperties")).addCollection("jndiProviderProperties");
564         registerMuleBeanDefinitionParser("jndi-provider-property", new ChildMapEntryDefinitionParser("jndiProviderProperties")).addCollection("jndiProviderProperties");
565         registerBeanDefinitionParser("environment", new ChildMapDefinitionParser("environment"));
566         registerBeanDefinitionParser("expression", new ChildDefinitionParser("expression", ExpressionConfig.class));
567 
568         //Security
569         registerMuleBeanDefinitionParser("security-manager", new NamedDefinitionParser(MuleProperties.OBJECT_SECURITY_MANAGER)).addIgnored("type").addIgnored("name");
570         registerBeanDefinitionParser("custom-security-provider", new NameTransferDefinitionParser("providers"));
571         registerMuleBeanDefinitionParser("custom-encryption-strategy", new NameTransferDefinitionParser("encryptionStrategies")).addAlias("strategy", "encryptionStrategy");
572         registerBeanDefinitionParser("password-encryption-strategy", new ChildDefinitionParser("encryptionStrategy", PasswordBasedEncryptionStrategy.class));
573         registerMuleBeanDefinitionParser("secret-key-encryption-strategy", new ChildDefinitionParser("encryptionStrategy", SecretKeyEncryptionStrategy.class)).registerPreProcessor(new CheckExclusiveAttributes(new String[][]{new String[]{"key"}, new String[]{"keyFactory-ref"}}));
574         registerBeanDefinitionParser("encryption-security-filter", new SecurityFilterDefinitionParser(MuleEncryptionEndpointSecurityFilter.class));
575         registerBeanDefinitionParser("custom-security-filter", new SecurityFilterDefinitionParser());
576         registerBeanDefinitionParser("username-password-filter", new SecurityFilterDefinitionParser(UsernamePasswordAuthenticationFilter.class));
577         
578         //Interceptors
579         registerMuleBeanDefinitionParser("interceptor-stack", new InterceptorStackDefinitionParser());
580         registerBeanDefinitionParser("custom-interceptor", new InterceptorDefinitionParser());
581         registerBeanDefinitionParser("timer-interceptor", new InterceptorDefinitionParser(TimerInterceptor.class));
582         registerBeanDefinitionParser("logging-interceptor", new InterceptorDefinitionParser(LoggingInterceptor.class));
583 
584         // Cache
585         registerBeanDefinitionParser("caching-strategy", new CachingStrategyDefinitionParser(ObjectStoreCachingStrategy.class, true));
586         registerBeanDefinitionParser("cache", new CacheDefinitionParser("messageProcessor", CachingMessageProcessor.class));
587     }
588 }