--- /dev/null
+package de.juplo.facebook.errors;
+
+
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+
+
+
+
+/**
+ * Exception that is thrown, if anything went wrong while parsing the
+ * error-response.
+ *
+ * @author Kai Moritz
+ */
+public class ErrorResponseParsingErrorException extends GraphApiException
+{
+ public final Exception cause;
+
+
+ protected ErrorResponseParsingErrorException(
+ HttpStatus status,
+ HttpHeaders headers,
+ Exception cause
+ )
+ {
+ super(status, headers, new FacebookErrorMessage(cause));
+ this.cause = cause;
+ }
+
+
+
+ @Override
+ public String toString()
+ {
+ return "Error during parsing the error-response: " + cause.toString();
+ }
+}
@JsonProperty("is_transient")
@JsonInclude(NON_EMPTY)
Boolean isTransient;
+
+
+ FacebookErrorMessage() {}
+
+ FacebookErrorMessage(Exception e)
+ {
+ message = e.toString();
+ }
}
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")));
+ if (!error.getClass().equals(ErrorResponseParsingErrorException.class))
{
- error = GraphApiException.create(response.getStatusCode(), response.getHeaders(), body);
- if (LOG.isInfoEnabled())
- LOG.info("error-response: {}", new String(body, Charset.forName("UTF-8")));
+ throw error;
}
- catch (Exception e)
+ else
{
// 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()
parent.handleError(buffered);
return;
}
-
- throw error;
}
}
package de.juplo.facebook.errors;
-import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.slf4j.Logger;
HttpHeaders headers,
InputStream in
)
- throws
- IOException,
- JsonParseException,
- JsonMappingException
{
- return create(status, headers, OBJECT_MAPPER.readValue(in, FacebookErrorMessage.class));
+ try
+ {
+ return create(status, headers, OBJECT_MAPPER.readValue(in, FacebookErrorMessage.class));
+ }
+ catch (IOException | RuntimeException e)
+ {
+ return new ErrorResponseParsingErrorException(status, headers, e);
+ }
}
public static GraphApiException create(
HttpHeaders headers,
byte[] message
)
- throws
- IOException,
- JsonParseException,
- JsonMappingException
{
- return create(status, headers, OBJECT_MAPPER.readValue(message, FacebookErrorMessage.class));
+ return create(status, headers, new ByteArrayInputStream(message));
}
public static GraphApiException create(