1 package de.juplo.facebook.errors;
4 import org.slf4j.Logger;
5 import org.slf4j.LoggerFactory;
6 import org.springframework.beans.BeansException;
7 import org.springframework.beans.factory.BeanCreationException;
8 import org.springframework.beans.factory.config.BeanDefinition;
9 import org.springframework.beans.factory.config.BeanPostProcessor;
10 import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
11 import org.springframework.beans.factory.support.BeanDefinitionRegistry;
12 import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
13 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
14 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
15 import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
16 import org.springframework.context.annotation.Bean;
17 import org.springframework.context.annotation.Configuration;
18 import org.springframework.web.client.ResponseErrorHandler;
19 import org.springframework.web.client.RestTemplate;
24 * Automatic configuration for Srping-Social-Facebook
29 @ConditionalOnClass(value = FacebookTemplate.class)
31 WebMvcAutoConfiguration.class,
32 FacebookAutoConfiguration.class
34 public class FacebookErrorsSpringSocialAutoConfiguration
36 private static final Logger LOG =
37 LoggerFactory.getLogger(FacebookErrorsSpringSocialAutoConfiguration.class);
41 static public BeanPostProcessor errorHandlerInjectorSpringSocial()
43 LOG.info("Configuring GraphApiErrorHandler for handling error-messages");
44 return new BeanPostProcessor()
47 public Object postProcessBeforeInitialization(
58 public Object postProcessAfterInitialization(
65 if (bean instanceof Facebook)
69 Facebook facebook = (Facebook) bean;
70 RestTemplate template = (RestTemplate) facebook.restOperations();
71 ResponseErrorHandler handler = template.getErrorHandler();
72 template.setErrorHandler(new GraphApiErrorHandler(handler));
73 // Be sure, that the potential exception is triggered before!
74 LOG.debug("Injecting GraphApiErrorHandler in {}", facebook);
76 catch (BeanCreationException e)
79 * This exception is called, if the BeanPostProcessor is called
80 * with a scoped bean, while the according scope is not
82 * This happens during initialization and can safely be ignored,
83 * because we only have to inject the handler for beans, that are
95 static public BeanDefinitionRegistryPostProcessor test()
97 return new BeanDefinitionRegistryPostProcessor()
100 public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException
102 for(String name : registry.getBeanDefinitionNames())
104 BeanDefinition bean = registry.getBeanDefinition(name);
105 LOG.info("{}: {} - {} / {}", name, bean.getBeanClassName(), bean.getFactoryBeanName(), bean);
110 public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException
112 for(String name : factory.getBeanNamesForType(Facebook.class))
114 BeanDefinition bean = factory.getBeanDefinition(name);
115 LOG.info("{}{}", name, factory.isFactoryBean(name) ? " (factory)" : "");