/* * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. */ package org.glassfish.admin.rest.adapter; import java.io.IOException; 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.ext.Provider; import org.glassfish.admin.rest.Constants; import org.glassfish.admin.rest.utils.Util; /** * This filter reformats string entities from non-success responses * into arrays of message entities (when not using the REST legacy mode). * * @author tmoreau */ @Provider public class ExceptionFilter implements ContainerResponseFilter { public ExceptionFilter() { } public void filter(ContainerRequestContext reqCtx, ContainerResponseContext resCtx) throws IOException { if (reqCtx.getHeaderString(Constants.HEADER_LEGACY_FORMAT) != null) { // TBD - don't wrap if the legacy switch is set return; } int status = resCtx.getStatus(); if (200 <= status && status <= 299) { // don't wrap success messages return; } Object entity = resCtx.getEntity(); if (!(entity instanceof String)) { // don't wrap null and non-String entities return; } String errorMsg = (String)entity; Object wrappedEntity = Util.responseBody().addFailure(errorMsg); resCtx.setEntity(wrappedEntity, resCtx.getEntityAnnotations(), MediaType.APPLICATION_JSON_TYPE); } }