@@ -109,7 +109,6 @@ private static void trustAllHttpsCertificates() throws Exception {
109109 }
110110
111111 private ManagedObjectReference SVC_INST_REF = new ManagedObjectReference ();
112- private ManagedObjectReference propCollectorRef ;
113112 private static VimService vimService ;
114113 private VimPortType vimPort ;
115114 private String serviceCookie ;
@@ -153,8 +152,6 @@ public void connect(String url, String userName, String password) throws Excepti
153152
154153 vimPort .login (serviceContent .getSessionManager (), userName , password , null );
155154 isConnected = true ;
156-
157- propCollectorRef = serviceContent .getPropertyCollector ();
158155 }
159156
160157 /**
@@ -199,7 +196,7 @@ public String getServiceCookie() {
199196 * @return Service property collector
200197 */
201198 public ManagedObjectReference getPropCol () {
202- return propCollectorRef ;
199+ return getServiceContent (). getPropertyCollector () ;
203200 }
204201
205202 /**
@@ -209,6 +206,43 @@ public ManagedObjectReference getRootFolder() {
209206 return getServiceContent ().getRootFolder ();
210207 }
211208
209+ public boolean validate () {
210+ //
211+ // There is no official API to validate an open vCenter API session. This is hacking way to tell if
212+ // an open vCenter API session is still valid for making calls.
213+ //
214+ // It will give false result if there really does not exist data-center in the inventory, however, I consider
215+ // this really is not possible in production deployment
216+ //
217+
218+ // Create PropertySpecs
219+ PropertySpec pSpec = new PropertySpec ();
220+ pSpec .setType ("Datacenter" );
221+ pSpec .setAll (false );
222+ pSpec .getPathSet ().add ("name" );
223+
224+ ObjectSpec oSpec = new ObjectSpec ();
225+ oSpec .setObj (getRootFolder ());
226+ oSpec .setSkip (false );
227+ oSpec .getSelectSet ().addAll (constructCompleteTraversalSpec ());
228+
229+ PropertyFilterSpec spec = new PropertyFilterSpec ();
230+ spec .getPropSet ().add (pSpec );
231+ spec .getObjectSet ().add (oSpec );
232+ List <PropertyFilterSpec > specArr = new ArrayList <PropertyFilterSpec >();
233+ specArr .add (spec );
234+
235+ try {
236+ List <ObjectContent > ocary = vimPort .retrieveProperties (getPropCol (), specArr );
237+ if (ocary != null && ocary .size () > 0 )
238+ return true ;
239+ } catch (Exception e ) {
240+ return false ;
241+ }
242+
243+ return false ;
244+ }
245+
212246 /**
213247 * Get the property value of a managed object.
214248 *
@@ -268,7 +302,7 @@ private List<ObjectContent> retrieveMoRefProperties(ManagedObjectReference mObj,
268302 List <PropertyFilterSpec > specArr = new ArrayList <PropertyFilterSpec >();
269303 specArr .add (spec );
270304
271- return vimPort .retrieveProperties (propCollectorRef , specArr );
305+ return vimPort .retrieveProperties (getPropCol () , specArr );
272306 }
273307
274308 public boolean waitForTask2 (ManagedObjectReference task ) throws RuntimeFaultFaultMsg , RemoteException , InterruptedException {
@@ -416,7 +450,8 @@ private Object[] waitForValues(ManagedObjectReference objmor, String[] filterPro
416450 pSpec .setType (objmor .getType ());
417451 spec .getPropSet ().add (pSpec );
418452
419- ManagedObjectReference filterSpecRef = vimPort .createFilter (propCollectorRef , spec , true );
453+ ManagedObjectReference propertyCollector = this .getPropCol ();
454+ ManagedObjectReference filterSpecRef = vimPort .createFilter (propertyCollector , spec , true );
420455
421456 boolean reached = false ;
422457
@@ -425,7 +460,7 @@ private Object[] waitForValues(ManagedObjectReference objmor, String[] filterPro
425460 List <ObjectUpdate > objupary = null ;
426461 List <PropertyChange > propchgary = null ;
427462 while (!reached ) {
428- updateset = vimPort .waitForUpdates (propCollectorRef , version );
463+ updateset = vimPort .waitForUpdates (propertyCollector , version );
429464 if (updateset == null || updateset .getFilterSet () == null ) {
430465 continue ;
431466 }
@@ -628,7 +663,7 @@ public ManagedObjectReference getDecendentMoRef(ManagedObjectReference root, Str
628663 List <PropertyFilterSpec > specArr = new ArrayList <PropertyFilterSpec >();
629664 specArr .add (spec );
630665
631- List <ObjectContent > ocary = vimPort .retrieveProperties (propCollectorRef , specArr );
666+ List <ObjectContent > ocary = vimPort .retrieveProperties (getPropCol () , specArr );
632667
633668 if (ocary == null || ocary .size () == 0 ) {
634669 return null ;
0 commit comments