Merge remote-tracking branch 'origin/master' into jetty-http2

This commit is contained in:
Greg Wilkins 2014-08-20 12:02:09 +10:00
commit ae8e7f0067
7 changed files with 49 additions and 8 deletions

View File

@ -315,7 +315,10 @@ public class HttpChannel implements Runnable
else else
{ {
error=true; error=true;
throw e; LOG.warn(String.valueOf(_uri), e);
_state.error(e);
_request.setHandled(true);
handleException(e);
} }
} }
catch (Exception e) catch (Exception e)

View File

@ -66,6 +66,9 @@ public class RequestLogHandler extends HandlerWrapper
@Override @Override
public void onError(AsyncEvent event) throws IOException public void onError(AsyncEvent event) throws IOException
{ {
HttpServletResponse response = (HttpServletResponse)event.getAsyncContext().getResponse();
if (!response.isCommitted())
response.setStatus(500);
} }
@ -91,6 +94,12 @@ public class RequestLogHandler extends HandlerWrapper
{ {
super.handle(target, baseRequest, request, response); super.handle(target, baseRequest, request, response);
} }
catch(Error|IOException|ServletException|RuntimeException e)
{
if (!response.isCommitted() && !baseRequest.getHttpChannelState().isAsync())
response.setStatus(500);
throw e;
}
finally finally
{ {
if (_requestLog != null && baseRequest.getDispatcherType().equals(DispatcherType.REQUEST)) if (_requestLog != null && baseRequest.getDispatcherType().equals(DispatcherType.REQUEST))

View File

@ -130,6 +130,7 @@ public class AsyncGzipFilter extends UserAgentFilter implements GzipFactory
private static final Logger LOG = Log.getLogger(AsyncGzipFilter.class); private static final Logger LOG = Log.getLogger(AsyncGzipFilter.class);
public final static String GZIP = "gzip"; public final static String GZIP = "gzip";
public static final String DEFLATE = "deflate"; public static final String DEFLATE = "deflate";
public final static String ETAG_GZIP="--gzip";
public final static String ETAG = "o.e.j.s.GzipFilter.ETag"; public final static String ETAG = "o.e.j.s.GzipFilter.ETag";
public final static int DEFAULT_MIN_GZIP_SIZE=256; public final static int DEFAULT_MIN_GZIP_SIZE=256;
@ -364,9 +365,8 @@ public class AsyncGzipFilter extends UserAgentFilter implements GzipFactory
String etag = request.getHeader("If-None-Match"); String etag = request.getHeader("If-None-Match");
if (etag!=null) if (etag!=null)
{ {
int dd=etag.indexOf("--"); if (etag.contains(ETAG_GZIP))
if (dd>0) request.setAttribute(ETAG,etag.replace(ETAG_GZIP,""));
request.setAttribute(ETAG,etag.substring(0,dd)+(etag.endsWith("\"")?"\"":""));
} }
HttpChannel channel = HttpChannel.getCurrentHttpChannel(); HttpChannel channel = HttpChannel.getCurrentHttpChannel();

View File

@ -255,7 +255,7 @@ public abstract class AbstractCompressedStream extends ServletOutputStream
String etag=_wrapper.getETag(); String etag=_wrapper.getETag();
if (etag!=null) if (etag!=null)
setHeader("ETag",etag.substring(0,etag.length()-1)+'-'+_encoding+'"'); setHeader("ETag",etag.substring(0,etag.length()-1)+"--"+_encoding+'"');
return; return;
} }
} }

View File

@ -31,6 +31,7 @@ import org.eclipse.jetty.http.MimeTypes;
import org.eclipse.jetty.server.HttpChannel; import org.eclipse.jetty.server.HttpChannel;
import org.eclipse.jetty.server.HttpOutput; import org.eclipse.jetty.server.HttpOutput;
import org.eclipse.jetty.server.Response; import org.eclipse.jetty.server.Response;
import org.eclipse.jetty.servlets.AsyncGzipFilter;
import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.util.BufferUtil;
import org.eclipse.jetty.util.Callback; import org.eclipse.jetty.util.Callback;
import org.eclipse.jetty.util.IteratingNestedCallback; import org.eclipse.jetty.util.IteratingNestedCallback;
@ -195,7 +196,7 @@ public class GzipHttpOutput extends HttpOutput
response.setContentLength(-1); response.setContentLength(-1);
String etag=fields.get(HttpHeader.ETAG); String etag=fields.get(HttpHeader.ETAG);
if (etag!=null) if (etag!=null)
fields.put(HttpHeader.ETAG,etag.substring(0,etag.length()-1)+"--gzip\""); fields.put(HttpHeader.ETAG,etag.substring(0,etag.length()-1)+AsyncGzipFilter.ETAG_GZIP+ '"');
LOG.debug("{} compressing {}",this,_deflater); LOG.debug("{} compressing {}",this,_deflater);
_state.set(GZState.COMPRESSING); _state.set(GZState.COMPRESSING);

View File

@ -23,6 +23,7 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException; import java.lang.instrument.IllegalClassFormatException;
import java.lang.instrument.Instrumentation;
import java.net.URL; import java.net.URL;
import java.net.URLClassLoader; import java.net.URLClassLoader;
import java.security.CodeSource; import java.security.CodeSource;
@ -461,16 +462,43 @@ public class WebAppClassLoader extends URLClassLoader
} }
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/**
* @see addTransformer
* @deprecated
*/
public void addClassFileTransformer(ClassFileTransformer transformer) public void addClassFileTransformer(ClassFileTransformer transformer)
{ {
_transformers.add(transformer); _transformers.add(transformer);
} }
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/**
* @see removeTransformer
* @deprecated
*/
public boolean removeClassFileTransformer(ClassFileTransformer transformer) public boolean removeClassFileTransformer(ClassFileTransformer transformer)
{ {
return _transformers.remove(transformer); return _transformers.remove(transformer);
} }
/* ------------------------------------------------------------ */
/**
* @see addClassFileTransformer
*/
public void addTransformer(ClassFileTransformer transformer)
{
_transformers.add(transformer);
}
/* ------------------------------------------------------------ */
/**
* @see removeClassFileTransformer
*/
public boolean removeTransformer(ClassFileTransformer transformer)
{
return _transformers.remove(transformer);
}
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
@Override @Override

View File

@ -97,7 +97,7 @@ public class WebAppClassLoaderTest
{ {
final List<Object> results=new ArrayList<Object>(); final List<Object> results=new ArrayList<Object>();
_loader.addClassFileTransformer(new ClassFileTransformer() _loader.addTransformer(new ClassFileTransformer()
{ {
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer)
throws IllegalClassFormatException throws IllegalClassFormatException
@ -109,7 +109,7 @@ public class WebAppClassLoaderTest
return b; return b;
} }
}); });
_loader.addClassFileTransformer(new ClassFileTransformer() _loader.addTransformer(new ClassFileTransformer()
{ {
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer)
throws IllegalClassFormatException throws IllegalClassFormatException