Make XML serializer support all fields within the class tree

This commit is contained in:
Kelven Yang 2011-11-15 15:01:29 -08:00
parent 277c60e4f6
commit 16530b532f
5 changed files with 19 additions and 13 deletions

View File

@ -57,7 +57,7 @@ public abstract class BaseAsyncCmd extends BaseCmd {
public ResponseObject getResponse(long jobId) {
AsyncJobResponse response = new AsyncJobResponse();
response.setId(jobId);
response.setJobId(jobId);
response.setResponseName(getCommandName());
return response;
}

View File

@ -59,14 +59,6 @@ public class AsyncJobResponse extends BaseResponse {
@SerializedName(ApiConstants.CREATED) @Param(description=" the created date of the job")
private Date created;
public Long getId() {
return getJobId();
}
public void setId(Long id) {
setJobId(id);
}
public Long getAccountId() {
return accountId.getValue();
}

View File

@ -126,6 +126,7 @@ public class VMTemplateVO implements VirtualMachineTemplate, Identity {
@Column(name="sort_key")
int sortKey;
@Transient
Map details;
@Override

View File

@ -1874,7 +1874,7 @@ public class ApiResponseHelper implements ResponseGenerator {
jobResponse.setAccountId(job.getAccountId());
jobResponse.setCmd(job.getCmd());
jobResponse.setCreated(job.getCreated());
jobResponse.setId(job.getId());
jobResponse.setJobId(job.getId());
if (job.getInstanceType() != null && job.getInstanceId() != null) {
jobResponse.setJobInstanceType(job.getInstanceType().toString());
@ -2165,7 +2165,7 @@ public class ApiResponseHelper implements ResponseGenerator {
AsyncJobResult result = ApiDBUtils._asyncMgr.queryAsyncJobResult(cmd);
AsyncJobResponse response = new AsyncJobResponse();
response.setId(result.getJobId());
response.setJobId(result.getJobId());
response.setJobStatus(result.getJobStatus());
response.setJobProcStatus(result.getProcessStatus());
response.setJobResultCode(result.getResultCode());

View File

@ -22,6 +22,8 @@ import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
@ -158,12 +160,22 @@ public class ApiResponseSerializer {
}
}
public static Field[] getFlattenFields(Class<?> clz) {
List<Field> fields = new ArrayList<Field>();
fields.addAll(Arrays.asList(clz.getDeclaredFields()));
if (clz.getSuperclass() != null) {
fields.addAll(Arrays.asList(getFlattenFields(clz.getSuperclass())));
}
return fields.toArray(new Field[] {});
}
private static void serializeResponseObjFieldsXML(StringBuilder sb, ResponseObject obj) {
boolean isAsync = false;
if (obj instanceof AsyncJobResponse)
isAsync = true;
Field[] fields = obj.getClass().getDeclaredFields();
//Field[] fields = obj.getClass().getDeclaredFields();
Field[] fields = getFlattenFields(obj.getClass());
for (Field field : fields) {
if ((field.getModifiers() & Modifier.TRANSIENT) != 0) {
continue; // skip transient fields
@ -214,7 +226,8 @@ public class ApiResponseSerializer {
IdentityDao identityDao = new IdentityDaoImpl();
id = identityDao.getIdentityUuid(idProxy.getTableName(), id);
}
sb.append("<" + serializedName.value() + ">" + id + "</" + serializedName.value() + ">");
if(id != null && !id.isEmpty())
sb.append("<" + serializedName.value() + ">" + id + "</" + serializedName.value() + ">");
} else {
String resultString = escapeSpecialXmlChars(fieldValue.toString());
if (!(obj instanceof ExceptionResponse)) {