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-discoverConverterobjects and methods to pre-load theTypeConverterRegistryof converters on startup. This implementation supports scanning for type converters in JAR files. TheMETA_INF_SERVICEScontains a list of packages or FQN class names forConverterclasses. The FQN class names is loaded first and directly by the class loader. ThePackageScanClassResolveris being used to scan packages forConverterclasses and this procedure is slower than loading theConverterclasses directly by its FQN class name. Therefore its recommended to specify FQN class names in theMETA_INF_SERVICESfile. Likewise the procedure for scanning usingPackageScanClassResolvermay require custom implementations to work in various containers such as JBoss, OSGi, etc.
-
-
Field Summary
Fields Modifier and Type Field Description static StringMETA_INF_SERVICESprotected org.apache.camel.spi.PackageScanClassResolverresolverprotected Set<Class<?>>visitedClassesprotected Set<String>visitedURIs
-
Constructor Summary
Constructors Constructor Description AnnotationTypeConverterLoader(org.apache.camel.spi.PackageScanClassResolver resolver)AnnotationTypeConverterLoader(org.apache.camel.spi.PackageScanClassResolver resolver, String basePackage)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected booleanacceptClass(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_SERVICESlocation.protected voidfindPackages(Set<String> packages, ClassLoader classLoader)protected booleanisValidConverterMethod(Method method)protected booleanisValidFallbackConverterMethod(Method method)voidload(org.apache.camel.spi.TypeConverterRegistry registry)protected voidloadConverterMethods(org.apache.camel.spi.TypeConverterRegistry registry, Class<?> type)Loads all of the converter methods for the given typeprotected voidregisterFallbackTypeConverter(org.apache.camel.spi.TypeConverterRegistry registry, org.apache.camel.TypeConverter typeConverter, Method method)protected voidregisterTypeConverter(org.apache.camel.spi.TypeConverterRegistry registry, Method method, Class<?> toType, Class<?> fromType, org.apache.camel.TypeConverter typeConverter)
-
-
-
Constructor Detail
-
AnnotationTypeConverterLoader
public AnnotationTypeConverterLoader(org.apache.camel.spi.PackageScanClassResolver resolver)
-
AnnotationTypeConverterLoader
public AnnotationTypeConverterLoader(org.apache.camel.spi.PackageScanClassResolver resolver, String basePackage)
-
-
Method Detail
-
load
public void load(org.apache.camel.spi.TypeConverterRegistry registry) throws org.apache.camel.TypeConverterLoaderException- Specified by:
loadin 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_SERVICESlocation.- 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)
-
-