@Override public int getRawStatusCode() { // Return the status code even if it is unknown. return status.code(); }
@Override public HttpHeaders status(HttpStatus status) { requireNonNull(status, "status"); set(HttpHeaderNames.STATUS, status.codeAsText()); return this; }
/** * Returns {@code true} if the content of the response with the given {@link HttpStatus} is expected to * be always empty (1xx, 204, 205 and 304 responses.) */ public static boolean isContentAlwaysEmpty(HttpStatus status) { if (status.codeClass() == HttpStatusClass.INFORMATIONAL) { return true; } switch (status.code()) { case 204: case 205: case 304: return true; } return false; }
@Override public HttpHeaders status(int statusCode) { final HttpStatus status = this.status = HttpStatus.valueOf(statusCode); set(HttpHeaderNames.STATUS, status.codeAsText()); return this; }
if (!nonInformationalHeadersStarted) { // If not received a non-informational header yet if (status == null || status.codeClass() == HttpStatusClass.INFORMATIONAL) { return; responseBuilder.code(status.code()); responseBuilder.message(status.reasonPhrase());
final StringBuilder message = new StringBuilder("http-status: " + httpStatus.code()); message.append(", ").append(httpStatus.reasonPhrase()).append(LINE_SEPARATOR); message.append("Caused by: ").append(LINE_SEPARATOR); message.append("grpc-status: ")
/** * Returns the {@link CircuitBreakerStrategy} that determines a {@link Response} as successful * when its {@link HttpStatus} is not {@link HttpStatusClass#SERVER_ERROR} and there was no * {@link Exception} raised. */ static CircuitBreakerStrategy onServerErrorStatus() { return onStatus( (status, thrown) -> status != null && status.codeClass() != HttpStatusClass.SERVER_ERROR); }
checkArgument(statusCode >= 0, "invalid HTTP status code: %s (expected: >= 0)", statusCode); return HttpStatus.valueOf(statusCode); }); final HttpHeaders defaultHeaders = HttpHeaders.of(defaultResponseStatus(defaultResponseStatus, method)); logger.warn("A response with HTTP status code '{}' cannot have a content. " + "Trailing headers defined at '{}' might be ignored.", defaultHeaders.status().code(), methodAlias);
private void respond(ChannelHandlerContext ctx, DecodedHttpRequest req, HttpStatus status, RequestContext reqCtx, @Nullable Throwable cause) { if (status.code() < 400) { respond(ctx, req, AggregatedHttpMessage.of(HttpHeaders.of(status)), reqCtx, cause); return; } final HttpData content; if (req.method() == HttpMethod.HEAD || ArmeriaHttpUtil.isContentAlwaysEmpty(status)) { content = HttpData.EMPTY_DATA; } else { content = status.toHttpData(); } respond(ctx, req, AggregatedHttpMessage.of( HttpHeaders.of(status) .contentType(ERROR_CONTENT_TYPE), content), reqCtx, cause); }
private static HttpResponse newResponse0(HttpStatus status, @Nullable Throwable cause, @Nullable String message) { final ObjectNode node = JsonNodeFactory.instance.objectNode(); if (cause != null) { node.put("exception", cause.getClass().getName()); if (message == null) { message = cause.getMessage(); } } node.put("message", message != null ? message : status.reasonPhrase()); // TODO(minwoox) refine the error message try { return HttpResponse.of(status, MediaType.JSON_UTF_8, Jackson.writeValueAsBytes(node)); } catch (JsonProcessingException e) { // should not reach here throw new Error(e); } }
Builder addHttpStatus(String text) { final HttpStatus s = HttpStatus.valueOf(Integer.valueOf(text)); statusSet.add(s); isEmpty = false; return this; }
/** * Writes the HTTP response of the specified {@link HttpStatus} and closes the stream if the * {@link HttpStatusClass} is not {@linkplain HttpStatusClass#INFORMATIONAL informational} (1xx). * * @deprecated Use {@link HttpResponse#of(HttpStatus)}. */ @Deprecated default void respond(HttpStatus status) { requireNonNull(status, "status"); if (status.codeClass() == HttpStatusClass.INFORMATIONAL) { write(HttpHeaders.of(status)); } else if (isContentAlwaysEmpty(status)) { write(HttpHeaders.of(status)); close(); } else { respond(status, MediaType.PLAIN_TEXT_UTF_8, status.toHttpData()); } }
/** * Creates a new instance with the specified {@link HttpStatus}. */ private HttpStatusException(HttpStatus httpStatus) { super(requireNonNull(httpStatus, "httpStatus").toString()); this.httpStatus = httpStatus; }
@Override public CompletableFuture<Boolean> isHealthy(Endpoint endpoint) { return httpClient.get(healthCheckPath) .aggregate() .thenApply(message -> HttpStatus.OK.equals(message.status())); } }
final StringBuilder message = new StringBuilder("http-status: " + httpStatus.code()); message.append(", ").append(httpStatus.reasonPhrase()).append(LINE_SEPARATOR); message.append("Caused by: ").append(LINE_SEPARATOR); message.append("grpc-status: ")
/** * Returns the {@link RetryStrategy} that retries the request with the specified {@code backoff} * when the response status matches {@link HttpStatusClass#SERVER_ERROR} or an {@link Exception} is raised. */ static RetryStrategy onServerErrorStatus(Backoff backoff) { requireNonNull(backoff, "backoff"); return onStatus((status, thrown) -> { if (thrown != null || (status != null && status.codeClass() == HttpStatusClass.SERVER_ERROR)) { return backoff; } return null; }); }