<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
- <version>1.3.7.RELEASE</version>
+ <version>2.2.0.RELEASE</version>
</parent>
<url>http://juplo.de/facebook-errors</url>
- <prerequisites>
- <maven>2.0.6</maven>
- </prerequisites>
-
<licenses>
<license>
<!-- Spring-Boot-Autoconfiguration -->
<dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-autoconfigure</artifactId>
- <optional>true</optional>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>spring-security-oauth2-client</artifactId>
</dependency>
<dependency>
- <groupId>org.springframework.social</groupId>
- <artifactId>spring-social-facebook</artifactId>
- <optional>true</optional>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
- <groupId>org.springframework.security.oauth</groupId>
- <artifactId>spring-security-oauth2</artifactId>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-autoconfigure</artifactId>
<optional>true</optional>
</dependency>
+++ /dev/null
-package de.juplo.facebook.errors;
-
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.config.BeanPostProcessor;
-import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.security.oauth2.OAuth2AutoConfiguration;
-import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.oauth2.client.OAuth2RestTemplate;
-import org.springframework.security.oauth2.client.http.OAuth2ErrorHandler;
-
-
-/**
- * Automatic configuration for Srping-Security-OAuth2
- *
- * @author Kai Moritz
- */
-@Configuration
-@ConditionalOnClass(value = OAuth2RestTemplate.class)
-@AutoConfigureAfter({
- WebMvcAutoConfiguration.class,
- OAuth2AutoConfiguration.class
- })
-public class FacebookErrorsOAuth2AutoConfiguration
-{
- private static final Logger LOG =
- LoggerFactory.getLogger(FacebookErrorsOAuth2AutoConfiguration.class);
-
- @Bean
- static public BeanPostProcessor errorHandlerInjectorOAuth2()
- {
- LOG.info("Configuring OAuth2GraphApiErrorHandler for handling error-messages");
-
- return new BeanPostProcessor()
- {
- @Override
- public Object postProcessBeforeInitialization(
- Object bean,
- String beanName
- )
- throws
- BeansException
- {
- if (bean instanceof OAuth2RestTemplate)
- {
- LOG.debug("Injecting OAuth2GraphApiErrorHandler in {}", bean);
- OAuth2RestTemplate template = (OAuth2RestTemplate) bean;
- template.setErrorHandler(
- new OAuth2GraphApiErrorHandler(
- (OAuth2ErrorHandler)template.getErrorHandler()
- )
- );
- }
-
- return bean;
- }
-
- @Override
- public Object postProcessAfterInitialization(
- Object bean,
- String beanName
- )
- throws
- BeansException
- {
- return bean;
- }
- };
- }
-}
+++ /dev/null
-package de.juplo.facebook.errors;
-
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.BeanCreationException;
-import org.springframework.beans.factory.config.BeanDefinition;
-import org.springframework.beans.factory.config.BeanPostProcessor;
-import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-import org.springframework.beans.factory.support.BeanDefinitionRegistry;
-import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
-import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.social.FacebookAutoConfiguration;
-import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.social.facebook.api.Facebook;
-import org.springframework.social.facebook.api.impl.FacebookTemplate;
-import org.springframework.web.client.ResponseErrorHandler;
-import org.springframework.web.client.RestTemplate;
-
-
-
-/**
- * Automatic configuration for Srping-Social-Facebook
- *
- * @author Kai Moritz
- */
-@Configuration
-@ConditionalOnClass(value = FacebookTemplate.class)
-@AutoConfigureAfter({
- WebMvcAutoConfiguration.class,
- FacebookAutoConfiguration.class
- })
-public class FacebookErrorsSpringSocialAutoConfiguration
-{
- private static final Logger LOG =
- LoggerFactory.getLogger(FacebookErrorsSpringSocialAutoConfiguration.class);
-
-
- @Bean
- static public BeanPostProcessor errorHandlerInjectorSpringSocial()
- {
- LOG.info("Configuring GraphApiErrorHandler for handling error-messages");
- return new BeanPostProcessor()
- {
- @Override
- public Object postProcessBeforeInitialization(
- Object bean,
- String beanName
- )
- throws
- BeansException
- {
- return bean;
- }
-
- @Override
- public Object postProcessAfterInitialization(
- Object bean,
- String beanName
- )
- throws
- BeansException
- {
- if (bean instanceof Facebook)
- {
- try
- {
- Facebook facebook = (Facebook) bean;
- RestTemplate template = (RestTemplate) facebook.restOperations();
- ResponseErrorHandler handler = template.getErrorHandler();
- template.setErrorHandler(new GraphApiErrorHandler(handler));
- // Be sure, that the potential exception is triggered before!
- LOG.debug("Injecting GraphApiErrorHandler in {}", facebook);
- }
- catch (BeanCreationException e)
- {
- /**
- * This exception is called, if the BeanPostProcessor is called
- * with a scoped bean, while the according scope is not
- * accessible.
- * This happens during initialization and can safely be ignored,
- * because we only have to inject the handler for beans, that are
- * actually usable.
- */
- }
- }
-
- return bean;
- }
- };
- }
-
- @Bean
- static public BeanDefinitionRegistryPostProcessor test()
- {
- return new BeanDefinitionRegistryPostProcessor()
- {
- @Override
- public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException
- {
- for(String name : registry.getBeanDefinitionNames())
- {
- BeanDefinition bean = registry.getBeanDefinition(name);
- LOG.info("{}: {} - {} / {}", name, bean.getBeanClassName(), bean.getFactoryBeanName(), bean);
- }
- }
-
- @Override
- public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException
- {
- for(String name : factory.getBeanNamesForType(Facebook.class))
- {
- BeanDefinition bean = factory.getBeanDefinition(name);
- LOG.info("{}{}", name, factory.isFactoryBean(name) ? " (factory)" : "");
- }
- }
- };
- }
-}
\ No newline at end of file
+++ /dev/null
-package de.juplo.facebook.errors;
-
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.Charset;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.client.ClientHttpResponse;
-import org.springframework.util.FileCopyUtils;
-import org.springframework.web.client.ResponseErrorHandler;
-
-
-
-/**
- * Error-Handler for error-messages from the Facebook Graph-API.
- * <p>
- * This error-handler handels responses withe the HTTP-status code
- * {@code 400 BAD REQUEST}. It tries to extract and parse the error-message
- * from the HTTP-body. Successfully extracted and parsed messages are mapped
- * to a hierarchy of exceptions, that reflects the hierarchy of the error-
- * codes and -types.
- * <p>
- * If the HTTP-status-code of the response is not {@code 400 BAD REQUEST} or
- * the HTTP-body could not be extracted or parsed, this error-handler
- * delegates the handling to its parent.
- *
- * @see <a href="https://developers.facebook.com/docs/graph-api/using-graph-api/v2.5#errors">Graph-API Documentation</a>
- * @see <a href="http://fbdevwiki.com/wiki/Error_codes">Inofficial Wiki For Facebook-Developers</a>
- * @author Kai Moritz
- */
-public class GraphApiErrorHandler implements ResponseErrorHandler
-{
- private final static Logger LOG =
- LoggerFactory.getLogger(GraphApiErrorHandler.class);
-
- private final ResponseErrorHandler parent;
-
-
- public GraphApiErrorHandler(ResponseErrorHandler errorHandler)
- {
- this.parent = errorHandler;
- }
-
-
- @Override
- public boolean hasError(ClientHttpResponse response) throws IOException
- {
- return
- HttpStatus.Series.CLIENT_ERROR.equals(response.getStatusCode().series())
- || this.parent.hasError(response);
- }
-
- @Override
- public void handleError(final ClientHttpResponse response) throws IOException
- {
- GraphApiErrorHandler.handleError(parent, response);
- }
-
- public static void handleError(
- final ResponseErrorHandler parent,
- final ClientHttpResponse response
- )
- throws
- IOException
- {
- if (response.getBody() == null)
- {
- // There is no body to interpret in the HTTP-message
- LOG.warn("Could not convert the response into an exception, because there is no message-body.");
- parent.handleError(response);
- return;
- }
-
- final byte[] body = FileCopyUtils.copyToByteArray(response.getBody());
- GraphApiException error;
-
- try
- {
- error = GraphApiException.create(response.getStatusCode(), response.getHeaders(), body);
- if (LOG.isInfoEnabled())
- LOG.info("error-response: {}", new String(body, Charset.forName("UTF-8")));
- }
- catch (Exception e)
- {
- // The body of the HTTP-message could not be parsed.
- // Let the parent error-handler try to handle the response.
-
- LOG.warn(
- "Could not convert the response into an exception, " +
- "because the body is unparsable: error={}, body={}",
- e.toString(),
- new String(body, Charset.forName("UTF-8"))
- );
-
- // To do so, we have to wrap the original response to fill in
- // the buffered body, if needed
- ClientHttpResponse buffered = new ClientHttpResponse()
- {
- @Override
- public HttpStatus getStatusCode() throws IOException
- {
- return response.getStatusCode();
- }
-
- @Override
- public synchronized InputStream getBody() throws IOException
- {
- return new ByteArrayInputStream(body);
- }
-
- @Override
- public HttpHeaders getHeaders()
- {
- return response.getHeaders();
- }
-
- @Override
- public String getStatusText() throws IOException
- {
- return response.getStatusText();
- }
-
- @Override
- public void close()
- {
- response.close();
- }
-
- @Override
- public int getRawStatusCode() throws IOException
- {
- return response.getRawStatusCode();
- }
- };
-
- parent.handleError(buffered);
- return;
- }
-
- throw error;
- }
-}
--- /dev/null
+package de.juplo.facebook.errors;
+
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.client.ClientHttpResponse;
+import org.springframework.util.FileCopyUtils;
+import org.springframework.web.client.DefaultResponseErrorHandler;
+import org.springframework.web.client.ResponseErrorHandler;
+
+
+
+/**
+ * Error-Handler for error-messages from the Facebook Graph-API.
+ * <p>
+ * This error-handler handels responses withe the HTTP-status code
+ * {@code 400 BAD REQUEST}. It tries to extract and parse the error-message
+ * from the HTTP-body. Successfully extracted and parsed messages are mapped
+ * to a hierarchy of exceptions, that reflects the hierarchy of the error-
+ * codes and -types.
+ * <p>
+ * If the HTTP-status-code of the response is not {@code 400 BAD REQUEST} or
+ * the HTTP-body could not be extracted or parsed, this error-handler
+ * delegates the handling to its parent.
+ *
+ * @see <a href="https://developers.facebook.com/docs/graph-api/using-graph-api/v2.5#errors">Graph-API Documentation</a>
+ * @see <a href="http://fbdevwiki.com/wiki/Error_codes">Inofficial Wiki For Facebook-Developers</a>
+ * @author Kai Moritz
+ */
+public class GraphApiErrorResponseErrorHandler implements ResponseErrorHandler
+{
+ private final static Logger LOG =
+ LoggerFactory.getLogger(GraphApiErrorResponseErrorHandler.class);
+
+ private final ResponseErrorHandler parent;
+
+
+ public GraphApiErrorResponseErrorHandler()
+ {
+ this(null);
+ }
+
+ public GraphApiErrorResponseErrorHandler(ResponseErrorHandler errorHandler)
+ {
+ this.parent =
+ errorHandler == null
+ ? new DefaultResponseErrorHandler()
+ : errorHandler;
+ }
+
+
+ @Override
+ public boolean hasError(ClientHttpResponse response) throws IOException
+ {
+ return
+ HttpStatus.Series.CLIENT_ERROR.equals(response.getStatusCode().series())
+ || this.parent.hasError(response);
+ }
+
+ @Override
+ public void handleError(final ClientHttpResponse response) throws IOException
+ {
+ GraphApiErrorResponseErrorHandler.handleError(parent, response);
+ }
+
+ public static void handleError(
+ final ResponseErrorHandler parent,
+ final ClientHttpResponse response
+ )
+ throws
+ IOException
+ {
+ if (response.getBody() == null)
+ {
+ // There is no body to interpret in the HTTP-message
+ LOG.warn("Could not convert the response into an exception, because there is no message-body.");
+ parent.handleError(response);
+ return;
+ }
+
+ final byte[] body = FileCopyUtils.copyToByteArray(response.getBody());
+ GraphApiException error;
+
+ try
+ {
+ error = GraphApiException.create(response.getStatusCode(), response.getHeaders(), body);
+ if (LOG.isInfoEnabled())
+ LOG.info("error-response: {}", new String(body, Charset.forName("UTF-8")));
+ }
+ catch (Exception e)
+ {
+ // The body of the HTTP-message could not be parsed.
+ // Let the parent error-handler try to handle the response.
+
+ LOG.warn(
+ "Could not convert the response into an exception, " +
+ "because the body is unparsable: error={}, body={}",
+ e.toString(),
+ new String(body, Charset.forName("UTF-8"))
+ );
+
+ // To do so, we have to wrap the original response to fill in
+ // the buffered body, if needed
+ ClientHttpResponse buffered = new ClientHttpResponse()
+ {
+ @Override
+ public HttpStatus getStatusCode() throws IOException
+ {
+ return response.getStatusCode();
+ }
+
+ @Override
+ public synchronized InputStream getBody() throws IOException
+ {
+ return new ByteArrayInputStream(body);
+ }
+
+ @Override
+ public HttpHeaders getHeaders()
+ {
+ return response.getHeaders();
+ }
+
+ @Override
+ public String getStatusText() throws IOException
+ {
+ return response.getStatusText();
+ }
+
+ @Override
+ public void close()
+ {
+ response.close();
+ }
+
+ @Override
+ public int getRawStatusCode() throws IOException
+ {
+ return response.getRawStatusCode();
+ }
+ };
+
+ parent.handleError(buffered);
+ return;
+ }
+
+ throw error;
+ }
+}
+++ /dev/null
-package de.juplo.facebook.errors;
-
-
-import java.io.IOException;
-import java.util.List;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.client.ClientHttpResponse;
-import org.springframework.http.converter.HttpMessageConverter;
-import org.springframework.security.oauth2.client.http.OAuth2ErrorHandler;
-
-
-
-/**
- *
- * @author Kai Moritz
- */
-public class OAuth2GraphApiErrorHandler extends OAuth2ErrorHandler
-{
- private final OAuth2ErrorHandler parent;
-
-
- public OAuth2GraphApiErrorHandler(OAuth2ErrorHandler handler)
- {
- super(null);
- parent = handler;
- }
-
-
- @Override
- public boolean hasError(ClientHttpResponse response) throws IOException
- {
- return
- HttpStatus.Series.CLIENT_ERROR.equals(response.getStatusCode().series())
- || parent.hasError(response);
- }
-
- @Override
- public void handleError(ClientHttpResponse response) throws IOException
- {
- GraphApiErrorHandler.handleError(parent, response);
- }
-
- @Override
- public void setMessageConverters(List<HttpMessageConverter<?>> converters)
- {
- parent.setMessageConverters(converters);
- }
-}
+++ /dev/null
-org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-de.juplo.facebook.errors.FacebookErrorsSpringSocialAutoConfiguration,\
-de.juplo.facebook.errors.FacebookErrorsOAuth2AutoConfiguration
+++ /dev/null
-package de.juplo.facebook.errors;
-
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import org.junit.After;
-import org.junit.Test;
-import org.springframework.context.annotation.Configuration;
-import static org.junit.Assert.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer;
-import org.springframework.boot.autoconfigure.security.oauth2.OAuth2AutoConfiguration;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.annotation.AnnotationConfigApplicationContext;
-import org.springframework.mock.env.MockEnvironment;
-import org.springframework.security.oauth2.client.OAuth2RestTemplate;
-import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
-
-
-
-public class FacebookErrorsOAuth2AutoConfigurationTest
-{
- private final Logger LOG =
- LoggerFactory.getLogger(FacebookErrorsOAuth2AutoConfigurationTest.class);
-
-
- private ConfigurableApplicationContext context;
-
-
- @After
- public void tearDown()
- {
- if (this.context != null)
- this.context.close();
- }
-
-
- @Test
- public void defaultNonWebConfiguration()
- {
- LOG.info("<-- Start Of New Test-Case!");
- Map<String, String> properties = new HashMap<>();
- properties.put("security.oauth2.client.client-id", "CLIENT_ID");
- context = loadNonWebApplicationContext(EmptyConfiguration.class, properties);
- OAuth2RestTemplate template = context.getBean(OAuth2RestTemplate.class);
- assertEquals(OAuth2GraphApiErrorHandler.class, template.getErrorHandler().getClass());
- }
-
- @Test
- public void defaultWebConfiguration()
- {
- LOG.info("<-- Start Of New Test-Case!");
- Map<String, String> properties = new HashMap<>();
- properties.put("security.oauth2.client.client-id", "CLIENT_ID");
- context = loadWebApplicationContext(EmptyConfiguration.class, properties);
- OAuth2RestTemplate template = context.getBean(OAuth2RestTemplate.class);
- assertEquals(OAuth2GraphApiErrorHandler.class, template.getErrorHandler().getClass());
- }
-
-
- @Configuration
- static class EmptyConfiguration
- {
- }
-
-
- private ConfigurableApplicationContext loadNonWebApplicationContext(
- Class<?> config,
- Map<String, String> properties
- )
- {
- AnnotationConfigApplicationContext ctx =
- new AnnotationConfigApplicationContext();
- if (properties != null)
- {
- MockEnvironment env = new MockEnvironment();
- for (Entry<String, String> entry : properties.entrySet())
- env.withProperty(entry.getKey(), entry.getValue());
- ctx.setEnvironment(env);
- }
- ctx.register(FacebookErrorsOAuth2AutoConfiguration.class);
- ctx.register(OAuth2AutoConfiguration.class);
- ctx.register(config);
- AutoConfigurationReportLoggingInitializer report =
- new AutoConfigurationReportLoggingInitializer();
- report.initialize(ctx);
- ctx.refresh();
- return ctx;
- }
-
- private ConfigurableApplicationContext loadWebApplicationContext(
- Class<?> config,
- Map<String, String> properties
- )
- {
- AnnotationConfigWebApplicationContext ctx =
- new AnnotationConfigWebApplicationContext();
- if (properties != null)
- {
- MockEnvironment env = new MockEnvironment();
- for (Entry<String, String> entry : properties.entrySet())
- env.withProperty(entry.getKey(), entry.getValue());
- ctx.setEnvironment(env);
- }
- ctx.register(FacebookErrorsOAuth2AutoConfiguration.class);
- ctx.register(OAuth2AutoConfiguration.class);
- ctx.register(config);
- AutoConfigurationReportLoggingInitializer report =
- new AutoConfigurationReportLoggingInitializer();
- report.initialize(ctx);
- ctx.refresh();
- return ctx;
- }
-}
+++ /dev/null
-package de.juplo.facebook.errors;
-
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import org.junit.After;
-import org.junit.Test;
-import org.springframework.context.annotation.Configuration;
-import static org.junit.Assert.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer;
-import org.springframework.boot.autoconfigure.social.FacebookAutoConfiguration;
-import org.springframework.boot.autoconfigure.social.SocialWebAutoConfiguration;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Scope;
-import org.springframework.context.annotation.ScopedProxyMode;
-import org.springframework.mock.env.MockEnvironment;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.social.connect.ConnectionRepository;
-import org.springframework.social.facebook.api.Facebook;
-import org.springframework.social.facebook.api.impl.FacebookTemplate;
-import org.springframework.web.client.RestTemplate;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
-
-
-
-public class FacebookErrorsSpringSocialAutoConfigurationTest
-{
- private final Logger LOG =
- LoggerFactory.getLogger(FacebookErrorsSpringSocialAutoConfigurationTest.class);
-
-
- private ConfigurableApplicationContext context;
-
-
- @After
- public void tearDown()
- {
- if (this.context != null)
- this.context.close();
- }
-
-
- @Test
- public void defaultConfiguration()
- {
- LOG.info("<-- Start Of New Test-Case!");
- Map<String, String> properties = new HashMap<>();
- properties.put("spring.social.facebook.app-id", "APP_ID");
- properties.put("spring.social.facebook.app-secret", "APP_SECRET");
- context = loadWebApplicationContext(EmptyConfiguration.class, properties);
- Facebook facebook = context.getBean("facebook", Facebook.class);
- RestTemplate template = (RestTemplate) facebook.restOperations();
- assertEquals(GraphApiErrorHandler.class, template.getErrorHandler().getClass());
- }
-
-
- @Configuration
- static class EmptyConfiguration
- {
- /**
- * We have to provide this scoped bean for all our tests.
- * Otherwise, the tests will fail, if we do not set up a complete
- * environment with a connection-repository and a properly mocked request,
- * that holds appropriate information to fetch a connection from that
- * repository.
- * @param repository
- * @return
- */
- @Bean
- @Scope(value = "request", proxyMode = ScopedProxyMode.INTERFACES)
- public Facebook facebook(ConnectionRepository repository)
- {
- return new FacebookTemplate("ACCESS_TOKEN");
- }
- }
-
-
- private ConfigurableApplicationContext loadWebApplicationContext(
- Class<?> config,
- Map<String, String> properties
- )
- {
- AnnotationConfigWebApplicationContext ctx =
- new AnnotationConfigWebApplicationContext();
- if (properties != null)
- {
- MockEnvironment env = new MockEnvironment();
- for (Entry<String, String> entry : properties.entrySet())
- env.withProperty(entry.getKey(), entry.getValue());
- ctx.setEnvironment(env);
- }
- ctx.register(FacebookErrorsSpringSocialAutoConfiguration.class);
- ctx.register(FacebookAutoConfiguration.class);
- ctx.register(SocialWebAutoConfiguration.class);
- ctx.register(config);
- AutoConfigurationReportLoggingInitializer report =
- new AutoConfigurationReportLoggingInitializer();
- report.initialize(ctx);
- MockHttpServletRequest request = new MockHttpServletRequest();
- ServletRequestAttributes attributes = new ServletRequestAttributes(request);
- RequestContextHolder.setRequestAttributes(attributes);
- ctx.refresh();
- return ctx;
- }
-}
clientTemplate = new RestTemplate();
clientTemplate.setRequestFactory(requestFactory);
clientTemplate.setErrorHandler(
- new GraphApiErrorHandler(clientTemplate.getErrorHandler())
+ new GraphApiErrorResponseErrorHandler(clientTemplate.getErrorHandler())
);
}
return method;
}
+ @Override
+ public String getMethodValue()
+ {
+ return method.name();
+ }
+
@Override
public URI getURI()
{