-1

在尝试检索启用了准入故障转移级别控制策略的 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 字段(转换为所需的 sublcas 也不起作用)。

我尝试通过 Soap UI 直接访问 vcenter 的 Web 服务,它可以正常工作,但使用 vijava API 就不行。

提前感谢您的帮助!!!

4

1 回答 1

1

经过大量调试以查看 VI Java API 在内部做了什么后,我发现如果使用子类的名称而不是超类的名称(作为最后一个参数)调用 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
}

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

于 2014-02-07T13:32:41.713 回答