private void waitForRequestSent() { log.trace("waitForRequestSent()"); try { httpSenderGate.await(); } catch (InterruptedException e) { log.error("waitForRequestSent interrupted", e); Thread.currentThread().interrupt(); } }
private void waitForSoapMessage() { log.trace("waitForSoapMessage()"); try { if (!requestHandlerGate.await(WAIT_FOR_SOAP_TIMEOUT, TimeUnit.SECONDS)) { throw new CodedException(X_INTERNAL_ERROR, "Reading SOAP from request timed out"); } } catch (InterruptedException e) { log.error("waitForSoapMessage interrupted", e); Thread.currentThread().interrupt(); } }
@Override public void process() throws Exception { log.trace("process()"); HandlerThread handlerThread = new HandlerThread(); handlerThread.setName(Thread.currentThread().getName() + "-soap"); handlerThread.start(); try { // Wait for the request SOAP message to be parsed before we can // start sending stuff. waitForSoapMessage(); // If the handler thread excepted, do not continue. checkError(); // Verify that the client is registered verifyClientStatus(); // Check client authentication mode verifyClientAuthentication(); // If the message is synchronous, start sending proxy message if (!isAsync) { processRequest(); } if (response != null) { sendResponse(); } } catch (Exception e) { if (reqIns != null) { reqIns.close(); } // Let's interrupt the handler thread so that it won't // block forever waiting for us to do something. handlerThread.interrupt(); throw e; } finally { handlerThread.join(); if (response != null) { response.consume(); } } }