| package com.cloud.api; | |
| import org.apache.log4j.Logger; | |
| import com.google.gson.Gson; | |
| public class ApiSerializerHelper { | |
| public static final Logger s_logger = Logger.getLogger(ApiSerializerHelper.class.getName()); | |
| public static String token = "/"; | |
| public static String toSerializedStringOld(Object result) { | |
| if(result != null) { | |
| Class<?> clz = result.getClass(); | |
| Gson gson = ApiGsonHelper.getBuilder().create(); | |
| if (result instanceof ResponseObject) { | |
| return clz.getName() + token + ((ResponseObject)result).getObjectName() + token + gson.toJson(result); | |
| } else { | |
| return clz.getName() + token + gson.toJson(result); | |
| } | |
| } | |
| return null; | |
| } | |
| public static Object fromSerializedString(String result) { | |
| try { | |
| if(result != null && !result.isEmpty()) { | |
| String[] serializedParts = result.split(token); | |
| if (serializedParts.length < 2) { | |
| return null; | |
| } | |
| String clzName = serializedParts[0]; | |
| String nameField = null; | |
| String content = null; | |
| if (serializedParts.length == 2) { | |
| content = serializedParts[1]; | |
| } else { | |
| nameField = serializedParts[1]; | |
| int index = result.indexOf(token + nameField + token); | |
| content = result.substring(index + nameField.length() + 2); | |
| } | |
| Class<?> clz; | |
| try { | |
| clz = Class.forName(clzName); | |
| } catch (ClassNotFoundException e) { | |
| return null; | |
| } | |
| Gson gson = ApiGsonHelper.getBuilder().create(); | |
| Object obj = gson.fromJson(content, clz); | |
| if (nameField != null) { | |
| ((ResponseObject)obj).setObjectName(nameField); | |
| } | |
| return obj; | |
| } | |
| return null; | |
| } catch(RuntimeException e) { | |
| s_logger.error("Caught runtime exception when doing GSON deserialization on: " + result); | |
| throw e; | |
| } | |
| } | |
| } |