@Override @SuppressWarnings("unchecked") public Response handle(Request request) { final Action action = request.getBody().getAction(); try { return Optional.ofNullable(requestHandlersMapper.requestHandlerMap().get(action)) .map(handler -> handler.handle(request)) .orElseThrow(() -> new RuntimeException("Action '" + action + "' is not supported.")); } catch (Exception e) { logger.error("Unable to handle request.", e); return Response.newBuilder() .withBody(new ErrorResponse(e.getMessage())) .withLast(true) .buildFailed(HttpStatus.INTERNAL_SERVER_ERROR.value()); } } }
private Response handleClientRequest(Request request) { Response response; try { response = Optional.ofNullable(requestHandler.handle(request)) .orElseThrow(() -> new NullPointerException("Response must not be null")); } catch (Exception e) { logger.error("Unexpected exception occurred during request handling (action='{}', handler='{}')", request.getBody().getAction().name(), requestHandler.getClass().getCanonicalName(), e); response = Response.newBuilder() .withLast(request.isSingleReplyExpected()) .buildFailed(500); } return response; }
private Response handleClientRequest(Request request) { Response response; final Action action = request.getBody().getAction(); RequestHandler requestHandler = requestHandlersMapper.requestHandlerMap().get(action); if (requestHandler == null) { throw new RuntimeException("Action '" + action + "' is not supported."); } try { response = Optional.ofNullable(requestHandler.handle(request)) .orElseThrow(() -> new NullPointerException("Response must not be null")); } catch (Exception e) { logger.error("Unexpected exception occurred during request handling (action='{}', handler='{}')", request.getBody().getAction().name(), requestHandler.getClass().getCanonicalName(), e); response = Response.newBuilder() .withLast(request.isSingleReplyExpected()) .buildFailed(500); } return response; } }
@Override public void onEvent(ServerEvent serverEvent) throws Exception { final Request request = serverEvent.get(); final String replyTo = request.getReplyTo(); Response response; switch (request.getType()) { case clientRequest: logger.debug("Client request received {}", request); response = handleClientRequest(request); break; case ping: logger.info("Ping request received from {}", replyTo); response = Response.newBuilder().buildSuccess(); break; default: logger.warn("Unknown type of request received {} from client with topic {}, correlationId = {}", request.getType(), replyTo, request.getCorrelationId()); response = Response.newBuilder() .buildFailed(404); } // set correlationId explicitly to prevent missing it in request response.setCorrelationId(request.getCorrelationId()); ProxyMessage responseMessage = ProxyMessageBuilder.notification(new NotificationCreatePayload(replyTo, gson.toJson(response))); proxyClient.push(responseMessage); }
@Override public void onEvent(ServerEvent event) throws Exception { final Request request = event.get(); final String replyTo = request.getReplyTo(); Response response; switch (request.getType()) { case clientRequest: logger.debug("Client request received {}", request); response = handleClientRequest(request); break; case ping: logger.info("Ping request received from {}", replyTo); response = Response.newBuilder().buildSuccess(); break; default: logger.warn("Unknown type of request received {} from client with topic {}, correlationId = {}", request.getType(), replyTo, request.getCorrelationId()); response = Response.newBuilder() .buildFailed(404); } // set correlationId explicitly to prevent missing it in request response.setCorrelationId(request.getCorrelationId()); send(replyTo, response); }