use of com.tvd12.ezyhttp.core.response.ResponseEntity in project ezyhttp by youngmonkeys.
the class BlockingServletTest method requestHandlerEmptyAndHasErrorHandler.
@Test
public void requestHandlerEmptyAndHasErrorHandler() throws Exception {
// given
ComponentManager componentManager = ComponentManager.getInstance();
componentManager.setServerPort(PORT);
HttpServletRequest request = mock(HttpServletRequest.class);
HttpServletResponse response = mock(HttpServletResponse.class);
UnhandledErrorHandler unhandledErrorHandler = mock(UnhandledErrorHandler.class);
ResponseEntity responseEntity = ResponseEntity.ok();
when(unhandledErrorHandler.handleError(HttpMethod.GET, request, response, HttpServletResponse.SC_METHOD_NOT_ALLOWED, null)).thenReturn(responseEntity);
componentManager.setUnhandledErrorHandler(Collections.singletonList(unhandledErrorHandler));
BlockingServlet sut = new BlockingServlet();
sut.init();
String requestURI = "/get";
when(request.getMethod()).thenReturn(HttpMethod.GET.toString());
when(request.getRequestURI()).thenReturn(requestURI);
when(request.getServerPort()).thenReturn(PORT);
when(response.getContentType()).thenReturn(ContentTypes.APPLICATION_JSON);
ServletOutputStream outputStream = mock(ServletOutputStream.class);
when(response.getOutputStream()).thenReturn(outputStream);
RequestHandlerManager requestHandlerManager = componentManager.getRequestHandlerManager();
GetRequestHandler requestHandler = new GetRequestHandler();
requestHandlerManager.addHandler(new RequestURI(HttpMethod.POST, requestURI, false), requestHandler);
// when
sut.service(request, response);
// then
verify(request, times(1)).getMethod();
verify(request, times(1)).getRequestURI();
verify(response, times(1)).setStatus(StatusCodes.OK);
componentManager.destroy();
}
use of com.tvd12.ezyhttp.core.response.ResponseEntity in project ezyhttp by youngmonkeys.
the class UnhandledErrorHandlerTest method returnResponseEntity.
@Test
public void returnResponseEntity() {
// given
ResponseEntity result = ResponseEntity.ok();
UnhandledErrorHandler sut = new UnhandledErrorHandler() {
@Override
public Object processError(HttpMethod method, HttpServletRequest request, HttpServletResponse response, int errorStatusCode, Exception exception) {
return result;
}
};
HttpServletRequest request = mock(HttpServletRequest.class);
HttpServletResponse response = mock(HttpServletResponse.class);
// when
Object actual = sut.handleError(HttpMethod.GET, request, response, StatusCodes.BAD_REQUEST, null);
// then
Asserts.assertEquals(result, actual);
verify(response, times(1)).setContentType(null);
verify(response, times(1)).setContentType(ContentTypes.APPLICATION_JSON);
}
use of com.tvd12.ezyhttp.core.response.ResponseEntity in project ezyhttp by youngmonkeys.
the class BlockingServlet method handleResponseData.
protected void handleResponseData(HttpServletRequest request, HttpServletResponse response, Object data) throws Exception {
Object body = data;
if (data instanceof ResponseEntity) {
ResponseEntity entity = (ResponseEntity) body;
body = entity.getBody();
response.setStatus(entity.getStatus());
MultiValueMap headers = entity.getHeaders();
if (headers != null) {
Map<String, String> encodedHeaders = headers.toMap();
for (Entry<String, String> entry : encodedHeaders.entrySet()) {
response.addHeader(entry.getKey(), entry.getValue());
}
}
} else if (data instanceof Redirect) {
Redirect redirect = (Redirect) data;
for (Cookie cookie : redirect.getCookies()) {
response.addCookie(cookie);
}
for (Entry<String, String> e : redirect.getHeaders().entrySet()) {
response.addHeader(e.getKey(), e.getValue());
}
Map<String, Object> attributes = redirect.getAttributes();
if (attributes != null) {
String attributesValue = objectMapper.writeValueAsString(attributes);
Cookie attributesCookie = new Cookie(CoreConstants.COOKIE_REDIRECT_ATTRIBUTES_NAME, EzyBase64.encodeUtf(attributesValue));
attributesCookie.setMaxAge(CoreConstants.COOKIE_REDIRECT_ATTRIBUTES_MAX_AGE);
response.addCookie(attributesCookie);
}
response.sendRedirect(redirect.getUri() + redirect.getQueryString());
return;
} else if (data instanceof View) {
if (viewContext == null) {
throw new IllegalStateException("viewContext is null, " + "you must add ezyhttp-server-thymeleaf to your dependencies" + " or create viewContext by yourself");
}
View view = (View) data;
for (Cookie cookie : view.getCookies()) {
response.addCookie(cookie);
}
for (Entry<String, String> e : view.getHeaders().entrySet()) {
response.addHeader(e.getKey(), e.getValue());
}
response.setContentType(view.getContentType());
viewContext.render(getServletContext(), request, response, view);
return;
} else {
response.setStatus(HttpServletResponse.SC_OK);
}
if (body != null) {
responseBody(response, body);
}
}
use of com.tvd12.ezyhttp.core.response.ResponseEntity in project ezyhttp by youngmonkeys.
the class HttpClientProxyTest method clientWasNotActiveAtExecute.
@Test
public void clientWasNotActiveAtExecute() {
// given
HttpClientProxy sut = HttpClientProxy.builder().build();
PostRequest request = new PostRequest().setConnectTimeout(15000).setEntity(String.class).setResponseType(TestResponse.class).setResponseType(StatusCodes.OK, TestResponse.class).setURL("http://127.0.0.1:18081/greet");
// when
Throwable e = Asserts.assertThrows(() -> sut.execute(request, new RequestCallback<ResponseEntity>() {
public void onException(Exception e) {
}
public void onResponse(ResponseEntity response) {
}
}));
// then
Asserts.assertThat(e).isEqualsType(ClientNotActiveException.class);
sut.close();
sut.stop();
}
use of com.tvd12.ezyhttp.core.response.ResponseEntity in project ezyhttp by youngmonkeys.
the class HttpClient method request.
@SuppressWarnings("MethodLength")
public ResponseEntity request(HttpMethod method, String url, RequestEntity entity, Map<Integer, Class<?>> responseTypes, int connectTimeout, int readTimeout) throws Exception {
if (url == null) {
throw new IllegalArgumentException("url can not be null");
}
logger.debug("start: {} - {} - {}", method, url, entity != null ? entity.getHeaders() : null);
HttpURLConnection connection = connect(url);
try {
connection.setConnectTimeout(connectTimeout > 0 ? connectTimeout : defaultConnectTimeout);
connection.setReadTimeout(readTimeout > 0 ? readTimeout : defaultReadTimeout);
connection.setRequestMethod(method.toString());
connection.setDoInput(true);
connection.setDoOutput(method.hasOutput());
connection.setInstanceFollowRedirects(method == HttpMethod.GET);
MultiValueMap requestHeaders = entity != null ? entity.getHeaders() : null;
if (requestHeaders != null) {
Map<String, String> encodedHeaders = requestHeaders.toMap();
for (Entry<String, String> requestHeader : encodedHeaders.entrySet()) {
connection.setRequestProperty(requestHeader.getKey(), requestHeader.getValue());
}
}
Object requestBody = null;
if (method != HttpMethod.GET && entity != null) {
requestBody = entity.getBody();
}
byte[] requestBodyBytes = null;
if (requestBody != null) {
String requestContentType = connection.getRequestProperty(Headers.CONTENT_TYPE);
if (requestContentType == null) {
requestContentType = ContentTypes.APPLICATION_JSON;
connection.setRequestProperty(Headers.CONTENT_TYPE, ContentTypes.APPLICATION_JSON);
}
requestBodyBytes = serializeRequestBody(requestContentType, requestBody);
int requestContentLength = requestBodyBytes.length;
connection.setFixedLengthStreamingMode(requestContentLength);
}
connection.connect();
if (requestBodyBytes != null) {
if (method.hasOutput()) {
OutputStream outputStream = connection.getOutputStream();
outputStream.write(requestBodyBytes);
outputStream.flush();
outputStream.close();
} else {
throw new IllegalArgumentException(method + " method can not have a payload body");
}
}
int responseCode = connection.getResponseCode();
Map<String, List<String>> headerFields = connection.getHeaderFields();
MultiValueMap responseHeaders = MultiValueMap.of(headerFields);
String responseContentType = responseHeaders.getValue(Headers.CONTENT_TYPE);
if (responseContentType == null) {
responseContentType = ContentTypes.APPLICATION_JSON;
}
InputStream inputStream = responseCode >= 400 ? connection.getErrorStream() : connection.getInputStream();
Object responseBody = null;
if (inputStream != null) {
try {
int responseContentLength = connection.getContentLength();
Class<?> responseType = responseTypes.get(responseCode);
responseBody = deserializeResponseBody(responseContentType, responseContentLength, inputStream, responseType);
} finally {
inputStream.close();
}
}
logger.debug("end: {} - {} - {} - {}", method, url, responseCode, responseHeaders);
return new ResponseEntity(responseCode, responseHeaders, responseBody);
} finally {
connection.disconnect();
}
}
Aggregations