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.social.FacebookAutoConfiguration;
16 import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration;
17 import org.springframework.context.annotation.Bean;
18 import org.springframework.context.annotation.Configuration;
19 import org.springframework.social.facebook.api.Facebook;
20 import org.springframework.social.facebook.api.impl.FacebookTemplate;
21 import org.springframework.web.client.ResponseErrorHandler;
22 import org.springframework.web.client.RestTemplate;
27 * Automatic configuration for Srping-Social-Facebook
32 @ConditionalOnClass(value = FacebookTemplate.class)
34 WebMvcAutoConfiguration.class,
35 FacebookAutoConfiguration.class
37 public class FacebookErrorsSpringSocialAutoConfiguration
39 private static final Logger LOG =
40 LoggerFactory.getLogger(FacebookErrorsSpringSocialAutoConfiguration.class);
44 static public BeanPostProcessor errorHandlerInjectorSpringSocial()
46 LOG.info("Configuring GraphApiErrorHandler for handling error-messages");
47 return new BeanPostProcessor()
50 public Object postProcessBeforeInitialization(
61 public Object postProcessAfterInitialization(
68 if (bean instanceof Facebook)
72 Facebook facebook = (Facebook) bean;
73 RestTemplate template = (RestTemplate) facebook.restOperations();
74 ResponseErrorHandler handler = template.getErrorHandler();
75 template.setErrorHandler(new GraphApiErrorHandler(handler));
76 // Be sure, that the potential exception is triggered before!
77 LOG.debug("Injecting GraphApiErrorHandler in {}", facebook);
79 catch (BeanCreationException e)
82 * This exception is called, if the BeanPostProcessor is called
83 * with a scoped bean, while the according scope is not
85 * This happens during initialization and can safely be ignored,
86 * because we only have to inject the handler for beans, that are
98 static public BeanDefinitionRegistryPostProcessor test()
100 return new BeanDefinitionRegistryPostProcessor()
103 public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException
105 for(String name : registry.getBeanDefinitionNames())
107 BeanDefinition bean = registry.getBeanDefinition(name);
108 LOG.info("{}: {} - {} / {}", name, bean.getBeanClassName(), bean.getFactoryBeanName(), bean);
113 public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException
115 for(String name : factory.getBeanNamesForType(Facebook.class))
117 BeanDefinition bean = factory.getBeanDefinition(name);
118 LOG.info("{}{}", name, factory.isFactoryBean(name) ? " (factory)" : "");