This example shows the complete sample client application code, without the explanatory steps. The example opens a connection with the server, retrieves the service content, uses the session manager managed object reference to log in, displays information about the server, and closes the connection.
Java Test Client Application
import com.vmware.vim25.*; import java.util.*; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLSession; import javax.xml.ws.BindingProvider; import javax.xml.ws.soap.SOAPFaultException; public class TestClient { // Authentication is handled by using a TrustManager and supplying // a host name verifier method. (The host name verifier is declared // in the main function.) private static class TrustAllTrustManager implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) { return true; } public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) { return true; } public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { return; } public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { return; } }// end class TrustAllTrustManager public static void main(String[] args) { try { // Server URL and credentials. String serverName = args[0]; String userName = args[1]; String password = args[2]; String url = "https://"+serverName+"/sdk/vimService"; // Variables of the following types for access to the API methods // and to the vSphere inventory. // -- ManagedObjectReference for the ServiceInstance on the Server // -- VimService for access to the vSphere Web service // -- VimPortType for access to methods // -- ServiceContent for access to managed object services ManagedObjectReference SVC_INST_REF = new ManagedObjectReference(); VimService vimService; VimPortType vimPort; ServiceContent serviceContent; // Declare a host name verifier that will automatically enable // the connection. The host name verifier is invoked during // the SSL handshake. HostnameVerifier hv = new HostnameVerifier() { public boolean verify(String urlHostName, SSLSession session) { return true; } }; // Create the trust manager. javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1]; javax.net.ssl.TrustManager tm = new TrustAllTrustManager(); trustAllCerts[0] = tm; // Create the SSL context javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL"); // Create the session context javax.net.ssl.SSLSessionContext sslsc = sc.getServerSessionContext(); // Initialize the contexts; the session context takes the trust manager. sslsc.setSessionTimeout(0); sc.init(null, trustAllCerts, null); // Use the default socket factory to create the socket for the secure connection javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // Set the default host name verifier to enable the connection. HttpsURLConnection.setDefaultHostnameVerifier(hv); // Set up the manufactured managed object reference for the ServiceInstance SVC_INST_REF.setType("ServiceInstance"); SVC_INST_REF.setValue("ServiceInstance"); // Create a VimService object to obtain a VimPort binding provider. // The BindingProvider provides access to the protocol fields // in request/response messages. Retrieve the request context // which will be used for processing message requests. vimService = new VimService(); vimPort = vimService.getVimPort(); Map<String, Object> ctxt = ((BindingProvider) vimPort).getRequestContext(); // Store the Server URL in the request context and specify true // to maintain the connection between the client and server. // The client API will include the Server's HTTP cookie in its // requests to maintain the session. If you do not set this to true, // the Server will start a new session with each request. ctxt.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url); ctxt.put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true); // Retrieve the ServiceContent object and login serviceContent = vimPort.retrieveServiceContent(SVC_INST_REF); vimPort.login(serviceContent.getSessionManager(), userName, password, null); // print out the product name, server type, and product version System.out.println(serviceContent.getAbout().getFullName()); System.out.println("Server type is " + serviceContent.getAbout().getApiType()); System.out.println("API version is " + serviceContent.getAbout().getVersion()); // close the connection vimPort.logout(serviceContent.getSessionManager()); } catch (Exception e) { System.out.println(" Connect Failed "); e.printStackTrace(); } }//end main() }// end class TestClient
// See Obtaining a Session Token - Code Fragments from VMPromoteDisks.java for more details.