/* * Copyright (C) 2014 Intel Corporation * All rights reserved. */ package com.intel.mtwilson.jaxrs2.server.filter; import com.intel.dcsg.cpg.crypto.RandomUtil; 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.Response; import javax.ws.rs.core.Response.Status; /** * @author jbuhacoff */ public class ErrorLogFilter implements ContainerResponseFilter { private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ErrorLogFilter.class); @Override public void filter(ContainerRequestContext request, ContainerResponseContext response) throws IOException { Response.Status.Family httpStatusFamily = Response.Status.Family.familyOf(response.getStatus()); if( httpStatusFamily == Response.Status.Family.CLIENT_ERROR || httpStatusFamily == Response.Status.Family.SERVER_ERROR ) { String incidentTag = RandomUtil.randomHexString(4); // 4 bytes => 8 hex digits log.debug("Incident Tag #{}", incidentTag); // response.getStringHeaders().add("Incident-Tag", incidentTag); // causes exception: java.lang.UnsupportedOperationException thrown by the string headers map response.getHeaders().add("Incident-Tag", incidentTag); } } }