Merge remote-tracking branch 'origin/jetty-9.4.x' into issue-1640

This commit is contained in:
Jan Bartel 2017-09-19 12:01:52 +10:00
commit 65d77ff129
136 changed files with 591 additions and 465 deletions

View File

@ -1,4 +1,100 @@
jetty-9.4.7-SNAPSHOT jetty-9.4.8-SNAPSHOT
jetty-9.4.7.v20170914 - 14 September 2017
+ 215 Consider native ALPN/SSL provider
+ 487 JDK 9 build compatibility
+ 1116 Support empty HTTP header values
+ 1200 Use PathWatcher in DeploymentManager
+ 1357 RolloverFileOutputStream: No rollout performed at midnight
+ 1416 GzipHandler generated ETag suffix has problems with If-Match header
logic
+ 1468 Configure PKIX Revocation Checker for SslContextFactory
+ 1469 RolloverFileOutputStream: IllegalStateException Task already scheduled
+ 1498 Add JRTResource to support future Java 9 classloader behaviors
+ 1499 ClasspathPattern needs MODULE ruleset to support future Java 9
classloader behaviors
+ 1503 IPv6 address needs normalization (without brackets) in
ForwardedRequestCustomizer
+ 1507 RolloverFileOutputStream: Negative delay Timer.schedule exception
+ 1513 RolloverFileOutputStream: can't handle multiple instances
+ 1515 Improved RollOverFileOutputStream removeOldFiles() behavior
+ 1520 PropertyUserStore should extract packed config file
+ 1556 Remove a timing channel in Password matching
+ 1571 Support Hazelcast session management in 9.4
+ 1590 Improve RolloverFileOutputStream functionality with multiple TimeZones
+ 1591 JDBCSessionDataStore doesn't work with root context on Oracle DB
+ 1592 CompressedContentFormat.tagEquals() - incorrect comparison of entity
tag hashes
+ 1595 HTTP/2: Avoid sending unnecessary stream WINDOW_UPDATE frames
+ 1600 Update jndi.mod and plus.mod
+ 1603 WebSocketServerFactory NPE in toString()
+ 1604 WebSocketContainer stop needs improvement
+ 1605 ContainerProvider.getWebSocketContainer() behavior is not to spec
+ 1618 AsyncContext.dispatch() does not use raw/encoded URI
+ 1622 HeaderFilter doesn't work if the response has been committed
+ 1623 JettyRunMojo use dependencies from reactor (outputdirectory)
+ 1625 Support new IANA declared Websocket Close Status Codes
+ 1637 Thread per connection retained in HTTP/2
+ 1638 Add it test for Maven Plugin
+ 1642 Using RewriteHandler with AsyncContext.dispatch() and
HttpServletRequestWrapper not possible
+ 1643 ProxyServlet always uses default number of selector threads -
constructor should allow to overwrite the default.
+ 1645 NotSerializableException: DoSFilter when using Non-Clustered Session
Management: File System
+ 1655 Improve extensibility of ServerConnector
+ 1656 Improve configurability of ConnectionPools
+ 1661 AbstractProxyServlet onProxyResponseFailure Error
+ 1662 NPE with WebSocket Compress Extensions
+ 1664 IPAccessHandler CIDR IP range check is incorrect
+ 1671 Asymmetric usage of trailers in MetaData.Request
+ 1675 Session id should not be logged with INFO level in AbstractSessionCache
+ 1679 DeploymentManagerMBean not usable through JMX
+ 1682 Jetty-WarFragmentFolderPath directive has no effect in eclipse runtime
mode except for the first launch
+ 1685 Update ALPN support for Java 8u141
+ 1687 HTTP2: Correcting missing callback notification when channel not found
+ 1692 Annotation scanning should ignore `module-info.class` files
+ 1698 Missing WWW-Authenticate from SpnegoAuthenticator when other
Authorization header provided
+ 1702 Update ALPN support for Java 8u144
+ 1703 Improve HttpInput failure logging
+ 1706 Log Implementation ignored when executing under OSGi
+ 1709 SpnegoAuthenticator improperly handling case-insensitive Negotiate
header
+ 1713 Do not over allocate selectors for small thread pools
+ 1715 Standardise properties and ids in jetty XML files
+ 1717 DoSFilter getRateTracker IP/Port loadId minor improvement
+ 1718 QueuedThreadPool not exposed on JMX
+ 1719 HTTP/2: Improve handling of queued requests
+ 1721 Async I/O POST fails with big files
+ 1724 Add dependency on jetty-annotations for apache-jsp
+ 1732 Allow pause accepting new connections during high load
+ 1737 DefaultServlet wrong welcome dispatcher using non-root URL path
+ 1738 jetty-bom fails oss.sonatype.org validation
+ 1741 Java 9 javadoc failure in build
+ 1749 Dump HttpDestination exchange queue
+ 1750 PoolingHttpDestination creates ConnectionPool twice
+ 1759 HTTP/2: producer can block in onReset
+ 1766 JettyClientContainerProvider does not actually use common objects
correctly
+ 1789 PropertyUserStoreTest failures in Windows
+ 1790 HTTP/2: 100% CPU usage seen during close/shutdown of endpoint
+ 1792 Accept ISO-8859-1 characters in response reason
+ 1794 Config properties typos in session-store-cache.mod
+ 1795 Fix session id manager workerName
+ 1796 ReservedThreadExecutor defaulting to capacity=1 only
+ 1797 JEP 238 - Multi-Release JAR files break bytecode scanning
+ 1798 JMXify EatWhatYouKill
+ 1804 Make EndPoint creation and destroy a non-blocking task
+ 1805 ReservedThreadExecutor should start ReservedThreads lazily
+ 1809 NPE: StandardDescriptorProcessor.visitSecurityConstraint() with null/no
security manager
+ 1814 Move JavaVersion to jetty-util for future Java 9 support requirements
+ 1816 HttpClientTest.testClientCannotValidateServerCertificate() hangs with
JDK 9
+ 475546 ClosedChannelException when connection to HTTPS over HTTP proxy
with CONNECT
jetty-9.4.6.v20170531 - 31 May 2017 jetty-9.4.6.v20170531 - 31 May 2017
+ 523 TLS close behaviour breaking session resumption + 523 TLS close behaviour breaking session resumption

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>apache-jsp</artifactId> <artifactId>apache-jsp</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>apache-jstl</artifactId> <artifactId>apache-jstl</artifactId>

View File

@ -18,11 +18,6 @@
package org.eclipse.jetty.jstl; package org.eclipse.jetty.jstl;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertThat;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@ -36,15 +31,22 @@ import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.toolchain.test.FS; import org.eclipse.jetty.toolchain.test.FS;
import org.eclipse.jetty.toolchain.test.JAR; import org.eclipse.jetty.toolchain.test.JAR;
import org.eclipse.jetty.toolchain.test.JDK;
import org.eclipse.jetty.toolchain.test.MavenTestingUtils; import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
import org.eclipse.jetty.util.IO; import org.eclipse.jetty.util.IO;
import org.eclipse.jetty.webapp.Configuration; import org.eclipse.jetty.webapp.Configuration;
import org.eclipse.jetty.webapp.WebAppContext; import org.eclipse.jetty.webapp.WebAppContext;
import org.junit.AfterClass; import org.junit.AfterClass;
import org.junit.Assume;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Ignore; import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertThat;
public class JstlTest public class JstlTest
{ {
private static Server server; private static Server server;
@ -53,6 +55,8 @@ public class JstlTest
@BeforeClass @BeforeClass
public static void startServer() throws Exception public static void startServer() throws Exception
{ {
Assume.assumeFalse(JDK.IS_9);
// Setup Server // Setup Server
server = new Server(); server = new Server();
ServerConnector connector = new ServerConnector(server); ServerConnector connector = new ServerConnector(server);
@ -102,7 +106,8 @@ public class JstlTest
@AfterClass @AfterClass
public static void stopServer() throws Exception public static void stopServer() throws Exception
{ {
server.stop(); if (server != null)
server.stop();
} }
@Test @Test

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>example-async-rest</artifactId> <artifactId>example-async-rest</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>org.eclipse.jetty.example-async-rest</groupId> <groupId>org.eclipse.jetty.example-async-rest</groupId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>example-async-rest</artifactId> <artifactId>example-async-rest</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>org.eclipse.jetty.example-async-rest</groupId> <groupId>org.eclipse.jetty.example-async-rest</groupId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.examples</groupId> <groupId>org.eclipse.jetty.examples</groupId>
<artifactId>examples-parent</artifactId> <artifactId>examples-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.examples</groupId> <groupId>org.eclipse.jetty.examples</groupId>
<artifactId>examples-parent</artifactId> <artifactId>examples-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -4,7 +4,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<groupId>org.eclipse.jetty.examples</groupId> <groupId>org.eclipse.jetty.examples</groupId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-alpn-parent</artifactId> <artifactId>jetty-alpn-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-alpn-client</artifactId> <artifactId>jetty-alpn-client</artifactId>

View File

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-alpn-parent</artifactId> <artifactId>jetty-alpn-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -5,7 +5,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-alpn-parent</artifactId> <artifactId>jetty-alpn-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-alpn-parent</artifactId> <artifactId>jetty-alpn-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-alpn-server</artifactId> <artifactId>jetty-alpn-server</artifactId>

View File

@ -4,7 +4,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-alpn-parent</artifactId> <artifactId>jetty-alpn-parent</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-annotations</artifactId> <artifactId>jetty-annotations</artifactId>

View File

@ -24,9 +24,14 @@ import java.io.InputStream;
import java.net.URI; import java.net.URI;
import java.net.URL; import java.net.URL;
import java.net.URLClassLoader; import java.net.URLClassLoader;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.jar.JarEntry; import java.util.jar.JarEntry;
@ -45,7 +50,6 @@ import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes; import org.objectweb.asm.Opcodes;
/** /**
* AnnotationParser * AnnotationParser
* <p> * <p>
@ -69,10 +73,9 @@ public class AnnotationParser
private static final Logger LOG = Log.getLogger(AnnotationParser.class); private static final Logger LOG = Log.getLogger(AnnotationParser.class);
private static final int JVM_MAJOR_VER; private static final int JVM_MAJOR_VER;
protected Set<String> _parsedClassNames = ConcurrentHashMap.newKeySet();
protected static int ASM_OPCODE_VERSION = Opcodes.ASM5; //compatibility of api protected static int ASM_OPCODE_VERSION = Opcodes.ASM5; //compatibility of api
protected Map<String, List<String>> _parsedClassNames = new ConcurrentHashMap<>();
static static
{ {
@ -130,12 +133,8 @@ public class AnnotationParser
return normalList; return normalList;
} }
/** /**
* ClassInfo
*
* Immutable information gathered by parsing class header. * Immutable information gathered by parsing class header.
*
*/ */
public class ClassInfo public class ClassInfo
{ {
@ -195,10 +194,7 @@ public class AnnotationParser
} }
} }
/** /**
* MethodInfo
*
* Immutable information gathered by parsing a method on a class. * Immutable information gathered by parsing a method on a class.
*/ */
public class MethodInfo public class MethodInfo
@ -251,14 +247,9 @@ public class AnnotationParser
return _exceptions; return _exceptions;
} }
} }
/** /**
* FieldInfo
*
* Immutable information gathered by parsing a field on a class. * Immutable information gathered by parsing a field on a class.
*
*/ */
public class FieldInfo public class FieldInfo
{ {
@ -312,8 +303,6 @@ public class AnnotationParser
} }
/** /**
* Handler
*
* Signature for all handlers that respond to parsing class files. * Signature for all handlers that respond to parsing class files.
*/ */
public static interface Handler public static interface Handler
@ -327,13 +316,10 @@ public class AnnotationParser
} }
/** /**
* AbstractHandler
*
* Convenience base class to provide no-ops for all Handler methods. * Convenience base class to provide no-ops for all Handler methods.
*/ */
public static abstract class AbstractHandler implements Handler public static abstract class AbstractHandler implements Handler
{ {
@Override @Override
public void handle(ClassInfo classInfo) public void handle(ClassInfo classInfo)
{ {
@ -367,15 +353,11 @@ public class AnnotationParser
@Override @Override
public void handle(FieldInfo info, String annotationName) public void handle(FieldInfo info, String annotationName)
{ {
// no-op // no-op
} }
} }
/** /**
* MyMethodVisitor
*
* ASM Visitor for parsing a method. We are only interested in the annotations on methods. * ASM Visitor for parsing a method. We are only interested in the annotations on methods.
*/ */
public class MyMethodVisitor extends MethodVisitor public class MyMethodVisitor extends MethodVisitor
@ -396,11 +378,8 @@ public class AnnotationParser
_mi = new MethodInfo(classInfo, name, access, methodDesc,signature, exceptions); _mi = new MethodInfo(classInfo, name, access, methodDesc,signature, exceptions);
} }
/** /**
* We are only interested in finding the annotations on methods. * We are only interested in finding the annotations on methods.
*
* @see org.objectweb.asm.MethodVisitor#visitAnnotation(java.lang.String, boolean)
*/ */
@Override @Override
public AnnotationVisitor visitAnnotation(String desc, boolean visible) public AnnotationVisitor visitAnnotation(String desc, boolean visible)
@ -412,21 +391,15 @@ public class AnnotationParser
} }
} }
/** /**
* MyFieldVisitor * An ASM visitor for parsing Fields.
*
* An ASM visitor for parsing Fields.
* We are only interested in visiting annotations on Fields. * We are only interested in visiting annotations on Fields.
*
*/ */
public class MyFieldVisitor extends FieldVisitor public class MyFieldVisitor extends FieldVisitor
{ {
final FieldInfo _fieldInfo; final FieldInfo _fieldInfo;
final Set<? extends Handler> _handlers; final Set<? extends Handler> _handlers;
public MyFieldVisitor(final Set<? extends Handler> handlers, public MyFieldVisitor(final Set<? extends Handler> handlers,
final ClassInfo classInfo, final ClassInfo classInfo,
final int access, final int access,
@ -440,11 +413,8 @@ public class AnnotationParser
_fieldInfo = new FieldInfo(classInfo, fieldName, access, fieldType, signature, value); _fieldInfo = new FieldInfo(classInfo, fieldName, access, fieldType, signature, value);
} }
/** /**
* Parse an annotation found on a Field. * Parse an annotation found on a Field.
*
* @see org.objectweb.asm.FieldVisitor#visitAnnotation(java.lang.String, boolean)
*/ */
@Override @Override
public AnnotationVisitor visitAnnotation(String desc, boolean visible) public AnnotationVisitor visitAnnotation(String desc, boolean visible)
@ -457,17 +427,11 @@ public class AnnotationParser
} }
} }
/** /**
* MyClassVisitor
*
* ASM visitor for a class. * ASM visitor for a class.
*/ */
public class MyClassVisitor extends ClassVisitor public class MyClassVisitor extends ClassVisitor
{ {
final Resource _containingResource; final Resource _containingResource;
final Set<? extends Handler> _handlers; final Set<? extends Handler> _handlers;
ClassInfo _ci; ClassInfo _ci;
@ -479,7 +443,6 @@ public class AnnotationParser
_containingResource = containingResource; _containingResource = containingResource;
} }
@Override @Override
public void visit (final int version, public void visit (final int version,
final int access, final int access,
@ -489,18 +452,12 @@ public class AnnotationParser
final String[] interfaces) final String[] interfaces)
{ {
_ci = new ClassInfo(_containingResource, normalize(name), version, access, signature, normalize(superName), normalize(interfaces)); _ci = new ClassInfo(_containingResource, normalize(name), version, access, signature, normalize(superName), normalize(interfaces));
_parsedClassNames.add(_ci.getClassName());
for (Handler h:_handlers) for (Handler h:_handlers)
h.handle(_ci); h.handle(_ci);
} }
/** /**
* Visit an annotation on a Class * Visit an annotation on a Class
*
* @see org.objectweb.asm.ClassVisitor#visitAnnotation(java.lang.String, boolean)
*/ */
@Override @Override
public AnnotationVisitor visitAnnotation (String desc, boolean visible) public AnnotationVisitor visitAnnotation (String desc, boolean visible)
@ -508,15 +465,11 @@ public class AnnotationParser
String annotationName = normalize(desc); String annotationName = normalize(desc);
for (Handler h : _handlers) for (Handler h : _handlers)
h.handle(_ci, annotationName); h.handle(_ci, annotationName);
return null; return null;
} }
/** /**
* Visit a method to extract its annotations * Visit a method to extract its annotations
*
* @see org.objectweb.asm.ClassVisitor#visitMethod(int, java.lang.String, java.lang.String, java.lang.String, java.lang.String[])
*/ */
@Override @Override
public MethodVisitor visitMethod (final int access, public MethodVisitor visitMethod (final int access,
@ -525,14 +478,11 @@ public class AnnotationParser
final String signature, final String signature,
final String[] exceptions) final String[] exceptions)
{ {
return new MyMethodVisitor(_handlers, _ci, access, name, methodDesc, signature, exceptions); return new MyMethodVisitor(_handlers, _ci, access, name, methodDesc, signature, exceptions);
} }
/** /**
* Visit a field to extract its annotations * Visit a field to extract its annotations
*
* @see org.objectweb.asm.ClassVisitor#visitField(int, java.lang.String, java.lang.String, java.lang.String, java.lang.Object)
*/ */
@Override @Override
public FieldVisitor visitField (final int access, public FieldVisitor visitField (final int access,
@ -545,20 +495,41 @@ public class AnnotationParser
} }
} }
/** /**
* True if the class has already been processed, false otherwise * Add a class as having been parsed.
* @param className the classname *
* @return true if class was parsed, false if not * @param classname the name of the class
* @param location the fully qualified location of the class
*/ */
public boolean isParsed (String className) public void addParsedClass (String classname, Resource location)
{ {
return _parsedClassNames.contains(className); List<String> list = new ArrayList<>(1);
if (location != null)
list.add(location.toString());
List<String> existing = _parsedClassNames.putIfAbsent(classname, list);
if (existing != null)
{
existing.addAll(list);
LOG.warn("{} scanned from multiple locations: {}", classname, existing);
}
}
/**
* Get the locations of the given classname. There may be more than one
* location if there are duplicates of the same class.
*
* @param classname the name of the class
* @return an immutable list of locations
*/
public List<String> getParsedLocations (String classname)
{
List<String> list = _parsedClassNames.get(classname);
if (list == null)
return Collections.emptyList();
return Collections.unmodifiableList(list);
} }
/** /**
* Parse a given class * Parse a given class
* *
@ -566,29 +537,25 @@ public class AnnotationParser
* @param className the class name to parse * @param className the class name to parse
* @throws Exception if unable to parse * @throws Exception if unable to parse
*/ */
public void parse (Set<? extends Handler> handlers, String className) public void parse (Set<? extends Handler> handlers, String className) throws Exception
throws Exception
{ {
if (className == null) if (className == null)
return; return;
if (!isParsed(className)) String tmp = className;
className = className.replace('.', '/')+".class";
URL resource = Loader.getResource(className);
if (resource!= null)
{ {
className = className.replace('.', '/')+".class"; Resource r = Resource.newResource(resource);
URL resource = Loader.getResource(className); addParsedClass(tmp, r);
if (resource!= null) try (InputStream is = r.getInputStream())
{ {
Resource r = Resource.newResource(resource); scanClass(handlers, null, is);
try (InputStream is = r.getInputStream())
{
scanClass(handlers, null, is);
}
} }
} }
} }
/** /**
* Parse the given class, optionally walking its inheritance hierarchy * Parse the given class, optionally walking its inheritance hierarchy
* *
@ -597,27 +564,23 @@ public class AnnotationParser
* @param visitSuperClasses if true, also visit super classes for parse * @param visitSuperClasses if true, also visit super classes for parse
* @throws Exception if unable to parse class * @throws Exception if unable to parse class
*/ */
public void parse (Set<? extends Handler> handlers, Class<?> clazz, boolean visitSuperClasses) public void parse (Set<? extends Handler> handlers, Class<?> clazz, boolean visitSuperClasses) throws Exception
throws Exception
{ {
Class<?> cz = clazz; Class<?> cz = clazz;
while (cz != Object.class) while (cz != Object.class)
{ {
if (!isParsed(cz.getName())) String nameAsResource = cz.getName().replace('.', '/')+".class";
URL resource = Loader.getResource(nameAsResource);
if (resource!= null)
{ {
String nameAsResource = cz.getName().replace('.', '/')+".class"; Resource r = Resource.newResource(resource);
URL resource = Loader.getResource(nameAsResource); addParsedClass(clazz.getName(), r);
if (resource!= null) try (InputStream is = r.getInputStream())
{ {
Resource r = Resource.newResource(resource); scanClass(handlers, null, is);
try (InputStream is = r.getInputStream())
{
scanClass(handlers, null, is);
}
} }
} }
if (visitSuperClasses) if (visitSuperClasses)
cz = cz.getSuperclass(); cz = cz.getSuperclass();
else else
@ -625,8 +588,6 @@ public class AnnotationParser
} }
} }
/** /**
* Parse the given classes * Parse the given classes
* *
@ -634,8 +595,7 @@ public class AnnotationParser
* @param classNames the class name * @param classNames the class name
* @throws Exception if unable to parse * @throws Exception if unable to parse
*/ */
public void parse (Set<? extends Handler> handlers, String[] classNames) public void parse (Set<? extends Handler> handlers, String[] classNames) throws Exception
throws Exception
{ {
if (classNames == null) if (classNames == null)
return; return;
@ -643,7 +603,6 @@ public class AnnotationParser
parse(handlers, Arrays.asList(classNames)); parse(handlers, Arrays.asList(classNames));
} }
/** /**
* Parse the given classes * Parse the given classes
* *
@ -651,26 +610,24 @@ public class AnnotationParser
* @param classNames the class names * @param classNames the class names
* @throws Exception if unable to parse * @throws Exception if unable to parse
*/ */
public void parse (Set<? extends Handler> handlers, List<String> classNames) public void parse (Set<? extends Handler> handlers, List<String> classNames) throws Exception
throws Exception
{ {
MultiException me = new MultiException(); MultiException me = new MultiException();
for (String s:classNames) for (String s:classNames)
{ {
try try
{ {
if (!isParsed(s)) String name = s;
s = s.replace('.', '/')+".class";
URL resource = Loader.getResource(s);
if (resource!= null)
{ {
s = s.replace('.', '/')+".class"; Resource r = Resource.newResource(resource);
URL resource = Loader.getResource(s); addParsedClass(name, r);
if (resource!= null) try (InputStream is = r.getInputStream())
{ {
Resource r = Resource.newResource(resource); scanClass(handlers, null, is);
try (InputStream is = r.getInputStream())
{
scanClass(handlers, null, is);
}
} }
} }
} }
@ -682,67 +639,65 @@ public class AnnotationParser
me.ifExceptionThrow(); me.ifExceptionThrow();
} }
/** /**
* Parse all classes in a directory * Parse all classes in a directory
* *
* @param handlers the set of handlers to look for classes in * @param handlers the set of handlers to look for classes in
* @param dir the resource directory to look for classes * @param root the resource directory to look for classes
* @throws Exception if unable to parse * @throws Exception if unable to parse
*/ */
protected void parseDir (Set<? extends Handler> handlers, Resource dir) protected void parseDir (Set<? extends Handler> handlers, Resource root) throws Exception
throws Exception
{ {
// skip dirs whose name start with . (ie hidden) if (!root.isDirectory() || !root.exists() || root.getName().startsWith("."))
if (!dir.isDirectory() || !dir.exists() || dir.getName().startsWith("."))
return; return;
if (LOG.isDebugEnabled()) {LOG.debug("Scanning dir {}", dir);}; if (LOG.isDebugEnabled())
LOG.debug("Scanning dir {}", root);
MultiException me = new MultiException();
String[] files=dir.list(); File rootFile = root.getFile();
for (int f=0;files!=null && f<files.length;f++)
MultiException me = new MultiException();
Collection<Resource> resources = root.getAllResources();
if (resources != null)
{ {
Resource res = dir.addPath(files[f]); for (Resource r:resources)
if (res.isDirectory())
parseDir(handlers, res);
else
{ {
//we've already verified the directories, so just verify the class file name if (r.isDirectory())
File file = res.getFile(); continue;
File file = r.getFile();
if (isValidClassFileName((file==null?null:file.getName()))) if (isValidClassFileName((file==null?null:file.getName())))
{ {
Path classpath = rootFile.toPath().relativize(file.toPath());
String str = classpath.toString();
str = str.substring(0, str.lastIndexOf(".class")).replace('/', '.').replace('\\', '.');
try try
{ {
String name = res.getName(); if (LOG.isDebugEnabled())
if (!isParsed(name)) LOG.debug("Scanning class {}", r);
addParsedClass(str, r);
try (InputStream is=r.getInputStream())
{ {
Resource r = Resource.newResource(res.getURL()); scanClass(handlers, Resource.newResource(file.getParentFile()), is);
if (LOG.isDebugEnabled()) {LOG.debug("Scanning class {}", r);};
try (InputStream is=r.getInputStream())
{
scanClass(handlers, dir, is);
}
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
if (LOG.isDebugEnabled()) LOG.debug("Error scanning file "+files[f], ex); if (LOG.isDebugEnabled()) LOG.debug("Error scanning file "+file, ex);
me.add(new RuntimeException("Error scanning file "+files[f],ex)); me.add(new RuntimeException("Error scanning file "+file,ex));
} }
} }
else else
{ {
if (LOG.isDebugEnabled()) LOG.debug("Skipping scan on invalid file {}", res); if (LOG.isDebugEnabled()) LOG.debug("Skipping scan on invalid file {}", file);
} }
} }
} }
me.ifExceptionThrow(); me.ifExceptionThrow();
} }
/** /**
* Parse classes in the supplied classloader. * Parse classes in the supplied classloader.
* Only class files in jar files will be scanned. * Only class files in jar files will be scanned.
@ -753,8 +708,7 @@ public class AnnotationParser
* @param nullInclusive if true, an empty pattern means all names match, if false, none match * @param nullInclusive if true, an empty pattern means all names match, if false, none match
* @throws Exception if unable to parse * @throws Exception if unable to parse
*/ */
public void parse (final Set<? extends Handler> handlers, ClassLoader loader, boolean visitParents, boolean nullInclusive) public void parse (final Set<? extends Handler> handlers, ClassLoader loader, boolean visitParents, boolean nullInclusive) throws Exception
throws Exception
{ {
if (loader==null) if (loader==null)
return; return;
@ -785,7 +739,6 @@ public class AnnotationParser
me.ifExceptionThrow(); me.ifExceptionThrow();
} }
/** /**
* Parse classes in the supplied uris. * Parse classes in the supplied uris.
* *
@ -793,8 +746,7 @@ public class AnnotationParser
* @param uris the uris for the jars * @param uris the uris for the jars
* @throws Exception if unable to parse * @throws Exception if unable to parse
*/ */
public void parse (final Set<? extends Handler> handlers, final URI[] uris) public void parse (final Set<? extends Handler> handlers, final URI[] uris) throws Exception
throws Exception
{ {
if (uris==null) if (uris==null)
return; return;
@ -822,8 +774,7 @@ public class AnnotationParser
* @param uri the uri for the jar * @param uri the uri for the jar
* @throws Exception if unable to parse * @throws Exception if unable to parse
*/ */
public void parse (final Set<? extends Handler> handlers, URI uri) public void parse (final Set<? extends Handler> handlers, URI uri) throws Exception
throws Exception
{ {
if (uri == null) if (uri == null)
return; return;
@ -831,7 +782,6 @@ public class AnnotationParser
parse (handlers, Resource.newResource(uri)); parse (handlers, Resource.newResource(uri));
} }
/** /**
* Parse a resource * Parse a resource
* *
@ -839,8 +789,7 @@ public class AnnotationParser
* @param r the resource to parse * @param r the resource to parse
* @throws Exception if unable to parse * @throws Exception if unable to parse
*/ */
public void parse (final Set<? extends Handler> handlers, Resource r) public void parse (final Set<? extends Handler> handlers, Resource r) throws Exception
throws Exception
{ {
if (r == null) if (r == null)
return; return;
@ -870,9 +819,6 @@ public class AnnotationParser
if (LOG.isDebugEnabled()) LOG.warn("Resource not scannable for classes: {}", r); if (LOG.isDebugEnabled()) LOG.warn("Resource not scannable for classes: {}", r);
} }
/** /**
* Parse a resource that is a jar file. * Parse a resource that is a jar file.
* *
@ -880,15 +826,15 @@ public class AnnotationParser
* @param jarResource the jar resource to parse * @param jarResource the jar resource to parse
* @throws Exception if unable to parse * @throws Exception if unable to parse
*/ */
protected void parseJar (Set<? extends Handler> handlers, Resource jarResource) protected void parseJar (Set<? extends Handler> handlers, Resource jarResource) throws Exception
throws Exception
{ {
if (jarResource == null) if (jarResource == null)
return; return;
if (jarResource.toString().endsWith(".jar")) if (jarResource.toString().endsWith(".jar"))
{ {
if (LOG.isDebugEnabled()) {LOG.debug("Scanning jar {}", jarResource);}; if (LOG.isDebugEnabled())
LOG.debug("Scanning jar {}", jarResource);
//treat it as a jar that we need to open and scan all entries from //treat it as a jar that we need to open and scan all entries from
InputStream in = jarResource.getInputStream(); InputStream in = jarResource.getInputStream();
@ -896,30 +842,25 @@ public class AnnotationParser
return; return;
MultiException me = new MultiException(); MultiException me = new MultiException();
JarInputStream jar_in = new JarInputStream(in); try (JarInputStream jar_in = new JarInputStream(in))
try {
{
JarEntry entry = jar_in.getNextJarEntry(); JarEntry entry = jar_in.getNextJarEntry();
while (entry!=null) while (entry != null)
{ {
try try
{ {
parseJarEntry(handlers, jarResource, entry); parseJarEntry(handlers, jarResource, entry);
} }
catch (Exception e) catch (Exception e)
{ {
me.add(new RuntimeException("Error scanning entry "+entry.getName()+" from jar "+jarResource, e)); me.add(new RuntimeException("Error scanning entry " + entry.getName() + " from jar " + jarResource, e));
} }
entry = jar_in.getNextJarEntry(); entry = jar_in.getNextJarEntry();
} }
} }
catch (Exception e) catch (Exception e)
{ {
me.add(new RuntimeException("Error scanning jar "+jarResource, e)); me.add(new RuntimeException("Error scanning jar " + jarResource, e));
}
finally
{
jar_in.close();
} }
me.ifExceptionThrow(); me.ifExceptionThrow();
@ -934,8 +875,7 @@ public class AnnotationParser
* @param entry the entry in the jar resource to parse * @param entry the entry in the jar resource to parse
* @throws Exception if unable to parse * @throws Exception if unable to parse
*/ */
protected void parseJarEntry (Set<? extends Handler> handlers, Resource jar, JarEntry entry) protected void parseJarEntry (Set<? extends Handler> handlers, Resource jar, JarEntry entry) throws Exception
throws Exception
{ {
if (jar == null || entry == null) if (jar == null || entry == null)
return; return;
@ -950,20 +890,16 @@ public class AnnotationParser
if (isValidClassFileName(name) && isValidClassFilePath(name)) if (isValidClassFileName(name) && isValidClassFilePath(name))
{ {
String shortName = name.replace('/', '.').substring(0,name.length()-6); String shortName = name.replace('/', '.').substring(0,name.length()-6);
Resource clazz = Resource.newResource("jar:"+jar.getURI()+"!/"+name);
if (!isParsed(shortName)) addParsedClass(shortName, clazz);
if (LOG.isDebugEnabled())
LOG.debug("Scanning class from jar {}", clazz);
try (InputStream is = clazz.getInputStream())
{ {
Resource clazz = Resource.newResource("jar:"+jar.getURI()+"!/"+name); scanClass(handlers, jar, is);
if (LOG.isDebugEnabled()) {LOG.debug("Scanning class from jar {}", clazz);};
try (InputStream is = clazz.getInputStream())
{
scanClass(handlers, jar, is);
}
} }
} }
} }
/** /**
* Use ASM on a class * Use ASM on a class
@ -973,13 +909,20 @@ public class AnnotationParser
* @param is the input stream to parse * @param is the input stream to parse
* @throws IOException if unable to parse * @throws IOException if unable to parse
*/ */
protected void scanClass (Set<? extends Handler> handlers, Resource containingResource, InputStream is) protected void scanClass (Set<? extends Handler> handlers, Resource containingResource, InputStream is) throws IOException
throws IOException
{ {
ClassReader reader = new ClassReader(is); ClassReader reader = new ClassReader(is);
reader.accept(new MyClassVisitor(handlers, containingResource), ClassReader.SKIP_CODE|ClassReader.SKIP_DEBUG|ClassReader.SKIP_FRAMES); reader.accept(new MyClassVisitor(handlers, containingResource), ClassReader.SKIP_CODE|ClassReader.SKIP_DEBUG|ClassReader.SKIP_FRAMES);
} }
/**
* Remove any parsed class names.
*/
public void resetParsedClasses ()
{
_parsedClassNames.clear();
}
/** /**
* Check that the given path represents a valid class file name. * Check that the given path represents a valid class file name.
* The check is fairly cursory, checking that: * The check is fairly cursory, checking that:
@ -988,8 +931,8 @@ public class AnnotationParser
* <li> it isn't a dot file or in a hidden directory </li> * <li> it isn't a dot file or in a hidden directory </li>
* <li> the name of the class at least begins with a valid identifier for a class name </li> * <li> the name of the class at least begins with a valid identifier for a class name </li>
* </ul> * </ul>
* @param name * @param name the class file name
* @return * @return whether the class file name is valid
*/ */
private boolean isValidClassFileName (String name) private boolean isValidClassFileName (String name)
{ {
@ -1023,13 +966,12 @@ public class AnnotationParser
return true; return true;
} }
/** /**
* Check that the given path does not contain hidden directories * Check that the given path does not contain hidden directories
* *
* @param path * @param path the class file path
* @return * @return whether the class file path is valid
*/ */
private boolean isValidClassFilePath (String path) private boolean isValidClassFilePath (String path)
{ {
@ -1098,4 +1040,3 @@ public class AnnotationParser
return true; return true;
} }
} }

View File

@ -0,0 +1,35 @@
package org.acme;
//
// ========================================================================
// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
//
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
//
// You may elect to redistribute this code under either of these licenses.
// ========================================================================
//
/**
* ClassOne
*
*
*/
public class ClassOne
{
public void one()
{
}
}

View File

@ -29,6 +29,7 @@ import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.URI;
import java.net.URL; import java.net.URL;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
@ -44,6 +45,7 @@ import org.eclipse.jetty.toolchain.test.FS;
import org.eclipse.jetty.toolchain.test.IO; import org.eclipse.jetty.toolchain.test.IO;
import org.eclipse.jetty.toolchain.test.MavenTestingUtils; import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
import org.eclipse.jetty.toolchain.test.TestingDir; import org.eclipse.jetty.toolchain.test.TestingDir;
import org.eclipse.jetty.util.resource.Resource;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
@ -209,6 +211,40 @@ public class TestAnnotationParser
// Validate // Validate
Assert.assertThat("Found Class", tracker.foundClasses, contains(ClassA.class.getName())); Assert.assertThat("Found Class", tracker.foundClasses, contains(ClassA.class.getName()));
} }
@Test
public void testScanDuplicateClassesInJars() throws Exception
{
Resource testJar = Resource.newResource(MavenTestingUtils.getTestResourceFile("tinytest.jar"));
Resource testJar2 = Resource.newResource(MavenTestingUtils.getTestResourceFile("tinytest_copy.jar"));
AnnotationParser parser = new AnnotationParser();
Set<Handler> emptySet = Collections.emptySet();
parser.parse(emptySet, testJar);
parser.parse(emptySet, testJar2);
List<String> locations = parser.getParsedLocations("org.acme.ClassOne");
Assert.assertNotNull(locations);
Assert.assertEquals(2, locations.size());
Assert.assertTrue(!(locations.get(0).equals(locations.get(1))));
}
@Test
public void testScanDuplicateClasses() throws Exception
{
Resource testJar = Resource.newResource(MavenTestingUtils.getTestResourceFile("tinytest.jar"));
File testClasses = new File(MavenTestingUtils.getTargetDir(), "test-classes");
AnnotationParser parser = new AnnotationParser();
Set<Handler> emptySet = Collections.emptySet();
parser.parse(emptySet, testJar);
parser.parse(emptySet, Resource.newResource(testClasses));
List<String> locations = parser.getParsedLocations("org.acme.ClassOne");
Assert.assertNotNull(locations);
Assert.assertEquals(2, locations.size());
Assert.assertTrue(!(locations.get(0).equals(locations.get(1))));
}
private void copyClass(Class<?> clazz, File basedir) throws IOException private void copyClass(Class<?> clazz, File basedir) throws IOException
{ {

Binary file not shown.

Binary file not shown.

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-ant</artifactId> <artifactId>jetty-ant</artifactId>

View File

@ -2,7 +2,7 @@
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-bom</artifactId> <artifactId>jetty-bom</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
<name>Jetty :: Bom</name> <name>Jetty :: Bom</name>
<description>Jetty BOM artifact</description> <description>Jetty BOM artifact</description>
<url>http://www.eclipse.org/jetty</url> <url>http://www.eclipse.org/jetty</url>
@ -94,308 +94,303 @@
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>apache-jsp</artifactId> <artifactId>apache-jsp</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>apache-jstl</artifactId> <artifactId>apache-jstl</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-alpn-client</artifactId> <artifactId>jetty-alpn-client</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-alpn-java-client</artifactId> <artifactId>jetty-alpn-java-client</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-alpn-java-server</artifactId> <artifactId>jetty-alpn-java-server</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-alpn-server</artifactId> <artifactId>jetty-alpn-server</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-annotations</artifactId> <artifactId>jetty-annotations</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-ant</artifactId> <artifactId>jetty-ant</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.cdi</groupId> <groupId>org.eclipse.jetty.cdi</groupId>
<artifactId>cdi-core</artifactId> <artifactId>cdi-core</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.cdi</groupId> <groupId>org.eclipse.jetty.cdi</groupId>
<artifactId>cdi-full-servlet</artifactId> <artifactId>cdi-full-servlet</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.cdi</groupId> <groupId>org.eclipse.jetty.cdi</groupId>
<artifactId>cdi-servlet</artifactId> <artifactId>cdi-servlet</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-client</artifactId> <artifactId>jetty-client</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-continuation</artifactId> <artifactId>jetty-continuation</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-deploy</artifactId> <artifactId>jetty-deploy</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-distribution</artifactId> <artifactId>jetty-distribution</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
<type>zip</type> <type>zip</type>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.fcgi</groupId> <groupId>org.eclipse.jetty.fcgi</groupId>
<artifactId>jetty-fcgi-client</artifactId> <artifactId>fcgi-client</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.fcgi</groupId> <groupId>org.eclipse.jetty.fcgi</groupId>
<artifactId>jetty-fcgi-server</artifactId> <artifactId>fcgi-server</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.gcloud</groupId> <groupId>org.eclipse.jetty.gcloud</groupId>
<artifactId>jetty-gcloud-session-manager</artifactId> <artifactId>jetty-gcloud-session-manager</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-home</artifactId> <artifactId>jetty-home</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-http</artifactId> <artifactId>jetty-http</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.http2</groupId> <groupId>org.eclipse.jetty.http2</groupId>
<artifactId>http2-client</artifactId> <artifactId>http2-client</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.http2</groupId> <groupId>org.eclipse.jetty.http2</groupId>
<artifactId>http2-common</artifactId> <artifactId>http2-common</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.http2</groupId> <groupId>org.eclipse.jetty.http2</groupId>
<artifactId>http2-hpack</artifactId> <artifactId>http2-hpack</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.http2</groupId> <groupId>org.eclipse.jetty.http2</groupId>
<artifactId>http2-http-client-transport</artifactId> <artifactId>http2-http-client-transport</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.http2</groupId> <groupId>org.eclipse.jetty.http2</groupId>
<artifactId>http2-server</artifactId> <artifactId>http2-server</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-http-spi</artifactId> <artifactId>jetty-http-spi</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-infinispan</artifactId> <artifactId>jetty-infinispan</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-hazelcast</artifactId> <artifactId>jetty-hazelcast</artifactId>
<version>9.4.6-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-io</artifactId> <artifactId>jetty-io</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jaas</artifactId> <artifactId>jetty-jaas</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jaspi</artifactId> <artifactId>jetty-jaspi</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jmx</artifactId> <artifactId>jetty-jmx</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jndi</artifactId> <artifactId>jetty-jndi</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.memcached</groupId> <groupId>org.eclipse.jetty.memcached</groupId>
<artifactId>jetty-memcached-sessions</artifactId> <artifactId>jetty-memcached-sessions</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-monitor</artifactId>
<version>9.4.7-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-nosql</artifactId> <artifactId>jetty-nosql</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-boot</artifactId> <artifactId>jetty-osgi-boot</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-boot-jsp</artifactId> <artifactId>jetty-osgi-boot-jsp</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-boot-warurl</artifactId> <artifactId>jetty-osgi-boot-warurl</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-httpservice</artifactId> <artifactId>jetty-httpservice</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-plus</artifactId> <artifactId>jetty-plus</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-proxy</artifactId> <artifactId>jetty-proxy</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-quickstart</artifactId> <artifactId>jetty-quickstart</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-rewrite</artifactId> <artifactId>jetty-rewrite</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-security</artifactId> <artifactId>jetty-security</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId> <artifactId>jetty-server</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId> <artifactId>jetty-servlet</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlets</artifactId> <artifactId>jetty-servlets</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-spring</artifactId> <artifactId>jetty-spring</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-unixsocket</artifactId> <artifactId>jetty-unixsocket</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId> <artifactId>jetty-util</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util-ajax</artifactId> <artifactId>jetty-util-ajax</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId> <artifactId>jetty-webapp</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.websocket</groupId> <groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>javax-websocket-client-impl</artifactId> <artifactId>javax-websocket-client-impl</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.websocket</groupId> <groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>javax-websocket-server-impl</artifactId> <artifactId>javax-websocket-server-impl</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.websocket</groupId> <groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-api</artifactId> <artifactId>websocket-api</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.websocket</groupId> <groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-client</artifactId> <artifactId>websocket-client</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.websocket</groupId> <groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-common</artifactId> <artifactId>websocket-common</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty.websocket</groupId> <groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-server</artifactId> <artifactId>websocket-server</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>websocket-servlet</artifactId> <artifactId>websocket-servlet</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-xml</artifactId> <artifactId>jetty-xml</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</dependency> </dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.cdi</groupId> <groupId>org.eclipse.jetty.cdi</groupId>
<artifactId>jetty-cdi-parent</artifactId> <artifactId>jetty-cdi-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>cdi-core</artifactId> <artifactId>cdi-core</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.cdi</groupId> <groupId>org.eclipse.jetty.cdi</groupId>
<artifactId>jetty-cdi-parent</artifactId> <artifactId>jetty-cdi-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>cdi-full-servlet</artifactId> <artifactId>cdi-full-servlet</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.cdi</groupId> <groupId>org.eclipse.jetty.cdi</groupId>
<artifactId>jetty-cdi-parent</artifactId> <artifactId>jetty-cdi-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>cdi-servlet</artifactId> <artifactId>cdi-servlet</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.cdi</groupId> <groupId>org.eclipse.jetty.cdi</groupId>
<artifactId>jetty-cdi-parent</artifactId> <artifactId>jetty-cdi-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>cdi-websocket</artifactId> <artifactId>cdi-websocket</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>org.eclipse.jetty.cdi</groupId> <groupId>org.eclipse.jetty.cdi</groupId>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.cdi</groupId> <groupId>org.eclipse.jetty.cdi</groupId>
<artifactId>jetty-cdi-parent</artifactId> <artifactId>jetty-cdi-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>test-cdi-webapp</artifactId> <artifactId>test-cdi-webapp</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -118,33 +118,33 @@ public class HttpClient extends ContainerLifeCycle
private final ConcurrentMap<Origin, HttpDestination> destinations = new ConcurrentHashMap<>(); private final ConcurrentMap<Origin, HttpDestination> destinations = new ConcurrentHashMap<>();
private final ProtocolHandlers handlers = new ProtocolHandlers(); private final ProtocolHandlers handlers = new ProtocolHandlers();
private final List<Request.Listener> requestListeners = new ArrayList<>(); private final List<Request.Listener> requestListeners = new ArrayList<>();
private final AuthenticationStore authenticationStore = new HttpAuthenticationStore();
private final Set<ContentDecoder.Factory> decoderFactories = new ContentDecoderFactorySet(); private final Set<ContentDecoder.Factory> decoderFactories = new ContentDecoderFactorySet();
private final ProxyConfiguration proxyConfig = new ProxyConfiguration(); private final ProxyConfiguration proxyConfig = new ProxyConfiguration();
private final HttpClientTransport transport; private final HttpClientTransport transport;
private final SslContextFactory sslContextFactory; private final SslContextFactory sslContextFactory;
private volatile CookieManager cookieManager; private AuthenticationStore authenticationStore = new HttpAuthenticationStore();
private volatile CookieStore cookieStore; private CookieManager cookieManager;
private volatile Executor executor; private CookieStore cookieStore;
private volatile ByteBufferPool byteBufferPool; private Executor executor;
private volatile Scheduler scheduler; private ByteBufferPool byteBufferPool;
private volatile SocketAddressResolver resolver; private Scheduler scheduler;
private volatile HttpField agentField = new HttpField(HttpHeader.USER_AGENT, "Jetty/" + Jetty.VERSION); private SocketAddressResolver resolver;
private volatile boolean followRedirects = true; private HttpField agentField = new HttpField(HttpHeader.USER_AGENT, "Jetty/" + Jetty.VERSION);
private volatile int maxConnectionsPerDestination = 64; private boolean followRedirects = true;
private volatile int maxRequestsQueuedPerDestination = 1024; private int maxConnectionsPerDestination = 64;
private volatile int requestBufferSize = 4096; private int maxRequestsQueuedPerDestination = 1024;
private volatile int responseBufferSize = 16384; private int requestBufferSize = 4096;
private volatile int maxRedirects = 8; private int responseBufferSize = 16384;
private volatile SocketAddress bindAddress; private int maxRedirects = 8;
private volatile long connectTimeout = 15000; private SocketAddress bindAddress;
private volatile long addressResolutionTimeout = 15000; private long connectTimeout = 15000;
private volatile long idleTimeout; private long addressResolutionTimeout = 15000;
private volatile boolean tcpNoDelay = true; private long idleTimeout;
private volatile boolean strictEventOrdering = false; private boolean tcpNoDelay = true;
private volatile HttpField encodingField; private boolean strictEventOrdering = false;
private volatile boolean removeIdleDestinations = false; private HttpField encodingField;
private volatile boolean connectBlocking = false; private boolean removeIdleDestinations = false;
private boolean connectBlocking = false;
/** /**
* Creates a {@link HttpClient} instance that can perform requests to non-TLS destinations only * Creates a {@link HttpClient} instance that can perform requests to non-TLS destinations only
@ -302,6 +302,14 @@ public class HttpClient extends ContainerLifeCycle
return authenticationStore; return authenticationStore;
} }
/**
* @param authenticationStore the authentication store associated with this instance
*/
public void setAuthenticationStore(AuthenticationStore authenticationStore)
{
this.authenticationStore = authenticationStore;
}
/** /**
* Returns a <em>non</em> thread-safe set of {@link ContentDecoder.Factory}s that can be modified before * Returns a <em>non</em> thread-safe set of {@link ContentDecoder.Factory}s that can be modified before
* performing requests. * performing requests.

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-continuation</artifactId> <artifactId>jetty-continuation</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-deploy</artifactId> <artifactId>jetty-deploy</artifactId>

View File

@ -4,7 +4,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-distribution</artifactId> <artifactId>jetty-distribution</artifactId>

View File

@ -4,7 +4,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<artifactId>jetty-documentation</artifactId> <artifactId>jetty-documentation</artifactId>
<name>Jetty :: Documentation</name> <name>Jetty :: Documentation</name>

View File

@ -17,57 +17,39 @@
[[garbage-collection]] [[garbage-collection]]
=== Garbage Collection === Garbage Collection
Tuning the JVM garbage collection (GC) can greatly improve Jetty performance. Tuning the JVM garbage collection (GC) can greatly improve the performance of the JVM where Jetty and your application are running.
Specifically, you can avoid pauses while the system performs full garbage collections. Optimal tuning of the GC depends on the behavior of the application(s) and requires detailed analysis, but there are general recommendations to follow to at least obtain comprehensive GC logs that can be later analyzed.
Optimal tuning of the GC depends on the behavior of the application and requires detailed analysis, however there are general recommendations.
See official https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/[Java 8 Garbage Collection documentation] for further assistance. See official https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/[Java 8] and https://docs.oracle.com/javase/9/gctuning/introduction-garbage-collection-tuning.htm[Java 9] Garbage Collection documentation for further assistance.
[[tuning-examples]] [[garbage-collection-logging-configuration]]
==== Tuning Examples ==== Garbage Collection Logging Configuration
These options are general to the Oracle JVM, and work in a Java 8 installation. These options are general to OpenJDK (and therefore also for the Oracle JVM).
They provide good information about how your JVM is running; based on that initial information, you can then tune more finely. They provide good information about the GC activity of your JVM, producing logs that can later be analyzed to perform finer tuning.
The most important thing you can do for yourself when considering GC is to capture the GC activity so that you can analyze what is happening and how often it happens.
.JDK 8 Garbage Collection Logging Configuration
[source,screen, subs="{sub-order}"] [source,screen, subs="{sub-order}"]
.... ....
-verbose:gc
-Xloggc:/path/to/myjettybase/logs/gc.log -Xloggc:/path/to/myjettybase/logs/gc.log
-XX:+PrintGCDateStamps -XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails -XX:+PrintGCDetails
-XX:+PrintTenuringDistribution -XX:+ParallelRefProcEnabled
-XX:+PrintCommandLineFlags
-XX:+PrintReferenceGC -XX:+PrintReferenceGC
-XX:+PrintTenuringDistribution
-XX:+PrintAdaptiveSizePolicy -XX:+PrintAdaptiveSizePolicy
.... ....
There are not many recommended options for GC that can apply to nearly all users. .JDK 9 Garbage Collection Logging Configuration
[source,screen, subs="{sub-order}"]
....
Xlog:gc*,ergo*=trace,ref*=debug,age*=trace:file=/path/to/myjettybase/logs/gc.log:time,level,tags
....
There are not many recommended options for GC that can apply to all users.
However, the most obvious one is to disable explicit GC (this is performed regularly by RMI and can introduce an abnormal amount of GC pauses). However, the most obvious one is to disable explicit GC (this is performed regularly by RMI and can introduce an abnormal amount of GC pauses).
[source,screen, subs="{sub-order}"] [source,screen, subs="{sub-order}"]
.... ....
-XX:+DisableExplicitGC -XX:+DisableExplicitGC
.... ....
Before you apply any other GC tuning options, monitor your GC logs to see if https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/cms.html[tuning the CMS] makes sense for your environment.
A common setup for those just starting out with GC tuning is included below for reference.
____
[CAUTION]
This example configuration below could have a negative effect on your application performance, so continued monitoring of your GC log before and after is highly recommended to know if the configuration was beneficial or not.
____
[source,screen, subs="{sub-order}"]
....
-XX:MaxGCPauseMillis=250
-XX:+UseConcMarkSweepGC
-XX:ParallelCMSThreads=2
-XX:+CMSClassUnloadingEnabled
-XX:+UseCMSCompactAtFullCollection
-XX:CMSInitiatingOccupancyFraction=80
....

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.fcgi</groupId> <groupId>org.eclipse.jetty.fcgi</groupId>
<artifactId>fcgi-parent</artifactId> <artifactId>fcgi-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.fcgi</groupId> <groupId>org.eclipse.jetty.fcgi</groupId>
<artifactId>fcgi-parent</artifactId> <artifactId>fcgi-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.gcloud</groupId> <groupId>org.eclipse.jetty.gcloud</groupId>
<artifactId>gcloud-parent</artifactId> <artifactId>gcloud-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -4,7 +4,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-home</artifactId> <artifactId>jetty-home</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-http-spi</artifactId> <artifactId>jetty-http-spi</artifactId>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-http</artifactId> <artifactId>jetty-http</artifactId>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.http2</groupId> <groupId>org.eclipse.jetty.http2</groupId>
<artifactId>http2-parent</artifactId> <artifactId>http2-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.http2</groupId> <groupId>org.eclipse.jetty.http2</groupId>
<artifactId>http2-parent</artifactId> <artifactId>http2-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.http2</groupId> <groupId>org.eclipse.jetty.http2</groupId>
<artifactId>http2-parent</artifactId> <artifactId>http2-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.http2</groupId> <groupId>org.eclipse.jetty.http2</groupId>
<artifactId>http2-parent</artifactId> <artifactId>http2-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.http2</groupId> <groupId>org.eclipse.jetty.http2</groupId>
<artifactId>http2-parent</artifactId> <artifactId>http2-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.http2</groupId> <groupId>org.eclipse.jetty.http2</groupId>
<artifactId>http2-parent</artifactId> <artifactId>http2-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-infinispan</artifactId> <artifactId>jetty-infinispan</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-io</artifactId> <artifactId>jetty-io</artifactId>

View File

@ -80,13 +80,17 @@ public abstract class NegotiatingClientConnection extends AbstractConnection
while (true) while (true)
{ {
int filled = fill(); int filled = fill();
if (filled == 0 && !completed) if (completed || filled < 0)
fillInterested(); {
if (filled <= 0 || completed) replaceConnection();
break; break;
}
if (filled == 0)
{
fillInterested();
break;
}
} }
if (completed)
replaceConnection();
} }
private int fill() private int fill()

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-jaas</artifactId> <artifactId>jetty-jaas</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-jaspi</artifactId> <artifactId>jetty-jaspi</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-jmx</artifactId> <artifactId>jetty-jmx</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-jndi</artifactId> <artifactId>jetty-jndi</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-jspc-maven-plugin</artifactId> <artifactId>jetty-jspc-maven-plugin</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-maven-plugin</artifactId> <artifactId>jetty-maven-plugin</artifactId>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.memcached</groupId> <groupId>org.eclipse.jetty.memcached</groupId>
<artifactId>memcached-parent</artifactId> <artifactId>memcached-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-nosql</artifactId> <artifactId>jetty-nosql</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-project</artifactId> <artifactId>jetty-osgi-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-osgi-alpn</artifactId> <artifactId>jetty-osgi-alpn</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-project</artifactId> <artifactId>jetty-osgi-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-osgi-boot-jsp</artifactId> <artifactId>jetty-osgi-boot-jsp</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-project</artifactId> <artifactId>jetty-osgi-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-project</artifactId> <artifactId>jetty-osgi-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-osgi-boot</artifactId> <artifactId>jetty-osgi-boot</artifactId>

View File

@ -203,12 +203,11 @@ public class AnnotationParser extends org.eclipse.jetty.annotations.AnnotationPa
} }
//transform into a classname to pass to the resolver //transform into a classname to pass to the resolver
String shortName = name.replace('/', '.').substring(0,name.length()-6); String shortName = name.replace('/', '.').substring(0,name.length()-6);
if (!isParsed(shortName))
addParsedClass(shortName, getResource(bundle));
try (InputStream classInputStream = classUrl.openStream())
{ {
try (InputStream classInputStream = classUrl.openStream()) scanClass(handlers, getResource(bundle), classInputStream);
{
scanClass(handlers, getResource(bundle), classInputStream);
}
} }
} }
} }

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-project</artifactId> <artifactId>jetty-osgi-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-httpservice</artifactId> <artifactId>jetty-httpservice</artifactId>

View File

@ -4,7 +4,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-project</artifactId> <artifactId>jetty-osgi-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>test-jetty-osgi-context</artifactId> <artifactId>test-jetty-osgi-context</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-project</artifactId> <artifactId>jetty-osgi-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-project</artifactId> <artifactId>jetty-osgi-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>test-jetty-osgi-server</artifactId> <artifactId>test-jetty-osgi-server</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-project</artifactId> <artifactId>jetty-osgi-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-project</artifactId> <artifactId>jetty-osgi-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-plus</artifactId> <artifactId>jetty-plus</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-proxy</artifactId> <artifactId>jetty-proxy</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-rewrite</artifactId> <artifactId>jetty-rewrite</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-runner</artifactId> <artifactId>jetty-runner</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-security</artifactId> <artifactId>jetty-security</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-server</artifactId> <artifactId>jetty-server</artifactId>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-servlet</artifactId> <artifactId>jetty-servlet</artifactId>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-servlets</artifactId> <artifactId>jetty-servlets</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-spring</artifactId> <artifactId>jetty-spring</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-start</artifactId> <artifactId>jetty-start</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-unixsocket</artifactId> <artifactId>jetty-unixsocket</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-util-ajax</artifactId> <artifactId>jetty-util-ajax</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-util</artifactId> <artifactId>jetty-util</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-webapp</artifactId> <artifactId>jetty-webapp</artifactId>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.websocket</groupId> <groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-parent</artifactId> <artifactId>websocket-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.websocket</groupId> <groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-parent</artifactId> <artifactId>websocket-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.websocket</groupId> <groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-parent</artifactId> <artifactId>websocket-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.websocket</groupId> <groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-parent</artifactId> <artifactId>websocket-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.websocket</groupId> <groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-parent</artifactId> <artifactId>websocket-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.websocket</groupId> <groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-parent</artifactId> <artifactId>websocket-parent</artifactId>
<version>9.4.7-SNAPSHOT</version> <version>9.4.8-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -43,8 +43,10 @@ import org.eclipse.jetty.websocket.servlet.WebSocketServlet;
import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
import org.junit.AfterClass; import org.junit.AfterClass;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
@Ignore("Unstable - see Issue #1815")
public class DecoratorsLegacyTest public class DecoratorsLegacyTest
{ {
private static class DecoratorsSocket extends WebSocketAdapter private static class DecoratorsSocket extends WebSocketAdapter

Some files were not shown because too many files have changed in this diff Show More