use of com.vmware.pbm.PbmService in project photon-model by vmware.
the class BasicConnection method _connect.
@SuppressWarnings("unchecked")
private void _connect() throws RuntimeFaultFaultMsg, InvalidLocaleFaultMsg, InvalidLoginFaultMsg, com.vmware.pbm.RuntimeFaultFaultMsg {
if (this.token != null) {
/* This lock exists because header handlers are set per VimService.
LoginByToken and normal login with username and password are using different sets of
header handlers. If the correct handlers are not set, the connection will fail */
synchronized (BasicConnection.class) {
HandlerResolver defaultResolver = getVimService().getHandlerResolver();
HeaderHandlerResolver handlerResolver = new HeaderHandlerResolver();
handlerResolver.addHandler(new TimeStampHandler());
handlerResolver.addHandler(new SamlTokenExtractionHandler());
try {
handlerResolver.addHandler(new SamlTokenHandler(SamlUtils.createSamlDocument(this.token).getDocumentElement()));
getVimService().setHandlerResolver(handlerResolver);
} catch (ParserConfigurationException | SAXException | IOException e) {
throw new RuntimeFaultFaultMsg("Unable to authenticate", e);
}
this.vimPort = getVimService().getVimPort();
updateBindingProvider(getBindingsProvider(), this.uri.toString());
this.serviceContent = this.vimPort.retrieveServiceContent(this.getServiceInstanceReference());
try {
this.userSession = this.vimPort.loginByToken(this.serviceContent.getSessionManager(), null);
} finally {
getVimService().setHandlerResolver(defaultResolver);
}
}
} else {
this.vimPort = getVimService().getVimPort();
updateBindingProvider(getBindingsProvider(), this.uri.toString());
this.serviceContent = this.vimPort.retrieveServiceContent(this.getServiceInstanceReference());
this.userSession = this.vimPort.login(this.serviceContent.getSessionManager(), this.username, this.password, null);
}
this.headers = (Map<String, List<String>>) getBindingsProvider().getResponseContext().get(MessageContext.HTTP_RESPONSE_HEADERS);
// Need to extract only the cookie value
List<String> cookieHeaders = this.headers.getOrDefault(HttpHeaderNames.SET_COOKIE.toString(), Collections.EMPTY_LIST);
if (cookieHeaders.isEmpty()) {
throw new RuntimeFaultFaultMsg("Failure in connecting to server, no session cookie found");
}
String cookieVal = cookieHeaders.get(0);
String[] tokens = cookieVal.split(";");
tokens = tokens[0].split("=");
String extractedCookie = tokens[1];
// PbmPortType
this.pbmService = new PbmService();
// Setting the header resolver for adding the VC session cookie to the
// requests for authentication
HeaderHandlerResolver headerResolver = new HeaderHandlerResolver();
headerResolver.addHandler(new VcSessionHandler(extractedCookie));
this.pbmService.setHandlerResolver(headerResolver);
this.pbmPort = this.pbmService.getPbmPort();
updateBindingProvider((BindingProvider) this.pbmPort, this.getSpbmURL().toString());
this.pbmServiceContent = this.pbmPort.pbmRetrieveServiceContent(this.getPbmServiceInstanceReference());
}
Aggregations