1 Reply Latest reply on Jun 17, 2020 11:17 AM by jguereca

    Session not Authenticated - Client received SOAP Fault from server

    jguereca Lurker

      Hello, 

      I am attempting to retrieve HostSystem and VirtualMachine data with the web services API after using the vimport.login() method. I seem to be logging in just fine and retrieving the ServiceContent without error but when I make my API call to retrieve data, I receive the following error

      Client received SOAP Fault from server: The session is not authenticated. Please see the server log to find more detail regarding the exact cause of the failure. 

      I tried looking through the logs but did not find anything associated with that error. I was initially suspecting that I needed to add a cookie. I found an example in the web services guide for retrieving a cookie from the response headers from the RequestContext as shown below but no "Set-cookie" header exists

      requestContext = ((BindingProvider) vimPort).getResponseContext();
      headers = (Map<String, Object>) requestContext.get(MessageContext.HTTP_RESPONSE_HEADERS);
      List cookies = (List) headers.get("Set-cookie");

      Any help would be great!

        • 1. Re: Session not Authenticated - Client received SOAP Fault from server
          jguereca Lurker

          UPDATE

           

          I was able to retrieve the "Set-cookie" from the responseContext after using the _vimport.login() method and not before as the example code suggests.

           

          I am using the following code to add the cookie to the requestContext headers but I am still receiving the same SOAP Fault error

           

          Map<String, Object> responseContext = ((BindingProvider) _vimPort).getResponseContext();

          headers = (Map<String, Object>) responseContext.get(MessageContext.HTTP_RESPONSE_HEADERS);

          List cookies = (List) headers.get("Set-cookie");

          String cookieValue = (String) cookies.get(0);

          StringTokenizer tokenizer = new StringTokenizer(cookieValue, ";");

          cookieValue = tokenizer.nextToken(); String path = "$" + tokenizer.nextToken();

          String cookie = "$Version=\"1\"; " + cookieValue + "; " + path;

           

          // set the cookie in the new request header Map<String, List> reqHeadrs = new HashMap<>();

          reqHeadrs.put("Cookie", Collections.singletonList(cookie));

           

          // Add session cookie back into the request context Map<String, Object> reqContext =  ((BindingProvider) _vimPort).getRequestContext(); reqContext.put(MessageContext.HTTP_REQUEST_HEADERS, reqHeadrs);