/** * Constructor with status code * @param statusCode HTTP status code */ public HttpStatusCodeException(int statusCode) { super(HttpStatus.of(statusCode).map(s -> s.getCode() + " - " + s.getDescription()) .orElse("HTTP status code: " + statusCode)); this.statusCode = statusCode; }
/** * Get the {@link HttpStatus} which corresponds to given status code, if any * @param code Status code * @return HttpStatus which corresponds to given code, or an empty Optional if the given code does not corresponds * to any of the {@link HttpStatus} values. */ public static Optional<HttpStatus> of(int code) { for (HttpStatus status : values()) { if (code == status.code) { return Optional.of(status); } } return Optional.empty(); }
@Override public String toString() { return getCode() + " - " + getDescription(); }
@Override public void completed(Response response) { // check error status code if (onlySuccessfulStatusCode && !HttpStatus.isSuccessStatusCode(response.getStatus())) { sink.error(new UnsuccessfulResponseException(new JaxrsRawResponseEntity(response))); } else { sink.success(new JaxrsReactiveResponseEntity<>(response, responseType)); } }
/** * Get a builder to create a default {@link HttpResponse} instance. * @param <T> Payload type * @param status Response status (not null) * @param payloadType Payload type * @return A new {@link HttpResponse} builder */ static <T> Builder<T> builder(HttpStatus status, Class<? extends T> payloadType) { ObjectUtils.argumentNotNull(status, "HTTP status must be not null"); return new DefaultHttpResponse.DefaultBuilder<>(status.getCode(), payloadType); }
/** * Get HTTP response status associated with this exception as {@link HttpStatus}, if available and known. * @return Optional HTTP response status */ public Optional<HttpStatus> getStatus() { return HttpStatus.of(getStatusCode()); }
if (onlySuccessfulStatusCode && !HttpStatus.isSuccessStatusCode(status.value())) { return Mono.<ReactiveResponseEntity<T>>error( new UnsuccessfulResponseException(new ClientResponseEntity<>(r, responseType)));
@Override public void filter(ContainerRequestContext requestContext) throws IOException { // check SecurityContext type if (!AuthContext.class.isAssignableFrom(requestContext.getSecurityContext().getClass())) { throw new IOException("Invalid SecurityContext type: expecting an AuthContext but found [" + requestContext.getSecurityContext().getClass().getName() + "]"); } final AuthContext authContext = (AuthContext) requestContext.getSecurityContext(); // check authenticated if (!authContext.getAuthentication().isPresent()) { LOGGER.debug(() -> "Authenticate request using AuthContext"); // authenticate try { authContext.authenticate(new JaxrsContainerHttpRequest(requestContext), schemes); } catch (UnsupportedMessageException e) { LOGGER.debug(() -> "Authentication error: aborting request", e); requestContext.abortWith(ResponseUtils.buildAuthenticationErrorResponse(schemes, null, null, HttpStatus.UNAUTHORIZED.getCode(), null)); } catch (AuthenticationException e) { LOGGER.debug(() -> "Authentication error: aborting request", e); requestContext.abortWith(ResponseUtils.buildAuthenticationErrorResponse(e, null)); } } }
/** * Get the response status as {@link HttpStatus} * @return the response HttpStatus * @throws InvalidHttpMessageException If the status code of the message does not corresponds to any of the * {@link HttpStatus} values */ default HttpStatus getStatus() { return HttpStatus.of(getStatusCode()) .orElseThrow(() -> new InvalidHttpMessageException("Unknown status code: " + getStatusCode())); }