baseRequest.setHandled(true); response.setStatus(jsonResponse.getStatusCode()); response.getWriter().println(jsonResponse.getResponse());
private HandlerResponse<T> createErrorResponse(Exception e, int statusCode) { ErrorResponse errorResp = unwrapException(e); try { return new HandlerResponse<>(encode(errorResp), statusCode); } catch (IOException e1) { // TODO provide a canned ErrorResponse // If we can't serialize the error message, we can't give a meaningful error to caller. // Just try to not unnecessarily create more exceptions. if (e instanceof RuntimeException) { throw (RuntimeException) e; } throw new RuntimeException(e); } }
baseRequest.setHandled(true); response.setStatus(jsonResponse.getStatusCode()); response.getWriter().println(jsonResponse.getResponse());
byte[] serializedResponse = handlerResponse.getResponse(); assertEquals(200, handlerResponse.getStatusCode());
response.setStatus(handlerResponse.getStatusCode()); response.getOutputStream().write(handlerResponse.getResponse());
byte[] serializedResponse = handlerResponse.getResponse(); assertEquals(200, handlerResponse.getStatusCode());
byte[] serializedResponse = handlerResponse.getResponse(); assertEquals(200, handlerResponse.getStatusCode());
response.setStatus(handlerResponse.getStatusCode()); response.getOutputStream().write(handlerResponse.getResponse());
return new HandlerResponse<>(encode(response), HTTP_OK); } catch (Exception e) { ErrorResponse errorResp = unwrapException(e); return new HandlerResponse<>(encode(errorResp), HTTP_INTERNAL_SERVER_ERROR); } catch (IOException e1) {
@Test public void testFailedResponseSerialization() throws IOException { @SuppressWarnings("unchecked") final AbstractHandler<String> handler = Mockito.mock(AbstractHandler.class); final Request request = Mockito.mock(Request.class); final Response response = Mockito.mock(Response.class); final IOException exception = new IOException(); final ErrorResponse errorResponse = Mockito.mock(ErrorResponse.class); final String serializedErrorResponse = "An ErrorResponse"; // Accept a serialized request Mockito.when(handler.apply(Mockito.anyString())).thenCallRealMethod(); // Deserialize it back into a POJO Mockito.when(handler.decode(Mockito.anyString())).thenReturn(request); // Construct the Response for that Request Mockito.when(request.accept(Mockito.nullable(Service.class))).thenReturn(response); // Throw an IOException when serializing the Response. Mockito.when(handler.encode(response)).thenThrow(exception); Mockito.when(handler.convertToErrorResponse(exception)).thenCallRealMethod(); // Convert the IOException into an ErrorResponse Mockito.when(handler.unwrapException(exception)).thenReturn(errorResponse); Mockito.when(handler.encode(errorResponse)).thenReturn(serializedErrorResponse); HandlerResponse<String> handlerResp = handler.apply("this is mocked out"); assertEquals(500, handlerResp.getStatusCode()); assertEquals(serializedErrorResponse, handlerResp.getResponse()); }
@Test public void testFailedResponseSerialization() throws IOException { @SuppressWarnings("unchecked") final AbstractHandler<String> handler = Mockito.mock(AbstractHandler.class); final Request request = Mockito.mock(Request.class); final Response response = Mockito.mock(Response.class); final IOException exception = new IOException(); final ErrorResponse errorResponse = Mockito.mock(ErrorResponse.class); final String serializedErrorResponse = "An ErrorResponse"; // Accept a serialized request Mockito.when(handler.apply(Mockito.anyString())).thenCallRealMethod(); // Deserialize it back into a POJO Mockito.when(handler.decode(Mockito.anyString())).thenReturn(request); // Construct the Response for that Request Mockito.when(request.accept(Mockito.nullable(Service.class))).thenReturn(response); // Throw an IOException when serializing the Response. Mockito.when(handler.encode(response)).thenThrow(exception); Mockito.when(handler.convertToErrorResponse(exception)).thenCallRealMethod(); // Convert the IOException into an ErrorResponse Mockito.when(handler.unwrapException(exception)).thenReturn(errorResponse); Mockito.when(handler.encode(errorResponse)).thenReturn(serializedErrorResponse); HandlerResponse<String> handlerResp = handler.apply("this is mocked out"); assertEquals(500, handlerResp.getStatusCode()); assertEquals(serializedErrorResponse, handlerResp.getResponse()); }
@Test public void testFailedResponseSerialization() throws IOException { @SuppressWarnings("unchecked") final AbstractHandler<String> handler = Mockito.mock(AbstractHandler.class); final Request request = Mockito.mock(Request.class); final Response response = Mockito.mock(Response.class); final IOException exception = new IOException(); final ErrorResponse errorResponse = Mockito.mock(ErrorResponse.class); final String serializedErrorResponse = "An ErrorResponse"; // Accept a serialized request Mockito.when(handler.apply(Mockito.anyString())).thenCallRealMethod(); // Deserialize it back into a POJO Mockito.when(handler.decode(Mockito.anyString())).thenReturn(request); // Construct the Response for that Request Mockito.when(request.accept(Mockito.any(Service.class))).thenReturn(response); // Throw an IOException when serializing the Response. Mockito.when(handler.encode(response)).thenThrow(exception); // Convert the IOException into an ErrorResponse Mockito.when(handler.unwrapException(exception)).thenReturn(errorResponse); Mockito.when(handler.encode(errorResponse)).thenReturn(serializedErrorResponse); HandlerResponse<String> handlerResp = handler.apply("this is mocked out"); assertEquals(500, handlerResp.getStatusCode()); assertEquals(serializedErrorResponse, handlerResp.getResponse()); }
@Test public void testFailedRequestDeserialization() throws IOException { @SuppressWarnings("unchecked") final AbstractHandler<String> handler = Mockito.mock(AbstractHandler.class); final IOException exception = new IOException(); final ErrorResponse errorResponse = new ErrorResponse(); final String serializedErrorResponse = "Serialized ErrorResponse"; // Faked out // Accept a serialized request Mockito.when(handler.apply(Mockito.anyString())).thenCallRealMethod(); // Throw an Exception trying to convert it back into a POJO Mockito.when(handler.decode(Mockito.anyString())).thenThrow(exception); Mockito.when(handler.convertToErrorResponse(exception)).thenCallRealMethod(); Mockito.when(handler.unwrapException(exception)).thenReturn(errorResponse); Mockito.when(handler.encode(errorResponse)).thenReturn(serializedErrorResponse); HandlerResponse<String> response = handler.apply("this is mocked out"); assertEquals(serializedErrorResponse, response.getResponse()); assertEquals(500, response.getStatusCode()); } }
@Test public void testFailedRequestDeserialization() throws IOException { @SuppressWarnings("unchecked") final AbstractHandler<String> handler = Mockito.mock(AbstractHandler.class); final IOException exception = new IOException(); final ErrorResponse errorResponse = new ErrorResponse(); final String serializedErrorResponse = "Serialized ErrorResponse"; // Faked out // Accept a serialized request Mockito.when(handler.apply(Mockito.anyString())).thenCallRealMethod(); // Throw an Exception trying to convert it back into a POJO Mockito.when(handler.decode(Mockito.anyString())).thenThrow(exception); Mockito.when(handler.convertToErrorResponse(exception)).thenCallRealMethod(); Mockito.when(handler.unwrapException(exception)).thenReturn(errorResponse); Mockito.when(handler.encode(errorResponse)).thenReturn(serializedErrorResponse); HandlerResponse<String> response = handler.apply("this is mocked out"); assertEquals(serializedErrorResponse, response.getResponse()); assertEquals(500, response.getStatusCode()); } }
/** * Compute a response for the given request, handling errors generated by that computation. * * @param serializedRequest The caller's request. * @return A {@link Response} with additional context about that response. */ public HandlerResponse<T> apply(T serializedRequest) { try { final Service.Request request = decode(serializedRequest); final Service.Response response = request.accept(service); return new HandlerResponse<>(encode(response), HTTP_OK); } catch (Exception e) { return convertToErrorResponse(e); } }
/** * Compute a response for the given request, handling errors generated by that computation. * * @param serializedRequest The caller's request. * @return A {@link Response} with additional context about that response. */ public HandlerResponse<T> apply(T serializedRequest) { try { final Service.Request request = decode(serializedRequest); final Service.Response response = request.accept(service); return new HandlerResponse<>(encode(response), HTTP_OK); } catch (Exception e) { return convertToErrorResponse(e); } }
private HandlerResponse<T> createErrorResponse(Exception e, int statusCode) { ErrorResponse errorResp = unwrapException(e); try { return new HandlerResponse<>(encode(errorResp), statusCode); } catch (IOException e1) { // TODO provide a canned ErrorResponse // If we can't serialize the error message, we can't give a meaningful error to caller. // Just try to not unnecessarily create more exceptions. if (e instanceof RuntimeException) { throw (RuntimeException) e; } throw new RuntimeException(e); } }