You are on page 1of 27

VI SDK PropertyFilter Getting Started Community Guide Samples: Java, C# Re eren!es: V"#are In rastru!

ture SDK Programming Guide Property !olle!tors are used #$en !lients #ant to ind or monitor managed entities su!$ as Virtual "a!$ine and $osts or "anaged %&'e!t Re eren!es( )$e main use o property !olle!tors is to retrieve t$e property data as #ell as getting updates on t$e properties( Clients !an use &lo!*ing !all +,oti i!ation- or use polling to get t$e updates or t$e properties( Property !olle!tor uses ilter me!$anism #it$ $elp o anot$er managed o&'e!t .Property Filter/( )$is o&'e!t is responsi&le or iltering out properties and provides in ormation a&out only t$ose properties t$at t$e property !olle!tor is interested in monitoring or retrieving values( )$e ilter o&'e!t is al#ays asso!iated #it$ Property Colle!tor and !an not &e a!!essed independently( Property Colle!tors are managed o&'e!ts and are only availa&le per session( )$ese o&'e!ts !an &e s$ared a!ross )$is do!ument #ill separate out t$e steps involved in !reating t$e property ilters to simpli y t$em( )$ese pie!es !an &e put toget$er to !reate di erent levels o !omple0ities in property ilter( Creating Property Filter !omprises o ollo#ing 1 main tas*s:

Step 1: Create PropertySpec


Getting one or more spe!i i! properties PropertySpe! propertySpe! 2 ne# PropertySpe!+-3 propertySpe!(set4ll+ne# 5oolean+ alse--3 66 7e are interested in 8name8 property o Virtual "a!$ines propertySpe!(setPat$Set+ne# String9: ; <name< =-3 propertySpe!(set)ype+>Virtual"a!$ine?-3 ,oti!e t$at ollo#ing !ode snippet gets .name/ and .guestState/ property( )$e .guestState/ property is a nested property and !$ild o .guest/ property availa&le on .Virtual"a!$ine/ managed entity( PropertySpe! propertySpe! 2 ne# PropertySpe!+-3 propertySpe!(set4ll+ne# 5oolean+ alse--3 66 Get 8name8 and .guest state/property o V" propertySpe!(setPat$Set+ne# String9: ; <name<, <guest(guestState< =-3 propertySpe!(set)ype+<Virtual"a!$ine<-3 Get all t$e properties o t$e managed o&'e!t: 7$en retrieving all t$e properties o t$e given type o managed entity, noti!e t$at .set4ll/ is set to true and .Pat$Set/ setting is ignored( Follo#ing !ode snippet #ill et!$ all t$e properties o t$e .@ost/( PropertySpe! propertySpe! 2 ne# PropertySpe!+-3 propertySpe!(set4ll+ne# 5oolean+true--3 66 7e are interested in all properties o @ost propertySpe!(set)ype+<@ostSystem<-3

Getting properties o di erent type o entities: Follo#ing e0ample s$o#s $o# multiple Property Spe!s !an &e used to !olle!t properties o di erent types o managed entities( Property Filter a!!epts an array o .Property Spe!s/( It is ne!essary to !reate a property spe! or every type o managed entity #e are interested in( Single property spe! in turn !an as* or one or more or all t$e properties o given type o entity( Follo#ing e0ample s$o#s $o# multiple Property Sep!s or virtual ma!$ine and $ost system !an &e used in given Property Filter( 66 Create Property Spe! or @ost PropertySpe! $ostPropertySpe! 2 ne# PropertySpe!+-3 66 7e are interested in 8name8 property o @ost $ostPropertySpe!(setPat$Set+ne# String9: ; <name< =-3 $ostPropertySpe!(set)ype+<@ostSystem<-3 66 Create Property Spe! or V" PropertySpe! vmPropertySpe! 2 ne# PropertySpe!+-3 66 7e are interested in 8name8 and .uestState/ property o V" vmPropertySpe!(setPat$Set+ne# String9: ; <name<, <guest(guestState< =-3 vmPropertySpe!(set)ype+<Virtual"a!$ine<-3 66 4dd t$e a&ove to array to &e added to t$e PropertyFilter PropertySpe!9: propertySpe!s 2 ne# PropertySpe!9: ;$ostPropertySpe!, vmPropertySpe!=3 PropertyFilterSpe! propertyFilterSpe! 2 ne# PropertyFilterSpe!+-3 propertyFilterSpe!(setPropSet+propertySpe!s-3

Step 2: Create ObjectSpec


%&'e!tSpe! de!ided #$i!$ o&'e!ts are used to sele!t t$e properties( It !an &e a spe!i i! o&'e!t or o&'e!ts ound &y traversing t$e inventory tree using t$e traversal spe!( Sele!t set o managed o&'e!ts to et!$ properties Follo#ing snippet s$o#s $o# to sele!t t$e o&'e!ts &y spe!i ying traversal spe!( )$e traversal spe! is responsi&le or sele!ting !ertain types o o&'e!ts( )$e o&'e!t spe! !an spe!i y t$e starting o&'e!t using set%&'+-( 7$en .s*ip/ attri&ute is set to . alse/ t$e o&'e!t &eing visited is also !$e!*ed or t$e desired properties( 66 ,o# !reate %&'e!t Spe! %&'e!tSpe! o&'e!tSpe!2 ne# %&'e!tSpe!+-3 o&'e!tSpe!(set%&'+rootFolder-3 o&'e!tSpe!(setS*ip+ne# 5oolean+ alse--3 o&'e!tSpe!(setSele!tSet+ ne# Sele!tionSpe!9: ; !omplete)raversalSpe! =-3 Sele!t single managed o&'e!t to retrieve properties )$e simplest !ase o using %&'e!t Spe! is to get properties o spe!i i! o&'e!t( )$is !an &e done &y using a managed o&'e!t re eren!e o spe!i i! o&'e!t and setting it using set%&'+and ignoring t$e .Sele!tSet/( )$e e0ample &elo# #ill get t$e properties o only t$e .rootFolder/ managed o&'e!t( %&'e!tSpe! o&'e!tSpe!2 ne# %&'e!tSpe!+-3 o&'e!tSpe!(set%&'+rootFolder-3 o&'e!tSpe!(setS*ip+ne# 5oolean+ alse--3

Create TraversalSpec
Imp( ,ote: It #ill $elp tremendously to *eep t$e ollo#ing diagram in ront o you #$ile

you are #riting traversal spe!s( +Page AB : V"#are In rastru!ture Getting Started GuideC0ample B: Create )raversalSpe! to traverse #$ole inventory( )$is is typi!ally reDuired #$en #e #ant to !$e!* all t$e o&'e!ts in t$e tree and6or #e do not *no# to #$at dept$ #e may $ave to traverse t$e tree( Eet/s ta*e top do#n approa!$ $ere so t$at #e !an map it to t$e inventory tree s$o#n a&ove( )raversal Spe! to traverse rom Root Folder to Data Center: )raversalSpe! traversalSpe! 2 ne# )raversalSpe!+ <Folder<, <!$ildCntity<, 5oolean(F4ESC, ne# Sele!tionSpe!9: ; ne# Sele!tionSpe!+<VisitFolders<-, 66 )$is $andles nested olders = -3 traversalSpe!(set,ame+<VisitFolders<-3 )$e a&ove traversal spe! #ill traverse all t$e !$ild entities o any Folder not 'ust Data Center( Sin!e t$e .s*ip/ parameter is set to . alse/ it #ill visit t$e managed o&'e!t to inspe!t( Data Center &eing !$ild entity o root older it #ill &e traversed( )$e ne0t step is to traverse rom Data Center to its !$ild olders( +7e #ill revise t$is traversal spe! as #e #al* t$roug$ t$e tree()raversal Spe! to traverse rom Data Center to its !$ild olders: )$e data !enter !ontains t#o types o !$ild olders( .Vm older/ +!ontaining Virtual ma!$ines- and .$ost older/ +!ontaining $osts and .ComupteResour!e/So #e #ill need t#o traversal spe!s to &e a&le to traverse &ot$ t$e pat$s to .vm older/ and .$ost older/( ,oti!e t$at sin!e t$e olders !an &e nested to traverse t$e tree &elo# t$e !$ild olders +!$ild entities o Data!enter- t$e sele!tion spe! in!ludes t$e .VisitFolders/ traversal spe!( 66 )raversal t$roug$ $ostFolder &ran!$ )raversalSpe! dataCenter)o@ostFolder 2 ne# )raversalSpe!+ <Data!enter<, <$ostFolder<, 5oolean(F4ESC, ne# Sele!tionSpe!9: ; 66 Visit all olders +Folders !an &e nestedne# Sele!tionSpe!+<VisitFolders<-, = -3 dataCenter)o@ostFolder(set,ame+<DataCenter)o@ostFolder<-3 66 )raversal t$roug$ Virtual "a!$ines Folder &ran!$ )raversalSpe! dataCenter)oV"Folder 2 ne# )raversalSpe!+ <Data!enter<, <vmFolder<, 5oolean(F4ESC, ne# Sele!tionSpe!9: ; 66Visit all types o olders +Folders !an &e nested-

ne# Sele!tionSpe!+<VisitFolders<-, = -3 dataCenter)oV"Folder(set,ame+<DataCenter)oV"Folder<-3 )$e a&ove traversal spe! needs to &e added to t$e .VisitFolders/ traversal spe! so t$at it !an !ontinue to traverse &eyond data !enter entity( So no# our .VisitFolder/ traversal spe! #$i!$ !an traverse rom 4ny Folder !$ild entities Folder C$ild Cntity +Data!enter- vmFolder Folder C$ild Cntity +Data!enter- $ostFolder loo*s li*e ollo#ing( )raversalSpe! traversalSpe! 2 ne# )raversalSpe!+ <Folder<, <!$ildCntity<, 5oolean(F4ESC, ne# Sele!tionSpe!9: ; ne# Sele!tionSpe!+<VisitFolders<-, 66 )$is $andles nested olders
dataCenterToHostFolder, dataCenterToVMFolder

= -3 traversalSpe!(set,ame+<VisitFolders<-3 4&ove traversal spe! !an ,%) traverse t$e .ComputeResour!es/ entities ound in .$ostFolder/( 7$en .!omputeResou!e)o@ost/, .!omputeResou!e)oResPool/, .nestedResour!ePools/ traversal spe!s are added to .VisitFolders/ traversal spe! as s$o#n &elo#, it adds navigation pat$s to older traversal to $andle .Resour!ePool/ and .@ost/ entities( ,oti!e t$at sin!e t$e .Resour!ePool/ !an &e nested it is ne!essary to add a ./nestedResour!ePools/ traversal spe! as #ell to visit all t$e resour!e pools( )$is gives Duestion $o# to traverse rom a older +.$ostFolder/- to its .ComputeResour!es/ !$ild entity( F ,oti!e in t$e inventory tree t$at .$ostFolder/ $as only one type o !$ild entity #$i!$ is .ComputeResour!es/( )$e irst entry in .Sele!tionSpe!/ array o .VisitFolders/ traversal spe!, re!ursively traverses all t$e .!$ild entity/ +.ComputeResour!es/ in t$is !ase-( Same is appli!a&le #$en #e traverse rom .RootFolder/ to .Data!enter/ sin!e t$ere is no spe!i i! traversal spe! to traverse rom .RootFolder/ + older entity- to .Data!enter/ entity( 66 )raverse t$e @ost &ran!$ rom Compute Resour!es( )raversalSpe! !omputeResou!e)o@ost 2 ne# )raversalSpe!+ <ComputeResour!e<, <$ost<, 5oolean(F4ESC, ne# Sele!tionSpe!9: ; 66@osts does not $ave su& tree or nested stru!ture 66 ,ot$ing to traverse urt$er in t$is &ran!$( = -3 !omputeResou!e)o@ost(set,ame+<ComputeResou!e)o@ost<-3 66 )raverse t$e Resour!e Pool &ran!$ rom Compute Resour!es( )raversalSpe! !omputeResou!e)oResPool 2 ne# )raversalSpe!+

<ComputeResour!e<, <resour!ePool<, 5oolean(F4ESC, ne# Sele!tionSpe!9: ; 66Resour!e Pools !an &e nested so traverse t$ro t$em ne# Sele!tionSpe!+<,estedResour!ePools<= -3 !omputeResou!e)oResPool(set,ame+<ComputeResou!e)oResPool<-3 66 )raverse ,ested Resour!e Pools )raversalSpe! nestedResour!ePools 2 ne# )raversalSpe!+ <ComputeResour!e<, <resour!ePool<, 5oolean(F4ESC, ne# Sele!tionSpe!9: ; 66Resour!e Pools !an &e nested so traverse t$ro t$em ne# Sele!tionSpe!+<,estedResour!ePools<= -3 nestedResour!ePools(set,ame+<,estedResour!ePools<-3 )$e inal traversal spe! is as ollo#ing raversalSpe! traversalSpe! 2 ne# )raversalSpe!+ <Folder<, <!$ildCntity<, 5oolean(F4ESC, ne# Sele!tionSpe!9: ; ne# Sele!tionSpe!+<VisitFolders<-, 66 )$is $andles nested olders dataCenter)o@ostFolder, dataCenter)oV"Folder, !omputeResou!e)o@ost, !omputeResou!e)oResPool, nestedResour!ePools = -3 traversalSpe!(set,ame+<VisitFolders<-3 C0ample A: )raversing t$e inventory to ind %,EG Virtual "a!$ines: 7$en traversing t$e Virtual "a!$ine managed entities it is not ne!essary to traverse t$e $ost older and its su& tree( Follo#ing traversal spe! !an optimiHe t$e tree traversal &y avoiding t$e .$ost older/ traversal( )raversalSpe! traversalSpe! 2 ne# )raversalSpe!+ <Folder<, <!$ildCntity<, 5oolean(F4ESC, ne# Sele!tionSpe!9: ;

ne# Sele!tionSpe!+<VisitFolders<-, 66 )$is $andles nested olders dataCenter)oV"Folder = -3 traversalSpe!(set,ame+<VisitFolders<-3 ,oti!e t$at t$e ele!tion spe! !ontains traversal spe! t$at !an traverse t$e .V" Folder/( )$e sele!tion spe! in .VisitFolders/ traversal spe! does not in!lude any traversal spe! or .$ost older/ and t$us avoid t$e .$ost older/ su& tree traversal(

Lets put it together:


Re eren!e: Sour!e Code Samples( Java Samples Sample B(
/** * */ package com.vmware.cde.PropCollectorSample; import import import import import import import import import import import import import import import import import import ava.net.Mal!ormed"#$%&ception; ava.net."#$; ava.rmi.#emote%&ception; ava&.&ml.rpc.Service%&ception; com.vmware.cde.'tils.TraversalSpec$i(; com.vmware.vim.)*namicPropert*; com.vmware.vim.+nvalidPropert*; com.vmware.vim.Managed,( ect#e!erence; com.vmware.vim.,( ectContent; com.vmware.vim.,( ectSpec; com.vmware.vim.Propert*FilterSpec; com.vmware.vim.Propert*Spec; com.vmware.vim.#'ntimeFa'lt; com.vmware.vim.SelectionSpec; com.vmware.vim.ServiceContent; com.vmware.vim.TraversalSpec; com.vmware.vim.VimPortT*pe; com.vmware.vim.VimService$ocator;

/** * -a't.or ppimplas * */ p'(lic class e&ample/ 0 private String 'rl; private String 'ser1ame; private String password; private VimPortT*pe service; private VimService$ocator service$ocator; private ServiceContent serviceContent;

/** * -param string * -param string2 * -param string3 */ p'(lic e&ample/4String 'rl, String 'ser1ame, String password5 0 t.is.'rl 6 'rl; t.is.'ser1ame 6 'ser1ame; t.is.password 6 password; Managed,( ect#e!erence service#e! 6 new Managed,( ect#e!erence45; service#e!.setT*pe47Service+nstance75; service#e!.set8val'e47Service+nstance75; i! 4service 96 n'll5 0 disconnect45; : service$ocator 6 new VimService$ocator45; service$ocator.setMaintainSession4tr'e5; tr* 0 "#$4t.is.'rl55; service 6 service$ocator.getVimPort4new

44org.apac.e.a&is.client.St'(5service5.setTimeo't4/2;;;;;5; serviceContent 6 service.retrieveServiceContent4service#e!5; i! 4serviceContent.getSessionManager45 96 n'll5 0 service.login4serviceContent.getSessionManager45, t.is.'ser1ame, t.is.password, n'll5; : : catc. 4Mal!ormed"#$%&ception e5 0 S*stem.err.println47+nvalid "#$< =7 > t.is.'rl > 7?7 > e.getMessage455; : catc. 4Service%&ception e5 0 S*stem.err.println47Service %rror< 7 > e.getMessage455; : catc. 4#'ntimeFa'lt e5 0 S*stem.err.println47#'ntime %rror< 7 > e.getMessage455; : catc. 4#emote%&ception e5 0 S*stem.err.println47#emote %rror< 7 > e.getMessage455; : : /** *

*/ private void disconnect45 0 i! 4service 96 n'll5 0 tr* 0 service.logo't4serviceContent.getSessionManager455; : catc. 4#'ntimeFa'lt e5 0 S*stem.err.println47)isconnect !ailed< 7 > e.getMessage455; : catc. 4#emote%&ception e5 0 S*stem.err.println47)isconnect !ailed< 7 > e.getMessage455; : service 6 n'll; serviceContent 6 n'll; : : p'(lic static void main4String@A args5 0 i! 4args 66 n'll BB args.lengt. 96 35 0 S*stem.o't.println4 7"sage < e&ample/ =we(service'rl? ='sername? =password?7 5; S*stem.e&it4;5; : args@2A5; e&ample/ client 6 new e&ample/4args@;A, args@/A,

Managed,( ect#e!erence rootFolder 6 client.serviceContent.get#ootFolder45; client.getM,#e!Properties4rootFolder, 7)atacenter75; client.getHostProperties4rootFolder5; client.getHostCndVmProperties4rootFolder5; client.getVirt'alMac.ineProperties4rootFolder5; : /** * -param root */ private void getVirt'alMac.ineProperties4Managed,( ect#e!erence root5 0 // Det propert* Collector Managed,( ect#e!erence propert*Collector 6 serviceContent.getPropert*Collector45; // Create Propert*FilterSpec t.at !ilters o't EnameE propert* // !or given t*pe o! managed o( ects. // First create Traversal Spec t.at can traverse 'p to t.e Host Folder TraversalSpec completeTraversalSpec 6 TraversalSpec$i(.getVMTraversalSpec45; // Create Propert* Spec Propert*Spec propert*Spec 6 new Propert*Spec45; propert*Spec.setCll4new Foolean4!alse55;

o( ect

// Ge are interested in EnameE propert* o! given t*pe o!

propert*Spec.setPat.Set4new String@A 0 7name7, 7g'est.g'estState7 :5; propert*Spec.setT*pe47Virt'alMac.ine75; // Cdd t.e a(ove to arra* H Ge .ave onl* one ... Propert*Spec@A propert*Specs 6 new Propert*Spec@A 0propert*Spec:; 1ow create ,( ect Spec ectSpec o( ectSpec6 new ,( ectSpec45; ectSpec.set,( 4root5; ectSpec.setSkip4new Foolean4!alse55; ectSpec.setSelectSet4 new SelectionSpec@A 0 completeTraversalSpec :5; ,( ectSpec@A o( ectSpecs 6 new ,( ectSpec@A 0o( ectSpec:; ,( ectPec // Create Propert*FilterSpec 'sing t.e Propert*Spec and // created a(ove. Propert*FilterSpec propert*FilterSpec 6 new Propert*FilterSpec45; propert*FilterSpec.setPropSet4propert*Specs5; propert*FilterSpec.set,( ectSet4o( ectSpecs5; Propert*FilterSpec@A propert*FilterSpecs 6 new Propert*FilterSpec@A 0propert*FilterSpec:; // 1ow get t.e contents ,( ectContent@A o( ectContents 6 n'll; tr* 0 o( ectContents 6 service.retrieveProperties4 propert*Collector, propert*FilterSpecs5; : catc. 4+nvalidPropert* e5 0 // T,), C'toHgenerated catc. (lock e.printStackTrace45; : catc. 4#'ntimeFa'lt e5 0 // T,), C'toHgenerated catc. (lock e.printStackTrace45; : catc. 4#emote%&ception e5 0 // T,), C'toHgenerated catc. (lock e.printStackTrace45; : : printProperties4o( ectContents5; // ,( o( o( o(

/** * -param rootFolder

* -param string */ private void getHostProperties4Managed,( ect#e!erence root5 0 // Det propert* Collector Managed,( ect#e!erence propert*Collector 6 serviceContent.getPropert*Collector45; propert* // Create Propert*FilterSpec t.at !ilters o't EnameE // !or given t*pe o! managed o( ects. t.e Host Folder // First create Traversal Spec t.at can traverse 'p to

TraversalSpec completeTraversalSpec 6 TraversalSpec$i(.getHostTraversalSpec45; // Create Propert* Spec Propert*Spec propert*Spec 6 new Propert*Spec45; propert*Spec.setCll4new Foolean4tr'e55; // Ge are interested in EnameE propert* o! given t*pe o! //propert*Spec.setPat.Set4new String@A 0 7name7 :5; propert*Spec.setT*pe47HostS*stem75; // Cdd t.e a(ove to arra* H Ge .ave onl* one ... Propert*Spec@A propert*Specs 6 new Propert*Spec@A

o( ect

0propert*Spec:;

1ow create ,( ect Spec ectSpec o( ectSpec6 new ,( ectSpec45; ectSpec.set,( 4root5; ectSpec.setSkip4new Foolean4!alse55; ectSpec.setSelectSet4 new SelectionSpec@A 0 completeTraversalSpec :5; 0o( ectSpec:; ,( ectPec ,( ectSpec@A o( ectSpecs 6 new ,( ectSpec@A // Create Propert*FilterSpec 'sing t.e Propert*Spec and // created a(ove. Propert*FilterSpec propert*FilterSpec 6 new Propert*FilterSpec45; propert*FilterSpec.setPropSet4propert*Specs5; propert*FilterSpec.set,( ectSet4o( ectSpecs5; Propert*FilterSpec@A propert*FilterSpecs 6 new Propert*FilterSpec@A 0propert*FilterSpec:; // 1ow get t.e contents ,( ectContent@A o( ectContents 6 n'll; tr* 0 o( ectContents 6 service.retrieveProperties4

// ,( o( o( o(

propert*Collector, propert*FilterSpecs5; : catc. 4+nvalidPropert* e5 0 // T,), C'toHgenerated catc. (lock e.printStackTrace45; : catc. 4#'ntimeFa'lt e5 0 // T,), C'toHgenerated catc. (lock e.printStackTrace45; : catc. 4#emote%&ception e5 0 // T,), C'toHgenerated catc. (lock e.printStackTrace45; : printProperties4o( ectContents5; : root5 0 private void getHostCndVmProperties4 Managed,( ect#e!erence // Det propert* Collector Managed,( ect#e!erence propert*Collector 6 serviceContent.getPropert*Collector45; // Create Propert*FilterSpec t.at !ilters o't EnameE propert* // !or given t*pe o! managed o( ects. // First create Traversal Spec t.at can traverse 'p to t.e Host Folder TraversalSpec completeTraversalSpec 6 TraversalSpec$i(.getCompleteTraversalSpec45; // Create Propert* Spec !or Host Propert*Spec .ostPropert*Spec 6 new Propert*Spec45; // Ge are interested in EnameE propert* o! given t*pe o! .ostPropert*Spec.setPat.Set4new String@A 0 7name7 :5; .ostPropert*Spec.setT*pe47HostS*stem75; // Create Propert* Spec !or Host Propert*Spec vmPropert*Spec 6 new Propert*Spec45; // Ge are interested in EnameE propert* o! given t*pe o! o( ect vmPropert*Spec.setPat.Set4new String@A 0 7name7, 7g'est.g'estState7 :5; vmPropert*Spec.setT*pe47Virt'alMac.ine75; // Cdd t.e a(ove to arra* H Ge .ave onl* one ... Propert*Spec@A propert*Specs 6 new Propert*Spec@A 0.ostPropert*Spec, vmPropert*Spec:; // 1ow create ,( ect Spec ,( ectSpec o( ectSpec6 new ,( ectSpec45; o( ectSpec.set,( 4root5;

o( ect

o( ectSpec.setSkip4new Foolean4!alse55; o( ectSpec.setSelectSet4 new SelectionSpec@A 0 completeTraversalSpec :5; ,( ectSpec@A o( ectSpecs 6 new ,( ectSpec@A 0o( ectSpec:; ,( ectPec // Create Propert*FilterSpec 'sing t.e Propert*Spec and // created a(ove. Propert*FilterSpec propert*FilterSpec 6 new Propert*FilterSpec45; propert*FilterSpec.setPropSet4propert*Specs5; propert*FilterSpec.set,( ectSet4o( ectSpecs5; Propert*FilterSpec@A propert*FilterSpecs 6 new Propert*FilterSpec@A 0propert*FilterSpec:; // 1ow get t.e contents ,( ectContent@A o( ectContents 6 n'll; tr* 0 o( ectContents 6 service.retrieveProperties4 propert*Collector, propert*FilterSpecs5; : catc. 4+nvalidPropert* e5 0 // T,), C'toHgenerated catc. (lock e.printStackTrace45; : catc. 4#'ntimeFa'lt e5 0 // T,), C'toHgenerated catc. (lock e.printStackTrace45; : catc. 4#emote%&ception e5 0 // T,), C'toHgenerated catc. (lock e.printStackTrace45; : : printProperties4o( ectContents5;

private void getM,#e!Properties4 Managed,( ect#e!erence root, String t*pe5 0 // Det propert* Collector Managed,( ect#e!erence propert*Collector 6 serviceContent.getPropert*Collector45; // Create Propert*FilterSpec t.at !ilters o't EnameE propert* // !or given t*pe o! managed o( ects. // First create Traversal Spec t.at decides w.ic. part o! inventor* we // traverse H Ge will traverse complete inventor* TraversalSpec completeTraversalSpec 6 TraversalSpec$i(.getCompleteTraversalSpec45;

// Create Propert* Spec Propert*Spec propert*Spec 6 new Propert*Spec45; propert*Spec.setCll4new Foolean4!alse55; // Ge are interested in EnameE propert* o! given t*pe o! o( ect propert*Spec.setPat.Set4new String@A 0 7name7 :5; propert*Spec.setT*pe4t*pe5; // Cdd t.e a(ove to arra* H Ge .ave onl* one ... Propert*Spec@A propert*Specs 6 new Propert*Spec@A 0propert*Spec:; 1ow create ,( ect Spec ectSpec o( ectSpec6 new ,( ectSpec45; ectSpec.set,( 4root5; ectSpec.setSkip4new Foolean4!alse55; ectSpec.setSelectSet4 new SelectionSpec@A 0 completeTraversalSpec :5; ,( ectSpec@A o( ectSpecs 6 new ,( ectSpec@A 0o( ectSpec:; ,( ectPec // Create Propert*FilterSpec 'sing t.e Propert*Spec and // created a(ove. Propert*FilterSpec propert*FilterSpec 6 new Propert*FilterSpec45; propert*FilterSpec.setPropSet4propert*Specs5; propert*FilterSpec.set,( ectSet4o( ectSpecs5; Propert*FilterSpec@A propert*FilterSpecs 6 new Propert*FilterSpec@A 0propert*FilterSpec:; // 1ow get t.e contents ,( ectContent@A o( ectContents 6 n'll; tr* 0 o( ectContents 6 service.retrieveProperties4 propert*Collector, propert*FilterSpecs5; : catc. 4+nvalidPropert* e5 0 // T,), C'toHgenerated catc. (lock e.printStackTrace45; : catc. 4#'ntimeFa'lt e5 0 // T,), C'toHgenerated catc. (lock e.printStackTrace45; : catc. 4#emote%&ception e5 0 // T,), C'toHgenerated catc. (lock e.printStackTrace45; : : printProperties4o( ectContents5; // ,( o( o( o(

/** * -param t*pe

* -param name */ private void printProperties4,( ectContent@A o( ectContents5 0 Managed,( ect#e!erence mor 6 n'll; )*namicPropert*@A properties 6 n'll; S*stem.o't.println47o( ect contents I< 7 > o( ectContents.lengt.5; // Ge s.o'ld get onl* one ,( ect wit. one propert* !or 4,( ectContent oc< o( ectContents5 0 mor 6 oc.get,( 45; S*stem.o't.println4mor.get8val'e45 > 7Jt7 > mor.getT*pe455; properties 6 oc.getPropSet45; i!4properties 96 n'll5 0 !or4)*namicPropert* prop< properties5 0 S*stem.o't.println4mor.get8val'e45 > 7Jt7 > Jt7 > : : : : : prop.get1ame45 > 7 prop.getVal455;

Cnd

Java Sample A(
/** * */ package com.vmware.cde.PropCollectorSample; import import import import import import import import import import import import ava.net.Mal!ormed"#$%&ception; ava.net."#$; ava.rmi.#emote%&ception; ava&.&ml.rpc.Service%&ception; com.vmware.cde.'tils.S)KToolkit; com.vmware.cde.'tils.TraversalSpec$i(; com.vmware.vim.)*namicPropert*; com.vmware.vim.+nvalidPropert*; com.vmware.vim.Managed,( ect#e!erence; com.vmware.vim.,( ectContent; com.vmware.vim.,( ectSpec; com.vmware.vim.Propert*FilterSpec;

import import import import import import import

com.vmware.vim.Propert*Spec; com.vmware.vim.#'ntimeFa'lt; com.vmware.vim.SelectionSpec; com.vmware.vim.ServiceContent; com.vmware.vim.TraversalSpec; com.vmware.vim.VimPortT*pe; com.vmware.vim.VimService$ocator;

/** * -a't.or ppimplas * */ p'(lic class e&ample2 0 private String 'rl; private String 'ser1ame; private String password; private VimPortT*pe service; private VimService$ocator service$ocator; private ServiceContent serviceContent; private S)KToolkit sdkToolKit; /** * -param string * -param string2 * -param string3 */ p'(lic e&ample24String 'rl, String 'ser1ame, String password5 0 t.is.'rl 6 'rl; t.is.'ser1ame 6 'ser1ame; t.is.password 6 password; Managed,( ect#e!erence service#e! 6 new Managed,( ect#e!erence45; service#e!.setT*pe47Service+nstance75; service#e!.set8val'e47Service+nstance75; i! 4service 96 n'll5 0 disconnect45; : service$ocator 6 new VimService$ocator45; service$ocator.setMaintainSession4tr'e5; tr* 0 "#$4t.is.'rl55; 44org.apac.e.a&is.client.St'(5service5.setTimeo't4/2;;;;;5; serviceContent 6 service.retrieveServiceContent4service#e!5; i! 4serviceContent.getSessionManager45 96 n'll5 0 service.login4serviceContent.getSessionManager45, service 6 service$ocator.getVimPort4new

t.is.password, n'll5;

t.is.'ser1ame,

7?7 >

: : catc. 4Mal!ormed"#$%&ception e5 0 S*stem.err.println47+nvalid "#$< =7 > t.is.'rl >

e.getMessage455; : catc. 4Service%&ception e5 0 S*stem.err.println47Service %rror< 7 > e.getMessage455; : catc. 4#'ntimeFa'lt e5 0 S*stem.err.println47#'ntime %rror< 7 > e.getMessage455; : catc. 4#emote%&ception e5 0 S*stem.err.println47#emote %rror< 7 > e.getMessage455; : sdkToolKit 6 new S)KToolkit4service,serviceContent5; : /** * */ private void disconnect45 0 i! 4service 96 n'll5 0 tr* 0 service.logo't4serviceContent.getSessionManager455; : catc. 4#'ntimeFa'lt e5 0 S*stem.err.println47)isconnect !ailed< 7 > e.getMessage455; : catc. 4#emote%&ception e5 0 S*stem.err.println47)isconnect !ailed< 7 > e.getMessage455; : service 6 n'll; serviceContent 6 n'll; : : p'(lic static void main4String@A args5 0 i! 4args 66 n'll BB args.lengt. 96 35 0 S*stem.o't.println4 7"sage < e&ample2 =we(service'rl? ='sername? =password?7 5; S*stem.e&it4;5; : e&ample2 client 6 new e&ample24args@;A, args@/A, args@2A5; Managed,( ect#e!erence mor 6 n'll; Managed,( ect#e!erence rootFolder 6 client.serviceContent.get#ootFolder45;

> 7Jt7 >

mor 6 client.sdkToolKit.getHostF*1ame4rootFolder, 7ppimplasHdev/.eng.vmware.com75; S*stem.o't.println47Veri!* Host M,#e!< 7 > mor.getT*pe45 mor.get8val'e45 > 7Jt7 >

client.sdkToolKit.getManaged%ntit*1ame4mor55; mor 6 client.sdkToolKit.getM,#e!F*1ame4rootFolder, 7)atacenter7, 7)atacenter/75; S*stem.o't.println47Veri!* )atacenter M,#e!< 7 > mor.getT*pe45 > 7Jt7 > mor.get8val'e45> 7Jt7 > client.sdkToolKit.getManaged%ntit*1ame4mor55; mor 6 client.sdkToolKit.getVirt'alMac.ineF*1ame4rootFolder, 7r.el375; S*stem.o't.println47Veri!* VM M,#e!< 7 > mor.getT*pe45 > 7Jt7 > mor.get8val'e45> 7Jt7 > client.sdkToolKit.getManaged%ntit*1ame4mor55; :

Cnd C# Samples
)$is sample ta*es t$e username, pass#ord, server name and t$e name o t$e $ost system as t$e arguments( It t$en lists all t$e virtual ma!$ines on t$e spe!i ied $ost, #it$ t$e name o t$e vm and it/s po#er state using t$e virtual ma!$ine properties, !on ig(name and runtime(po#erState( using System3 using System(Colle!tions(Generi!3 using System(I%3 using System(Re le!tion3 using System(,et3 using System()e0t3 using System(7e&(Servi!es3 using System(,et(Se!urity3 using System(Se!urity(Cryptograp$y(IJKLCerti i!ates3 using System(Glo&aliHation3 using System(Colle!tions3 using Vim4pi3 namespa!e V"list

; !lass V"list ; stati! VimServi!e Mservi!e3 prote!ted "anaged%&'e!tRe eren!e Msv!Re 2 ne# "anaged%&'e!tRe eren!e+-3 prote!ted Servi!eContent Msi!3 private NserSession Msession3 66 Conne!ts to a server private void !onne!t+string url, string usid, string p#d; System(,et(Servi!ePoint"anager(Certi i!atePoli!y 2 ne# CertPoli!y+-3 66Gets servi!e !ontents Msv!Re (type 2 <Servi!eInstan!e<3 Msv!Re (Value 2 <Servi!eInstan!e<3 66 Mservi!e is VimServi!e Mservi!e 2 ne# VimServi!e+-3 Mservi!e(Nrl 2 url3 Mservi!e(Coo*ieContainer 2 ne# Coo*ieContainer+-3 66 Msi! is Servi!eContent Msi! 2 Mservi!e(RetrieveServi!eContent+Msv!Re -3 Msession 2 Mservi!e(Eogin+Msi!(session"anager, usid, p#d, null-3 = 66 Dis!onne!ts rom a server private void Dis!onne!t+; i +Mservi!e O2 null; Mservi!e(Eogout+Msi!(session"anager-3 Mservi!e(Dispose+-3 Mservi!e 2 null3 Msi! 2 null3 = = pu&li! PropertySpe!9: 5uildPropertySpe!4rray+string9:9: typein o; 66 Climinate dupli!ates @as$ta&le tIn o 2 ne# @as$ta&le+-3 or +int ti 2 K3 ti P typein o(Eengt$3 QQti; @as$ta&le props 2 +@as$ta&le-tIn o9typein o9ti:9K::3 i +props 22 null; props 2 ne# @as$ta&le+-3 tIn o9typein o9ti:9K:: 2 props3 = &ool typeS*ipped 2 alse3 or +int pi 2 K3 pi P typein o9ti:(Eengt$3 QQpi; String prop 2 typein o9ti:9pi:3 i +typeS*ipped-

; i +Oprops(Contains+prop-; 66 some value, not important props9prop: 2 String(Cmpty3 = = else ; typeS*ipped 2 true3 = = = 66 Create PropertySpe!s 4rrayEist pSpe!s 2 ne# 4rrayEist+-3 orea!$ +String type in tIn o(Keys; PropertySpe! pSpe! 2 ne# PropertySpe!+-3 @as$ta&le props 2 +@as$ta&le-tIn o9type:3 pSpe!(type 2 type3 pSpe!(all 2 props(Count 22 K F true : alse3 pSpe!(pat$Set 2 ne# String9props(Count:3 int inde0 2 K3 orea!$ +String prop in props(Keys; pSpe!(pat$Set9inde0QQ: 2 prop3 = pSpe!s(4dd+pSpe!-3 = return +PropertySpe!9:-pSpe!s()o4rray+typeo +PropertySpe!--3 = pu&li! Sele!tionSpe!9: &uildFull)raversal+; 66 Re!urse t$roug$ all Resour!ePools )raversalSpe! rp)oVm 2 ne# )raversalSpe!+-3 rp)oVm(name 2 <rp)oVm<3 rp)oVm(type 2 <Resour!ePool<3 rp)oVm(pat$ 2 <vm<3 rp)oVm(s*ip 2 alse3 rp)oVm(s*ipSpe!i ied 2 true3 66 Re!urse t$roug$ all Resour!ePools )raversalSpe! rp)oRp 2 ne# )raversalSpe!+-3 rp)oRp(name 2 <rp)oRp<3 rp)oRp(type 2 <Resour!ePool<3 rp)oRp(pat$ 2 <resour!ePool<3 rp)oRp(s*ip 2 alse3 rp)oRp(s*ipSpe!i ied 2 true3 rp)oRp(sele!tSet 2 ne# Sele!tionSpe!9: ; ne# Sele!tionSpe!+-, ne# Sele!tionSpe!+- =3

rp)oRp(sele!tSet9K:(name 2 <rp)oRp<3 rp)oRp(sele!tSet9B:(name 2 <rp)oVm<3 66 )raversal t$roug$ Resour!ePool &ran!$ )raversalSpe! !r)oRp 2 ne# )raversalSpe!+-3 !r)oRp(name 2 <!r)oRp<3 !r)oRp(type 2 <ComputeResour!e<3 !r)oRp(pat$ 2 <resour!ePool<3 !r)oRp(s*ip 2 alse3 !r)oRp(s*ipSpe!i ied 2 true3 !r)oRp(sele!tSet 2 ne# Sele!tionSpe!9: ; ne# Sele!tionSpe!+-, ne# Sele!tionSpe!+- =3 !r)oRp(sele!tSet9K:(name 2 <rp)oRp<3 !r)oRp(sele!tSet9B:(name 2 <rp)oVm<3 66 )raversal t$roug$ $ost &ran!$ )raversalSpe! !r)o@ 2 ne# )raversalSpe!+-3 !r)o@(name 2 <!r)o@<3 !r)o@(type 2 <ComputeResour!e<3 !r)o@(pat$ 2 <$ost<3 !r)o@(s*ip 2 alse3 !r)o@(s*ipSpe!i ied 2 true3 66 )raversal t$roug$ $ostFolder &ran!$ )raversalSpe! d!)o@ 2 ne# )raversalSpe!+-3 d!)o@ (name 2 <d!)o@ <3 d!)o@ (type 2 <Data!enter<3 d!)o@ (pat$ 2 <$ostFolder<3 d!)o@ (s*ip 2 alse3 d!)o@ (s*ipSpe!i ied 2 true3 d!)o@ (sele!tSet 2 ne# Sele!tionSpe!9: ; ne# Sele!tionSpe!+- =3 d!)o@ (sele!tSet9K:(name 2 <visitFolders<3 66 )raversal t$roug$ vmFolder &ran!$ )raversalSpe! d!)oVm 2 ne# )raversalSpe!+-3 d!)oVm (name 2 <d!)oVm <3 d!)oVm (type 2 <Data!enter<3 d!)oVm (pat$ 2 <vmFolder<3 d!)oVm (s*ip 2 alse3 d!)oVm (s*ipSpe!i ied 2 true3 d!)oVm (sele!tSet 2 ne# Sele!tionSpe!9: ; ne# Sele!tionSpe!+- =3 d!)oVm (sele!tSet9K:(name 2 <visitFolders<3 66 Re!urse t$roug$ all @osts )raversalSpe! @)oVm 2 ne# )raversalSpe!+-3 @)oVm(name 2 <@)oVm<3 @)oVm(type 2 <@ostSystem<3 @)oVm(pat$ 2 <vm<3 @)oVm(s*ip 2 alse3 @)oVm(sele!tSet 2 ne# Sele!tionSpe!9: ; ne# Sele!tionSpe!+- =3 @)oVm(sele!tSet9K:(name 2 <visitFolders<3

66 Re!urse t$roug$ t$e olders )raversalSpe! visitFolders 2 ne# )raversalSpe!+-3 visitFolders(name 2 <visitFolders<3 visitFolders(type 2 <Folder<3 visitFolders(pat$ 2 <!$ildCntity<3 visitFolders(s*ip 2 alse3 visitFolders(s*ipSpe!i ied 2 true3 visitFolders(sele!tSet 2 ne# Sele!tionSpe!9: ; ne# Sele!tionSpe!+-, ne# Sele!tionSpe!+-, ne# Sele!tionSpe!+-, ne# Sele!tionSpe!+-, ne# Sele!tionSpe!+-, ne# Sele!tionSpe!+-, ne# Sele!tionSpe!+- =3 visitFolders(sele!tSet9K:(name 2 <visitFolders<3 visitFolders(sele!tSet9B:(name 2 <d!)o@ <3 visitFolders(sele!tSet9A:(name 2 <d!)oVm <3 visitFolders(sele!tSet91:(name 2 <!r)o@<3 visitFolders(sele!tSet9R:(name 2 <!r)oRp<3 visitFolders(sele!tSet9J:(name 2 <@)oVm<3 visitFolders(sele!tSet9S:(name 2 <rp)oVm<3 return ne# Sele!tionSpe!9: ; visitFolders, d!)oVm , d!)o@ , !r)o@, !r)oRp, rp)oRp, @)oVm, rp)oVm =3 = pu&li! %&'e!tContent9: GetContentsRe!ursively+"anaged%&'e!tRe eren!e !olle!tor, "anaged%&'e!tRe eren!e root, string9:9: typein o, &ool re!urse; i +typein o 22 null TT typein o(Eengt$ 22 K; return null3 = "anaged%&'e!tRe eren!e use!oll 2 !olle!tor3 i +use!oll 22 null; use!oll 2 Msi!(propertyColle!tor3 = "anaged%&'e!tRe eren!e useroot 2 root3 i +useroot 22 null; useroot 2 Msi!(rootFolder3 = Sele!tionSpe!9: sele!tionSpe!s 2 null3 i +re!urse; sele!tionSpe!s 2 &uildFull)raversal+-3 = PropertySpe!9: propspe!ary 2 5uildPropertySpe!4rray+typein o-3 PropertyFilterSpe! spe! 2 ne# PropertyFilterSpe!+-3 spe!(propSet 2 propspe!ary3 spe!(o&'e!tSet 2 ne# %&'e!tSpe!9: ; ne# %&'e!tSpe!+- =3 spe!(o&'e!tSet9K:(o&' 2 useroot3 spe!(o&'e!tSet9K:(s*ip 2 alse3 spe!(o&'e!tSet9K:(sele!tSet 2 sele!tionSpe!s3

66spe!(o&'e!tSet9K:(sele!tSet 2 ne# Sele!tionSpe!9: ; traversalSpe! =3 %&'e!tContent9: reto! 2 Mservi!e(RetrieveProperties+use!oll, ne# PropertyFilterSpe!9: ; spe! =-3 return reto!3 = pu&li! "anaged%&'e!tRe eren!e GetDe!endent"oRe +"anaged%&'e!tRe eren!e root, string type, string name; i +name 22 null TT name(Eengt$ 22 K; return null3 = string9:9: typein o 2 ne# string9:9: ; ne# string9: ; type, <name<, =, =3 %&'e!tContent9: o!ary 2 GetContentsRe!ursively+null, root, typein o, true-3 i +o!ary 22 null TT o!ary(Eengt$ 22 K; return null3 = %&'e!tContent o! 2 null3 "anaged%&'e!tRe eren!e mor 2 null3 Dynami!Property9: propary 2 null3 string propval 2 null3 &ool ound 2 alse3 or +int o!i 2 K3 o!i P o!ary(Eengt$ UU O ound3 o!iQQ; o! 2 o!ary9o!i:3 mor 2 o!(o&'3 propary 2 o!(propSet3 i ++type 22 null- TT +type O2 null UU mor(type(CDuals+type--; i +propary(Eengt$ V K; propval 2 +string-propary9K:(val3 = ound 2 propval O2 null UU name(CDuals+propval-3 propval 2 null3 = = i +O ound; mor 2 null3 = return mor3 =

pu&li! stati! %&'e!t9: getProperties+"anaged%&'e!tRe eren!e moRe , String9: properties; 66 PropertySpe! spe!i ies #$at properties to 66 retrieve and rom type o "anaged %&'e!t PropertySpe! pSpe! 2 ne# PropertySpe!+-3 pSpe!(type 2 moRe (type3 pSpe!(pat$Set 2 properties3 66 %&'e!tSpe! spe!i ies t$e starting o&'e!t and 66 any )raversalSpe!s used to spe!i y ot$er o&'e!ts 66 or !onsideration %&'e!tSpe! oSpe! 2 ne# %&'e!tSpe!+-3 oSpe!(o&' 2 moRe 3 66 PropertyFilterSpe! is used to $old t$e %&'e!tSpe! and 66 PropertySpe! or t$e !all PropertyFilterSpe! p Spe! 2 ne# PropertyFilterSpe!+-3 p Spe!(propSet 2 ne# PropertySpe!9: ; pSpe! =3 p Spe!(o&'e!tSet 2 ne# %&'e!tSpe!9: ; oSpe! =3 "anaged%&'e!tRe eren!e Msv!Re B 2 ne# "anaged%&'e!tRe eren!e+-3 Msv!Re B(type 2 <Servi!eInstan!e<3 Msv!Re B(Value 2 <Servi!eInstan!e<3 Servi!eContent si!B 2 Mservi!e(RetrieveServi!eContent+Msv!Re B-3 %&'e!tContent9: o!s 2 ne# %&'e!tContent9AK:3 o!s 2 Mservi!e(RetrieveProperties+si!B(propertyColle!tor, ne# PropertyFilterSpe!9: ; p Spe! =-3 66 Return value, one o&'e!t or ea!$ property spe!i ied %&'e!t9: ret 2 ne# %&'e!t9properties(Eengt$:3 i +o!s O2 null; or +int i 2 K3 i P o!s(Eengt$3 QQi; %&'e!tContent o! 2 o!s9i:3 Dynami!Property9: dps 2 o!(propSet3 i +dps O2 null; or +int ' 2 K3 ' P dps(Eengt$3 QQ'; Dynami!Property dp 2 dps9':3 66 ind property pat$ inde0 or +int p 2 K3 p P ret(Eengt$3 QQp; i +properties9p:(CDuals+dp(name-; ret9p: 2 dp(val3 = = = = = = return ret3 =

private void print$sIn o+string $sname; "anaged%&'e!tRe eren!e $sRe 2 ne# "anaged%&'e!tRe eren!e+-3 66 Get $ost "%R $sRe 2 GetDe!endent"oRe +Msi!(rootFolder, <@ostSystem<, $sname-3 i +$sRe O2 null; 66Get Virtual "a!$ine properties %&'e!t9: VmEist4rray 2 getProperties+$sRe , ne# string9: ;<vm<=-3 "anaged%&'e!tRe eren!e9: VmEist 2 +"anaged%&'e!tRe eren!e9:-VmEist4rray9K:3 or +int i 2 K3 i P VmEist(Eengt$3 iQQ; Console(7riteEine+<Virtual ma!$ine: < Q +iQB--3 "anaged%&'e!tRe eren!e Vmre 2 +"anaged%&'e!tRe eren!e-VmEist9i:3 %&'e!t9: properties 2 getProperties+Vmre , ne# string9: ;<!on ig(name<,<runtime(po#erState< =-3 Console(7riteEine+<WnV" name: < Q properties9K: Q <WnPo#er State: < Q properties9B: -3 = Console(Read+-3 = else ; Console(7riteEine+<)$e $ost #it$ t$e spe!i ied name does not e0ist<-3 = = stati! void "ain+string9: args; V"list vmIn o 2 ne# V"list+-3 vmIn o(!onne!t+args9K:, args9B:, args9A:-3 i +vmIn o(Msession O2 null; vmIn o(print$sIn o+args91:-3 66Dis!onne!t rom t$e server vmIn o(Dis!onne!t+-3 = = = pu&li! !lass CertPoli!y : ICerti i!atePoli!y ; private enum Certi i!atePro&lem : uint ; CertCIPIRCD 2 K0XKK5KBKB,

CertV4EIDI)GPCRI%D,CS)I,G 2 K0XKK5KBKA, CertR%EC 2 K0XKK5KBK1, CertP4)@EC,C%,S) 2 K0XKK5KBKR, CertCRI)IC4E 2 K0XKK5KBKJ, CertPNRP%SC 2 K0XKK5KBKS, CertISSNCRC@4I,I,G 2 K0XKK5KBKY, Cert"4EF%R"CD 2 K0XKK5KBKX, CertN,)RNS)CDR%%) 2 K0XKK5KBKL, CertC@4I,I,G 2 K0XKK5KBK4, CertRCV%KCD 2 K0XKK5KBKC, CertN,)RNS)CD)CS)R%%) 2 K0XKK5KBKD, CertRCV%C4)I%,MF4IENRC 2 K0XKK5KBKC, CertC,M,%M"4)C@ 2 K0XKK5KBKF, Cert7R%,GMNS4GC 2 K0XKK5KBBK, CertN,)RNS)CDC4 2 K0XKK5KBBA = private stati! @as$ta&le pro&lemAte0tM3 private @as$ta&le reDuestApro&lemsM3 66 7e&ReDuest ZV 4rrayEist o error !odes pu&li! CertPoli!y+; i +pro&lemAte0tM 22 null; pro&lemAte0tM 2 ne# @as$ta&le+-3 pro&lemAte0tM(4dd++uint-Certi i!atePro&lem(CertCIPIRCD, <4 reDuired !erti i!ate is not #it$in its validity period(<-3 pro&lemAte0tM(4dd++uint-Certi i!atePro&lem(CertV4EIDI)GPCRI%D,CS)I,G, <)$e validity periods o t$e !erti i!ation !$ain do not nest !orre!tly(<-3 pro&lemAte0tM(4dd++uint-Certi i!atePro&lem(CertR%EC, <4 !erti i!ate t$at !an only &e used as an endZentity is &eing used as a C4 or visa versa(<-3 pro&lemAte0tM(4dd++uint-Certi i!atePro&lem(CertP4)@EC,C%,S), <4 pat$ lengt$ !onstraint in t$e !erti i!ation !$ain $as &een violated(<-3 pro&lemAte0tM(4dd++uint-Certi i!atePro&lem(CertCRI)IC4E, <4n e0tension o un*no#n type t$at is la&eled 8!riti!al8 is present in a !erti i!ate(<-3 pro&lemAte0tM(4dd++uint-Certi i!atePro&lem(CertPNRP%SC, <4 !erti i!ate is &eing used or a purpose ot$er t$an t$at or #$i!$ it is permitted(<-3 pro&lemAte0tM(4dd++uint-Certi i!atePro&lem(CertISSNCRC@4I,I,G, <4 parent o a given !erti i!ate in a!t did not issue t$at !$ild !erti i!ate(<-3 pro&lemAte0tM(4dd++uint-Certi i!atePro&lem(Cert"4EF%R"CD, <4 !erti i!ate is missing or $as an empty value or an important ield, su!$ as a su&'e!t or issuer name(<-3 pro&lemAte0tM(4dd++uint-Certi i!atePro&lem(CertN,)RNS)CDR%%), <4 !erti i!ation !$ain pro!essed !orre!tly, &ut terminated in a root !erti i!ate #$i!$ isn8t trusted &y t$e trust provider(<-3 pro&lemAte0tM(4dd++uint-Certi i!atePro&lem(CertC@4I,I,G, <4 !$ain o !erts didn8t !$ain as t$ey s$ould in a !ertain appli!ation o !$aining(<-3 pro&lemAte0tM(4dd++uint-Certi i!atePro&lem(CertRCV%KCD, <4 !erti i!ate #as e0pli!itly revo*ed &y its issuer(<-3 pro&lemAte0tM(4dd++uint-Certi i!atePro&lem(CertN,)RNS)CD)CS)R%%), <)$e root !erti i!ate is a testing !erti i!ate and t$e poli!y settings disallo# test !erti i!ates(<-3 pro&lemAte0tM(4dd++uint-Certi i!atePro&lem(CertRCV%C4)I%,MF4IENRC, <)$e revo!ation pro!ess !ould not !ontinue Z t$e !erti i!ate+s- !ould not &e !$e!*ed(<-3 pro&lemAte0tM(4dd++uint-Certi i!atePro&lem(CertC,M,%M"4)C@, <)$e !erti i!ate8s C, name does not mat!$ t$e passed value(<-3

pro&lemAte0tM(4dd++uint-Certi i!atePro&lem(Cert7R%,GMNS4GC, <)$e !erti i!ate is not valid or t$e reDuested usage(<-3 pro&lemAte0tM(4dd++uint-Certi i!atePro&lem(CertN,)RNS)CDC4, <Nntrusted C4<-3 = reDuestApro&lemsM 2 ne# @as$ta&le+-3 = 66 ICerti i!atePoli!y pu&li! &ool C$e!*ValidationResult+Servi!ePoint sp, IJKLCerti i!ate !ert, 7e&ReDuest reDuest, int pro&lem; i +pro&lem 22 K; 66 C$e!* #$et$er #e $ave a!!umulated any pro&lems so ar: 4rrayEist pro&lem4rray 2 +4rrayEist-reDuestApro&lemsM9reDuest:3 i +pro&lem4rray 22 null; 66 ,o pro&lems so ar return true3 = string pro&lemEist 2 <<3 orea!$ +uint pro&lemCode in pro&lem4rray; string pro&lem)e0t 2 +string-pro&lemAte0tM9pro&lemCode:3 i +pro&lem)e0t 22 null; pro&lem)e0t 2 <Nn*no#n pro&lem<3 = pro&lemEist Q2 <[ < Q pro&lem)e0t Q <WnWn<3 = reDuestApro&lemsM(Remove+reDuest-3 System(Console(7riteEine+<)$ere #ere one or more pro&lems #it$ t$e server !erti i!ate:WnWn< Q pro&lemEist-3 return true3 = else ; 66 Stas$ t$e pro&lem in t$e pro&lem array: 4rrayEist pro&lem4rray 2 +4rrayEist-reDuestApro&lemsM9reDuest:3 i +pro&lem4rray 22 null; pro&lem4rray 2 ne# 4rrayEist+-3 reDuestApro&lemsM9reDuest: 2 pro&lem4rray3 = pro&lem4rray(4dd++uint-pro&lem-3 return true3 = = = =

4 note rom our legal department a&out V"#are Sample Code:


The sample code is provided " S!"S" #or use$ modi#icatio%$ a%d redistributio% i% source a%d bi%ary #orms$ provided that the copyright %otice a%d this #ollo&i%g list o# co%ditio%s are retai%ed a%d'or reproduced i% your distributio%( To the ma)imum e)te%t permitted by la&$ *+&are$ "%c($ its subsidiaries a%d a##iliates hereby disclaim all e)press$ implied a%d'or statutory &arra%ties$ i%cludi%g duties or co%ditio%s o# mercha%tability$ #it%ess #or a particular purpose$ a%d %o%!i%#ri%geme%t o# i%tellectual property rights( ", ,O -*-,T ."LL *+. /-$ "TS S01S"2" /"-S O/ 33"L" T-S 1- L" 1L- TO ,4 OT5-/ P /T4 3O/ T5- COST O3 P/OC0/",6 S01ST"T0T- 6OO2S O/ S-/*"C-S$ LOST P/O3"TS$ LOSS O3 0S-$ LOSS O3 2 T $ O/ ,4 ",C"2-,T L$ CO,S-70-,T" L$ 2"/-CT$ ",2"/-CT$ O/ SP-C" L 2 + 6-S$ /"S",6 O0T O3 T5"S O/ ,4 OT5-/ 6/--+-,T /-L T",6 TO T5- S +PL- CO2-( 4ou agree to de#e%d$ i%dem%i#y a%d hold harmless *+&are$ a%d a%y o# its directors$ o##icers$ employees$ age%ts$ a##iliates$ or subsidiaries #rom a%d agai%st all losses$ damages$ costs a%d liabilities arisi%g #rom your use$ modi#icatio% a%d distributio% o# the sample code( *+&are does %ot certi#y or e%dorse your use o# the sample code$ %or is a%y support or other service provided i% co%%ectio% &ith the sample code(

You might also like