From 93151a701c012e90232c7912f8ac0b25578c2fb1 Mon Sep 17 00:00:00 2001 From: Kelven Yang Date: Wed, 21 Mar 2012 15:11:58 -0700 Subject: [PATCH] bug 14313: add map type adapter to ApiGsonBuilder as some API response classes are using Map --- server/src/com/cloud/api/ApiGsonHelper.java | 3 ++ .../com/cloud/api/StringMapTypeAdapter.java | 30 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 server/src/com/cloud/api/StringMapTypeAdapter.java diff --git a/server/src/com/cloud/api/ApiGsonHelper.java b/server/src/com/cloud/api/ApiGsonHelper.java index a52dcfcbe39..58ac337916b 100644 --- a/server/src/com/cloud/api/ApiGsonHelper.java +++ b/server/src/com/cloud/api/ApiGsonHelper.java @@ -18,6 +18,8 @@ package com.cloud.api; +import java.util.Map; + import com.google.gson.GsonBuilder; public class ApiGsonHelper { @@ -27,6 +29,7 @@ public class ApiGsonHelper { s_gBuilder.setVersion(1.3); s_gBuilder.registerTypeAdapter(ResponseObject.class, new ResponseObjectTypeAdapter()); s_gBuilder.registerTypeAdapter(IdentityProxy.class, new IdentityTypeAdapter()); + s_gBuilder.registerTypeAdapter(Map.class, new StringMapTypeAdapter()); } public static GsonBuilder getBuilder() { diff --git a/server/src/com/cloud/api/StringMapTypeAdapter.java b/server/src/com/cloud/api/StringMapTypeAdapter.java new file mode 100644 index 00000000000..3acd5f1a51c --- /dev/null +++ b/server/src/com/cloud/api/StringMapTypeAdapter.java @@ -0,0 +1,30 @@ +package com.cloud.api; + +import java.lang.reflect.Type; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; + +@SuppressWarnings("rawtypes") +public class StringMapTypeAdapter implements JsonDeserializer { + @Override + + public Map deserialize(JsonElement src, Type srcType, + JsonDeserializationContext context) throws JsonParseException { + + Map obj = new HashMap(); + JsonObject json = src.getAsJsonObject(); + + for(Entry entry : json.entrySet()) { + obj.put(entry.getKey(), entry.getValue().getAsString()); + } + + return obj; + } +}