X-Git-Url: https://juplo.de/gitweb/?p=facebook-errors;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Ffacebook%2Fexceptions%2FGraphApiExceptionJackson1Deserializer.java;fp=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Ffacebook%2Fexceptions%2FGraphApiExceptionJackson1Deserializer.java;h=165e7ced9acaae0cbbb1f779640466e900ff0cae;hp=0000000000000000000000000000000000000000;hb=bc0989ddb7bb05e2d95ae4aad4438b4d4806f9dc;hpb=80f6b663c648f011425b521e7c4185128a00149d diff --git a/src/main/java/de/juplo/facebook/exceptions/GraphApiExceptionJackson1Deserializer.java b/src/main/java/de/juplo/facebook/exceptions/GraphApiExceptionJackson1Deserializer.java new file mode 100644 index 0000000..165e7ce --- /dev/null +++ b/src/main/java/de/juplo/facebook/exceptions/GraphApiExceptionJackson1Deserializer.java @@ -0,0 +1,94 @@ +package de.juplo.facebook.exceptions; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import org.codehaus.jackson.JsonParser; +import org.codehaus.jackson.JsonProcessingException; +import org.codehaus.jackson.JsonToken; +import org.codehaus.jackson.map.DeserializationContext; +import org.codehaus.jackson.map.JsonDeserializer; + +/** + * @author Kai Moritz + */ +public class GraphApiExceptionJackson1Deserializer + extends + JsonDeserializer +{ + + @Override + public GraphApiException deserialize( + JsonParser jp, + DeserializationContext ctxt + ) + throws + IOException, + JsonProcessingException + { + JsonToken t = jp.getCurrentToken(); + if (t != JsonToken.START_OBJECT) + return null; + + t = jp.nextToken(); + if (t != JsonToken.FIELD_NAME) + return null; + + if (!jp.getCurrentName().equals("error")) + return null; + + t = jp.nextToken(); + if (t != JsonToken.START_OBJECT) + return null; + + String message = null, type = null; + Integer code = null; + + t = jp.nextToken(); + Map map = new HashMap<>(); + for (; t == JsonToken.FIELD_NAME; t = jp.nextToken()) + { + // Must point to field name + String fieldName = jp.getCurrentName(); + // And then the value... + t = jp.nextToken(); + + switch (t) + { + case VALUE_STRING: + switch(fieldName.toLowerCase()) + { + case "message": + message = jp.getText(); + break; + case "type": + type = jp.getText(); + break; + default: + return null; + } + break; + case VALUE_NUMBER_INT: + if (!fieldName.equalsIgnoreCase("code")) + return null; + code = jp.getValueAsInt(); + break; + default: + return null; + } + } + + if (message == null || type == null || code == null) + return null; + + switch (code) + { + case 1: return new UnknownErrorException(); + case 2: return new UnexpectedErrorException(); + case 21: return new PageMigratedException(message); + case 100: return new UnsupportedGetRequestException(); + case 613: return new RateExceededException(); + default: return new GraphApiException(message, type, code); + } + } +}