public void close() { try { if (sessionKey != RexProMessage.EMPTY_SESSION) { SessionRequestMessage sessionKillMessageToSend = new SessionRequestMessage(); sessionKillMessageToSend.metaSetKillSession(true); sessionKillMessageToSend.setRequestAsUUID(UUID.randomUUID()); // need to set the session here so that the server knows which one to delete. sessionKillMessageToSend.setSessionAsUUID(this.sessionKey); final RexProMessage rcvMessage = sendRequest(sessionKillMessageToSend, 3); // response message will have an EMPTY_SESSION if (rcvMessage instanceof SessionResponseMessage) { this.sessionKey = rcvMessage.sessionAsUUID(); } rexProConnection.close(); rexProConnection = null; } } catch (Exception ex) { // likely fail is a null pointer on the session } finally { this.sessionKey = RexProMessage.EMPTY_SESSION; } }