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<>(); 059 private final Set<Class<?>> converters = new LinkedHashSet<>(); 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 converters.add(UriTypeConverter.class); 081 } 082 083 @Override 084 public void setClassLoaders(Set<ClassLoader> classLoaders) { 085 // add all the class loaders 086 this.classLoaders.addAll(classLoaders); 087 } 088 089 @Override 090 public Set<ClassLoader> getClassLoaders() { 091 // return a new set to avoid any concurrency issues in other runtimes such as OSGi 092 return Collections.unmodifiableSet(new LinkedHashSet<>(classLoaders)); 093 } 094 095 @Override 096 public void addClassLoader(ClassLoader classLoader) { 097 classLoaders.add(classLoader); 098 } 099 100 @Override 101 public Set<Class<?>> findAnnotated(Class<? extends Annotation> annotation, String... packageNames) { 102 return converters; 103 } 104 105 @Override 106 public Set<Class<?>> findAnnotated(Set<Class<? extends Annotation>> annotations, String... packageNames) { 107 return converters; 108 } 109 110 @Override 111 public Set<Class<?>> findImplementations(Class<?> parent, String... packageNames) { 112 // noop 113 return null; 114 } 115 116 @Override 117 public Set<Class<?>> findByFilter(PackageScanFilter filter, String... packageNames) { 118 // noop 119 return null; 120 } 121 122 @Override 123 public void addFilter(PackageScanFilter filter) { 124 // noop 125 } 126 127 @Override 128 public void removeFilter(PackageScanFilter filter) { 129 // noop 130 } 131}