use of jakarta.ws.rs.container.ResourceInfo in project org.openntf.xsp.jakartaee by OpenNTF.
the class GenericThrowableMapper method createResponseFromException.
protected Response createResponseFromException(final Throwable throwable, final int status, ResourceInfo resourceInfo, HttpServletRequest req) {
MediaType type = getMediaType(resourceInfo);
if (MediaType.TEXT_HTML_TYPE.isCompatible(type)) {
// Handle as HTML
return Response.status(status).type(MediaType.TEXT_HTML_TYPE).entity((StreamingOutput) out -> {
try (PrintWriter w = new PrintWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8))) {
XSPErrorPage.handleException(w, throwable, req.getRequestURL().toString(), false);
} catch (ServletException e) {
throw new IOException(e);
}
}).build();
} else {
// Handle as JSON
return Response.status(status).type(MediaType.APPLICATION_JSON_TYPE).entity((StreamingOutput) out -> {
Objects.requireNonNull(out);
String message = "";
Throwable t = throwable;
while ((message == null || message.length() == 0) && t != null) {
if (t instanceof NotesException) {
message = ((NotesException) t).text;
} else if (t instanceof ConstraintViolationException) {
message = t.getMessage();
if (message == null || message.isEmpty()) {
List<String> cvMsgList = new ArrayList<>();
for (@SuppressWarnings("rawtypes") ConstraintViolation cv : ((ConstraintViolationException) t).getConstraintViolations()) {
String cvMsg = cv.getPropertyPath() + ": " + cv.getMessage();
cvMsgList.add(cvMsg);
}
message = String.join(",", cvMsgList);
}
} else {
message = t.getMessage();
}
t = t.getCause();
}
JsonGeneratorFactory jsonFac = Json.createGeneratorFactory(Collections.singletonMap(JsonGenerator.PRETTY_PRINTING, true));
try (JsonGenerator json = jsonFac.createGenerator(out)) {
json.writeStartObject();
json.write("message", throwable.getClass().getName() + ": " + message);
json.writeKey("stackTrace");
json.writeStartArray();
for (Throwable cause = throwable; cause != null; cause = cause.getCause()) {
json.writeStartArray();
json.write(cause.getClass().getName() + ": " + cause.getLocalizedMessage());
Arrays.stream(cause.getStackTrace()).map(String::valueOf).map(line -> " at " + line).forEach(json::write);
json.writeEnd();
}
json.writeEnd();
json.writeEnd();
}
}).build();
}
}
use of jakarta.ws.rs.container.ResourceInfo in project tomee by apache.
the class Contexts method bind.
/**
* Using a set ensures we don't set the thread local twice or more,
* there may be super classes with injection points of identical types
*
* Also allows us to get context references from other sources such as interceptors
*
* @param exchange Exchange
* @param types Collection
*/
public static void bind(final Exchange exchange, final Collection<Class<?>> types) {
// used in lazy mode by RESTResourceFinder if cdi beans uses @Context, === initThreadLocal
EXCHANGE.set(exchange);
CdiAppContextsService.pushRequestReleasable(CleanUpThreadLocal.INSTANCE);
for (final Class<?> type : types) {
if (Request.class.equals(type)) {
final Request binding = JAXRSUtils.createContextValue(exchange.getInMessage(), null, Request.class);
ThreadLocalContextManager.REQUEST.set(binding);
} else if (UriInfo.class.equals(type)) {
final UriInfo binding = JAXRSUtils.createContextValue(exchange.getInMessage(), null, UriInfo.class);
ThreadLocalContextManager.URI_INFO.set(binding);
} else if (HttpHeaders.class.equals(type)) {
final HttpHeaders binding = JAXRSUtils.createContextValue(exchange.getInMessage(), null, HttpHeaders.class);
ThreadLocalContextManager.HTTP_HEADERS.set(binding);
} else if (SecurityContext.class.equals(type)) {
final SecurityContext binding = JAXRSUtils.createContextValue(exchange.getInMessage(), null, SecurityContext.class);
ThreadLocalContextManager.SECURITY_CONTEXT.set(binding);
} else if (ContextResolver.class.equals(type)) {
final ContextResolver<?> binding = JAXRSUtils.createContextValue(exchange.getInMessage(), type, ContextResolver.class);
ThreadLocalContextManager.CONTEXT_RESOLVER.set(binding);
} else if (Providers.class.equals(type)) {
final Providers providers = JAXRSUtils.createContextValue(exchange.getInMessage(), null, Providers.class);
ThreadLocalContextManager.PROVIDERS.set(providers);
} else if (ServletRequest.class.equals(type)) {
ServletRequest servletRequest = JAXRSUtils.createContextValue(exchange.getInMessage(), null, ServletRequest.class);
if (servletRequest == null) {
// probably the case with CXF
servletRequest = JAXRSUtils.createContextValue(exchange.getInMessage(), null, HttpServletRequest.class);
}
ThreadLocalContextManager.SERVLET_REQUEST.set(servletRequest);
} else if (HttpServletRequest.class.equals(type)) {
final HttpServletRequest httpServletRequest = JAXRSUtils.createContextValue(exchange.getInMessage(), null, HttpServletRequest.class);
ThreadLocalContextManager.HTTP_SERVLET_REQUEST.set(httpServletRequest);
} else if (HttpServletResponse.class.equals(type)) {
final HttpServletResponse httpServletResponse = JAXRSUtils.createContextValue(exchange.getInMessage(), null, HttpServletResponse.class);
ThreadLocalContextManager.HTTP_SERVLET_RESPONSE.set(httpServletResponse);
} else if (ServletConfig.class.equals(type)) {
final ServletConfig servletConfig = JAXRSUtils.createContextValue(exchange.getInMessage(), null, ServletConfig.class);
ThreadLocalContextManager.SERVLET_CONFIG.set(servletConfig);
} else if (Configuration.class.equals(type)) {
final Configuration config = JAXRSUtils.createContextValue(exchange.getInMessage(), null, Configuration.class);
ThreadLocalContextManager.CONFIGURATION.set(config);
} else if (ResourceInfo.class.equals(type)) {
final ResourceInfo config = JAXRSUtils.createContextValue(exchange.getInMessage(), null, ResourceInfo.class);
ThreadLocalContextManager.RESOURCE_INFO.set(config);
} else if (ResourceContext.class.equals(type)) {
final ResourceContext config = JAXRSUtils.createContextValue(exchange.getInMessage(), null, ResourceContext.class);
ThreadLocalContextManager.RESOURCE_CONTEXT.set(config);
} else if (Application.class.equals(type)) {
final Application config = JAXRSUtils.createContextValue(exchange.getInMessage(), null, Application.class);
ThreadLocalContextManager.APPLICATION.set(config);
} else {
final Message message = exchange.getInMessage();
final ContextProvider<?> provider = ProviderFactory.getInstance(message).createContextProvider(type, message);
if (provider != null) {
final Object value = provider.createContext(message);
Map<String, Object> map = ThreadLocalContextManager.OTHERS.get();
if (map == null) {
map = new HashMap<>();
ThreadLocalContextManager.OTHERS.set(map);
}
map.put(type.getName(), value);
}
}
}
}
use of jakarta.ws.rs.container.ResourceInfo in project resteasy by resteasy.
the class ProviderFactoryTest method testDeploymentStart.
@Test
public void testDeploymentStart() {
ResteasyProviderFactory orig = ResteasyProviderFactory.peekInstance();
try {
ResteasyProviderFactory.setInstance(null);
ResteasyProviderFactory rpf1 = ResteasyProviderFactory.newInstance();
RegisterBuiltin.register(rpf1);
rpf1.registerProvider(MyInterceptor.class);
ResteasyDeployment dep1 = new ResteasyDeploymentImpl();
dep1.setProviderFactory(rpf1);
dep1.setDeploymentSensitiveFactoryEnabled(true);
dep1.start();
ResteasyProviderFactory rpf2 = ResteasyProviderFactory.newInstance();
RegisterBuiltin.register(rpf2);
rpf2.register(new DynamicFeature() {
@Override
public void configure(ResourceInfo resourceInfo, FeatureContext context) {
if (ResteasyProviderFactory.getInstance().isRegistered(MyInterceptor.class)) {
Assert.fail("Second deployment consuming provider factory from first deployment");
}
}
});
ResteasyDeployment dep2 = new ResteasyDeploymentImpl();
dep2.setProviderFactory(rpf2);
dep2.setDeploymentSensitiveFactoryEnabled(true);
dep2.start();
dep1.stop();
dep2.stop();
} finally {
ResteasyProviderFactory.setInstance(orig);
}
}
use of jakarta.ws.rs.container.ResourceInfo in project helidon by oracle.
the class LraAnnotationHandler method handleJaxRsAfter.
@Override
public void handleJaxRsAfter(ContainerRequestContext reqCtx, ContainerResponseContext resCtx, ResourceInfo resourceInfo) {
Optional<URI> lraId = Optional.ofNullable((URI) reqCtx.getProperty(LRA_HTTP_CONTEXT_HEADER)).or(() -> Contexts.context().flatMap(c -> c.get(LRA_HTTP_CONTEXT_HEADER, URI.class)));
PropagatedHeaders propagatedHeaders = participantService.prepareCustomHeaderPropagation(reqCtx.getHeaders());
Response.Status resStatus = resCtx.getStatusInfo().toEnum();
Response.Status.Family resFamily = resCtx.getStatusInfo().getFamily();
boolean end = annotation.end();
boolean cancel = annotation.cancelOnFamily().contains(resFamily) || annotation.cancelOn().contains(resStatus);
lraId.ifPresent(id -> {
if (cancel) {
cancel(id, propagatedHeaders);
} else if (end) {
close(id, propagatedHeaders);
}
resCtx.getHeaders().putSingle(LRA_HTTP_CONTEXT_HEADER, id);
});
Optional.ofNullable(reqCtx.getProperty(LRA_HTTP_PARENT_CONTEXT_HEADER)).map(URI.class::cast).ifPresent(suppressedLra -> resCtx.getHeaders().putSingle(LRA_HTTP_CONTEXT_HEADER, suppressedLra));
}
use of jakarta.ws.rs.container.ResourceInfo in project tessera by ConsenSys.
the class LoggingFilterTest method filterNullResourceInfoClass.
@Test
public void filterNullResourceInfoClass() {
ResourceInfo resourceInfo = mock(ResourceInfo.class);
loggingFilter.setResourceInfo(resourceInfo);
when(resourceInfo.getResourceClass()).thenReturn(null);
ContainerRequestContext request = mock(ContainerRequestContext.class);
// if this doesn't throw exception then test passed
loggingFilter.filter(request);
}
Aggregations