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
{
error=true;
throw e;
LOG.warn(String.valueOf(_uri), e);
_state.error(e);
_request.setHandled(true);
handleException(e);
}
}
catch (Exception e)

View File

@ -66,6 +66,9 @@ public class RequestLogHandler extends HandlerWrapper
@Override
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);
}
catch(Error|IOException|ServletException|RuntimeException e)
{
if (!response.isCommitted() && !baseRequest.getHttpChannelState().isAsync())
response.setStatus(500);
throw e;
}
finally
{
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);
public final static String GZIP = "gzip";
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 int DEFAULT_MIN_GZIP_SIZE=256;
@ -364,9 +365,8 @@ public class AsyncGzipFilter extends UserAgentFilter implements GzipFactory
String etag = request.getHeader("If-None-Match");
if (etag!=null)
{
int dd=etag.indexOf("--");
if (dd>0)
request.setAttribute(ETAG,etag.substring(0,dd)+(etag.endsWith("\"")?"\"":""));
if (etag.contains(ETAG_GZIP))
request.setAttribute(ETAG,etag.replace(ETAG_GZIP,""));
}
HttpChannel channel = HttpChannel.getCurrentHttpChannel();

View File

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

View File

@ -31,6 +31,7 @@ import org.eclipse.jetty.http.MimeTypes;
import org.eclipse.jetty.server.HttpChannel;
import org.eclipse.jetty.server.HttpOutput;
import org.eclipse.jetty.server.Response;
import org.eclipse.jetty.servlets.AsyncGzipFilter;
import org.eclipse.jetty.util.BufferUtil;
import org.eclipse.jetty.util.Callback;
import org.eclipse.jetty.util.IteratingNestedCallback;
@ -195,7 +196,7 @@ public class GzipHttpOutput extends HttpOutput
response.setContentLength(-1);
String etag=fields.get(HttpHeader.ETAG);
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);
_state.set(GZState.COMPRESSING);

View File

@ -23,6 +23,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.lang.instrument.Instrumentation;
import java.net.URL;
import java.net.URLClassLoader;
import java.security.CodeSource;
@ -461,17 +462,44 @@ public class WebAppClassLoader extends URLClassLoader
}
/* ------------------------------------------------------------ */
/**
* @see addTransformer
* @deprecated
*/
public void addClassFileTransformer(ClassFileTransformer transformer)
{
_transformers.add(transformer);
}
/* ------------------------------------------------------------ */
/**
* @see removeTransformer
* @deprecated
*/
public boolean removeClassFileTransformer(ClassFileTransformer 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
protected Class<?> findClass(final String name) throws ClassNotFoundException

View File

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