View Javadoc

1   /*
2    * $Id: LegacyEntryPointResolverSet.java 19191 2010-08-25 21:05:23Z tcarlson $
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  package org.mule.model.resolvers;
11  
12  import org.mule.api.MuleRuntimeException;
13  import org.mule.api.model.EntryPointResolver;
14  import org.mule.config.i18n.CoreMessages;
15  import org.mule.util.ClassUtils;
16  
17  /**
18   * An {@link org.mule.api.model.EntryPointResolverSet} that mimics the behaviour of the Mule 1.x
19   * DynamicEntryPointResolver.
20   * <b>NOTE:</b> Since 3.0 this legacy entry point resolver will always invoked after message 
21   * transformation  and not before.
22   */
23  public class LegacyEntryPointResolverSet extends DefaultEntryPointResolverSet
24  {
25      private static final String ANNOTATED_ENTRYPOINT_RESOLVER_CLASS = "org.mule.impl.model.resolvers.AnnotatedEntryPointResolver";
26   
27      public LegacyEntryPointResolverSet()
28      {
29          addAnnotatedEntryPointResolver();
30          addEntryPointResolver(new MethodHeaderPropertyEntryPointResolver());
31          addEntryPointResolver(new CallableEntryPointResolver());
32  
33          ReflectionEntryPointResolver reflectionResolver = new ReflectionEntryPointResolver();
34          //In Mule 1.x you could call setXX methods as service methods by default
35          reflectionResolver.removeIgnoredMethod("set*");
36          addEntryPointResolver(reflectionResolver);
37      }
38  
39      protected void addAnnotatedEntryPointResolver()
40      {
41          //Annotations support is not part of Mule core, but we want default handling for annotations we have
42          //work-arounds like this to avoid importing annotation classes
43          //See MULE-4962 for details
44          try
45          {
46              Class<? extends EntryPointResolver> annotatedEntrypointResolver =
47                      ClassUtils.loadClass(ANNOTATED_ENTRYPOINT_RESOLVER_CLASS, getClass(), EntryPointResolver.class);
48              addEntryPointResolver(ClassUtils.instanciateClass(annotatedEntrypointResolver, ClassUtils.NO_ARGS));
49          }
50          catch (ClassNotFoundException e)
51          {
52              if(logger.isDebugEnabled())
53              {
54                  logger.warn("Mule annotations module is not on your classpath, annotations cannot be used on components");
55              }
56          }
57          catch (Exception e)
58          {
59              throw new MuleRuntimeException(CoreMessages.cannotLoadFromClasspath(ANNOTATED_ENTRYPOINT_RESOLVER_CLASS));
60          }
61      }
62  }