Bug CS-14853: CloudStack list APIs are listing incorrect IDs for all the entities when API response set to "xml". works fine for "json"

Bug 14071: queryAsyncJobResult in xml format gives incorrect UUIDs back

Description:

	CS-14853 is the same bug as 14071, but seen in Bonita branch
	owing to the fix not being merged from master. So putting in
	the same fix to 3.0.x branch. Description of fix follows.

        Incorrectly removed part of the XML serializer that serialized
        the IdentityProxy object in normal responses, when putting in
        support for serialization of lists of IdentityProxy objects in
        exception responses as part of the code changes put in for bug
        13217, resulting in this bug. Putting it back in place.
This commit is contained in:
Vijayendra Bhamidipati 2012-05-11 14:44:24 -07:00
parent 04b0aea11b
commit ab6c8f7986
1 changed files with 15 additions and 1 deletions

View File

@ -207,6 +207,7 @@ public class ApiResponseSerializer {
}
serializeResponseObjXML(sb, subObj);
} else if (value instanceof IdentityProxy) {
// Only exception reponses carry a list of IdentityProxy objects.
IdentityProxy idProxy = (IdentityProxy)value;
String id = (idProxy.getValue() != null ? String.valueOf(idProxy.getValue()) : "");
if(!id.isEmpty()) {
@ -233,7 +234,20 @@ public class ApiResponseSerializer {
sb.append("</" + serializedName.value() + ">");
}
} else if (fieldValue instanceof Date) {
sb.append("<" + serializedName.value() + ">" + BaseCmd.getDateString((Date) fieldValue) + "</" + serializedName.value() + ">");
sb.append("<" + serializedName.value() + ">" + BaseCmd.getDateString((Date) fieldValue) + "</" + serializedName.value() + ">");
} else if (fieldValue instanceof IdentityProxy) {
IdentityProxy idProxy = (IdentityProxy)fieldValue;
String id = (idProxy.getValue() != null ? String.valueOf(idProxy.getValue()) : "");
if(!id.isEmpty()) {
IdentityDao identityDao = new IdentityDaoImpl();
if(idProxy.getTableName() != null) {
id = identityDao.getIdentityUuid(idProxy.getTableName(), id);
} else {
s_logger.warn("IdentityProxy sanity check issue, invalid IdentityProxy table name found in class: " + obj.getClass().getName());
}
}
if(id != null && !id.isEmpty())
sb.append("<" + serializedName.value() + ">" + id + "</" + serializedName.value() + ">");
} else {
String resultString = escapeSpecialXmlChars(fieldValue.toString());
if (!(obj instanceof ExceptionResponse)) {