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.