diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 97a3c2ebd89..fff2978f69f 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -57,12 +57,14 @@ updates: versions: [ ">=4.0.0" ] - dependency-name: "jakarta.enterprise:jakarta.enterprise.cdi-api:*" versions: [ ">=3.0.0" ] - - dependency-name: "com.sun.xml.ws:jaxws*" + - dependency-name: "com.sun.xml.ws:jaxws-rt" versions: [ ">=3.0.0" ] - dependency-name: "jakarta.transaction:*" versions: [ ">=2.0.0" ] - dependency-name: "org.infinispan:*" versions: [ ">=12" ] + - dependency-name: "jakarta.xml.bind:*" + versions: [ ">=3.0.0" ] - package-ecosystem: "maven" directory: "/" diff --git a/jetty-core/jetty-alpn/jetty-alpn-client/pom.xml b/jetty-core/jetty-alpn/jetty-alpn-client/pom.xml index 3d55d94c5be..0e3a339ec59 100644 --- a/jetty-core/jetty-alpn/jetty-alpn-client/pom.xml +++ b/jetty-core/jetty-alpn/jetty-alpn-client/pom.xml @@ -17,19 +17,12 @@ org.apache.felix maven-bundle-plugin true - - - - manifest - - - - ${osgi.slf4j.import.packages},org.eclipse.jetty.alpn;resolution:=optional,* - osgi.extender; filter:="(osgi.extender=osgi.serviceloader.processor)";resolution:=optional, osgi.serviceloader; filter:="(osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Client)";resolution:=optional;cardinality:=multiple - - - - + + + ${osgi.slf4j.import.packages},org.eclipse.jetty.alpn;resolution:=optional,* + osgi.extender; filter:="(osgi.extender=osgi.serviceloader.processor)";resolution:=optional, osgi.serviceloader; filter:="(osgi.serviceloader=org.eclipse.jetty.io.ssl.ALPNProcessor$Client)";resolution:=optional;cardinality:=multiple + + diff --git a/jetty-core/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/internal/HttpStreamOverHTTP2.java b/jetty-core/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/internal/HttpStreamOverHTTP2.java index 3b2ea29d8d8..4920d0ce95c 100644 --- a/jetty-core/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/internal/HttpStreamOverHTTP2.java +++ b/jetty-core/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/internal/HttpStreamOverHTTP2.java @@ -104,13 +104,11 @@ public class HttpStreamOverHTTP2 implements HttpStream, HTTP2Channel.Server { if (LOG.isDebugEnabled()) LOG.debug("onRequest", x); - onBadMessage(x); - return null; + return () -> onBadMessage(x); } catch (Throwable x) { - onBadMessage(new BadMessageException(HttpStatus.INTERNAL_SERVER_ERROR_500, null, x)); - return null; + return () -> onBadMessage(new BadMessageException(HttpStatus.INTERNAL_SERVER_ERROR_500, null, x)); } } @@ -432,13 +430,11 @@ public class HttpStreamOverHTTP2 implements HttpStream, HTTP2Channel.Server } catch (BadMessageException x) { - onBadMessage(x); - return null; + return () -> onBadMessage(x); } catch (Throwable x) { - onBadMessage(new BadMessageException(HttpStatus.INTERNAL_SERVER_ERROR_500, null, x)); - return null; + return () -> onBadMessage(new BadMessageException(HttpStatus.INTERNAL_SERVER_ERROR_500, null, x)); } } diff --git a/jetty-core/jetty-http2/jetty-http2-tests/src/test/java/org/eclipse/jetty/http2/tests/BadURITest.java b/jetty-core/jetty-http2/jetty-http2-tests/src/test/java/org/eclipse/jetty/http2/tests/BadURITest.java new file mode 100644 index 00000000000..13ad232bbfd --- /dev/null +++ b/jetty-core/jetty-http2/jetty-http2-tests/src/test/java/org/eclipse/jetty/http2/tests/BadURITest.java @@ -0,0 +1,148 @@ +// +// ======================================================================== +// Copyright (c) 1995-2022 Mort Bay Consulting Pty Ltd and others. +// +// This program and the accompanying materials are made available under the +// terms of the Eclipse Public License v. 2.0 which is available at +// https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 +// which is available at https://www.apache.org/licenses/LICENSE-2.0. +// +// SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 +// ======================================================================== +// + +package org.eclipse.jetty.http2.tests; + +import java.io.OutputStream; +import java.net.Socket; +import java.nio.ByteBuffer; +import java.util.HashMap; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +import org.eclipse.jetty.http.HostPortHttpField; +import org.eclipse.jetty.http.HttpFields; +import org.eclipse.jetty.http.HttpMethod; +import org.eclipse.jetty.http.HttpScheme; +import org.eclipse.jetty.http.HttpVersion; +import org.eclipse.jetty.http.MetaData; +import org.eclipse.jetty.http2.frames.HeadersFrame; +import org.eclipse.jetty.http2.frames.PrefaceFrame; +import org.eclipse.jetty.http2.frames.SettingsFrame; +import org.eclipse.jetty.http2.internal.generator.Generator; +import org.eclipse.jetty.http2.server.HTTP2CServerConnectionFactory; +import org.eclipse.jetty.io.ByteBufferPool; +import org.eclipse.jetty.server.Handler; +import org.eclipse.jetty.server.HttpConfiguration; +import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.server.Response; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.server.handler.ErrorProcessor; +import org.eclipse.jetty.util.BufferUtil; +import org.eclipse.jetty.util.Callback; +import org.eclipse.jetty.util.component.LifeCycle; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class BadURITest +{ + private Server server; + private ServerConnector connector; + + protected void startServer(Handler handler) throws Exception + { + server = new Server(); + connector = new ServerConnector(server, 1, 1, new HTTP2CServerConnectionFactory(new HttpConfiguration())); + server.addConnector(connector); + server.setHandler(handler); + server.start(); + } + + @AfterEach + public void dispose() + { + LifeCycle.stop(server); + } + + @Test + @Disabled("TODO: need to fix ErrorProcessor") + public void testBadURI() throws Exception + { + CountDownLatch handlerLatch = new CountDownLatch(1); + startServer(new Handler.Processor() + { + @Override + public void process(Request request, Response response, Callback callback) + { + handlerLatch.countDown(); + callback.succeeded(); + } + }); + + // Remove existing ErrorHandlers. + server.getBeans(ErrorProcessor.class).forEach(server::removeBean); + + server.addBean(new ErrorProcessor() + { + @Override + public ByteBuffer badMessageError(int status, String reason, HttpFields.Mutable fields) + { + // Return a very large buffer that will cause HTTP/2 flow control exhaustion and/or TCP congestion. + return ByteBuffer.allocateDirect(128 * 1024 * 1024); + } + }); + + ByteBufferPool byteBufferPool = connector.getByteBufferPool(); + Generator generator = new Generator(byteBufferPool); + + // Craft a request with a bad URI, it will not hit the Handler. + MetaData.Request metaData1 = new MetaData.Request( + HttpMethod.GET.asString(), + HttpScheme.HTTP.asString(), + new HostPortHttpField("localhost:" + connector.getLocalPort()), + // Use an ambiguous path parameter so that the URI is invalid. + "/foo/..;/bar", + HttpVersion.HTTP_2, + HttpFields.EMPTY, + -1 + ); + ByteBufferPool.Lease lease = new ByteBufferPool.Lease(byteBufferPool); + generator.control(lease, new PrefaceFrame()); + generator.control(lease, new SettingsFrame(new HashMap<>(), false)); + generator.control(lease, new HeadersFrame(1, metaData1, null, true)); + + try (Socket client = new Socket("localhost", connector.getLocalPort())) + { + OutputStream output = client.getOutputStream(); + for (ByteBuffer buffer : lease.getByteBuffers()) + { + output.write(BufferUtil.toArray(buffer)); + } + + // Wait for the first request be processed on the server. + Thread.sleep(1000); + + // Send a second request and verify that it hits the Handler. + lease.recycle(); + MetaData.Request metaData2 = new MetaData.Request( + HttpMethod.GET.asString(), + HttpScheme.HTTP.asString(), + new HostPortHttpField("localhost:" + connector.getLocalPort()), + "/valid", + HttpVersion.HTTP_2, + HttpFields.EMPTY, + -1 + ); + generator.control(lease, new HeadersFrame(3, metaData2, null, true)); + for (ByteBuffer buffer : lease.getByteBuffers()) + { + output.write(BufferUtil.toArray(buffer)); + } + assertTrue(handlerLatch.await(5, TimeUnit.SECONDS)); + } + } +} diff --git a/jetty-core/jetty-websocket/websocket-core-client/pom.xml b/jetty-core/jetty-websocket/websocket-core-client/pom.xml index f995120e88f..e3700778439 100644 --- a/jetty-core/jetty-websocket/websocket-core-client/pom.xml +++ b/jetty-core/jetty-websocket/websocket-core-client/pom.xml @@ -36,19 +36,11 @@ org.apache.felix maven-bundle-plugin true - - - generate-manifest - - manifest - - - - *,org.eclipse.jetty.websocket.core.client.internal.* - - - - + + + *,org.eclipse.jetty.websocket.core.client.internal.* + + diff --git a/jetty-core/jetty-websocket/websocket-core-common/pom.xml b/jetty-core/jetty-websocket/websocket-core-common/pom.xml index 0116123dedb..f6ae7b2817f 100644 --- a/jetty-core/jetty-websocket/websocket-core-common/pom.xml +++ b/jetty-core/jetty-websocket/websocket-core-common/pom.xml @@ -35,25 +35,18 @@ org.apache.felix maven-bundle-plugin true - - - generate-manifest - - manifest - - - - *,org.eclipse.jetty.websocket.core.common.internal.* - - osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)" - - - osgi.serviceloader; osgi.serviceloader=org.eclipse.jetty.websocket.core.Extension - - - - - + + + Jetty Websocket Core Common + *,org.eclipse.jetty.websocket.core.common.internal.* + + osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)"; resolution:=optional + + + osgi.serviceloader; osgi.serviceloader=org.eclipse.jetty.websocket.core.Extension + + + diff --git a/jetty-core/jetty-websocket/websocket-core-tests/pom.xml b/jetty-core/jetty-websocket/websocket-core-tests/pom.xml index 4830dc624bb..4b182fc3a9d 100644 --- a/jetty-core/jetty-websocket/websocket-core-tests/pom.xml +++ b/jetty-core/jetty-websocket/websocket-core-tests/pom.xml @@ -85,6 +85,21 @@ true + + org.apache.felix + maven-bundle-plugin + + + + manifest + + + + true + + + + diff --git a/jetty-ee10/jetty-ee10-demos/demo-mock-resources/pom.xml b/jetty-ee10/jetty-ee10-demos/demo-mock-resources/pom.xml index 204040de844..c3e8c066f6a 100644 --- a/jetty-ee10/jetty-ee10-demos/demo-mock-resources/pom.xml +++ b/jetty-ee10/jetty-ee10-demos/demo-mock-resources/pom.xml @@ -16,27 +16,19 @@ org.apache.felix maven-bundle-plugin - true - - - - manifest - - - - org.eclipse.jetty.demos.demo-mock-resources - Mock resources used for testing - + + + org.eclipse.jetty.demos.demo-mock-resources + Mock resources used for testing + org.example;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}" - - - javax.sql, jakarta.transaction;version="2.0.0" - - <_nouses>true - - - - + + + javax.sql, jakarta.transaction;version="2.0.0" + + <_nouses>true + + diff --git a/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/DefaultServletTest.java b/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/DefaultServletTest.java index c187b0a665a..db2fb89532e 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/DefaultServletTest.java +++ b/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/DefaultServletTest.java @@ -39,6 +39,7 @@ import jakarta.servlet.ServletResponse; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import org.eclipse.jetty.http.CompressedContentFormat; import org.eclipse.jetty.http.DateGenerator; import org.eclipse.jetty.http.HttpField; import org.eclipse.jetty.http.HttpHeader; @@ -1960,6 +1961,51 @@ public class DefaultServletTest assertThat(body, containsString("fake gzip")); } + @Test + public void testProgrammaticCustomCompressionFormats() throws Exception + { + createFile(docRoot.resolve("data0.txt"), "Hello Text 0"); + createFile(docRoot.resolve("data0.txt.br"), "fake brotli"); + createFile(docRoot.resolve("data0.txt.gz"), "fake gzip"); + createFile(docRoot.resolve("data0.txt.bz2"), "fake bzip2"); + + ResourceService resourceService = new ResourceService(); + resourceService.setPrecompressedFormats(new CompressedContentFormat[]{ + new CompressedContentFormat("bzip2", ".bz2"), + new CompressedContentFormat("gzip", ".gz"), + new CompressedContentFormat("br", ".br") + }); + ServletHolder defholder = new ServletHolder(new DefaultServlet()); // TODO: how to integrate resource service / precompressed format + context.addServlet(defholder, "/"); + defholder.setInitParameter("resourceBase", docRoot.toString()); + + String rawResponse; + HttpTester.Response response; + String body; + + rawResponse = connector.getResponse("GET /context/data0.txt HTTP/1.0\r\nHost:localhost:8080\r\nAccept-Encoding:bzip2, br, gzip\r\n\r\n"); + response = HttpTester.parseResponse(rawResponse); + assertThat(response.toString(), response.getStatus(), is(HttpStatus.OK_200)); + assertThat(response, containsHeaderValue(HttpHeader.CONTENT_LENGTH, "10")); + assertThat(response, containsHeaderValue(HttpHeader.CONTENT_TYPE, "text/plain")); + assertThat(response, containsHeaderValue(HttpHeader.VARY, "Accept-Encoding")); + assertThat(response, containsHeaderValue(HttpHeader.CONTENT_ENCODING, "bzip2")); + body = response.getContent(); + assertThat(body, containsString("fake bzip2")); + + // TODO: show accept-encoding search order issue (shouldn't this request return data0.txt.br?) + + rawResponse = connector.getResponse("GET /context/data0.txt HTTP/1.0\r\nHost:localhost:8080\r\nAccept-Encoding:br, gzip\r\n\r\n"); + response = HttpTester.parseResponse(rawResponse); + assertThat(response.toString(), response.getStatus(), is(HttpStatus.OK_200)); + assertThat(response, containsHeaderValue(HttpHeader.CONTENT_LENGTH, "9")); + assertThat(response, containsHeaderValue(HttpHeader.CONTENT_TYPE, "text/plain")); + assertThat(response, containsHeaderValue(HttpHeader.VARY, "Accept-Encoding")); + assertThat(response, containsHeaderValue(HttpHeader.CONTENT_ENCODING, "gzip")); + body = response.getContent(); + assertThat(body, containsString("fake gzip")); + } + @Test public void testControlCharacter() throws Exception { diff --git a/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/GzipHandlerTest.java b/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/GzipHandlerTest.java index 373251bd574..3b078431975 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/GzipHandlerTest.java +++ b/jetty-ee10/jetty-ee10-servlet/src/test/java/org/eclipse/jetty/ee10/servlet/GzipHandlerTest.java @@ -40,6 +40,7 @@ import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.eclipse.jetty.http.CompressedContentFormat; +import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.http.HttpTester; import org.eclipse.jetty.server.LocalConnector; import org.eclipse.jetty.server.Server; @@ -54,6 +55,7 @@ import org.junit.jupiter.api.Test; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.equalToIgnoringCase; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; @@ -687,6 +689,49 @@ public class GzipHandlerTest assertEquals(__icontent, testOut.toString("UTF8")); } + @Test + public void testIncludeExcludeGzipHandlerInflate() throws Exception + { + gzipHandler.addExcludedInflationPaths("/ctx/echo/exclude"); + gzipHandler.addIncludedInflationPaths("/ctx/echo/include"); + + String message = "hello world"; + byte[] gzippedMessage = gzipContent(message); + + // The included path does deflate the content. + HttpTester.Response response = sendGzipRequest("/ctx/echo/include", message); + assertThat(response.getStatus(), equalTo(HttpStatus.OK_200)); + assertThat(response.getContent(), equalTo(message)); + + // The excluded path does not deflate the content. + response = sendGzipRequest("/ctx/echo/exclude", message); + assertThat(response.getStatus(), equalTo(HttpStatus.OK_200)); + assertThat(response.getContentBytes(), equalTo(gzippedMessage)); + } + + private byte[] gzipContent(String content) throws IOException + { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + GZIPOutputStream output = new GZIPOutputStream(baos); + output.write(content.getBytes(StandardCharsets.UTF_8)); + output.close(); + return baos.toByteArray(); + } + + private HttpTester.Response sendGzipRequest(String uri, String data) throws Exception + { + HttpTester.Request request = HttpTester.newRequest(); + request.setMethod("GET"); + request.setURI(uri); + request.setVersion("HTTP/1.0"); + request.setHeader("Host", "tester"); + request.setHeader("Content-Type", "text/plain"); + request.setHeader("Content-Encoding", "gzip"); + request.setContent(gzipContent(data)); + + return HttpTester.parseResponse(_connector.getResponse(request.generate())); + } + @Test public void testAddGetPaths() { diff --git a/jetty-ee9/jetty-ee9-jaspi/pom.xml b/jetty-ee9/jetty-ee9-jaspi/pom.xml index 135e65fb839..45b23287800 100644 --- a/jetty-ee9/jetty-ee9-jaspi/pom.xml +++ b/jetty-ee9/jetty-ee9-jaspi/pom.xml @@ -21,19 +21,12 @@ org.apache.felix maven-bundle-plugin true - - - - manifest - - - - osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)" - osgi.serviceloader;osgi.serviceloader=org.eclipse.jetty.security.Authenticator$Factory - - - - + + + osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)" + osgi.serviceloader;osgi.serviceloader=org.eclipse.jetty.security.Authenticator$Factory + + diff --git a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/StatisticsHandler.java b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/StatisticsHandler.java index e0f5e6e16c8..8ae955b82e2 100644 --- a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/StatisticsHandler.java +++ b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/StatisticsHandler.java @@ -50,6 +50,7 @@ public class StatisticsHandler extends HandlerWrapper implements Graceful private final LongAdder _expires = new LongAdder(); private final LongAdder _errors = new LongAdder(); + private final LongAdder _responsesThrown = new LongAdder(); private final LongAdder _responses1xx = new LongAdder(); private final LongAdder _responses2xx = new LongAdder(); private final LongAdder _responses3xx = new LongAdder(); @@ -86,7 +87,7 @@ public class StatisticsHandler extends HandlerWrapper implements Graceful long elapsed = System.currentTimeMillis() - request.getTimeStamp(); _requestStats.decrement(); _requestTimeStats.record(elapsed); - updateResponse(request); + updateResponse(request, false); _asyncWaitStats.decrement(); if (_shutdown.isShutdown()) @@ -161,10 +162,16 @@ public class StatisticsHandler extends HandlerWrapper implements Graceful _asyncDispatches.increment(); } + boolean thrownError = false; try { handler.handle(path, baseRequest, request, response); } + catch (Throwable t) + { + thrownError = true; + throw t; + } finally { final long now = System.currentTimeMillis(); @@ -184,7 +191,7 @@ public class StatisticsHandler extends HandlerWrapper implements Graceful { _requestStats.decrement(); _requestTimeStats.record(dispatched); - updateResponse(baseRequest); + updateResponse(baseRequest, thrownError); } } @@ -193,10 +200,14 @@ public class StatisticsHandler extends HandlerWrapper implements Graceful } } - protected void updateResponse(Request request) + protected void updateResponse(Request request, boolean thrownError) { Response response = request.getResponse(); - if (request.isHandled()) + if (thrownError) + { + _responsesThrown.increment(); + } + else if (request.isHandled()) { switch (response.getStatus() / 100) { @@ -532,6 +543,18 @@ public class StatisticsHandler extends HandlerWrapper implements Graceful return _responses5xx.intValue(); } + /** + * @return the number of requests that threw an exception during handling + * since {@link #statsReset()} was last called. These may have resulted in + * some error responses which were unrecorded by the {@link StatisticsHandler}. + */ + @ManagedAttribute("number of requests that threw an exception during handling") + public int getResponsesThrown() + { + return _responsesThrown.intValue(); + } + + /** * @return the milliseconds since the statistics were started with {@link #statsReset()}. */ @@ -585,6 +608,7 @@ public class StatisticsHandler extends HandlerWrapper implements Graceful sb.append("3xx responses: ").append(getResponses3xx()).append("
\n"); sb.append("4xx responses: ").append(getResponses4xx()).append("
\n"); sb.append("5xx responses: ").append(getResponses5xx()).append("
\n"); + sb.append("responses thrown: ").append(getResponsesThrown()).append("
\n"); sb.append("Bytes sent total: ").append(getResponsesBytesTotal()).append("
\n"); return sb.toString(); diff --git a/jetty-ee9/jetty-ee9-openid/pom.xml b/jetty-ee9/jetty-ee9-openid/pom.xml index f32ec93b6a6..45466cf034c 100644 --- a/jetty-ee9/jetty-ee9-openid/pom.xml +++ b/jetty-ee9/jetty-ee9-openid/pom.xml @@ -21,19 +21,12 @@ org.apache.felix maven-bundle-plugin true - - - - manifest - - - - osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)" - osgi.serviceloader;osgi.serviceloader=org.eclipse.jetty.security.Authenticator$Factory - - - - + + + osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)" + osgi.serviceloader;osgi.serviceloader=org.eclipse.jetty.security.Authenticator$Factory + + diff --git a/jetty-ee9/jetty-ee9-osgi/test-jetty-ee9-osgi/pom.xml b/jetty-ee9/jetty-ee9-osgi/test-jetty-ee9-osgi/pom.xml index b5849de5ef7..3c7637f40ce 100644 --- a/jetty-ee9/jetty-ee9-osgi/test-jetty-ee9-osgi/pom.xml +++ b/jetty-ee9/jetty-ee9-osgi/test-jetty-ee9-osgi/pom.xml @@ -17,7 +17,7 @@ 2.6.2 1.8.3 3.0.0 - 1.3.4 + 1.3.5 diff --git a/jetty-ee9/jetty-ee9-osgi/test-jetty-ee9-osgi/src/test/java/org/eclipse/jetty/ee9/osgi/test/TestJettyOSGiBootHTTP2Conscrypt.java b/jetty-ee9/jetty-ee9-osgi/test-jetty-ee9-osgi/src/test/java/org/eclipse/jetty/ee9/osgi/test/TestJettyOSGiBootHTTP2Conscrypt.java index d7e0255dcc3..f7f8ed3f912 100644 --- a/jetty-ee9/jetty-ee9-osgi/test-jetty-ee9-osgi/src/test/java/org/eclipse/jetty/ee9/osgi/test/TestJettyOSGiBootHTTP2Conscrypt.java +++ b/jetty-ee9/jetty-ee9-osgi/test-jetty-ee9-osgi/src/test/java/org/eclipse/jetty/ee9/osgi/test/TestJettyOSGiBootHTTP2Conscrypt.java @@ -45,7 +45,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.ops4j.pax.exam.CoreOptions.mavenBundle; -import static org.ops4j.pax.exam.CoreOptions.wrappedBundle; @RunWith(PaxExam.class) @ExamReactorStrategy(PerClass.class) @@ -89,12 +88,8 @@ public class TestJettyOSGiBootHTTP2Conscrypt res.add(CoreOptions.systemProperty("jetty.alpn.protocols").value("h2,http/1.1")); res.add(CoreOptions.systemProperty("jetty.sslContext.provider").value("Conscrypt")); - res.add(wrappedBundle(mavenBundle().groupId("org.conscrypt").artifactId("conscrypt-openjdk-uber").versionAsInProject()) - .imports("javax.net.ssl,*") - .exports("org.conscrypt;version=" + System.getProperty("conscrypt-version")) - .instructions("Bundle-NativeCode=META-INF/native/libconscrypt_openjdk_jni-linux-x86_64.so") - .start()); - res.add(mavenBundle().groupId("org.eclipse.jetty.osgi").artifactId("jetty-ee9-osgi-alpn").versionAsInProject().noStart()); + res.add(mavenBundle().groupId("org.conscrypt").artifactId("conscrypt-openjdk-uber").versionAsInProject().start()); + res.add(mavenBundle().groupId("org.eclipse.jetty.osgi").artifactId("jetty-osgi-alpn").versionAsInProject().noStart()); res.add(mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-alpn-conscrypt-server").versionAsInProject().start()); res.add(mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-alpn-server").versionAsInProject().start()); diff --git a/jetty-ee9/jetty-ee9-security/pom.xml b/jetty-ee9/jetty-ee9-security/pom.xml index 91a61bb561a..f56b1b95562 100644 --- a/jetty-ee9/jetty-ee9-security/pom.xml +++ b/jetty-ee9/jetty-ee9-security/pom.xml @@ -21,18 +21,11 @@ org.apache.felix maven-bundle-plugin true - - - - manifest - - - - osgi.serviceloader; filter:="(osgi.serviceloader=org.eclipse.jetty.security.Authenticator$Factory)";resolution:=optional;cardinality:=multiple, osgi.extender; filter:="(osgi.extender=osgi.serviceloader.processor)";resolution:=optional - - - - + + + osgi.serviceloader; filter:="(osgi.serviceloader=org.eclipse.jetty.security.Authenticator$Factory)";resolution:=optional;cardinality:=multiple, osgi.extender; filter:="(osgi.extender=osgi.serviceloader.processor)";resolution:=optional + + diff --git a/jetty-ee9/jetty-ee9-servlet/src/main/java/org/eclipse/jetty/ee9/servlet/DefaultServlet.java b/jetty-ee9/jetty-ee9-servlet/src/main/java/org/eclipse/jetty/ee9/servlet/DefaultServlet.java index 8e7382c5516..7a477e0f1dd 100644 --- a/jetty-ee9/jetty-ee9-servlet/src/main/java/org/eclipse/jetty/ee9/servlet/DefaultServlet.java +++ b/jetty-ee9/jetty-ee9-servlet/src/main/java/org/eclipse/jetty/ee9/servlet/DefaultServlet.java @@ -16,6 +16,7 @@ package org.eclipse.jetty.ee9.servlet; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.StringTokenizer; import jakarta.servlet.ServletContext; @@ -170,7 +171,7 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory, Welc _resourceService.setAcceptRanges(getInitBoolean("acceptRanges", _resourceService.isAcceptRanges())); _resourceService.setDirAllowed(getInitBoolean("dirAllowed", _resourceService.isDirAllowed())); _resourceService.setRedirectWelcome(getInitBoolean("redirectWelcome", _resourceService.isRedirectWelcome())); - _resourceService.setPrecompressedFormats(parsePrecompressedFormats(getInitParameter("precompressed"), getInitBoolean("gzip", false))); + _resourceService.setPrecompressedFormats(parsePrecompressedFormats(getInitParameter("precompressed"), getInitBoolean("gzip"), _resourceService.getPrecompressedFormats())); _resourceService.setPathInfoOnly(getInitBoolean("pathInfoOnly", _resourceService.isPathInfoOnly())); _resourceService.setEtags(getInitBoolean("etags", _resourceService.isEtags())); @@ -303,8 +304,12 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory, Welc LOG.debug("resource base = {}", _resourceBase); } - private CompressedContentFormat[] parsePrecompressedFormats(String precompressed, boolean gzip) + private CompressedContentFormat[] parsePrecompressedFormats(String precompressed, Boolean gzip, CompressedContentFormat[] dft) { + if (precompressed == null && gzip == null) + { + return dft; + } List ret = new ArrayList<>(); if (precompressed != null && precompressed.indexOf('=') > 0) { @@ -314,7 +319,7 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory, Welc String encoding = setting[0].trim(); String extension = setting[1].trim(); ret.add(new CompressedContentFormat(encoding, extension)); - if (gzip && !ret.contains(CompressedContentFormat.GZIP)) + if (gzip == Boolean.TRUE && !ret.contains(CompressedContentFormat.GZIP)) ret.add(CompressedContentFormat.GZIP); } } @@ -326,7 +331,7 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory, Welc ret.add(CompressedContentFormat.GZIP); } } - else if (gzip) + else if (gzip == Boolean.TRUE) { // gzip handling is for backwards compatibility with older Jetty ret.add(CompressedContentFormat.GZIP); @@ -367,11 +372,11 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory, Welc return value; } - private boolean getInitBoolean(String name, boolean dft) + private Boolean getInitBoolean(String name) { String value = getInitParameter(name); if (value == null || value.length() == 0) - return dft; + return null; return (value.startsWith("t") || value.startsWith("T") || value.startsWith("y") || @@ -379,6 +384,11 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory, Welc value.startsWith("1")); } + private boolean getInitBoolean(String name, boolean dft) + { + return Optional.ofNullable(getInitBoolean(name)).orElse(dft); + } + private int getInitInt(String name, int dft) { String value = getInitParameter(name); diff --git a/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jakarta-client/pom.xml b/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jakarta-client/pom.xml index 3cc07355ccc..ab50c9a60f2 100644 --- a/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jakarta-client/pom.xml +++ b/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jakarta-client/pom.xml @@ -59,28 +59,21 @@ org.apache.felix maven-bundle-plugin true - - - - manifest - - - - jakarta.websocket.client Implementation - - org.eclipse.jetty.websocket.jakarta.client.*;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}" - - - osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional - - - osgi.serviceloader;osgi.serviceloader=jakarta.websocket.ContainerProvider, - osgi.serviceloader;osgi.serviceloader=jakarta.servlet.ServletContainerInitializer - - - - - + + + jakarta.websocket.client Implementation + + org.eclipse.jetty.websocket.jakarta.client.*;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}" + + + osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional + + + osgi.serviceloader;osgi.serviceloader=jakarta.websocket.ContainerProvider, + osgi.serviceloader;osgi.serviceloader=jakarta.servlet.ServletContainerInitializer + + + diff --git a/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jakarta-common/pom.xml b/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jakarta-common/pom.xml index 55fd8e9fdcd..135343d8b28 100644 --- a/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jakarta-common/pom.xml +++ b/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jakarta-common/pom.xml @@ -20,21 +20,14 @@ org.apache.felix maven-bundle-plugin true - - - - manifest - - - - jakarta.websocket.client Implementation - - org.eclipse.jetty.websocket.jakarta.*;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}" - - - - - + + + jakarta.websocket.client Implementation + + org.eclipse.jetty.websocket.jakarta.*;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}" + + + diff --git a/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jakarta-server/pom.xml b/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jakarta-server/pom.xml index aa3f1d8ca94..6d040a4dc41 100644 --- a/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jakarta-server/pom.xml +++ b/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jakarta-server/pom.xml @@ -61,20 +61,18 @@ manifest - - - jakarta.websocket.server Implementation - - org.eclipse.jetty.websocket.jakarta.server.*;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}" - - osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional - + + + jakarta.websocket.server Implementation + + org.eclipse.jetty.websocket.jakarta.server.*;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}" + + osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional + osgi.serviceloader;osgi.serviceloader=org.eclipse.jetty.ee9.webapp.Configuration,osgi.serviceloader;osgi.serviceloader=jakarta.servlet.ServletContainerInitializer,osgi.serviceloader;osgi.serviceloader=jakarta.websocket.server.ServerEndpointConfig$Configurator - - - - - + + + diff --git a/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jakarta-tests/pom.xml b/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jakarta-tests/pom.xml index eddffce9c13..397a551e0a9 100644 --- a/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jakarta-tests/pom.xml +++ b/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jakarta-tests/pom.xml @@ -77,21 +77,14 @@ org.apache.felix maven-bundle-plugin true - - - - manifest - - - - jakarta.websocket Integration Tests - - org.eclipse.jetty.websocket.jakarta.tests.*;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}" - - - - - + + + jakarta.websocket Integration Tests + + org.eclipse.jetty.websocket.jakarta.tests.*;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}" + + + diff --git a/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jetty-server/pom.xml b/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jetty-server/pom.xml index 60367a09906..ff80cf281db 100644 --- a/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jetty-server/pom.xml +++ b/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jetty-server/pom.xml @@ -64,9 +64,12 @@ Jetty Websocket Server - osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional + + osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional + - osgi.serviceloader;osgi.serviceloader=org.eclipse.jetty.ee9.webapp.Configuration,osgi.serviceloader;osgi.serviceloader=jakarta.servlet.ServletContainerInitializer + osgi.serviceloader;osgi.serviceloader=org.eclipse.jetty.ee9.webapp.Configuration, + osgi.serviceloader;osgi.serviceloader=jakarta.servlet.ServletContainerInitializer diff --git a/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jetty-tests/pom.xml b/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jetty-tests/pom.xml index 140cabad54c..36179334138 100644 --- a/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jetty-tests/pom.xml +++ b/jetty-ee9/jetty-ee9-websocket/jetty-ee9-websocket-jetty-tests/pom.xml @@ -98,21 +98,14 @@ org.apache.felix maven-bundle-plugin true - - - - manifest - - - - jetty.websocket Integration Tests - - org.eclipse.jetty.websocket.jetty.tests.*;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}" - - - - - + + + jetty.websocket Integration Tests + + org.eclipse.jetty.websocket.jetty.tests.*;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}" + + + org.apache.maven.plugins diff --git a/jetty-integrations/jetty-gcloud/jetty-gcloud-session-manager/pom.xml b/jetty-integrations/jetty-gcloud/jetty-gcloud-session-manager/pom.xml index 50d8ab9d1bf..a9dbef9036d 100644 --- a/jetty-integrations/jetty-gcloud/jetty-gcloud-session-manager/pom.xml +++ b/jetty-integrations/jetty-gcloud/jetty-gcloud-session-manager/pom.xml @@ -50,20 +50,13 @@ org.apache.felix maven-bundle-plugin true - - - - manifest - - - - - org.eclipse.jetty.gcloud.session.*;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}" - - - - - + + + + org.eclipse.jetty.gcloud.session.*;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}" + + + org.apache.maven.plugins diff --git a/jetty-p2/pom.xml b/jetty-p2/pom.xml index 6d424442115..641d09cd77e 100644 --- a/jetty-p2/pom.xml +++ b/jetty-p2/pom.xml @@ -12,7 +12,7 @@ Generates a (maven based) P2 Updatesite pom - 2.5.0 + 2.7.3 diff --git a/pom.xml b/pom.xml index 48ce25573c2..fa239266612 100644 --- a/pom.xml +++ b/pom.xml @@ -27,31 +27,31 @@ 4.5.13 4.4.15 2.5.3 - 2.2.1 - 9.2 - 4.1.1 - 5.3.0 + 9.3 + 4.2.0 + 6.2.0 1.5 - 9.2.1 + 10.2 1.15 3.12.0 2.5.2 3.4.2 7.0.3 3.0.2 - 2.10.0 - 1.43.1 - 2.8.9 - 31.0.1-jre - 5.0.1 + 2.13.1 + 1.46.0 + 2.9.0 + 31.1-jre + 5.1.0 2.2 - 4.2.4 - 11.0.11.Final - 4.3.4.Final - 2.13.0 - 2.82 - 3.4.3.Final - 2.2.1.Final + 2.14.5 + 4.2.5 + 4.4.3.Final + 11.0.15.Final + 2.13.2.2 + 2.2.1.Final + 2.2.1.Final + 3.5.0.Final 2.1.18.Final 3.1.0.Final 1.1 @@ -70,18 +70,21 @@ 2.4.7 10.0.10 5.8.2 - 2.0.1 - 2.17.1 - 1.3.0-alpha12 - 2.7.4 + 2.0.2 + 2.17.2 + 1.3.0-alpha15 + 3.0.4 10.3.6 3.8.4 0.13.1 - 1.7.3 - 3.2.2 + 1.8.0 + 3.8.4 + 3.12.11 0.9.1 8.0.1 6.0.0 + 1.2.0 + 1.2.0 2.1.1 3.4.1 2.0.0-alpha6 @@ -753,7 +756,6 @@ org.apache.felix maven-bundle-plugin ${maven.bundle.plugin.version} - true jar @@ -1493,12 +1495,12 @@ org.jboss.logging jboss-logging-annotations - ${jboss-logging.version} + ${jboss.logging.annotations.version} org.jboss.logging jboss-logging-processor - ${jboss-logging.version} + ${jboss.logging.processor.version} org.jboss.logmanager @@ -1539,14 +1541,31 @@ org.osgi + org.osgi.core ${org.osgi.core.version} + + org.osgi + + osgi.core + ${org.osgi.core.version} + org.osgi osgi.annotation ${org.osgi.annotation.version} + + org.osgi + org.osgi.util.function + ${org.osgi.util.function.version} + + + org.osgi + org.osgi.util.promise + ${org.osgi.util.promise.version} + org.ow2.asm asm