use of jakarta.ws.rs.core.Request in project che-server by eclipse-che.
the class JAXRSDownloadFileResponseFilter method filter.
/**
* JAX-RS Filter method called after a response has been provided for a request
*
* <p>Filters in the filter chain are ordered according to their {@code
* jakarta.annotation.Priority} class-level annotation value.
*
* @param requestContext request context.
* @param responseContext response context.
* @throws IOException if an I/O exception occurs.
*/
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
// Apply header if all if correct
Request request = requestContext.getRequest();
String filename = getFileName(request, responseContext.getMediaType(), requestContext.getUriInfo(), responseContext.getStatus());
if (filename != null) {
if (hasCompliantEntity(responseContext.getEntity())) {
responseContext.getHeaders().putSingle(CONTENT_DISPOSITION, "attachment; filename=" + filename);
}
}
}
use of jakarta.ws.rs.core.Request in project che-server by eclipse-che.
the class ETagResponseFilter method doFilter.
/**
* Filter the given container response
*
* @param containerResponse the response to use
*/
public void doFilter(GenericContainerResponse containerResponse) {
// get entity of the response
Object entity = containerResponse.getEntity();
// no entity, skip
if (entity == null) {
return;
}
// Only handle JSON content
if (!MediaType.APPLICATION_JSON_TYPE.equals(containerResponse.getContentType())) {
return;
}
// Get the request
ApplicationContext applicationContext = ApplicationContext.getCurrent();
Request request = applicationContext.getRequest();
// manage only GET requests
if (!HttpMethod.GET.equals(request.getMethod())) {
return;
}
// calculate hash with MD5
HashFunction hashFunction = Hashing.md5();
Hasher hasher = hashFunction.newHasher();
boolean hashingSuccess = true;
// Manage a list
if (entity instanceof List) {
List<?> entities = (List) entity;
for (Object simpleEntity : entities) {
hashingSuccess = addHash(simpleEntity, hasher);
if (!hashingSuccess) {
break;
}
}
} else {
hashingSuccess = addHash(entity, hasher);
}
// if we're able to handle the hash
if (hashingSuccess) {
// get result of the hash
HashCode hashCode = hasher.hash();
// Create the entity tag
EntityTag entityTag = new EntityTag(hashCode.toString());
// Check the etag
Response.ResponseBuilder builder = request.evaluatePreconditions(entityTag);
// not modified ?
if (builder != null) {
containerResponse.setResponse(builder.tag(entityTag).build());
} else {
// it has been changed, so send response with new ETag and entity
Response.ResponseBuilder responseBuilder = Response.fromResponse(containerResponse.getResponse()).tag(entityTag);
containerResponse.setResponse(responseBuilder.build());
}
}
}
use of jakarta.ws.rs.core.Request in project resteasy by resteasy.
the class SynchronousDispatcher method invoke.
/**
* Invoke and write response.
*
* @param request http request
* @param response http response
* @param invoker resource invoker
*/
public void invoke(HttpRequest request, HttpResponse response, ResourceInvoker invoker) {
RESTEasyTracingLogger tracingLogger = RESTEasyTracingLogger.getInstance(request);
Response jaxrsResponse = null;
try {
request.getAsyncContext().initialRequestStarted();
jaxrsResponse = invoker.invoke(request, response);
request.getAsyncContext().initialRequestEnded();
tracingLogger.log("DISPATCH_RESPONSE", jaxrsResponse);
if (request.getAsyncContext().isSuspended()) {
/**
* Callback by the initial calling thread. This callback will probably do nothing in an asynchronous environment
* but will be used to simulate AsynchronousResponse in vanilla Servlet containers that do not support
* asychronous HTTP.
*/
request.getAsyncContext().getAsyncResponse().initialRequestThreadFinished();
// we're handing response asynchronously
jaxrsResponse = null;
}
} catch (CompletionException e) {
// logger.error("invoke() failed mapping exception", e);
writeException(request, response, e.getCause(), t -> {
});
return;
} catch (Exception e) {
// logger.error("invoke() failed mapping exception", e);
invoker.getMethodStatisticsLogger().incFailureCnt();
writeException(request, response, e, t -> {
});
return;
}
if (jaxrsResponse != null) {
writeResponse(request, response, jaxrsResponse);
}
}
use of jakarta.ws.rs.core.Request in project devspaces-images by redhat-developer.
the class ETagResponseFilter method doFilter.
/**
* Filter the given container response
*
* @param containerResponse the response to use
*/
public void doFilter(GenericContainerResponse containerResponse) {
// get entity of the response
Object entity = containerResponse.getEntity();
// no entity, skip
if (entity == null) {
return;
}
// Only handle JSON content
if (!MediaType.APPLICATION_JSON_TYPE.equals(containerResponse.getContentType())) {
return;
}
// Get the request
ApplicationContext applicationContext = ApplicationContext.getCurrent();
Request request = applicationContext.getRequest();
// manage only GET requests
if (!HttpMethod.GET.equals(request.getMethod())) {
return;
}
// calculate hash with MD5
HashFunction hashFunction = Hashing.md5();
Hasher hasher = hashFunction.newHasher();
boolean hashingSuccess = true;
// Manage a list
if (entity instanceof List) {
List<?> entities = (List) entity;
for (Object simpleEntity : entities) {
hashingSuccess = addHash(simpleEntity, hasher);
if (!hashingSuccess) {
break;
}
}
} else {
hashingSuccess = addHash(entity, hasher);
}
// if we're able to handle the hash
if (hashingSuccess) {
// get result of the hash
HashCode hashCode = hasher.hash();
// Create the entity tag
EntityTag entityTag = new EntityTag(hashCode.toString());
// Check the etag
Response.ResponseBuilder builder = request.evaluatePreconditions(entityTag);
// not modified ?
if (builder != null) {
containerResponse.setResponse(builder.tag(entityTag).build());
} else {
// it has been changed, so send response with new ETag and entity
Response.ResponseBuilder responseBuilder = Response.fromResponse(containerResponse.getResponse()).tag(entityTag);
containerResponse.setResponse(responseBuilder.build());
}
}
}
use of jakarta.ws.rs.core.Request in project devspaces-images by redhat-developer.
the class EverrestDownloadFileResponseFilter method doFilter.
/**
* Filter the given container response.
*
* @param containerResponse the response to use
*/
public void doFilter(GenericContainerResponse containerResponse) {
containerResponse.getResponse();
// Get the request
ApplicationContext applicationContext = ApplicationContext.getCurrent();
Request request = applicationContext.getRequest();
// Apply header if all if correct
String filename = getFileName(request, containerResponse.getContentType(), applicationContext, containerResponse.getStatus());
if (filename != null) {
if (hasCompliantEntity(containerResponse.getEntity())) {
// it has been changed, so send response with updated header
Response.ResponseBuilder responseBuilder = Response.fromResponse(containerResponse.getResponse()).header(CONTENT_DISPOSITION, "attachment; filename=" + filename);
containerResponse.setResponse(responseBuilder.build());
}
}
}
Aggregations