package org.jboss.resteasy.test.providers.custom.resource; import org.jboss.logging.Logger; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerResponseContext; import javax.ws.rs.container.ContainerResponseFilter; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response; import java.io.IOException; import java.lang.reflect.Method; public abstract class ResponseContainerTemplateFilter implements ContainerResponseFilter { public static final String OPERATION = "OPERATION"; private static Logger logger = Logger.getLogger(ResponseContainerTemplateFilter.class); protected ContainerRequestContext requestContext; protected ContainerResponseContext responseContext; @Override public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException { this.requestContext = requestContext; this.responseContext = responseContext; String operation = getHeaderString(); Method[] methods = getClass().getMethods(); for (Method method : methods) { if (operation != null) { if (operation.equalsIgnoreCase(method.getName())) { try { method.invoke(this); return; } catch (Exception e) { logger.error("The requested resource is not available", e); responseContext.setStatus(Response.Status.SERVICE_UNAVAILABLE .getStatusCode()); setEntity(e.getMessage()); return; } } } } operationMethodNotFound(operation); } protected void operationMethodNotFound(String operation) { responseContext.setStatus(Response.Status.SERVICE_UNAVAILABLE.getStatusCode()); setEntity("Operation " + operation + " not implemented"); } // /////////////////////////////////////////////////////////////////// protected boolean assertTrue(boolean conditionTrue, Object... msg) { if (conditionTrue) { return false; } StringBuilder sb = new StringBuilder(); if (msg != null) { for (Object str : msg) { sb.append(str).append(" "); } } setEntity(sb.toString()); responseContext.setStatus(Response.Status.NOT_ACCEPTABLE.getStatusCode()); return true; } protected String getHeaderString() { MultivaluedMap<String, Object> headers = responseContext.getHeaders(); return (String) headers.getFirst(OPERATION); } protected void setEntity(String entity) { responseContext.setEntity(entity, null, MediaType.TEXT_PLAIN_TYPE); } }