@@ -107,7 +107,6 @@ private static void trustAllHttpsCertificates() throws Exception {
107107 }
108108
109109 private ManagedObjectReference SVC_INST_REF = new ManagedObjectReference ();
110- private ManagedObjectReference propCollectorRef ;
111110 private static VimService vimService ;
112111 private VimPortType vimPort ;
113112 private String serviceCookie ;
@@ -151,8 +150,6 @@ public void connect(String url, String userName, String password) throws Excepti
151150
152151 vimPort .login (serviceContent .getSessionManager (), userName , password , null );
153152 isConnected = true ;
154-
155- propCollectorRef = serviceContent .getPropertyCollector ();
156153 }
157154
158155 /**
@@ -197,7 +194,7 @@ public String getServiceCookie() {
197194 * @return Service property collector
198195 */
199196 public ManagedObjectReference getPropCol () {
200- return propCollectorRef ;
197+ return getServiceContent (). getPropertyCollector () ;
201198 }
202199
203200 /**
@@ -207,6 +204,43 @@ public ManagedObjectReference getRootFolder() {
207204 return getServiceContent ().getRootFolder ();
208205 }
209206
207+ public boolean validate () {
208+ //
209+ // There is no official API to validate an open vCenter API session. This is hacking way to tell if
210+ // an open vCenter API session is still valid for making calls.
211+ //
212+ // It will give false result if there really does not exist data-center in the inventory, however, I consider
213+ // this really is not possible in production deployment
214+ //
215+
216+ // Create PropertySpecs
217+ PropertySpec pSpec = new PropertySpec ();
218+ pSpec .setType ("Datacenter" );
219+ pSpec .setAll (false );
220+ pSpec .getPathSet ().add ("name" );
221+
222+ ObjectSpec oSpec = new ObjectSpec ();
223+ oSpec .setObj (getRootFolder ());
224+ oSpec .setSkip (false );
225+ oSpec .getSelectSet ().addAll (constructCompleteTraversalSpec ());
226+
227+ PropertyFilterSpec spec = new PropertyFilterSpec ();
228+ spec .getPropSet ().add (pSpec );
229+ spec .getObjectSet ().add (oSpec );
230+ List <PropertyFilterSpec > specArr = new ArrayList <PropertyFilterSpec >();
231+ specArr .add (spec );
232+
233+ try {
234+ List <ObjectContent > ocary = vimPort .retrieveProperties (getPropCol (), specArr );
235+ if (ocary != null && ocary .size () > 0 )
236+ return true ;
237+ } catch (Exception e ) {
238+ return false ;
239+ }
240+
241+ return false ;
242+ }
243+
210244 /**
211245 * Get the property value of a managed object.
212246 *
@@ -266,7 +300,7 @@ private List<ObjectContent> retrieveMoRefProperties(ManagedObjectReference mObj,
266300 List <PropertyFilterSpec > specArr = new ArrayList <PropertyFilterSpec >();
267301 specArr .add (spec );
268302
269- return vimPort .retrieveProperties (propCollectorRef , specArr );
303+ return vimPort .retrieveProperties (getPropCol () , specArr );
270304 }
271305
272306 /**
@@ -334,7 +368,8 @@ private Object[] waitForValues(ManagedObjectReference objmor, String[] filterPro
334368 pSpec .setType (objmor .getType ());
335369 spec .getPropSet ().add (pSpec );
336370
337- ManagedObjectReference filterSpecRef = vimPort .createFilter (propCollectorRef , spec , true );
371+ ManagedObjectReference propertyCollector = this .getPropCol ();
372+ ManagedObjectReference filterSpecRef = vimPort .createFilter (propertyCollector , spec , true );
338373
339374 boolean reached = false ;
340375
@@ -343,7 +378,7 @@ private Object[] waitForValues(ManagedObjectReference objmor, String[] filterPro
343378 List <ObjectUpdate > objupary = null ;
344379 List <PropertyChange > propchgary = null ;
345380 while (!reached ) {
346- updateset = vimPort .waitForUpdates (propCollectorRef , version );
381+ updateset = vimPort .waitForUpdates (propertyCollector , version );
347382 if (updateset == null || updateset .getFilterSet () == null ) {
348383 continue ;
349384 }
@@ -546,7 +581,7 @@ public ManagedObjectReference getDecendentMoRef(ManagedObjectReference root, Str
546581 List <PropertyFilterSpec > specArr = new ArrayList <PropertyFilterSpec >();
547582 specArr .add (spec );
548583
549- List <ObjectContent > ocary = vimPort .retrieveProperties (propCollectorRef , specArr );
584+ List <ObjectContent > ocary = vimPort .retrieveProperties (getPropCol () , specArr );
550585
551586 if (ocary == null || ocary .size () == 0 ) {
552587 return null ;
0 commit comments