Siehe:
[facebook-errors] / src / main / java / de / juplo / facebook / exceptions / GraphApiException.java
index 705caa4..a01a9e1 100644 (file)
@@ -5,12 +5,16 @@ import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import com.fasterxml.jackson.annotation.JsonRootName;
 import com.fasterxml.jackson.core.JsonParseException;
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.SerializableString;
+import com.fasterxml.jackson.core.io.CharacterEscapes;
 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.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.ByteBuffer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.security.oauth2.common.exceptions.OAuth2Exception;
@@ -22,6 +26,9 @@ import org.springframework.security.oauth2.common.exceptions.OAuth2Exception;
  */
 public class GraphApiException extends OAuth2Exception
 {
+  public enum Type { OAuthException, GraphMethodException }
+
+
   final static Logger LOG = LoggerFactory.getLogger(GraphApiException.class);
   final static ObjectMapper OBJECT_MAPPER;
 
@@ -34,6 +41,7 @@ public class GraphApiException extends OAuth2Exception
     OBJECT_MAPPER.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
     OBJECT_MAPPER.configure(DeserializationFeature.ACCEPT_FLOAT_AS_INT, false);
     OBJECT_MAPPER.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
+    OBJECT_MAPPER.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);
   }
 
 
@@ -96,9 +104,9 @@ public class GraphApiException extends OAuth2Exception
   }
 
 
-  public String getType()
+  public Type getType()
   {
-    return error.type;
+    return error.type == null ? null : Type.valueOf(error.type);
   }
 
   public Integer getCode()
@@ -167,4 +175,115 @@ public class GraphApiException extends OAuth2Exception
     @JsonProperty("fbtrace_id")
     String traceId;
   }
+
+  public static class CustomCharacterEscapes extends CharacterEscapes
+  {
+    private final int[] _asciiEscapes;
+
+
+    public CustomCharacterEscapes()
+    {
+      _asciiEscapes = standardAsciiEscapesForJSON();
+      _asciiEscapes['/'] = CharacterEscapes.ESCAPE_CUSTOM;
+    }
+
+
+    @Override
+    public int[] getEscapeCodesForAscii()
+    {
+        return _asciiEscapes;
+    }
+
+    @Override
+    public SerializableString getEscapeSequence(int i)
+    {
+      if(i == '/')
+      {
+        return new SerializableString()
+        {
+          @Override
+          public String getValue()
+          {
+            return "\\/";
+          }
+
+          @Override
+          public int charLength()
+          {
+            return 2;
+          }
+
+          @Override
+          public char[] asQuotedChars()
+          {
+            return new char[]{'\\','/'};
+          }
+
+          @Override
+          public byte[] asUnquotedUTF8()
+          {
+            return new byte[]{'\\','/'};
+          }
+
+          @Override
+          public byte[] asQuotedUTF8()
+          {
+            return new byte[]{'\\','/'};
+          }
+
+          @Override
+          public int appendQuotedUTF8(byte[] buffer, int offset)
+          {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+          }
+
+          @Override
+          public int appendQuoted(char[] buffer, int offset)
+          {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+          }
+
+          @Override
+          public int appendUnquotedUTF8(byte[] buffer, int offset)
+          {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+          }
+
+          @Override
+          public int appendUnquoted(char[] buffer, int offset)
+          {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+          }
+
+          @Override
+          public int writeQuotedUTF8(OutputStream out) throws IOException
+          {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+          }
+
+          @Override
+          public int writeUnquotedUTF8(OutputStream out) throws IOException
+          {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+          }
+
+          @Override
+          public int putQuotedUTF8(ByteBuffer buffer) throws IOException
+          {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+          }
+
+          @Override
+          public int putUnquotedUTF8(ByteBuffer out) throws IOException
+          {
+            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+          }
+        };
+      }
+      else
+      {
+        return null;
+      }
+    }
+  }
 }