尝试检索启用了准入故障转移级别控制策略的VMware群集的插槽信息时,我遇到了一些问题。我使用VI Java API。
调用以下方法时:
clusterComputeResource.retrieveDasAdvancedRuntimeInfo()
我要么得到以下例外:
java.rmi.RemoteException: VI SDK invoke exception:java.rmi.RemoteException: Exception in
WSClient.invoke:; nested exception is:
java.lang.NoSuchFieldException: slotInfo
at com.vmware.vim25.ws.WSClient.invoke(WSClient.java:122)
at com.vmware.vim25.ws.VimStub.retrieveDasAdvancedRuntimeInfo(VimStub.java:269)
或者我得到了ClusterDasAdvancedRuntimeInfo类型的结果 但我需要子类ClusterDasFailoverLevelAdvancedRuntimeInfo以获取SlotInfo字段(转换为所需的sublcass也不起作用)。
我试图通过Soap UI直接访问vcenter的Web服务,它没有任何问题,但是使用vijava API却没有。
提前感谢您的帮助!!!
答案 0 :(得分:1)
经过大量的调试以查看VI Java API在内部的作用,我发现如果使用sublcass的名称调用Web服务客户端(wsc)而不是超类的名称(作为最后一个参数) ),响应将被正确转换。这样可以毫无问题地检索插槽信息。以下是遇到相同问题的人的解决方案:
ClusterDasFailoverLevelAdvancedRuntimeInfo clusterDasFailoverLevelAdvancedRuntimeInfo = null;
try {
final Argument[] paras = new Argument[1];
paras[0] = new Argument("_this", "ManagedObjectReference", clusterComputeResource.getMOR());
clusterDasFailoverLevelAdvancedRuntimeInfo = (ClusterDasFailoverLevelAdvancedRuntimeInfo) serviceInstance.getServerConnection().getVimService().getWsc().invoke("RetrieveDasAdvancedRuntimeInfo", paras, "ClusterDasFailoverLevelAdvancedRuntimeInfo");
} catch (final Exception e) {
//error handling
}
(请注意,这仅在启用了准入控制故障转移级别策略时才有效!!!)