X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Ffacebook%2FGraphApiErrorHandler.java;fp=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Ffacebook%2FGraphApiErrorHandler.java;h=ce4c98c4379a3b64112014fc9f8cc02a33cda029;hb=4fda4061042fd74bd2a5ad30b92d02aa605e95a9;hp=0000000000000000000000000000000000000000;hpb=0c062b1a23ebe1556a6088b2c3597fd96eac72ce;p=facebook-utils diff --git a/src/main/java/de/juplo/facebook/GraphApiErrorHandler.java b/src/main/java/de/juplo/facebook/GraphApiErrorHandler.java new file mode 100644 index 0000000..ce4c98c --- /dev/null +++ b/src/main/java/de/juplo/facebook/GraphApiErrorHandler.java @@ -0,0 +1,79 @@ +package de.juplo.facebook; + +import java.io.IOException; +import java.util.List; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.security.oauth2.client.http.OAuth2ErrorHandler; +import org.springframework.web.client.HttpMessageConverterExtractor; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; + + + +/** + * + * @author kai + */ +public class GraphApiErrorHandler extends OAuth2ErrorHandler +{ + private final OAuth2ErrorHandler errorHandler; + private List> messageConverters = + new RestTemplate().getMessageConverters(); + + + public GraphApiErrorHandler(OAuth2ErrorHandler errorHandler) + { + super(null); + this.errorHandler = errorHandler; + } + + + /** + * @param messageConverters the messageConverters to set + */ + @Override + public void setMessageConverters( + List> messageConverters + ) + { + this.messageConverters = messageConverters; + errorHandler.setMessageConverters(messageConverters); + } + + @Override + public boolean hasError(ClientHttpResponse response) throws IOException + { + return errorHandler.hasError(response); + } + + @Override + public void handleError(ClientHttpResponse response) throws IOException + { + HttpMessageConverterExtractor extractor = + new HttpMessageConverterExtractor<>( + GraphApiException.class, + messageConverters + ); + + try + { + GraphApiException body = extractor.extractData(response); + if (body != null) + { + // If we can get an OAuth2Exception already from the body, it is likely + // to have more information than the header does, so just re-throw it + // here. + body.setHttpErrorCode(response.getRawStatusCode()); + throw body; + } + } + catch (RestClientException|HttpMessageNotReadableException e) + { + // ignore + } + + errorHandler.handleError(response); + } +}