ce4c98c4379a3b64112014fc9f8cc02a33cda029
[facebook-utils] / src / main / java / de / juplo / facebook / GraphApiErrorHandler.java
1 package de.juplo.facebook;
2
3 import java.io.IOException;
4 import java.util.List;
5 import org.springframework.http.client.ClientHttpResponse;
6 import org.springframework.http.converter.HttpMessageConverter;
7 import org.springframework.http.converter.HttpMessageNotReadableException;
8 import org.springframework.security.oauth2.client.http.OAuth2ErrorHandler;
9 import org.springframework.web.client.HttpMessageConverterExtractor;
10 import org.springframework.web.client.RestClientException;
11 import org.springframework.web.client.RestTemplate;
12
13
14
15 /**
16  *
17  * @author kai
18  */
19 public class GraphApiErrorHandler extends OAuth2ErrorHandler
20 {
21   private final OAuth2ErrorHandler errorHandler;
22   private List<HttpMessageConverter<?>> messageConverters =
23       new RestTemplate().getMessageConverters();
24
25
26   public GraphApiErrorHandler(OAuth2ErrorHandler errorHandler)
27   {
28     super(null);
29     this.errorHandler = errorHandler;
30   }
31
32
33         /**
34          * @param messageConverters the messageConverters to set
35          */
36   @Override
37   public void setMessageConverters(
38       List<HttpMessageConverter<?>> messageConverters
39       )
40   {
41     this.messageConverters = messageConverters;
42     errorHandler.setMessageConverters(messageConverters);
43   }
44
45   @Override
46   public boolean hasError(ClientHttpResponse response) throws IOException
47   {
48     return errorHandler.hasError(response);
49   }
50
51   @Override
52   public void handleError(ClientHttpResponse response) throws IOException
53   {
54     HttpMessageConverterExtractor<GraphApiException> extractor =
55         new HttpMessageConverterExtractor<>(
56             GraphApiException.class,
57             messageConverters
58             );
59
60     try
61     {
62       GraphApiException body = extractor.extractData(response);
63       if (body != null)
64       {
65         // If we can get an OAuth2Exception already from the body, it is likely
66         // to have more information than the header does, so just re-throw it
67         // here.
68         body.setHttpErrorCode(response.getRawStatusCode());
69         throw body;
70       }
71     }
72     catch (RestClientException|HttpMessageNotReadableException e)
73     {
74       // ignore
75     }
76
77     errorHandler.handleError(response);
78   }
79 }