diff --git a/.github/workflows/maven-ci.yml b/.github/workflows/maven-ci.yml
index febb6fe2ff..27a76c31b0 100644
--- a/.github/workflows/maven-ci.yml
+++ b/.github/workflows/maven-ci.yml
@@ -74,7 +74,7 @@ jobs:
run: mvn -B -V -Dstyle.color=always --file log/pom.xml clean verify
- name: Felix HTTP
if: steps.changes.outputs.http == 'true'
- run: mvn -B -V -Dstyle.color=always "-Dit.test=!MissingWebsocketDependenciesIT" --file http/pom.xml clean install verify
+ run: mvn -B -V -Dstyle.color=always "-Dit.test=!MissingWebsocketDependenciesIT" --file http/pom.xml clean install verify "-Dmaven.repo.local=/home/runner/.m2/repository/"
- name: Felix Maven bundle plugin
if: steps.changes.outputs.maven-bundle-plugin == 'true'
run: mvn -B -V -Dstyle.color=always --file tools/maven-bundle-plugin/pom.xml clean install verify
diff --git a/http/README.md b/http/README.md
index d49e879a56..256632ff25 100644
--- a/http/README.md
+++ b/http/README.md
@@ -5,7 +5,7 @@ This is an implementation of the [R8.1 Whiteboard Specification for Jakarta Serv
* Standard OSGi Http Service implementation
* Standard OSGi Http Whiteboard implementation
* Run either with Jetty (version 11 or 12) bundle or inside your own application server using the servlet bridge
- * [Felix HTTP Jetty 12](https://mvnrepository.com/artifact/org.apache.felix/org.apache.felix.http.jetty12) is the preferred bundle of choice as it supports JakartaEE10 with the `jakarta` namespace.
+ * [Felix HTTP Jetty 12](https://mvnrepository.com/artifact/org.apache.felix/org.apache.felix.http.jetty12) is the preferred bundle of choice as it supports JakartaEE10 (1.0.x range) and JakartaEE11 (1.1.x range).
* [Jetty WebSocket support](https://github.com/apache/felix-dev/pull/310), see example code [here](https://github.com/apache/felix-dev/blob/master/http/samples/whiteboard/src/main/java/org/apache/felix/http/samples/whiteboard/TestWebSocketServlet.java).
* [Felix HTTP Jetty 11](https://mvnrepository.com/artifact/org.apache.felix/org.apache.felix.http.jetty) is the predecessor of the Jetty 12 bundle, which shipped with [Jetty 9.4.x](https://mvnrepository.com/artifact/org.apache.felix/org.apache.felix.http.jetty/4.2.26) in the 4.x range (JavaEE8), [Jetty 11.x](https://mvnrepository.com/artifact/org.apache.felix/org.apache.felix.http.jetty/5.1.10) in the 5.x range (JakartaEE9).
* [Jetty WebSocket support](https://github.com/apache/felix-dev/pull/309), see example code [here](https://github.com/apache/felix-dev/blob/master/http/samples/whiteboard/src/main/java/org/apache/felix/http/samples/whiteboard/TestWebSocketServlet.java).
@@ -15,9 +15,9 @@ This is an implementation of the [R8.1 Whiteboard Specification for Jakarta Serv
The Apache Felix HTTP Service project includes several bundles.
- * [`org.apache.felix.http.servlet-api`](https://mvnrepository.com/artifact/org.apache.felix/org.apache.felix.http.servlet-api) - Provides the Servlet API (versions 2.6, 3.0, 3.1, 4.0, 5.0 and 6.0 of the Servlet specification)
+ * [`org.apache.felix.http.servlet-api`](https://mvnrepository.com/artifact/org.apache.felix/org.apache.felix.http.servlet-api) - Provides the Servlet API (versions 2.6, 3.0, 3.1, 4.0, 5.0, 6.0 and 6.1 of the Servlet specification)
* [`org.apache.felix.http.api`](https://mvnrepository.com/artifact/org.apache.felix/org.apache.felix.http.api) - Provides the OSGi APIs for the Http Whiteboard and Http Service.
- * [`org.apache.felix.http.jetty12`](https://mvnrepository.com/artifact/org.apache.felix/org.apache.felix.http.jetty12) - Implementation that is embedding Jetty server (currently Jetty 12.x, requiring Java 17). This bundle includes the http.api bundle. It's the the preferred Felix Jetty bundle to use, as Jetty 11 will be [EoL in 2025](https://github.com/jetty/jetty.project/issues/10485).
+ * [`org.apache.felix.http.jetty12`](https://mvnrepository.com/artifact/org.apache.felix/org.apache.felix.http.jetty12) - Implementation that is embedding Jetty server (currently Jetty 12.1.x, requiring Java 17). This bundle includes the http.api bundle. It's the the preferred Felix Jetty bundle to use, as Jetty 11 will be [EoL in 2025](https://github.com/jetty/jetty.project/issues/10485).
* [`org.apache.felix.http.jetty`](https://mvnrepository.com/artifact/org.apache.felix/org.apache.felix.http.jetty) - Predecessor implementation that is embedding Jetty server (currently Jetty 11.x, requiring Java 11). This bundle includes the http.api bundle.
* [`org.apache.felix.http.sslfilter`](https://mvnrepository.com/artifact/org.apache.felix/org.apache.felix.http.sslfilter) - Servlet filter for handling SSL termination.
* [`org.apache.felix.http.bridge`](https://mvnrepository.com/artifact/org.apache.felix/org.apache.felix.http.bridge) - Implementation that uses the host application server (bridged mode). Must be used with the proxy (see below)
@@ -31,8 +31,8 @@ classpath and deployment!
### Using classifiers: `light`, `with-jetty-websockets` and `with-jakarta-websockets` bundle
If you would like to use your own Jetty jars instead of the one packaged with the Felix Jetty bundles, you can use the variants with the following classifiers:
* `light` - A light version of the bundle that does not include the Jetty classes. This is useful when you want to use your own Jetty jars. Available for both Jetty bundles.
-* `with-jetty-websockets` - A bundle that includes the classes required for Jetty WebSocket support for Jakarta EE10. Jetty12 bundle only.
-* `with-jakarta-websockets` - A bundle that includes the classes required for Jakarta WebSocket support for Jakarta EE10. Jetty12 bundle only.
+* `with-jetty-websockets` - A bundle that includes the classes required for Jetty WebSocket support for Jakarta EE10 (1.0.x) and Jakarta EE11 (1.1.x). Jetty12 bundle only.
+* `with-jakarta-websockets` - A bundle that includes the classes required for Jakarta WebSocket support for Jakarta EE10 (1.0.x) and Jakarta EE11 (1.1.x). Jetty12 bundle only.
When building the Felix Jetty bundle with Maven (`mvn clean install`), the additional bundles will be created in the `target` directory, postfixed with classifier.
This jar can be deployed to your Felix OSGi environment, along with a compatible Jetty jars.
diff --git a/http/base/pom.xml b/http/base/pom.xml
index a1fd0259cc..a3db9ed995 100644
--- a/http/base/pom.xml
+++ b/http/base/pom.xml
@@ -159,9 +159,9 @@
test
- org.eclipse.jetty.ee10.websocket
- jetty-ee10-websocket-jetty-server
- 12.0.22
+ org.eclipse.jetty.ee11.websocket
+ jetty-ee11-websocket-jetty-server
+ 12.1.0.beta1
test
diff --git a/http/base/src/test/java/org/apache/felix/http/base/internal/handler/WebSocketHandlerTest.java b/http/base/src/test/java/org/apache/felix/http/base/internal/handler/WebSocketHandlerTest.java
index e635a50f1d..3b7a39700f 100644
--- a/http/base/src/test/java/org/apache/felix/http/base/internal/handler/WebSocketHandlerTest.java
+++ b/http/base/src/test/java/org/apache/felix/http/base/internal/handler/WebSocketHandlerTest.java
@@ -21,7 +21,7 @@
import static org.mockito.Mockito.mock;
import org.apache.felix.http.javaxwrappers.ServletWrapper;
-import org.eclipse.jetty.ee10.websocket.server.JettyWebSocketServlet;
+import org.eclipse.jetty.ee11.websocket.server.JettyWebSocketServlet;
import org.junit.Before;
import org.junit.Test;
diff --git a/http/itest/pom.xml b/http/itest/pom.xml
index df93733d2e..00e1d372a0 100644
--- a/http/itest/pom.xml
+++ b/http/itest/pom.xml
@@ -45,7 +45,7 @@
17
6.1.0
- 1.0.35-SNAPSHOT
+ 1.1.0-SNAPSHOT
org.apache.felix.http.jetty12
diff --git a/http/jetty12/pom.xml b/http/jetty12/pom.xml
index aff259b401..0321152d98 100644
--- a/http/jetty12/pom.xml
+++ b/http/jetty12/pom.xml
@@ -30,7 +30,7 @@
This is an implementation of the R8.1 OSGi Servlet Service, the R7 OSGi Http Service and the R7 OSGi Http Whiteboard Specification
org.apache.felix.http.jetty12
- 1.0.35-SNAPSHOT
+ 1.1.0-SNAPSHOT
bundle
@@ -42,7 +42,7 @@
17
- 12.0.22
+ 12.1.0.beta1
true
4.13.3
@@ -75,9 +75,9 @@
if (artifact.getArtifactHandler().isAddedToClasspath() && !org.apache.maven.artifact.Artifact.SCOPE_TEST.equals( artifact.getScope() )
&& !"org.eclipse.jetty.websocket".equals(artifact.getGroupId()) // skip the optional websocket artifacts
- && !"org.eclipse.jetty.ee10.websocket".equals(artifact.getGroupId()) // skip the optional websocket artifacts
- && !"jetty-annotations".equals(artifact.getArtifactId()) // skip the transitive artifacts from the optional websocket artifacts
- && !"jetty-plus".equals(artifact.getArtifactId())
+ && !"org.eclipse.jetty.ee11.websocket".equals(artifact.getGroupId()) // skip the optional websocket artifacts
+ && !"jetty-ee11-annotations".equals(artifact.getArtifactId()) // skip the transitive artifacts from the optional websocket artifacts
+ && !"jetty-ee11-plus".equals(artifact.getArtifactId())
&& !"jetty-webapp".equals(artifact.getArtifactId())
&& !"jetty-ee".equals(artifact.getArtifactId())) {
def jar;
@@ -184,8 +184,9 @@
org.eclipse.jetty.server.*,
org.eclipse.jetty.util.*,
org.eclipse.jetty.ee.*,
- !org.eclipse.jetty.ee10.websocket.*,
- org.eclipse.jetty.ee10.servlet.*,
+ !org.eclipse.jetty.ee11.websocket.*,
+ org.eclipse.jetty.ee11.servlet.*,
+ org.eclipse.jetty.compression.*,
org.apache.felix.http.jetty,
org.apache.felix.http.jakartawrappers,
org.apache.felix.http.javaxwrappers
@@ -372,10 +373,11 @@
org.eclipse.jetty.server.*,
org.eclipse.jetty.util.*,
org.eclipse.jetty.ee.*,
- org.eclipse.jetty.ee10.servlet.*,
- !org.eclipse.jetty.ee10.websocket.jakarta.*,
- org.eclipse.jetty.ee10.websocket.*,
+ org.eclipse.jetty.ee11.servlet.*,
+ !org.eclipse.jetty.ee11.websocket.jakarta.*,
+ org.eclipse.jetty.ee11.websocket.*,
org.eclipse.jetty.websocket.*,
+ org.eclipse.jetty.compression.*,
org.apache.felix.http.jetty,
org.apache.felix.http.jakartawrappers,
org.apache.felix.http.javaxwrappers
@@ -478,11 +480,12 @@
org.eclipse.jetty.server.*,
org.eclipse.jetty.util.*,
org.eclipse.jetty.ee.*,
- !org.eclipse.jetty.ee10.websocket.server.*,
- !org.eclipse.jetty.ee10.websocket.servlet.*,
- org.eclipse.jetty.ee10.websocket.jakarta.*,
- org.eclipse.jetty.ee10.servlet.*,
+ !org.eclipse.jetty.ee11.websocket.server.*,
+ !org.eclipse.jetty.ee11.websocket.servlet.*,
+ org.eclipse.jetty.ee11.websocket.jakarta.*,
+ org.eclipse.jetty.ee11.servlet.*,
org.eclipse.jetty.websocket.*,
+ org.eclipse.jetty.compression.*,
org.apache.felix.http.jetty,
org.apache.felix.http.jakartawrappers,
org.apache.felix.http.javaxwrappers
@@ -634,8 +637,8 @@
provided
- org.eclipse.jetty.ee10
- jetty-ee10-servlet
+ org.eclipse.jetty.ee11
+ jetty-ee11-servlet
${jetty.version}
@@ -684,14 +687,14 @@
${jetty.version}
- org.eclipse.jetty.ee10.websocket
- jetty-ee10-websocket-jakarta-server
+ org.eclipse.jetty.ee11.websocket
+ jetty-ee11-websocket-jakarta-server
${jetty.version}
true
- org.eclipse.jetty.ee10.websocket
- jetty-ee10-websocket-jetty-server
+ org.eclipse.jetty.ee11.websocket
+ jetty-ee11-websocket-jetty-server
${jetty.version}
true
@@ -706,6 +709,16 @@
jetty-session
${jetty.version}
+
+ org.eclipse.jetty.compression
+ jetty-compression-gzip
+ ${jetty.version}
+
+
+ org.eclipse.jetty.compression
+ jetty-compression-common
+ ${jetty.version}
+
org.osgi
org.osgi.service.servlet
diff --git a/http/jetty12/src/main/java/org/apache/felix/http/jetty/internal/JettyErrorHandler.java b/http/jetty12/src/main/java/org/apache/felix/http/jetty/internal/JettyErrorHandler.java
index 1a6c82bb7e..9fdfbda0de 100644
--- a/http/jetty12/src/main/java/org/apache/felix/http/jetty/internal/JettyErrorHandler.java
+++ b/http/jetty12/src/main/java/org/apache/felix/http/jetty/internal/JettyErrorHandler.java
@@ -18,7 +18,7 @@
import java.util.Map;
-import org.eclipse.jetty.ee10.servlet.ErrorHandler;
+import org.eclipse.jetty.ee11.servlet.ErrorHandler;
import org.eclipse.jetty.http.HttpFields.Mutable;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Response;
diff --git a/http/jetty12/src/main/java/org/apache/felix/http/jetty/internal/JettyService.java b/http/jetty12/src/main/java/org/apache/felix/http/jetty/internal/JettyService.java
index 2dce509ec2..74c369002f 100644
--- a/http/jetty12/src/main/java/org/apache/felix/http/jetty/internal/JettyService.java
+++ b/http/jetty12/src/main/java/org/apache/felix/http/jetty/internal/JettyService.java
@@ -43,10 +43,10 @@
import org.apache.felix.http.base.internal.HttpServiceController;
import org.apache.felix.http.base.internal.logger.SystemLogger;
import org.eclipse.jetty.alpn.server.ALPNServerConnectionFactory;
-import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
-import org.eclipse.jetty.ee10.servlet.ServletHandler;
-import org.eclipse.jetty.ee10.servlet.ServletHolder;
-import org.eclipse.jetty.ee10.servlet.SessionHandler;
+import org.eclipse.jetty.ee11.servlet.ServletContextHandler;
+import org.eclipse.jetty.ee11.servlet.ServletHolder;
+import org.eclipse.jetty.ee11.servlet.SessionHandler;
+import org.eclipse.jetty.ee11.servlet.ServletHandler;
import org.eclipse.jetty.http.HttpVersion;
import org.eclipse.jetty.http.UriCompliance;
import org.eclipse.jetty.http2.server.HTTP2ServerConnectionFactory;
@@ -588,32 +588,32 @@ private boolean initializeHttps()
* @param handler the sevlet context handler to initialize
*/
private void maybeInitializeJakartaWebsocket(ServletContextHandler handler) {
- if (isClassNameVisible("org.eclipse.jetty.ee10.websocket.jakarta.server.config.JakartaWebSocketServletContainerInitializer")) {
+ if (isClassNameVisible("org.eclipse.jetty.ee11.websocket.jakarta.server.config.JakartaWebSocketServletContainerInitializer")) {
// Ensure that JakartaWebSocketServletContainerInitializer is initialized,
// to setup the ServerContainer for this web application context.
- org.eclipse.jetty.ee10.websocket.jakarta.server.config.JakartaWebSocketServletContainerInitializer.configure(handler, null);
- SystemLogger.LOGGER.info("Jakarta WebSocket EE10 servlet container initialized");
+ org.eclipse.jetty.ee11.websocket.jakarta.server.config.JakartaWebSocketServletContainerInitializer.configure(handler, null);
+ SystemLogger.LOGGER.info("Jakarta WebSocket ee11 servlet container initialized");
} else {
- SystemLogger.LOGGER.warn("Failed to initialize jakarta EE10 standard websocket support since the initializer class was not found. "
- + "Check if the jetty-ee10-websocket-jakarta-server bundle is deployed.");
+ SystemLogger.LOGGER.warn("Failed to initialize jakarta ee11 standard websocket support since the initializer class was not found. "
+ + "Check if the jetty-ee11-websocket-jakarta-server bundle is deployed.");
}
}
/**
- * Initialize the jetty EE10 websocket support for the servlet context handler.
+ * Initialize the jetty ee11 websocket support for the servlet context handler.
* If the optional initializer class is not present then a warning will be logged.
*
* @param handler the sevlet context handler to initialize
*/
private void maybeInitializeJettyWebsocket(ServletContextHandler handler) {
- if (isClassNameVisible("org.eclipse.jetty.ee10.websocket.server.config.JettyWebSocketServletContainerInitializer")) {
+ if (isClassNameVisible("org.eclipse.jetty.ee11.websocket.server.config.JettyWebSocketServletContainerInitializer")) {
// Ensure that JettyWebSocketServletContainerInitializer is initialized,
// to setup the JettyWebSocketServerContainer for this web application context.
- org.eclipse.jetty.ee10.websocket.server.config.JettyWebSocketServletContainerInitializer.configure(handler, null);
- SystemLogger.LOGGER.info("Jetty WebSocket EE10 servlet container initialized");
+ org.eclipse.jetty.ee11.websocket.server.config.JettyWebSocketServletContainerInitializer.configure(handler, null);
+ SystemLogger.LOGGER.info("Jetty WebSocket ee11 servlet container initialized");
} else {
- SystemLogger.LOGGER.warn("Failed to initialize jetty EE10 specific websocket support since the initializer class was not found. "
- + "Check if the jetty-ee10-websocket-jetty-server bundle is deployed.");
+ SystemLogger.LOGGER.warn("Failed to initialize jetty ee11 specific websocket support since the initializer class was not found. "
+ + "Check if the jetty-ee11-websocket-jetty-server bundle is deployed.");
}
}
@@ -626,13 +626,13 @@ private void maybeStoreWebSocketContainerAttributes(ServletContextHandler contex
// when the server is started, retrieve the container attribute and
// set it on the shared servlet context once available
if (this.config.isUseJettyWebsocket() &&
- isClassNameVisible("org.eclipse.jetty.ee10.websocket.server.config.JettyWebSocketServletContainerInitializer")) {
- String attribute = org.eclipse.jetty.ee10.websocket.server.JettyWebSocketServerContainer.JETTY_WEBSOCKET_CONTAINER_ATTRIBUTE;
+ isClassNameVisible("org.eclipse.jetty.ee11.websocket.server.config.JettyWebSocketServletContainerInitializer")) {
+ String attribute = org.eclipse.jetty.ee11.websocket.server.JettyWebSocketServerContainer.JETTY_WEBSOCKET_CONTAINER_ATTRIBUTE;
this.controller.setAttributeSharedServletContext(attribute, context.getServletContext().getAttribute(attribute));
}
if (this.config.isUseJakartaWebsocket() &&
- isClassNameVisible("org.eclipse.jetty.ee10.websocket.jakarta.server.config.JakartaWebSocketServletContainerInitializer")) {
- String attribute = org.eclipse.jetty.ee10.websocket.jakarta.server.config.JakartaWebSocketServletContainerInitializer.ATTR_JAKARTA_SERVER_CONTAINER;
+ isClassNameVisible("org.eclipse.jetty.ee11.websocket.jakarta.server.config.JakartaWebSocketServletContainerInitializer")) {
+ String attribute = org.eclipse.jetty.ee11.websocket.jakarta.server.config.JakartaWebSocketServletContainerInitializer.ATTR_JAKARTA_SERVER_CONTAINER;
this.controller.setAttributeSharedServletContext(attribute, context.getServletContext().getAttribute(attribute));
}
}
diff --git a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/AbstractJettyTestSupport.java b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/AbstractJettyTestSupport.java
index d42ef43d3e..51874f2089 100644
--- a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/AbstractJettyTestSupport.java
+++ b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/AbstractJettyTestSupport.java
@@ -43,7 +43,7 @@
import org.ops4j.pax.exam.util.PathUtils;
public abstract class AbstractJettyTestSupport {
- protected static final String JETTY_VERSION = "12.0.22";
+ protected static final String JETTY_VERSION = "12.1.0.beta1";
private final String workingDirectory = String.format("%s/target/paxexam/%s/%s", PathUtils.getBaseDir(), getClass().getSimpleName(), UUID.randomUUID());
diff --git a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JakartaSpecificWebsocketIT.java b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JakartaSpecificWebsocketIT.java
index 1c2ec9e613..f1e7458044 100644
--- a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JakartaSpecificWebsocketIT.java
+++ b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JakartaSpecificWebsocketIT.java
@@ -43,7 +43,7 @@
import jakarta.websocket.server.ServerEndpoint;
import org.awaitility.Awaitility;
-import org.eclipse.jetty.ee10.websocket.jakarta.client.JakartaWebSocketClientContainerProvider;
+import org.eclipse.jetty.ee11.websocket.jakarta.client.JakartaWebSocketClientContainerProvider;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.Option;
@@ -71,19 +71,21 @@ protected Option[] additionalOptions() throws IOException {
spifly(),
// bundles for the server side
- mavenBundle().groupId("jakarta.websocket").artifactId("jakarta.websocket-api").version("2.1.1"),
- mavenBundle().groupId("jakarta.websocket").artifactId("jakarta.websocket-client-api").version("2.1.1"),
+ mavenBundle().groupId("jakarta.websocket").artifactId("jakarta.websocket-api").version("2.2.0"),
+ mavenBundle().groupId("jakarta.websocket").artifactId("jakarta.websocket-client-api").version("2.2.0"),
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-alpn-client").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-client").version(jettyVersion),
- mavenBundle().groupId("org.eclipse.jetty.ee10").artifactId("jetty-ee10-webapp").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.ee11").artifactId("jetty-ee11-webapp").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-ee").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.compression").artifactId("jetty-compression-gzip").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.compression").artifactId("jetty-compression-common").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty.websocket").artifactId("jetty-websocket-core-client").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty.websocket").artifactId("jetty-websocket-core-common").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty.websocket").artifactId("jetty-websocket-core-server").version(jettyVersion),
- mavenBundle().groupId("org.eclipse.jetty.ee10.websocket").artifactId("jetty-ee10-websocket-jakarta-client").version(jettyVersion),
- mavenBundle().groupId("org.eclipse.jetty.ee10.websocket").artifactId("jetty-ee10-websocket-jakarta-common").version(jettyVersion),
- mavenBundle().groupId("org.eclipse.jetty.ee10.websocket").artifactId("jetty-ee10-websocket-jakarta-server").version(jettyVersion),
- mavenBundle().groupId("org.eclipse.jetty.ee10.websocket").artifactId("jetty-ee10-websocket-servlet").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.ee11.websocket").artifactId("jetty-ee11-websocket-jakarta-client").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.ee11.websocket").artifactId("jetty-ee11-websocket-jakarta-common").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.ee11.websocket").artifactId("jetty-ee11-websocket-jakarta-server").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.ee11.websocket").artifactId("jetty-ee11-websocket-servlet").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-xml").version(jettyVersion)
};
}
diff --git a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyMaxFormSizeIT.java b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyMaxFormSizeIT.java
index a0e71667ff..3160aa6eef 100644
--- a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyMaxFormSizeIT.java
+++ b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyMaxFormSizeIT.java
@@ -35,7 +35,6 @@
import org.eclipse.jetty.client.ContentResponse;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.client.transport.HttpClientTransportOverHTTP;
import org.eclipse.jetty.util.Fields;
import org.junit.Before;
import org.junit.Test;
@@ -64,9 +63,9 @@ protected Option[] additionalOptions() throws IOException {
spifly(),
// bundles for the server side
- mavenBundle().groupId("org.eclipse.jetty.ee10").artifactId("jetty-ee10-webapp").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.ee11").artifactId("jetty-ee11-webapp").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-ee").version(jettyVersion),
- mavenBundle().groupId("org.eclipse.jetty.ee10").artifactId("jetty-ee10-servlet").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.ee11").artifactId("jetty-ee11-servlet").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-xml").version(jettyVersion),
// additional bundles for the client side
@@ -94,30 +93,27 @@ public void setup(){
@Test
public void testFormSizeLimit() throws Exception {
- HttpClientTransportOverHTTP transport = new HttpClientTransportOverHTTP();
- HttpClient httpClient = new HttpClient(transport);
- httpClient.start();
+ try (HttpClient httpClient = new HttpClient()) {
+ httpClient.start();
+ Object value = bundleContext.getServiceReference(HttpService.class).getProperty("org.osgi.service.http.port");
+ int httpPort = Integer.parseInt((String) value);
- Object value = bundleContext.getServiceReference(HttpService.class).getProperty("org.osgi.service.http.port");
- int httpPort = Integer.parseInt((String) value);
+ URI uri = new URI(String.format("http://localhost:%d/endpoint", httpPort));
- URI uri = new URI(String.format("http://localhost:%d/endpoint", httpPort));
+ Fields formFields = new Fields();
+ formFields.add(new Fields.Field("key", "value")); // under 10 bytes
+ ContentResponse response = httpClient.FORM(uri, formFields);
- Fields formFields = new Fields();
- formFields.add(new Fields.Field("key", "value")); // under 10 bytes
- ContentResponse response = httpClient.FORM(uri, formFields);
+ assertEquals(200, response.getStatus());
+ assertEquals("OK", response.getContentAsString());
- assertEquals(200, response.getStatus());
- assertEquals("OK", response.getContentAsString());
+ Fields formFieldsLimitExceeded = new Fields();
+ formFieldsLimitExceeded.add(new Fields.Field("key", "valueoverlimit")); // over limit of 10 bytes
+ ContentResponse responseExceeded = httpClient.FORM(uri, formFieldsLimitExceeded);
- Fields formFieldsLimitExceeded = new Fields();
- formFieldsLimitExceeded.add(new Fields.Field("key", "valueoverlimit")); // over limit of 10 bytes
- ContentResponse responseExceeded = httpClient.FORM(uri, formFieldsLimitExceeded);
-
- // HTTP 500 thrown, because req.getParameter("key") throws an IOException
- assertEquals(500, responseExceeded.getStatus());
-
- httpClient.close();
+ // HTTP 500 thrown, because req.getParameter("key") throws an IOException
+ assertEquals(500, responseExceeded.getStatus());
+ }
}
static final class HelloWorldServlet extends HttpServlet {
diff --git a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettySizeLimitHandlerIT.java b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettySizeLimitHandlerIT.java
index 179726bf9b..2eb12c69fb 100644
--- a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettySizeLimitHandlerIT.java
+++ b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettySizeLimitHandlerIT.java
@@ -25,6 +25,8 @@
import java.net.URI;
import java.util.Hashtable;
import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
import javax.inject.Inject;
import jakarta.servlet.Servlet;
@@ -33,9 +35,11 @@
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
+import org.eclipse.jetty.client.CompletableResponseListener;
import org.eclipse.jetty.client.ContentResponse;
+import org.eclipse.jetty.client.FormRequestContent;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.client.transport.HttpClientTransportOverHTTP;
+import org.eclipse.jetty.client.Request;
import org.eclipse.jetty.util.Fields;
import org.junit.Before;
import org.junit.Test;
@@ -63,9 +67,9 @@ protected Option[] additionalOptions() throws IOException {
spifly(),
// bundles for the server side
- mavenBundle().groupId("org.eclipse.jetty.ee10").artifactId("jetty-ee10-webapp").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.ee11").artifactId("jetty-ee11-webapp").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-ee").version(jettyVersion),
- mavenBundle().groupId("org.eclipse.jetty.ee10").artifactId("jetty-ee10-servlet").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.ee11").artifactId("jetty-ee11-servlet").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-xml").version(jettyVersion),
// additional bundles for the client side
@@ -97,34 +101,40 @@ public void setup(){
@Test
public void testRequestResponseLimits() throws Exception {
- HttpClientTransportOverHTTP transport = new HttpClientTransportOverHTTP();
- HttpClient httpClient = new HttpClient(transport);
- httpClient.start();
-
- Object value = bundleContext.getServiceReference(HttpService.class).getProperty("org.osgi.service.http.port");
- int httpPort = Integer.parseInt((String) value);
-
- Fields formFields = new Fields();
- formFields.add(new Fields.Field("key", "value")); // under 10 bytes
- ContentResponse responseWithinLimit = httpClient.FORM(new URI(String.format("http://localhost:%d/withinlimit/a", httpPort)), formFields);
-
- // Request limit ok, response limit ok
- assertEquals(200, responseWithinLimit.getStatus());
- assertEquals("OK", responseWithinLimit.getContentAsString());
-
- // Request limit ok, response limit exceeded
- // org.eclipse.jetty.http.HttpException$RuntimeException: 500: Response body is too large: 17>10
- ContentResponse responseExceedingLimit = httpClient.FORM(new URI(String.format("http://localhost:%d/exceedinglimit/a", httpPort)), formFields);
- assertEquals(500, responseExceedingLimit.getStatus());
-
- Fields formFieldsLimitExceeded = new Fields();
- formFieldsLimitExceeded.add(new Fields.Field("key", "valueoverlimit")); // over limit of 10 bytes
- ContentResponse responseExceeded = httpClient.FORM(new URI(String.format("http://localhost:%d/withinlimit/a", httpPort)), formFieldsLimitExceeded);
-
- // Request limit exceeded, HTTP 413 directly from Jetty
- assertEquals(413, responseExceeded.getStatus());
-
- httpClient.close();
+ try (HttpClient httpClient = new HttpClient()) {
+ httpClient.start();
+ Object value = bundleContext.getServiceReference(HttpService.class).getProperty("org.osgi.service.http.port");
+ int httpPort = Integer.parseInt((String) value);
+
+ Fields formFields = new Fields();
+ formFields.add(new Fields.Field("key","value")); // under 10 bytes
+ ContentResponse responseWithinLimit = httpClient.FORM(new URI(String.format("http://localhost:%d/withinlimit/a", httpPort)), formFields);
+
+ // Request limit ok, response limit ok
+ assertEquals(200, responseWithinLimit.getStatus());
+ assertEquals("OK", responseWithinLimit.getContentAsString());
+
+ // Request limit ok, response limit exceeded
+ // org.eclipse.jetty.http.HttpException$RuntimeException: 500: Response body is too large: 17>10
+ ContentResponse responseExceedingLimit = httpClient.FORM(new URI(String.format("http://localhost:%d/exceedinglimit/a", httpPort)), formFields);
+
+ assertEquals(500, responseExceedingLimit.getStatus());
+
+ Fields formFieldsLimitExceeded = new Fields();
+ formFieldsLimitExceeded.add(new Fields.Field("key","valueoverlimit")); // over limit of 10 bytes
+
+ Request request = httpClient.newRequest(new URI(String.format("http://localhost:%d/withinlimit/a", httpPort)))
+ .body(new FormRequestContent(formFieldsLimitExceeded));
+
+ try {
+ CompletableFuture completable = new CompletableResponseListener(request).send();
+ ContentResponse response = completable.get();
+ assertEquals(413, response.getStatus());
+ } catch (ExecutionException e) {
+ // FIXME this shouldn't happen, but it does with Jetty 12.1.0.beta1
+ // java.nio.channels.AsynchronousCloseException
+ }
+ }
}
static final class HelloWorldServletWithinLimit extends HttpServlet {
diff --git a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettySpecificWebsocketIT.java b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettySpecificWebsocketIT.java
index 27b33bc9d0..5cbf8e3f65 100644
--- a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettySpecificWebsocketIT.java
+++ b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettySpecificWebsocketIT.java
@@ -41,9 +41,9 @@
import org.awaitility.Awaitility;
import org.eclipse.jetty.client.HttpClient;
import org.eclipse.jetty.client.transport.HttpClientTransportOverHTTP;
-import org.eclipse.jetty.ee10.websocket.server.JettyWebSocketServerContainer;
-import org.eclipse.jetty.ee10.websocket.server.JettyWebSocketServlet;
-import org.eclipse.jetty.ee10.websocket.server.JettyWebSocketServletFactory;
+import org.eclipse.jetty.ee11.websocket.server.JettyWebSocketServerContainer;
+import org.eclipse.jetty.ee11.websocket.server.JettyWebSocketServlet;
+import org.eclipse.jetty.ee11.websocket.server.JettyWebSocketServletFactory;
import org.eclipse.jetty.websocket.api.Callback;
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
@@ -80,20 +80,22 @@ protected Option[] additionalOptions() throws IOException {
spifly(),
// bundles for the server side
- mavenBundle().groupId("org.eclipse.jetty.ee10").artifactId("jetty-ee10-webapp").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.ee11").artifactId("jetty-ee11-webapp").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty.websocket").artifactId("jetty-websocket-core-common").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty.websocket").artifactId("jetty-websocket-core-server").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty.websocket").artifactId("jetty-websocket-jetty-api").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty.websocket").artifactId("jetty-websocket-jetty-common").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty.websocket").artifactId("jetty-websocket-jetty-server").version(jettyVersion),
- mavenBundle().groupId("org.eclipse.jetty.ee10.websocket").artifactId("jetty-ee10-websocket-servlet").version(jettyVersion),
- mavenBundle().groupId("org.eclipse.jetty.ee10.websocket").artifactId("jetty-ee10-websocket-jetty-server").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.ee11.websocket").artifactId("jetty-ee11-websocket-servlet").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.ee11.websocket").artifactId("jetty-ee11-websocket-jetty-server").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-xml").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-ee").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.compression").artifactId("jetty-compression-common").version(jettyVersion),
// additional bundles for the client side
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-alpn-client").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-client").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.compression").artifactId("jetty-compression-gzip").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty.websocket").artifactId("jetty-websocket-core-client").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty.websocket").artifactId("jetty-websocket-jetty-client").version(jettyVersion)
};
diff --git a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyUriComplianceModeDefaultIT.java b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyUriComplianceModeDefaultIT.java
index 3ad003242c..9c6e957cf8 100644
--- a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyUriComplianceModeDefaultIT.java
+++ b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyUriComplianceModeDefaultIT.java
@@ -35,7 +35,6 @@
import org.eclipse.jetty.client.ContentResponse;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.client.transport.HttpClientTransportOverHTTP;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -60,14 +59,16 @@ protected Option[] additionalOptions() throws IOException {
spifly(),
// bundles for the server side
- mavenBundle().groupId("org.eclipse.jetty.ee10").artifactId("jetty-ee10-webapp").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.ee11").artifactId("jetty-ee11-webapp").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-ee").version(jettyVersion),
- mavenBundle().groupId("org.eclipse.jetty.ee10").artifactId("jetty-ee10-servlet").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.ee11").artifactId("jetty-ee11-servlet").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-xml").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.compression").artifactId("jetty-compression-common").version(jettyVersion),
// additional bundles for the client side
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-alpn-client").version(jettyVersion),
- mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-client").version(jettyVersion)
+ mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-client").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.compression").artifactId("jetty-compression-gzip").version(jettyVersion)
};
}
@@ -89,33 +90,30 @@ public void setup(){
@Test
public void testUriCompliance() throws Exception {
- HttpClientTransportOverHTTP transport = new HttpClientTransportOverHTTP();
- HttpClient httpClient = new HttpClient(transport);
- httpClient.start();
+ try (HttpClient httpClient = new HttpClient()) {
+ httpClient.start();
+ Object value = bundleContext.getServiceReference(HttpService.class).getProperty("org.osgi.service.http.port");
+ int httpPort = Integer.parseInt((String) value);
- Object value = bundleContext.getServiceReference(HttpService.class).getProperty("org.osgi.service.http.port");
- int httpPort = Integer.parseInt((String) value);
+ URI destUriWorking = new URI(String.format("http://localhost:%d/endpoint/working", httpPort));
+ URI destUriAmbigousPath = new URI("http://localhost:" + httpPort + "/endpoint/ambigousPathitem_0_http%3A%2F%2Fwww.test.com%2F0.html/abc");
- URI destUriWorking = new URI(String.format("http://localhost:%d/endpoint/working", httpPort));
- URI destUriAmbigousPath = new URI("http://localhost:" + httpPort + "/endpoint/ambigousPathitem_0_http%3A%2F%2Fwww.test.com%2F0.html/abc");
+ ContentResponse response = httpClient.GET(destUriWorking);
+ assertEquals(200, response.getStatus());
+ assertEquals("OK", response.getContentAsString());
- ContentResponse response = httpClient.GET(destUriWorking);
- assertEquals(200, response.getStatus());
- assertEquals("OK", response.getContentAsString());
+ // Validate custom headers in case of success page, should not be present
+ assertNull(response.getHeaders().get("Strict-Transport-Security"));
+ assertNull(response.getHeaders().get("X-Custom-Header"));
- // Validate custom headers in case of success page, should not be present
- assertNull(response.getHeaders().get("Strict-Transport-Security"));
- assertNull(response.getHeaders().get("X-Custom-Header"));
-
- // blocked with HTTP 400 by default
- // validate custom headers in case of error page
- ContentResponse responseAmbiguousPath = httpClient.GET(destUriAmbigousPath);
- assertEquals(400, responseAmbiguousPath.getStatus());
- assertEquals("max-age=31536000", responseAmbiguousPath.getHeaders().get("Strict-Transport-Security"));
- assertEquals("123", responseAmbiguousPath.getHeaders().get("X-Custom-Header"));
-
- httpClient.close();
+ // blocked with HTTP 400 by default
+ // validate custom headers in case of error page
+ ContentResponse responseAmbiguousPath = httpClient.GET(destUriAmbigousPath);
+ assertEquals(400, responseAmbiguousPath.getStatus());
+ assertEquals("max-age=31536000", responseAmbiguousPath.getHeaders().get("Strict-Transport-Security"));
+ assertEquals("123", responseAmbiguousPath.getHeaders().get("X-Custom-Header"));
+ }
}
static final class UriComplianceEndpoint extends HttpServlet {
diff --git a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyUriComplianceModeLegacyIT.java b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyUriComplianceModeLegacyIT.java
index cd228e0271..8b2944bc5d 100644
--- a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyUriComplianceModeLegacyIT.java
+++ b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyUriComplianceModeLegacyIT.java
@@ -18,34 +18,19 @@
import static org.eclipse.jetty.http.UriCompliance.LEGACY;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.newConfiguration;
-import java.io.IOException;
import java.net.URI;
-import java.util.Hashtable;
-import java.util.Map;
-
-import javax.inject.Inject;
-import jakarta.servlet.Servlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
import org.eclipse.jetty.client.ContentResponse;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.client.transport.HttpClientTransportOverHTTP;
-import org.eclipse.jetty.http.UriCompliance;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
-import org.osgi.framework.BundleContext;
import org.osgi.service.http.HttpService;
-import org.osgi.service.servlet.whiteboard.HttpWhiteboardConstants;
@RunWith(PaxExam.class)
@ExamReactorStrategy(PerClass.class)
@@ -61,25 +46,22 @@ protected Option felixHttpConfig(int httpPort) {
@Test
public void testUriCompliance() throws Exception {
- HttpClientTransportOverHTTP transport = new HttpClientTransportOverHTTP();
- HttpClient httpClient = new HttpClient(transport);
- httpClient.start();
-
- Object value = bundleContext.getServiceReference(HttpService.class).getProperty("org.osgi.service.http.port");
- int httpPort = Integer.parseInt((String) value);
-
- URI destUriWorking = new URI(String.format("http://localhost:%d/endpoint/working", httpPort));
- URI destUriAmbigousPath = new URI("http://localhost:" + httpPort + "/endpoint/ambigousPathitem_0_http%3A%2F%2Fwww.test.com%2F0.html/abc");
+ try (HttpClient httpClient = new HttpClient()) {
+ httpClient.start();
+ Object value = bundleContext.getServiceReference(HttpService.class).getProperty("org.osgi.service.http.port");
+ int httpPort = Integer.parseInt((String) value);
- ContentResponse response = httpClient.GET(destUriWorking);
- assertEquals(200, response.getStatus());
- assertEquals("OK", response.getContentAsString());
+ URI destUriWorking = new URI(String.format("http://localhost:%d/endpoint/working", httpPort));
+ URI destUriAmbigousPath = new URI("http://localhost:" + httpPort + "/endpoint/ambigousPathitem_0_http%3A%2F%2Fwww.test.com%2F0.html/abc");
- // no longer blocked due to LEGACY compliance mode
- ContentResponse response2 = httpClient.GET(destUriAmbigousPath);
- assertEquals(200, response2.getStatus());
- assertEquals("OK", response2.getContentAsString());
+ ContentResponse response = httpClient.GET(destUriWorking);
+ assertEquals(200, response.getStatus());
+ assertEquals("OK", response.getContentAsString());
- httpClient.close();
+ // no longer blocked due to LEGACY compliance mode
+ ContentResponse response2 = httpClient.GET(destUriAmbigousPath);
+ assertEquals(200, response2.getStatus());
+ assertEquals("OK", response2.getContentAsString());
+ }
}
}
\ No newline at end of file
diff --git a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyVirtualThreadsIT.java b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyVirtualThreadsIT.java
index 0b79d51195..0acc5c79dd 100644
--- a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyVirtualThreadsIT.java
+++ b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyVirtualThreadsIT.java
@@ -34,7 +34,6 @@
import org.eclipse.jetty.client.ContentResponse;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.client.transport.HttpClientTransportOverHTTP;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -60,14 +59,16 @@ protected Option[] additionalOptions() throws IOException {
spifly(),
// bundles for the server side
- mavenBundle().groupId("org.eclipse.jetty.ee10").artifactId("jetty-ee10-webapp").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.ee11").artifactId("jetty-ee11-webapp").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-ee").version(jettyVersion),
- mavenBundle().groupId("org.eclipse.jetty.ee10").artifactId("jetty-ee10-servlet").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.ee11").artifactId("jetty-ee11-servlet").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-xml").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.compression").artifactId("jetty-compression-common").version(jettyVersion),
// additional bundles for the client side
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-alpn-client").version(jettyVersion),
- mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-client").version(jettyVersion)
+ mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-client").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.compression").artifactId("jetty-compression-gzip").version(jettyVersion)
};
}
@@ -93,20 +94,17 @@ public void testJettyRunningWithVirtualThreads() throws Exception {
// This test only works on Java 21 or newer
return;
}
- HttpClientTransportOverHTTP transport = new HttpClientTransportOverHTTP();
- HttpClient httpClient = new HttpClient(transport);
- httpClient.start();
+ try (HttpClient httpClient = new HttpClient()) {
+ httpClient.start();
+ Object value = bundleContext.getServiceReference(HttpService.class).getProperty("org.osgi.service.http.port");
+ int httpPort = Integer.parseInt((String) value);
- Object value = bundleContext.getServiceReference(HttpService.class).getProperty("org.osgi.service.http.port");
- int httpPort = Integer.parseInt((String) value);
+ URI destUri = new URI(String.format("http://localhost:%d/endpoint/working", httpPort));
- URI destUri = new URI(String.format("http://localhost:%d/endpoint/working", httpPort));
-
- ContentResponse response = httpClient.GET(destUri);
- assertEquals(200, response.getStatus());
- assertEquals("OK", response.getContentAsString());
-
- httpClient.close();
+ ContentResponse response = httpClient.GET(destUri);
+ assertEquals(200, response.getStatus());
+ assertEquals("OK", response.getContentAsString());
+ }
}
static final class ExampleEndpoint extends HttpServlet {
diff --git a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyVirtualThreadsThreadPoolIT.java b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyVirtualThreadsThreadPoolIT.java
index e22a2b775a..7b4d19cdfb 100644
--- a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyVirtualThreadsThreadPoolIT.java
+++ b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/JettyVirtualThreadsThreadPoolIT.java
@@ -16,35 +16,13 @@
*/
package org.apache.felix.http.jetty.it;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.newConfiguration;
-import java.io.IOException;
-import java.net.URI;
-import java.util.Hashtable;
-import java.util.Map;
-
-import javax.inject.Inject;
-import jakarta.servlet.Servlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-import org.eclipse.jetty.client.ContentResponse;
-import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.client.transport.HttpClientTransportOverHTTP;
-import org.junit.Before;
-import org.junit.Test;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
-import org.osgi.framework.BundleContext;
-import org.osgi.service.http.HttpService;
-import org.osgi.service.servlet.whiteboard.HttpWhiteboardConstants;
@RunWith(PaxExam.class)
@ExamReactorStrategy(PerClass.class)
diff --git a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/LightClassifierIT.java b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/LightClassifierIT.java
index 30c3f1fa80..ec25b7312c 100644
--- a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/LightClassifierIT.java
+++ b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/LightClassifierIT.java
@@ -67,7 +67,7 @@ protected Option[] additionalOptions() throws IOException {
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-security").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-server").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-session").version(jettyVersion),
- mavenBundle().groupId("org.eclipse.jetty.ee10").artifactId("jetty-ee10-servlet").version(jettyVersion),
+ mavenBundle().groupId("org.eclipse.jetty.ee11").artifactId("jetty-ee11-servlet").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-util").version(jettyVersion),
mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-ee").version(jettyVersion),
diff --git a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/MissingWebsocketDependenciesIT.java b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/MissingWebsocketDependenciesIT.java
index d733197afb..d15f38f695 100644
--- a/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/MissingWebsocketDependenciesIT.java
+++ b/http/jetty12/src/test/java/org/apache/felix/http/jetty/it/MissingWebsocketDependenciesIT.java
@@ -68,11 +68,11 @@ public void testMissingDepencencyWarningLogs() throws Exception {
.until(() -> containsString(logFile, "org.apache.felix.http.jetty12 [org.apache.felix.http]"));
assertTrue(containsString(logFile, "org.apache.felix.http.jetty12 [org.apache.felix.http] WARN : Failed to "
- + "initialize jetty EE10 specific websocket support since the initializer class was not found. "
- + "Check if the jetty-ee10-websocket-jetty-server bundle is deployed."));
+ + "initialize jetty ee11 specific websocket support since the initializer class was not found. "
+ + "Check if the jetty-ee11-websocket-jetty-server bundle is deployed."));
assertTrue(containsString(logFile, "org.apache.felix.http.jetty12 [org.apache.felix.http] WARN : Failed to "
- + "initialize jakarta EE10 standard websocket support since the initializer class was not found. "
- + "Check if the jetty-ee10-websocket-jakarta-server bundle is deployed."));
+ + "initialize jakarta ee11 standard websocket support since the initializer class was not found. "
+ + "Check if the jetty-ee11-websocket-jakarta-server bundle is deployed."));
}
/**
diff --git a/http/pom.xml b/http/pom.xml
index 39f83277a7..c9cedcce46 100644
--- a/http/pom.xml
+++ b/http/pom.xml
@@ -43,12 +43,12 @@
bridge
inventoryprinter
itest
+ servlet-api
wrappers
jetty
jetty12
proxy
samples/whiteboard
- servlet-api
sslfilter
webconsoleplugin
diff --git a/http/samples/whiteboard/pom.xml b/http/samples/whiteboard/pom.xml
index ca772d81b5..547d70860a 100644
--- a/http/samples/whiteboard/pom.xml
+++ b/http/samples/whiteboard/pom.xml
@@ -39,7 +39,7 @@
- 12.0.22
+ 12.1.0.beta1
@@ -78,7 +78,7 @@
jakarta.servlet
jakarta.servlet-api
- 5.0.0
+ 6.1.0
provided
@@ -96,7 +96,7 @@
org.apache.felix
org.apache.felix.http.jetty12
- 1.0.21-SNAPSHOT
+ 1.1.0-SNAPSHOT
provided
@@ -112,14 +112,14 @@
provided
- org.eclipse.jetty.ee10
- jetty-ee10-servlet
+ org.eclipse.jetty.ee11
+ jetty-ee11-servlet
${jetty.version}
provided
- org.eclipse.jetty.ee10.websocket
- jetty-ee10-websocket-jetty-server
+ org.eclipse.jetty.ee11.websocket
+ jetty-ee11-websocket-jetty-server
${jetty.version}
provided
diff --git a/http/samples/whiteboard/src/main/java/org/apache/felix/http/samples/whiteboard/TestWebSocketServlet.java b/http/samples/whiteboard/src/main/java/org/apache/felix/http/samples/whiteboard/TestWebSocketServlet.java
index 77c1bd1c5c..f6685412b9 100644
--- a/http/samples/whiteboard/src/main/java/org/apache/felix/http/samples/whiteboard/TestWebSocketServlet.java
+++ b/http/samples/whiteboard/src/main/java/org/apache/felix/http/samples/whiteboard/TestWebSocketServlet.java
@@ -21,7 +21,7 @@
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
-import org.eclipse.jetty.ee10.websocket.server.JettyWebSocketServerContainer;
+import org.eclipse.jetty.ee11.websocket.server.JettyWebSocketServerContainer;
import org.eclipse.jetty.websocket.api.Callback;
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
diff --git a/http/samples/whiteboard/src/main/java/org/apache/felix/http/samples/whiteboard/TestWebSocketServletAlternative.java b/http/samples/whiteboard/src/main/java/org/apache/felix/http/samples/whiteboard/TestWebSocketServletAlternative.java
index 133fc1b4fc..85ebba1b3e 100644
--- a/http/samples/whiteboard/src/main/java/org/apache/felix/http/samples/whiteboard/TestWebSocketServletAlternative.java
+++ b/http/samples/whiteboard/src/main/java/org/apache/felix/http/samples/whiteboard/TestWebSocketServletAlternative.java
@@ -19,8 +19,8 @@
import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
-import org.eclipse.jetty.ee10.websocket.server.JettyWebSocketServlet;
-import org.eclipse.jetty.ee10.websocket.server.JettyWebSocketServletFactory;
+import org.eclipse.jetty.ee11.websocket.server.JettyWebSocketServlet;
+import org.eclipse.jetty.ee11.websocket.server.JettyWebSocketServletFactory;
import org.eclipse.jetty.websocket.api.Callback;
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
diff --git a/http/servlet-api/pom.xml b/http/servlet-api/pom.xml
index c78f9a3b37..0a42af74be 100644
--- a/http/servlet-api/pom.xml
+++ b/http/servlet-api/pom.xml
@@ -63,7 +63,7 @@
org.apache.felix
maven-bundle-plugin
- 5.1.9
+ 6.0.0
true
diff --git a/http/wrappers/pom.xml b/http/wrappers/pom.xml
index 131f392049..ddf2d83727 100644
--- a/http/wrappers/pom.xml
+++ b/http/wrappers/pom.xml
@@ -48,7 +48,7 @@
org.apache.felix
maven-bundle-plugin
- 5.1.9
+ 6.0.0
true
diff --git a/http/wrappers/src/main/java/org/apache/felix/http/jakartawrappers/HttpServletRequestWrapper.java b/http/wrappers/src/main/java/org/apache/felix/http/jakartawrappers/HttpServletRequestWrapper.java
index d971ef0bdd..31505f7cfe 100644
--- a/http/wrappers/src/main/java/org/apache/felix/http/jakartawrappers/HttpServletRequestWrapper.java
+++ b/http/wrappers/src/main/java/org/apache/felix/http/jakartawrappers/HttpServletRequestWrapper.java
@@ -17,6 +17,8 @@
package org.apache.felix.http.jakartawrappers;
import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
import java.security.Principal;
import java.util.ArrayList;
import java.util.Collection;
@@ -263,4 +265,13 @@ public Map getTrailerFields() {
public boolean isTrailerFieldsReady() {
return this.request.isTrailerFieldsReady();
}
+
+ @Override
+ public void setCharacterEncoding(Charset charset) {
+ try {
+ this.request.setCharacterEncoding(charset.name());
+ } catch (UnsupportedEncodingException e) {
+ throw new IllegalArgumentException(e);
+ }
+ }
}
diff --git a/http/wrappers/src/main/java/org/apache/felix/http/jakartawrappers/HttpServletResponseWrapper.java b/http/wrappers/src/main/java/org/apache/felix/http/jakartawrappers/HttpServletResponseWrapper.java
index b84884e03d..ff974f0658 100644
--- a/http/wrappers/src/main/java/org/apache/felix/http/jakartawrappers/HttpServletResponseWrapper.java
+++ b/http/wrappers/src/main/java/org/apache/felix/http/jakartawrappers/HttpServletResponseWrapper.java
@@ -17,13 +17,14 @@
package org.apache.felix.http.jakartawrappers;
import java.io.IOException;
+import java.nio.charset.Charset;
import java.util.Collection;
-import org.jetbrains.annotations.NotNull;
-
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletResponse;
+import org.jetbrains.annotations.NotNull;
+
/**
* Http servlet response wrapper
*/
@@ -76,6 +77,18 @@ public void sendRedirect(final String location) throws IOException {
this.response.sendRedirect(location);
}
+ @Override
+ public void sendRedirect(String location, boolean clearBuffer) throws IOException {
+ this.response.sendRedirect(location);
+ this.response.flushBuffer();
+ }
+
+ @Override
+ public void sendRedirect(String location, int sc) throws IOException {
+ this.response.setStatus(sc);
+ this.response.sendRedirect(location);
+ }
+
@Override
public void setDateHeader(final String name, final long date) {
this.response.setDateHeader(name, date);
@@ -141,4 +154,9 @@ public void sendRedirect(final String location, final int sc, final boolean clea
}
this.response.sendRedirect(location);
}
+
+ @Override
+ public void setCharacterEncoding(Charset encoding) {
+ this.response.setCharacterEncoding(encoding.name());
+ }
}