无法检索启用了准入故障转移级别控制策略的群集的插槽信息

时间:2014-02-06 17:19:46

标签: java vmware vsphere

尝试检索启用了准入故障转移级别控制策略的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却没有。

提前感谢您的帮助!!!

1 个答案:

答案 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
}

(请注意,这仅在启用了准入控制故障转移级别策略时才有效!!!)