X-Git-Url: https://juplo.de/gitweb/?p=facebook-utils;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Ffacebook%2Fclient%2FGraphApiErrorHandler.java;fp=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Ffacebook%2Fclient%2FGraphApiErrorHandler.java;h=0000000000000000000000000000000000000000;hp=6b1ab971af2f98a51b663c4dde39154a403ed173;hb=aa08a5cc575e5228c267686ba668cdbb3f361a90;hpb=24361a39e7ec511fd621c0fee59263e70ab0c2c9 diff --git a/src/main/java/de/juplo/facebook/client/GraphApiErrorHandler.java b/src/main/java/de/juplo/facebook/client/GraphApiErrorHandler.java deleted file mode 100644 index 6b1ab97..0000000 --- a/src/main/java/de/juplo/facebook/client/GraphApiErrorHandler.java +++ /dev/null @@ -1,140 +0,0 @@ -package de.juplo.facebook.client; - -import de.juplo.facebook.exceptions.GraphApiException; -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. - *

- * 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. - *

- * 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 Graph-API Documentation - * @see Inofficial Wiki For Facebook-Developers - * @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 - { - if (!HttpStatus.BAD_REQUEST.equals(response.getStatusCode())) - { - // We will only handle 400 BAD REQUEST - LOG.debug("ignoring response with status-code {}.", response.getStatusCode()); - parent.handleError(response); - return; - } - - - 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(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: {}", body); - - // 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; - } -}