001/** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.camel.impl.converter; 018 019import java.lang.annotation.Annotation; 020import java.util.Collections; 021import java.util.LinkedHashSet; 022import java.util.Set; 023 024import org.apache.camel.component.bean.BeanConverter; 025import org.apache.camel.component.file.GenericFileConverter; 026import org.apache.camel.converter.AttachmentConverter; 027import org.apache.camel.converter.CamelConverter; 028import org.apache.camel.converter.CollectionConverter; 029import org.apache.camel.converter.DateTimeConverter; 030import org.apache.camel.converter.DurationConverter; 031import org.apache.camel.converter.IOConverter; 032import org.apache.camel.converter.NIOConverter; 033import org.apache.camel.converter.ObjectConverter; 034import org.apache.camel.converter.SQLConverter; 035import org.apache.camel.converter.TimePatternConverter; 036import org.apache.camel.converter.jaxp.DomConverter; 037import org.apache.camel.converter.jaxp.StaxConverter; 038import org.apache.camel.converter.jaxp.StreamSourceConverter; 039import org.apache.camel.converter.jaxp.XmlConverter; 040import org.apache.camel.converter.stream.StreamCacheConverter; 041import org.apache.camel.spi.PackageScanClassResolver; 042import org.apache.camel.spi.PackageScanFilter; 043import org.slf4j.Logger; 044import org.slf4j.LoggerFactory; 045 046/** 047 * A {@link org.apache.camel.spi.ClassResolver} which loads type converters 048 * from a hardcoded list of classes. 049 * <p/> 050 * <b>Important:</b> Whenever a new type converter class is added to camel-core 051 * then the class should be added to the list in this class. 052 * 053 * @see CoreTypeConverterLoader 054 */ 055public class CorePackageScanClassResolver implements PackageScanClassResolver { 056 057 protected final Logger log = LoggerFactory.getLogger(getClass()); 058 private final Set<ClassLoader> classLoaders = new LinkedHashSet<ClassLoader>(); 059 private final Set<Class<?>> converters = new LinkedHashSet<Class<?>>(); 060 061 public CorePackageScanClassResolver() { 062 converters.add(ObjectConverter.class); 063 converters.add(CollectionConverter.class); 064 converters.add(DateTimeConverter.class); 065 converters.add(SQLConverter.class); 066 converters.add(IOConverter.class); 067 converters.add(NIOConverter.class); 068 converters.add(StaxConverter.class); 069 converters.add(DomConverter.class); 070 converters.add(StreamSourceConverter.class); 071 converters.add(XmlConverter.class); 072 converters.add(CamelConverter.class); 073 converters.add(StreamCacheConverter.class); 074 converters.add(TimePatternConverter.class); 075 converters.add(FutureTypeConverter.class); 076 converters.add(BeanConverter.class); 077 converters.add(GenericFileConverter.class); 078 converters.add(DurationConverter.class); 079 converters.add(AttachmentConverter.class); 080 } 081 082 @Override 083 public void setClassLoaders(Set<ClassLoader> classLoaders) { 084 // add all the class loaders 085 this.classLoaders.addAll(classLoaders); 086 } 087 088 @Override 089 public Set<ClassLoader> getClassLoaders() { 090 // return a new set to avoid any concurrency issues in other runtimes such as OSGi 091 return Collections.unmodifiableSet(new LinkedHashSet<ClassLoader>(classLoaders)); 092 } 093 094 @Override 095 public void addClassLoader(ClassLoader classLoader) { 096 classLoaders.add(classLoader); 097 } 098 099 @Override 100 public Set<Class<?>> findAnnotated(Class<? extends Annotation> annotation, String... packageNames) { 101 return converters; 102 } 103 104 @Override 105 public Set<Class<?>> findAnnotated(Set<Class<? extends Annotation>> annotations, String... packageNames) { 106 return converters; 107 } 108 109 @Override 110 public Set<Class<?>> findImplementations(Class<?> parent, String... packageNames) { 111 // noop 112 return null; 113 } 114 115 @Override 116 public Set<Class<?>> findByFilter(PackageScanFilter filter, String... packageNames) { 117 // noop 118 return null; 119 } 120 121 @Override 122 public void addFilter(PackageScanFilter filter) { 123 // noop 124 } 125 126 @Override 127 public void removeFilter(PackageScanFilter filter) { 128 // noop 129 } 130}