Master VMware was broken by this commit author Hugo Trippaers<https://git-wip-us.apache.org/repos/asf?p=cloudstack.git;a=search;h=b20add810e5751f53946f695b6223a8016f104a5;s=Hugo+Trippaers;st=author> <htrippa...@schubergphilis.com><https://git-wip-us.apache.org/repos/asf?p=cloudstack.git;a=search;h=b20add810e5751f53946f695b6223a8016f104a5;s=htrippa...@schubergphilis.com;st=author> Wed, 22 Jan 2014 08:34:46 +0000 (09:34 +0100) committer Hugo Trippaers<https://git-wip-us.apache.org/repos/asf?p=cloudstack.git;a=search;h=b20add810e5751f53946f695b6223a8016f104a5;s=Hugo+Trippaers;st=committer> <htrippa...@schubergphilis.com><https://git-wip-us.apache.org/repos/asf?p=cloudstack.git;a=search;h=b20add810e5751f53946f695b6223a8016f104a5;s=htrippa...@schubergphilis.com;st=committer> Wed, 22 Jan 2014 08:37:34 +0000 (09:37 +0100) commit b20add810e5751f53946f695b6223a8016f104a5 tree 89e7e66704b09959bc5d77e4e20562e6dcc05306<https://git-wip-us.apache.org/repos/asf?p=cloudstack.git;a=tree;h=89e7e66704b09959bc5d77e4e20562e6dcc05306;hb=b20add810e5751f53946f695b6223a8016f104a5> tree<https://git-wip-us.apache.org/repos/asf?p=cloudstack.git;a=tree;h=89e7e66704b09959bc5d77e4e20562e6dcc05306;hb=b20add810e5751f53946f695b6223a8016f104a5> | snapshot<https://git-wip-us.apache.org/repos/asf?p=cloudstack.git;a=snapshot;h=b20add810e5751f53946f695b6223a8016f104a5;sf=tgz> parent 86124138a1a9129dedaf0f73fcd570156bfe53f6<https://git-wip-us.apache.org/repos/asf?p=cloudstack.git;a=commit;h=86124138a1a9129dedaf0f73fcd570156bfe53f6> commit<https://git-wip-us.apache.org/repos/asf?p=cloudstack.git;a=commit;h=86124138a1a9129dedaf0f73fcd570156bfe53f6> | diff<https://git-wip-us.apache.org/repos/asf?p=cloudstack.git;a=commitdiff;h=b20add810e5751f53946f695b6223a8016f104a5;hp=86124138a1a9129dedaf0f73fcd570156bfe53f6> Get rid of compiler warnings in vmware-base
Min and I spent two hours on this to trace down the cause, Hugo, please do test before check-in even if it seems like to remove compiler warning, but because of the tricky business with Java generics, it does cause problem at runtime One of the problem comes from following code, please checkout my comments below. -Kelven import org.apache.log4j.Logger; @@ -144,6<https://git-wip-us.apache.org/repos/asf?p=cloudstack.git;a=blob;f=vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareClient.java;h=3c2c81d8a5ea3e242a6407ab5a0d2710fa1d0b73;hb=3c2c81d8a5ea3e242a6407ab5a0d2710fa1d0b73#l144> +144,7<https://git-wip-us.apache.org/repos/asf?p=cloudstack.git;a=blob;f=vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareClient.java;h=e81665f71b76a3772b13dae5cc0733d26220c64a;hb=e81665f71b76a3772b13dae5cc0733d26220c64a#l144> @@ public class VmwareClient { ServiceContent serviceContent = vimPort.retrieveServiceContent(svcInstRef); // Extract a cookie. See vmware sample program com.vmware.httpfileaccess.GetVMFiles + @SuppressWarnings("unchecked") Map<String, List<String>> headers = (Map<String, List<String>>)((BindingProvider)vimPort).getResponseContext().get(MessageContext.HTTP_RESPONSE_HEADERS); List<String> cookies = headers.get("Set-cookie"); String cookieValue = cookies.get(0); @@ -256,17<https://git-wip-us.apache.org/repos/asf?p=cloudstack.git;a=blob;f=vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareClient.java;h=3c2c81d8a5ea3e242a6407ab5a0d2710fa1d0b73;hb=3c2c81d8a5ea3e242a6407ab5a0d2710fa1d0b73#l256> +257,18<https://git-wip-us.apache.org/repos/asf?p=cloudstack.git;a=blob;f=vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareClient.java;h=e81665f71b76a3772b13dae5cc0733d26220c64a;hb=e81665f71b76a3772b13dae5cc0733d26220c64a#l257> @@ public class VmwareClient { * @throws Exception * in case of error. */ - public Object getDynamicProperty(ManagedObjectReference mor, String propertyName) throws Exception { + @SuppressWarnings("unchecked") + public <T> T getDynamicProperty(ManagedObjectReference mor, String propertyName) throws Exception { List<String> props = new ArrayList<String>(); props.add(propertyName); List<ObjectContent> objContent = retrieveMoRefProperties(mor, props); - Object propertyValue = null; + T propertyValue = null; [Kelven] This is a wrong change, since propertyValue is intermediate variable that could have type that is different than the returning type. It will eventually cause getDeclaredMethod() call to fail at runtime if (objContent != null && objContent.size() > 0) { List<DynamicProperty> dynamicProperty = objContent.get(0).getPropSet(); if (dynamicProperty != null && dynamicProperty.size() > 0) { DynamicProperty dp = dynamicProperty.get(0); - propertyValue = dp.getVal(); + propertyValue = (T)dp.getVal(); /* * If object is ArrayOfXXX object, then get the XXX[] by * invoking getXXX() on the object. @@ -274,13<https://git-wip-us.apache.org/repos/asf?p=cloudstack.git;a=blob;f=vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareClient.java;h=3c2c81d8a5ea3e242a6407ab5a0d2710fa1d0b73;hb=3c2c81d8a5ea3e242a6407ab5a0d2710fa1d0b73#l274> +276,13<https://git-wip-us.apache.org/repos/asf?p=cloudstack.git;a=blob;f=vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareClient.java;h=e81665f71b76a3772b13dae5cc0733d26220c64a;hb=e81665f71b76a3772b13dae5cc0733d26220c64a#l276> @@ public class VmwareClient { * ArrayOfManagedObjectReference.getManagedObjectReference() * returns ManagedObjectReference[] array. */ - Class dpCls = propertyValue.getClass(); + Class<? extends Object> dpCls = propertyValue.getClass(); String dynamicPropertyName = dpCls.getName(); if (dynamicPropertyName.indexOf("ArrayOf") != -1) { String methodName = "get" + dynamicPropertyName.substring(dynamicPropertyName.indexOf("ArrayOf") + "ArrayOf".length(), dynamicPropertyName.length()); - Method getMorMethod = dpCls.getDeclaredMethod(methodName, null); - propertyValue = getMorMethod.invoke(propertyValue, (Object[])null); + Method getMorMethod = dpCls.getDeclaredMethod(methodName, (Class<?>)null); + propertyValue = (T)getMorMethod.invoke(propertyValue, (Object[])null); } } }