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;
* Error-Handler for error-messages from the Facebook Graph-API.
* <p>
* This error-handler handels responses withe the HTTP-status code
- * {@code 4xx}. It tries to extract and parse the error-message
+ * {@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 4xx} or
+ * 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.
*
*/
public class GraphApiErrorHandler implements ResponseErrorHandler
{
+ private final static Logger LOG =
+ LoggerFactory.getLogger(GraphApiErrorHandler.class);
+
private final ResponseErrorHandler parent;
@Override
public void handleError(final ClientHttpResponse response) throws IOException
{
- if (!HttpStatus.Series.CLIENT_ERROR.equals(response.getStatusCode().series()))
+ if (!HttpStatus.BAD_REQUEST.equals(response.getStatusCode()))
{
- // Let the parent-error-handler handle all errors, that are no client
- // errors (4xx).
+ // 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;
}
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()