Martin Sivák has uploaded a new change for review. Change subject: engine: Enhance the xml-rpc Long support to deal with Maps and Lists ......................................................................
engine: Enhance the xml-rpc Long support to deal with Maps and Lists It is common to have a Long value in a sub-map of an xml-rpc argument. The current implementation does not deal with this case. The ideal solution to this would be to instruct the marshaller to do this. Unfortunately that is not possible and we have to work around that limitation. Change-Id: I5a5933a68f937c4734b547c173188e88bd7b9464 Signed-off-by: Martin Sivák <msi...@redhat.com> --- M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/xmlrpc/XmlRpcUtils.java 1 file changed, 32 insertions(+), 5 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/52/35352/1 diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/xmlrpc/XmlRpcUtils.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/xmlrpc/XmlRpcUtils.java index 62907f6..41fc6fc 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/xmlrpc/XmlRpcUtils.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/xmlrpc/XmlRpcUtils.java @@ -9,8 +9,11 @@ import java.net.URL; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; @@ -297,14 +300,38 @@ List<Object> result = new ArrayList<>(); for (int i = 0; i < request.getParameterCount(); i++) { Object object = request.getParameter(i); - if (Long.class.isInstance(object)) { - result.add(object.toString()); - continue; - } - result.add(object); + result.add(longToString(object)); } return result.toArray(); } + + /** + * Workaround the lack of Long support in VDSM by converting all + * Long typed variables to String. + * + * @param object object that potentially contains Long items + * @return new object where all the Longs are converted to Strings + */ + @SuppressWarnings("unchecked") + private Object longToString(Object object) { + if (Long.class.isInstance(object)) { + return object.toString(); + } else if (Map.class.isInstance(object)) { + Map<Object, Object> map = new HashMap<>(); + for (Map.Entry<Object, Object> entry: ((Map<Object, Object>)object).entrySet()) { + map.put(entry.getKey(), longToString(entry.getValue())); + } + return map; + } else if (Collection.class.isInstance(object)) { + List<Object> list = new ArrayList<>(); + for (Object entry: (List<Object>)object) { + list.add(longToString(entry)); + } + return list; + } else { + return object; + } + } }; /** -- To view, visit http://gerrit.ovirt.org/35352 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5a5933a68f937c4734b547c173188e88bd7b9464 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Martin Sivák <msi...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches