diff --git a/core/src/com/cloud/async/AsyncJobResult.java b/core/src/com/cloud/async/AsyncJobResult.java index 43035ab10ac..2056b7552ff 100644 --- a/core/src/com/cloud/async/AsyncJobResult.java +++ b/core/src/com/cloud/async/AsyncJobResult.java @@ -93,7 +93,7 @@ public class AsyncJobResult { } public void setResultObject(Object result) { - this.result = SerializerHelper.toSerializedString(result); + this.result = SerializerHelper.toSerializedStringOld(result); } public String toString() { diff --git a/core/src/com/cloud/serializer/SerializerHelper.java b/core/src/com/cloud/serializer/SerializerHelper.java index a66303b1894..f26dc2466e4 100644 --- a/core/src/com/cloud/serializer/SerializerHelper.java +++ b/core/src/com/cloud/serializer/SerializerHelper.java @@ -38,7 +38,7 @@ import com.google.gson.Gson; public class SerializerHelper { public static final Logger s_logger = Logger.getLogger(SerializerHelper.class.getName()); - public static String toSerializedString(Object result) { + public static String toSerializedStringOld(Object result) { if(result != null) { Class clz = result.getClass(); Gson gson = GsonHelper.getBuilder().create(); @@ -47,6 +47,16 @@ public class SerializerHelper { } return null; } + + // FIXME: what about XML response? + public static String toSerializedString(Object result) { + if (result != null) { + Gson gson = GsonHelper.getBuilder().create(); + + return gson.toJson(result); + } + return null; + } public static Object fromSerializedString(String result) { try { diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 45936301551..282cdad36ce 100644 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -102,8 +102,12 @@ public class ApiDispatcher { try { Method method = mgr.getClass().getMethod(methodName, cmd.getClass()); - method.invoke(mgr, cmd); - return cmd.getId(); + Object dbObject = method.invoke(mgr, cmd); + + Method getIdMethod = dbObject.getClass().getMethod("getId"); + Object id = getIdMethod.invoke(dbObject); + + return (Long)id; } catch (NoSuchMethodException nsme) { s_logger.warn("Exception executing method " + methodName + " for command " + cmd.getClass().getSimpleName(), nsme); throw new CloudRuntimeException("Unable to execute method " + methodName + " for command " + cmd.getClass().getSimpleName() + ", unable to find implementation."); @@ -148,7 +152,8 @@ public class ApiDispatcher { try { Method method = mgr.getClass().getMethod(methodName, cmd.getClass()); - method.invoke(mgr, cmd); + Object result = method.invoke(mgr, cmd); + cmd.setResponseObject(result); } catch (NoSuchMethodException nsme) { s_logger.warn("Exception executing method " + methodName + " for command " + cmd.getClass().getSimpleName(), nsme); throw new CloudRuntimeException("Unable to execute method " + methodName + " for command " + cmd.getClass().getSimpleName() + ", unable to find implementation."); diff --git a/server/src/com/cloud/api/BaseAsyncCmd.java b/server/src/com/cloud/api/BaseAsyncCmd.java index d65bd4d1eaa..2baaf898a6e 100644 --- a/server/src/com/cloud/api/BaseAsyncCmd.java +++ b/server/src/com/cloud/api/BaseAsyncCmd.java @@ -16,6 +16,7 @@ public abstract class BaseAsyncCmd extends BaseCmd { private Long startEventId; public String getResponse(long jobId) { + // FIXME: We need a generic response object here, see BaseAsyncCreateCmd return SerializerHelper.toSerializedString(Long.valueOf(jobId)); } diff --git a/server/src/com/cloud/async/AsyncJobManagerImpl.java b/server/src/com/cloud/async/AsyncJobManagerImpl.java index 22ce5de66cd..6d1f889c893 100644 --- a/server/src/com/cloud/async/AsyncJobManagerImpl.java +++ b/server/src/com/cloud/async/AsyncJobManagerImpl.java @@ -151,8 +151,11 @@ public class AsyncJobManagerImpl implements AsyncJobManager { job.setInstanceId(null); // FIXME: do we need to re-serialize here? - if(resultObject != null) - job.setResult(SerializerHelper.toSerializedString(resultObject)); + if (resultObject != null) { +// job.setResult(SerializerHelper.toSerializedString(resultObject)); + job.setResult((String)resultObject); + } + job.setLastUpdated(DateUtil.currentGMTTime()); _jobDao.update(jobId, job); txt.commit();