/** * Initialize {@code ContainerRequest} instance to used used to handle {@code servletRequest}. */ private void initContainerRequest( final ContainerRequest requestContext, final HttpServletRequest servletRequest, final HttpServletResponse servletResponse, final ResponseWriter responseWriter) throws IOException { requestContext.setEntityStream(servletRequest.getInputStream()); requestContext.setRequestScopedInitializer(requestScopedInitializer.get(new RequestContextProvider() { @Override public HttpServletRequest getHttpServletRequest() { return servletRequest; } @Override public HttpServletResponse getHttpServletResponse() { return servletResponse; } })); requestContext.setWriter(responseWriter); addRequestHeaders(servletRequest, requestContext); // Check if any servlet filters have consumed a request entity // of the media type application/x-www-form-urlencoded // This can happen if a filter calls request.getParameter(...) filterFormParameters(servletRequest, requestContext); }
private static void printRequestLine(StringBuilder buffer, ContainerRequest request) { buffer.append(request.getMethod()).append(" ").append(request.getUriInfo().getRequestUri().toASCIIString()).append("\n"); }
/** * Returns a {@code FormDataMultiPart} entity from the request and stores it in the request context properties. * * @return a form data multi part entity. */ FormDataMultiPart getEntity(ContainerRequest request) { final String requestPropertyName = FormDataMultiPart.class.getName(); Object entity = request.getProperty(requestPropertyName); if (entity == null) { entity = request.readEntity(FormDataMultiPart.class); if (entity == null) { throw new BadRequestException(LocalizationMessages.ENTITY_IS_EMPTY()); } request.setProperty(requestPropertyName, entity); } return (FormDataMultiPart) entity; } }
private Response.ResponseBuilder evaluateIfNoneMatch(final EntityTag eTag) { final Set<MatchingEntityTag> matchingTags = getIfNoneMatch(); if (matchingTags == null) { return null; } final String httpMethod = getMethod(); return evaluateIfNoneMatch(eTag, matchingTags, "GET".equals(httpMethod) || "HEAD".equals(httpMethod)); }
private Response.ResponseBuilder evaluateIfModifiedSince(final long lastModified) { final String ifModifiedSinceHeader = getHeaderString(HttpHeaders.IF_MODIFIED_SINCE); if (ifModifiedSinceHeader == null || ifModifiedSinceHeader.isEmpty()) { return null; } final String httpMethod = getMethod(); if ("GET".equals(httpMethod) || "HEAD".equals(httpMethod)) { return evaluateIfModifiedSince(lastModified, ifModifiedSinceHeader); } else { return null; } }
@Override public WebTarget apply(ContainerRequest containerRequest) { // no need for try-catch - unlike for @*Param annotations, any issues with @Uri would usually be caused // by incorrect server code, so the default runtime exception mapping to 500 is appropriate final ExtendedUriInfo uriInfo = containerRequest.getUriInfo(); final Map<String, Object> pathParamValues = uriInfo.getPathParameters().entrySet() .stream() .collect(Collectors.toMap( Map.Entry::getKey, (Function<Map.Entry<String, List<String>>, Object>) stringObjectEntry -> { List<String> input = stringObjectEntry.getValue(); return input.isEmpty() ? null : input.get(0); })); JerseyUriBuilder uriBuilder = new JerseyUriBuilder().uri(this.uri).resolveTemplates(pathParamValues); final ManagedClient managedClient = client.get(); if (!uriBuilder.isAbsolute()) { final String customBaseUri = managedClient.customBaseUri; final String rootUri = customBaseUri.isEmpty() ? uriInfo.getBaseUri().toString() : customBaseUri; uriBuilder = new JerseyUriBuilder().uri(rootUri).path(uriBuilder.toTemplate()); } return managedClient.instance.target(uriBuilder); } }
@Override public String url(ContainerRequest request) { return request.getUriInfo().getRequestUri().toString(); }
URI requestUri = URI.create(baseUri + ContainerUtils.encodeUnsafeCharacters(s)); ContainerRequest requestContext = new ContainerRequest( baseUri, requestUri, http2Headers.headers().method().toString(), getSecurityContext(), new PropertiesDelegate() { requestContext.setEntityStream(new NettyInputStream(isList)); } else { requestContext.setEntityStream(new InputStream() { @Override public int read() throws IOException { requestContext.headers(name.toString(), mapToString(http2Headers.headers().getAll(name)));
@Override public void filter(ContainerRequestContext context) throws IOException { System.out.println("WebApplicationExceptionFilter.preFilter() enter"); String path = ((ContainerRequest) context).getRequestUri().getPath(); if (path.endsWith("request_exception") && context.hasEntity() && ((ContainerRequest) context) .readEntity(String.class).equals("Request Exception")) { throw new WebApplicationException(Response.Status.OK); } System.out.println("WebApplicationExceptionFilter.preFilter() exit"); }
ExtendedUriInfo uriInfo = request.getUriInfo(); List<UriTemplate> templates = uriInfo.getMatchedTemplates(); int templateCount = templates.size(); if (templateCount == 0) return ""; String basePath = uriInfo.getBaseUri().getPath(); String result = null; if (!"/".equals(basePath)) { // skip empty base paths
if (decodedBasePath.equals(exchangeUri.getPath())) { final ContainerRequest requestContext = new ContainerRequest(baseUri, requestUri, exchange.getRequestMethod(), getSecurityContext(exchange.getPrincipal(), isSecure), new MapPropertiesDelegate()); requestContext.setEntityStream(exchange.getRequestBody()); requestContext.getHeaders().putAll(exchange.getRequestHeaders()); requestContext.setWriter(responseWriter); try { appHandler.handle(requestContext);
@Override public Object apply(ContainerRequest containerRequest) { final Class<?> rawType = parameter.getRawType(); Object value; if ((Request.class.isAssignableFrom(rawType) || ContainerRequestContext.class.isAssignableFrom(rawType)) && rawType.isInstance(containerRequest)) { value = containerRequest; } else { value = containerRequest.readEntity(rawType, parameter.getType(), parameter.getAnnotations()); if (rawType.isPrimitive() && value == null) { throw new BadRequestException(Response.status(Response.Status.BAD_REQUEST) .entity(LocalizationMessages.ERROR_PRIMITIVE_TYPE_NULL()).build()); } } return value; } }
private List<Router> getMethodRouter(final RequestProcessingContext context) { final ContainerRequest request = context.request(); final List<ConsumesProducesAcceptor> acceptors = consumesProducesAcceptors.get(request.getMethod()); if (acceptors == null) { throw new NotAllowedException( Response.status(Status.METHOD_NOT_ALLOWED).allow(consumesProducesAcceptors.keySet()).build()); final List<AcceptableMediaType> acceptableMediaTypes = request.getQualifiedAcceptableMediaTypes(); final MediaType requestContentType = request.getMediaType(); final MediaType effectiveContentType = requestContentType == null ? MediaType.WILDCARD_TYPE : requestContentType;
private Span handleRequestStart(ContainerRequest request) { final Map<String, String> mappedHeaders = request .getHeaders() .entrySet() .stream() .collect(Collectors.toMap( Map.Entry::getKey, (entry) -> OpenTracingUtils.formatList(entry.getValue()))); final SpanContext extractedContext = globalTracer.extract(Format.Builtin.HTTP_HEADERS, new TextMapExtractAdapter(mappedHeaders)); Tracer.SpanBuilder spanBuilder = globalTracer .buildSpan(OpenTracingFeature.DEFAULT_REQUEST_SPAN_NAME) .withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_SERVER) .withTag(Tags.HTTP_METHOD.getKey(), request.getMethod()) .withTag(Tags.HTTP_URL.getKey(), request.getRequestUri().toASCIIString()) .withTag(LocalizationMessages.OPENTRACING_TAG_REQUEST_HEADERS(), OpenTracingUtils.headersAsString(request.getHeaders())) .withTag(LocalizationMessages.OPENTRACING_TAG_HAS_REQUEST_ENTITY(), request.hasEntity()); if (extractedContext != null) { spanBuilder = spanBuilder.asChildOf(extractedContext); } final Span span = spanBuilder.startManual(); request.setProperty(OpenTracingFeature.SPAN_CONTEXT_PROPERTY, span); span.log(LocalizationMessages.OPENTRACING_LOG_REQUEST_STARTED()); return span; }
@Override public Response apply(ContainerRequestContext request) { ClipboardData data = (request != null) ? ((ContainerRequest) request).readEntity(ClipboardData.class) : null; return Response.ok(data).build(); } });
StringBuilder textSB = new StringBuilder(); textSB.append(String.format("baseUri=[%s] requestUri=[%s] method=[%s] authScheme=[%s]", request.getBaseUri(), request.getRequestUri(), request.getMethod(), toStringOrNA(request.getSecurityContext().getAuthenticationScheme()))); for (String header : SUMMARY_HEADERS) { textSB.append(String.format(" %s=%s", header, toStringOrNA(request.getRequestHeaders().get(header)))); for (String header : request.getRequestHeaders().keySet()) { if (!SUMMARY_HEADERS.contains(header)) { textSB.append(String.format(" %s=%s", header, toStringOrNA(request.getRequestHeaders().get(header))));
@Override public OutputStream getOutputStream(int contentLength) throws IOException { final MultivaluedMap<String, Object> clientHeaders = clientRequest.getHeaders(); if (contentLength != -1 && !clientHeaders.containsKey(HttpHeaders.CONTENT_LENGTH)) { containerRequest.getHeaders().putSingle(HttpHeaders.CONTENT_LENGTH, String.valueOf(contentLength)); } return clientOutput; } });
/** * Get the values of a HTTP request header. The returned List is read-only. * This is a shortcut for {@code getRequestHeaders().get(name)}. * * @param name the header name, case insensitive. * @return a read-only list of header values. * * @throws IllegalStateException if called outside the scope of a request. */ @Override public List<String> getRequestHeader(final String name) { return getHeaders().get(name); }
/** * Returns a JavaScript callback name to wrap the JSON entity into. The callback name is determined from the {@link JSONP} * annotation. * * @param jsonp {@link JSONP} annotation to determine the callback name from. * @return a JavaScript callback name. */ private String getCallbackName(final JSONP jsonp) { String callback = jsonp.callback(); if (!"".equals(jsonp.queryParam())) { final ContainerRequest containerRequest = containerRequestProvider.get(); final UriInfo uriInfo = containerRequest.getUriInfo(); final MultivaluedMap<String, String> queryParameters = uriInfo.getQueryParameters(); final List<String> queryParameter = queryParameters.get(jsonp.queryParam()); callback = (queryParameter != null && !queryParameter.isEmpty()) ? queryParameter.get(0) : callback; } return callback; }
@Override public Response apply(ContainerRequestContext data) { if (data != null) { clipboard.setContent(((ContainerRequest) data).readEntity(String.class)); } return Response.noContent().build(); } });