001 /** 002 * 003 * Licensed to the Apache Software Foundation (ASF) under one or more 004 * contributor license agreements. See the NOTICE file distributed with 005 * this work for additional information regarding copyright ownership. 006 * The ASF licenses this file to You under the Apache License, Version 2.0 007 * (the "License"); you may not use this file except in compliance with 008 * the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 package org.apache.camel.spring.spi; 019 020 import static org.apache.camel.util.ObjectHelper.notNull; 021 022 import org.apache.camel.CamelContext; 023 import org.apache.camel.Component; 024 import org.apache.camel.spi.ComponentResolver; 025 import org.springframework.beans.factory.NoSuchBeanDefinitionException; 026 import org.springframework.context.ApplicationContext; 027 028 /** 029 * An implementation of {@link ComponentResolver} which tries to find a Camel {@link Component} 030 * in the Spring {@link ApplicationContext} first; if its not there it defaults to the auto-discovery mechanism. 031 * 032 * @version $Revision: 530555 $ 033 */ 034 public class SpringComponentResolver implements ComponentResolver { 035 private final ApplicationContext applicationContext; 036 private final ComponentResolver nextResolver; 037 038 public SpringComponentResolver(ApplicationContext applicationContext, ComponentResolver nextResolver) { 039 notNull(applicationContext, "applicationContext"); 040 this.applicationContext = applicationContext; 041 this.nextResolver = nextResolver; 042 } 043 044 public Component resolveComponent(String name, CamelContext context) throws Exception { 045 Object bean = null; 046 try { 047 bean = applicationContext.getBean(name); 048 } 049 catch (NoSuchBeanDefinitionException e) { 050 // ignore its not an error 051 } 052 if (bean != null) { 053 if (bean instanceof Component) { 054 return (Component) bean; 055 } 056 else { 057 throw new IllegalArgumentException("Bean with name: " + name + " in spring context is not a Component: " + bean); 058 } 059 } 060 if (nextResolver == null) { 061 return null; 062 } 063 return nextResolver.resolveComponent(name, context); 064 } 065 }