Package org.apache.camel.impl.converter
Class AnnotationTypeConverterLoader
- java.lang.Object
-
- org.apache.camel.impl.converter.AnnotationTypeConverterLoader
-
- All Implemented Interfaces:
org.apache.camel.spi.TypeConverterLoader
- Direct Known Subclasses:
FastAnnotationTypeConverterLoader
,TypeConvertersLoader
public class AnnotationTypeConverterLoader extends Object implements org.apache.camel.spi.TypeConverterLoader
A class which will auto-discoverConverter
objects and methods to pre-load theTypeConverterRegistry
of converters on startup. This implementation supports scanning for type converters in JAR files. TheMETA_INF_SERVICES
contains a list of packages or FQN class names forConverter
classes. The FQN class names is loaded first and directly by the class loader. ThePackageScanClassResolver
is being used to scan packages forConverter
classes and this procedure is slower than loading theConverter
classes directly by its FQN class name. Therefore its recommended to specify FQN class names in theMETA_INF_SERVICES
file. Likewise the procedure for scanning usingPackageScanClassResolver
may require custom implementations to work in various containers such as JBoss, OSGi, etc.
-
-
Field Summary
Fields Modifier and Type Field Description static String
META_INF_SERVICES
protected org.apache.camel.spi.PackageScanClassResolver
resolver
protected Set<Class<?>>
visitedClasses
protected Set<String>
visitedURIs
-
Constructor Summary
Constructors Constructor Description AnnotationTypeConverterLoader(org.apache.camel.spi.PackageScanClassResolver resolver)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected boolean
acceptClass(Class<?> clazz)
protected String[]
filterPackageNamesOnly(org.apache.camel.spi.PackageScanClassResolver resolver, String[] packageNames, Set<Class<?>> classes)
Filters the given list of packages and returns an array of only package names.protected static String[]
filterUnwantedPackage(String name, String[] packageNames)
Filters the given list of packagesprotected String[]
findPackageNames()
Finds the names of the packages to search for on the classpath looking for text files on the classpath at theMETA_INF_SERVICES
location.protected void
findPackages(Set<String> packages, ClassLoader classLoader)
protected boolean
isValidConverterMethod(Method method)
protected boolean
isValidFallbackConverterMethod(Method method)
void
load(org.apache.camel.spi.TypeConverterRegistry registry)
protected void
loadConverterMethods(org.apache.camel.spi.TypeConverterRegistry registry, Class<?> type)
Loads all of the converter methods for the given typeprotected void
registerFallbackTypeConverter(org.apache.camel.spi.TypeConverterRegistry registry, org.apache.camel.TypeConverter typeConverter, Method method)
protected void
registerTypeConverter(org.apache.camel.spi.TypeConverterRegistry registry, Method method, Class<?> toType, Class<?> fromType, org.apache.camel.TypeConverter typeConverter)
-
-
-
Method Detail
-
load
public void load(org.apache.camel.spi.TypeConverterRegistry registry) throws org.apache.camel.TypeConverterLoaderException
- Specified by:
load
in interfaceorg.apache.camel.spi.TypeConverterLoader
- Throws:
org.apache.camel.TypeConverterLoaderException
-
filterPackageNamesOnly
protected String[] filterPackageNamesOnly(org.apache.camel.spi.PackageScanClassResolver resolver, String[] packageNames, Set<Class<?>> classes)
Filters the given list of packages and returns an array of only package names. This implementation will check the given list of packages, and if it contains a class name, that class will be loaded directly and added to the list of classes. This optimizes the type converter to avoid excessive file scanning for .class files.- Parameters:
resolver
- the class resolverpackageNames
- the package namesclasses
- to add loaded @Converter classes- Returns:
- the filtered package names
-
findPackageNames
protected String[] findPackageNames() throws IOException
Finds the names of the packages to search for on the classpath looking for text files on the classpath at theMETA_INF_SERVICES
location.- Returns:
- a collection of packages to search for
- Throws:
IOException
- is thrown for IO related errors
-
findPackages
protected void findPackages(Set<String> packages, ClassLoader classLoader) throws IOException
- Throws:
IOException
-
loadConverterMethods
protected void loadConverterMethods(org.apache.camel.spi.TypeConverterRegistry registry, Class<?> type)
Loads all of the converter methods for the given type
-
acceptClass
protected boolean acceptClass(Class<?> clazz)
-
registerTypeConverter
protected void registerTypeConverter(org.apache.camel.spi.TypeConverterRegistry registry, Method method, Class<?> toType, Class<?> fromType, org.apache.camel.TypeConverter typeConverter)
-
isValidConverterMethod
protected boolean isValidConverterMethod(Method method)
-
registerFallbackTypeConverter
protected void registerFallbackTypeConverter(org.apache.camel.spi.TypeConverterRegistry registry, org.apache.camel.TypeConverter typeConverter, Method method)
-
isValidFallbackConverterMethod
protected boolean isValidFallbackConverterMethod(Method method)
-
-