Skip to content

Commit

Permalink
Merge branch 'jetty-12.0.x' into jetty-12.1.x
Browse files Browse the repository at this point in the history
  • Loading branch information
gregw committed May 22, 2024
2 parents a570015 + 1b82757 commit f684b69
Show file tree
Hide file tree
Showing 8 changed files with 97 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ public class HttpParser
for (HttpHeader h : HttpHeader.values())
{
HttpField httpField = new HttpField(h, UNMATCHED_VALUE);
map.put(httpField.toString(), httpField);
map.put(h + ": ", httpField);
}
return map;
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,20 @@ public void testLowerCaseVersion(String eoln)
assertEquals(1, _headers);
}

@Test
public void testHeaderCache()
{
assertThat(HttpParser.CACHE.getBest("Content-Type: text/plain\r\n").toString(), is("Content-Type: text/plain"));
assertThat(HttpParser.CACHE.getBest("Content-Type: text/plain\n").toString(), is("Content-Type: text/plain"));
assertThat(HttpParser.CACHE.getBest("content-type: text/plain\r\n").toString(), is("Content-Type: text/plain"));
assertThat(HttpParser.CACHE.getBest("content-type: text/plain\n").toString(), is("Content-Type: text/plain"));

assertThat(HttpParser.CACHE.getBest("Content-Type: unknown\r\n").toString(), is("Content-Type: \u0000"));
assertThat(HttpParser.CACHE.getBest("Content-Type: unknown\n").toString(), is("Content-Type: \u0000"));
assertThat(HttpParser.CACHE.getBest("content-type: unknown\r\n").toString(), is("Content-Type: \u0000"));
assertThat(HttpParser.CACHE.getBest("content-type: unknown\n").toString(), is("Content-Type: \u0000"));
}

@ParameterizedTest
@ValueSource(strings = {"\r\n", "\n"})
public void testHeaderCacheNearMiss(String eoln)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -525,6 +525,27 @@ public ClassMatcher(String pattern)
add(pattern);
}

@Deprecated
protected interface Constructor<T extends ClassMatcher>
{
T construct(Map<String, Entry> entries, IncludeExcludeSet<Entry, String> patterns, IncludeExcludeSet<Entry, URI> locations);
}

/**
* Wrap an instance of a {@link ClassMatcher} using a constructor of an extended {@code ClassMatcher}
* that needs access to the internal fields of the passed matcher.
* @param matcher The matcher to wrap
* @param constructor The constructor to build the API specific wrapper
* @param <T> The type of the API specific wrapper
* @return A wrapper of the {@code matcher}, sharing internal state.
* @deprecated use {@link ClassMatcher} directly.
*/
@Deprecated
protected static <T extends ClassMatcher> T wrap(ClassMatcher matcher, Constructor<T> constructor)
{
return constructor.construct(matcher._entries, matcher._patterns, matcher._locations);
}

public ClassMatcher asImmutable()
{
return new ClassMatcher(Map.copyOf(_entries),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,16 @@ public ClassMatcher asImmutable()
_patterns.asImmutable(),
_locations.asImmutable());
}

/**
* Create a {@link ClassMatcher webapp ClassMatcher} that wraps a {@link org.eclipse.jetty.util.ClassMatcher util ClassMatcher}
* for deprecated API usage.
* @param matcher The util {@link org.eclipse.jetty.util.ClassMatcher} to wrap
* @return A {@link ClassMatcher webapp ClassMatcher}
*/
static ClassMatcher wrap(org.eclipse.jetty.util.ClassMatcher matcher)
{
Constructor<ClassMatcher> constructor = ClassMatcher::new;
return wrap(matcher, constructor);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ default ClassMatcher getHiddenClasses()
@Deprecated(since = "12.0.8", forRemoval = true)
default org.eclipse.jetty.ee10.webapp.ClassMatcher getSystemClasses()
{
return new org.eclipse.jetty.ee10.webapp.ClassMatcher(getProtectedClasses());
return org.eclipse.jetty.ee10.webapp.ClassMatcher.wrap(getProtectedClasses());
}

/**
Expand All @@ -128,7 +128,7 @@ default org.eclipse.jetty.ee10.webapp.ClassMatcher getSystemClasses()
@Deprecated(since = "12.0.8", forRemoval = true)
default org.eclipse.jetty.ee10.webapp.ClassMatcher getServerClasses()
{
return new org.eclipse.jetty.ee10.webapp.ClassMatcher(getHiddenClasses());
return org.eclipse.jetty.ee10.webapp.ClassMatcher.wrap(getHiddenClasses());
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,14 +103,14 @@ public class WebAppContext extends ServletContextHandler implements WebAppClassL
*/
@Deprecated (forRemoval = true, since = "12.0.9")
public static final org.eclipse.jetty.ee10.webapp.ClassMatcher __dftSystemClasses =
new org.eclipse.jetty.ee10.webapp.ClassMatcher(WebAppClassLoading.DEFAULT_PROTECTED_CLASSES);
org.eclipse.jetty.ee10.webapp.ClassMatcher.wrap(WebAppClassLoading.DEFAULT_PROTECTED_CLASSES);

/**
* @deprecated use {@link WebAppClassLoading#DEFAULT_HIDDEN_CLASSES}
*/
@Deprecated (forRemoval = true, since = "12.0.9")
public static final org.eclipse.jetty.ee10.webapp.ClassMatcher __dftServerClasses =
new org.eclipse.jetty.ee10.webapp.ClassMatcher(WebAppClassLoading.DEFAULT_HIDDEN_CLASSES);
org.eclipse.jetty.ee10.webapp.ClassMatcher.wrap(WebAppClassLoading.DEFAULT_HIDDEN_CLASSES);

private final ClassMatcher _protectedClasses = new ClassMatcher(WebAppClassLoading.getProtectedClasses(ServletContextHandler.ENVIRONMENT));
private final ClassMatcher _hiddenClasses = new ClassMatcher(WebAppClassLoading.getHiddenClasses(ServletContextHandler.ENVIRONMENT));
Expand Down Expand Up @@ -768,7 +768,7 @@ public void addSystemClassMatcher(org.eclipse.jetty.ee10.webapp.ClassMatcher sys
@Deprecated(since = "12.0.8", forRemoval = true)
public org.eclipse.jetty.ee10.webapp.ClassMatcher getSystemClassMatcher()
{
return new org.eclipse.jetty.ee10.webapp.ClassMatcher(getProtectedClassMatcher());
return org.eclipse.jetty.ee10.webapp.ClassMatcher.wrap(getProtectedClassMatcher());
}

/**
Expand All @@ -777,7 +777,7 @@ public org.eclipse.jetty.ee10.webapp.ClassMatcher getSystemClassMatcher()
@Deprecated(since = "12.0.8", forRemoval = true)
public org.eclipse.jetty.ee10.webapp.ClassMatcher getServerClassMatcher()
{
return new org.eclipse.jetty.ee10.webapp.ClassMatcher(getHiddenClassMatcher());
return org.eclipse.jetty.ee10.webapp.ClassMatcher.wrap(getHiddenClassMatcher());
}

/**
Expand Down Expand Up @@ -1570,7 +1570,7 @@ public MetaData getMetaData()
}

/**
* Add a Server Class pattern to use for all ee9 WebAppContexts.
* Add a Server Class pattern to use for all WebAppContexts.
* @param server The {@link Server} instance to add classes to
* @param patterns the patterns to use
* @see #getHiddenClassMatcher()
Expand All @@ -1584,7 +1584,7 @@ public static void addServerClasses(Server server, String... patterns)
}

/**
* Add a System Class pattern to use for all ee9 WebAppContexts.
* Add a System Class pattern to use for all WebAppContexts.
* @param server The {@link Server} instance to add classes to
* @param patterns the patterns to use
* @see #getProtectedClassMatcher()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -940,13 +940,13 @@ public void testSetServerPropagation()
}

@Test
public void testAddServerClasses() throws Exception
public void testAddHiddenClasses() throws Exception
{
Server server = newServer();

String testPattern = "org.eclipse.jetty.ee10.webapp.test.";

WebAppContext.addServerClasses(server, testPattern);
WebAppClassLoading.addHiddenClasses(server, testPattern);

WebAppContext context = new WebAppContext();
context.setContextPath("/");
Expand All @@ -957,25 +957,34 @@ public void testAddServerClasses() throws Exception
Path warPath = createWar(testPath, "test.war");
context.setBaseResource(context.getResourceFactory().newResource(warPath));

// Check context specific
context.getHiddenClassMatcher().add("org.context.specific.");

// Check old API
context.getServerClassMatcher().add("org.deprecated.api.");

server.setHandler(context);
server.start();

List<String> serverClasses = List.of(context.getHiddenClasses());
assertThat("Should have environment specific test pattern", serverClasses, hasItem(testPattern));
assertThat("Should have pattern from defaults", serverClasses, hasItem("org.eclipse.jetty."));
assertThat("Should have pattern from JaasConfiguration", serverClasses, hasItem("-org.eclipse.jetty.security.jaas."));
List<String> hiddenClasses = List.of(context.getHiddenClasses());
assertThat("Should have environment specific test pattern", hiddenClasses, hasItem(testPattern));
assertThat("Should have pattern from defaults", hiddenClasses, hasItem("org.eclipse.jetty."));
assertThat("Should have pattern from JaasConfiguration", hiddenClasses, hasItem("-org.eclipse.jetty.security.jaas."));
for (String defaultServerClass: WebAppClassLoading.DEFAULT_HIDDEN_CLASSES)
assertThat("Should have default patterns", serverClasses, hasItem(defaultServerClass));
assertThat("Should have default patterns", hiddenClasses, hasItem(defaultServerClass));

assertThat("context API", hiddenClasses, hasItem("org.context.specific."));
assertThat("deprecated API", hiddenClasses, hasItem("org.deprecated.api."));
}

@Test
public void testAddSystemClasses() throws Exception
public void testAddProtectedClasses() throws Exception
{
Server server = newServer();

String testPattern = "org.eclipse.jetty.ee10.webapp.test.";

WebAppContext.addSystemClasses(server, testPattern);
WebAppClassLoading.addProtectedClasses(server, testPattern);

WebAppContext context = new WebAppContext();
context.setContextPath("/");
Expand All @@ -985,15 +994,24 @@ public void testAddSystemClasses() throws Exception
Path warPath = createWar(testPath, "test.war");
context.setBaseResource(context.getResourceFactory().newResource(warPath));

// Check context specific
context.getProtectedClassMatcher().add("org.context.specific.");

// Check old API is a wrapper
context.getSystemClassMatcher().add("org.deprecated.api.");

server.setHandler(context);
server.start();

List<String> systemClasses = List.of(context.getProtectedClasses());
assertThat("Should have environment specific test pattern", systemClasses, hasItem(testPattern));
assertThat("Should have pattern from defaults", systemClasses, hasItem("javax."));
assertThat("Should have pattern from defaults", systemClasses, hasItem("jakarta."));
assertThat("Should have pattern from JaasConfiguration", systemClasses, hasItem("org.eclipse.jetty.security.jaas."));
List<String> protectedClasses = List.of(context.getProtectedClasses());
assertThat("Should have environment specific test pattern", protectedClasses, hasItem(testPattern));
assertThat("Should have pattern from defaults", protectedClasses, hasItem("javax."));
assertThat("Should have pattern from defaults", protectedClasses, hasItem("jakarta."));
assertThat("Should have pattern from JaasConfiguration", protectedClasses, hasItem("org.eclipse.jetty.security.jaas."));
for (String defaultSystemClass: WebAppClassLoading.DEFAULT_PROTECTED_CLASSES)
assertThat("Should have default patterns", systemClasses, hasItem(defaultSystemClass));
assertThat("Should have default patterns", protectedClasses, hasItem(defaultSystemClass));

assertThat("context API", protectedClasses, hasItem("org.context.specific."));
assertThat("deprecated API", protectedClasses, hasItem("org.deprecated.api."));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -867,6 +867,9 @@ public void testAddServerClasses() throws Exception
Path warPath = createWar(testPath, "test.war");
context.setBaseResource(context.getResourceFactory().newResource(warPath));

// Add test for old/original API (replaced with getHiddenClassMatcher() in ee10)
context.getServerClassMatcher().add("org.deprecated.api.");

server.setHandler(context);
server.start();

Expand All @@ -876,6 +879,7 @@ public void testAddServerClasses() throws Exception
assertThat("Should have pattern from JaasConfiguration", serverClasses, hasItem("-org.eclipse.jetty.security.jaas."));
for (String defaultServerClass: WebAppClassLoading.DEFAULT_HIDDEN_CLASSES)
assertThat("Should have default patterns", serverClasses, hasItem(defaultServerClass));
assertThat("deprecated API", serverClasses, hasItem("org.deprecated.api."));
}

@Test
Expand All @@ -895,6 +899,9 @@ public void testAddSystemClasses() throws Exception
Path warPath = createWar(testPath, "test.war");
context.setBaseResource(context.getResourceFactory().newResource(warPath));

// Add test for old/original API (replaced with getProtectedClassMatcher() in ee10)
context.getSystemClassMatcher().add("org.deprecated.api.");

server.setHandler(context);
server.start();

Expand All @@ -904,8 +911,7 @@ public void testAddSystemClasses() throws Exception
assertThat("Should have pattern from defaults", systemClasses, hasItem("jakarta."));
assertThat("Should have pattern from JaasConfiguration", systemClasses, hasItem("org.eclipse.jetty.security.jaas."));
for (String defaultSystemClass : WebAppClassLoading.DEFAULT_PROTECTED_CLASSES)
{
assertThat("Should have default patterns", systemClasses, hasItem(defaultSystemClass));
}
assertThat("deprecated API", systemClasses, hasItem("org.deprecated.api."));
}
}

0 comments on commit f684b69

Please sign in to comment.