CXF は、Jetty が既に挿入した値を置き換える setHeader の代わりに addHeader を使用する必要があるようです。
最後に、/api コンテキストでのみ使用される ServletFilter と ResponseWrapper を作成する必要がありました。このスレッドは、最終的に私をこのルートに送りました。
DateHeaderStrippingFilter.java
public class DateHeaderStrippingFilter
implements Filter
{
private HashSet<String> headers;
@Override
public void destroy()
{
headers = null;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
HeaderStripperWrapper wrappedResponse = new HeaderStripperWrapper((HttpServletResponse)response, headers);
chain.doFilter(request, wrappedResponse);
}
@Override
public void init(FilterConfig config)
throws ServletException
{
headers = new HashSet<String>();
headers.add("Date");
}
}
HeaderStripperWrapper.java
public class HeaderStripperWrapper
extends HttpServletResponseWrapper
{
private HashSet<String> headersToStrip;
public HeaderStripperWrapper(HttpServletResponse response, HashSet<String> headersToStrip)
{
super(response);
this.headersToStrip = headersToStrip;
}
@Override
public void addHeader(String name, String value)
{
if (!headersToStrip.contains(name))
{
super.addHeader(name, value);
}
}
@Override
public void setHeader(String name, String value)
{
if (!headersToStrip.contains(name))
{
super.setHeader(name, value);
}
}
}
そして、組み込みの jetty サーバーを構成するとき
Context api = new Context(contexts, "/api", false, false);
BooksApiServlet apiServlet = env.getInjector().getInstance(ApiServlet.class);
ServletHolder holder = new ServletHolder(apiServlet);
api.addServlet(holder, "/*");
api.addFilter(DateHeaderStrippingFilter.class, "/*", 0);