diff --git a/.gitignore b/.gitignore
index 9f7d5b94..b1d45c98 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
# maven noise
target/
+target11
target-*/
# gradle noise
diff --git a/archetypes/echo/src/main/resources/archetype-resources/pom.xml b/archetypes/echo/src/main/resources/archetype-resources/pom.xml
index 54f54e8d..062818a7 100644
--- a/archetypes/echo/src/main/resources/archetype-resources/pom.xml
+++ b/archetypes/echo/src/main/resources/archetype-resources/pom.xml
@@ -65,7 +65,7 @@
1.8${project.version}UTF-8
- 3.11.0
+ 3.13.03.4.0
diff --git a/client/src/main/java/module-info.java b/client/src/main/java11/module-info.java
similarity index 100%
rename from client/src/main/java/module-info.java
rename to client/src/main/java11/module-info.java
diff --git a/containers/glassfish/cdi/src/main/java/module-info.java b/containers/glassfish/cdi/src/main/java11/module-info.java
similarity index 100%
rename from containers/glassfish/cdi/src/main/java/module-info.java
rename to containers/glassfish/cdi/src/main/java11/module-info.java
diff --git a/containers/glassfish/ejb/src/main/java/module-info.java b/containers/glassfish/ejb/src/main/java11/module-info.java
similarity index 100%
rename from containers/glassfish/ejb/src/main/java/module-info.java
rename to containers/glassfish/ejb/src/main/java11/module-info.java
diff --git a/containers/grizzly-client/src/main/java/module-info.java b/containers/grizzly-client/src/main/java11/module-info.java
similarity index 100%
rename from containers/grizzly-client/src/main/java/module-info.java
rename to containers/grizzly-client/src/main/java11/module-info.java
diff --git a/containers/grizzly-server/src/main/java/module-info.java b/containers/grizzly-server/src/main/java11/module-info.java
similarity index 100%
rename from containers/grizzly-server/src/main/java/module-info.java
rename to containers/grizzly-server/src/main/java11/module-info.java
diff --git a/containers/inmemory/src/main/java/module-info.java b/containers/inmemory/src/main/java11/module-info.java
similarity index 100%
rename from containers/inmemory/src/main/java/module-info.java
rename to containers/inmemory/src/main/java11/module-info.java
diff --git a/containers/jdk-client/src/main/java/module-info.java b/containers/jdk-client/src/main/java11/module-info.java
similarity index 100%
rename from containers/jdk-client/src/main/java/module-info.java
rename to containers/jdk-client/src/main/java11/module-info.java
diff --git a/containers/servlet/src/main/java/org/glassfish/tyrus/servlet/TyrusHttpUpgradeHandler.java b/containers/servlet/src/main/java/org/glassfish/tyrus/servlet/TyrusHttpUpgradeHandler.java
index e60ae924..ae30b4c5 100644
--- a/containers/servlet/src/main/java/org/glassfish/tyrus/servlet/TyrusHttpUpgradeHandler.java
+++ b/containers/servlet/src/main/java/org/glassfish/tyrus/servlet/TyrusHttpUpgradeHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2024 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
@@ -46,6 +46,14 @@
*/
public class TyrusHttpUpgradeHandler implements HttpUpgradeHandler, ReadListener {
+ /**
+ *
+ * The size to precede OutOfMemory Exception and potentially DDoS attacks when buffering incoming WebSocket frames.
+ *
+ *
+ * The default value is 4194315 bytes, which correspond to 4M plus few bytes to frame headers.
+ *
+ */
public static final String FRAME_BUFFER_SIZE = "org.glassfish.tyrus.servlet.incoming-buffer-size";
private final CountDownLatch connectionLatch = new CountDownLatch(1);
@@ -98,6 +106,12 @@ public void close(CloseReason reason) {
connectionLatch.countDown();
}
+ /**
+ * Sets the required information before {@link #init(WebConnection)} is invoked.
+ * @param upgradeInfo The WebSocket UpgradeInfo.
+ * @param writer The Tyrus SPI Writer.
+ * @param authenticated Whether the authentication has been used.
+ */
public void preInit(WebSocketEngine.UpgradeInfo upgradeInfo, Writer writer, boolean authenticated) {
this.upgradeInfo = upgradeInfo;
this.writer = writer;
@@ -249,6 +263,10 @@ public String toString() {
return sb.toString();
}
+ /**
+ * Override the default {@link #FRAME_BUFFER_SIZE}.
+ * @param incomingBufferSize The new incoming frame buffer size value.
+ */
public void setIncomingBufferSize(int incomingBufferSize) {
this.incomingBufferSize = incomingBufferSize;
}
diff --git a/containers/servlet/src/main/java/module-info.java b/containers/servlet/src/main/java11/module-info.java
similarity index 100%
rename from containers/servlet/src/main/java/module-info.java
rename to containers/servlet/src/main/java11/module-info.java
diff --git a/core/src/main/java/module-info.java b/core/src/main/java11/module-info.java
similarity index 100%
rename from core/src/main/java/module-info.java
rename to core/src/main/java11/module-info.java
diff --git a/etc/jenkins/Jenkinsfile_ci_build b/etc/jenkins/Jenkinsfile_ci_build
index bc1fd896..27c197e8 100644
--- a/etc/jenkins/Jenkinsfile_ci_build
+++ b/etc/jenkins/Jenkinsfile_ci_build
@@ -8,12 +8,12 @@ pipeline {
stages {
stage('Jersey build') {
parallel {
- stage('JDK 11 ') {
+ stage('JDK 8 ') {
agent {
label 'centos-7'
}
tools {
- jdk 'openjdk-jdk11-latest'
+ jdk 'oracle-jdk8-latest'
maven 'apache-maven-latest'
}
steps {
diff --git a/ext/client-cli/src/main/java/module-info.java b/ext/client-cli/src/main/java11/module-info.java
similarity index 100%
rename from ext/client-cli/src/main/java/module-info.java
rename to ext/client-cli/src/main/java11/module-info.java
diff --git a/ext/client-java8/src/main/java/module-info.java b/ext/client-java8/src/main/java11/module-info.java
similarity index 100%
rename from ext/client-java8/src/main/java/module-info.java
rename to ext/client-java8/src/main/java11/module-info.java
diff --git a/ext/extension-deflate/src/main/java/module-info.java b/ext/extension-deflate/src/main/java11/module-info.java
similarity index 100%
rename from ext/extension-deflate/src/main/java/module-info.java
rename to ext/extension-deflate/src/main/java11/module-info.java
diff --git a/ext/monitoring-jmx/src/main/java/module-info.java b/ext/monitoring-jmx/src/main/java11/module-info.java
similarity index 100%
rename from ext/monitoring-jmx/src/main/java/module-info.java
rename to ext/monitoring-jmx/src/main/java11/module-info.java
diff --git a/pom.xml b/pom.xml
index 6deb6035..593e89a1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -117,12 +117,17 @@
1.0.55.0.02.6.7
+ 6.2.5
+ 1.8
+ ${project.basedir}/target11/classes
+ ${project.basedir}/src/main/java11
- 3.11.0
- 3.6.2
+ 3.13.0
+ 3.7.03.2.13.4.0
+ 2.8.0jakarta.websocketorg.glassfish
@@ -171,7 +176,7 @@
maven-assembly-plugin
- 3.6.0
+ 3.7.1maven-source-plugin
@@ -179,7 +184,7 @@
maven-compiler-plugin
- 3.11.0
+ ${maven.compiler.plugin}maven-release-plugin
@@ -314,11 +319,14 @@
Tyrus ${project.version} API DocumentationTyrus ${project.version} API
- https://projects.eclipse.org/projects/ee4j.tyrus
+ https://eclipse-ee4j.github.io/tyrus-project.github.io/apidocs/latest20x/
*.core.l10n.*:*.internal.*:org.glassfish.tyrus.core.wsadl.model
+
+ **/module-info.java
+
@@ -378,8 +386,8 @@
org.apache.maven.pluginsmaven-compiler-plugin
-
- 11
+
+ ${java.version}UTF-8
@@ -592,6 +600,185 @@
+
+
+ sbom
+
+
+ !skipSBOM
+
+
+
+
+
+ org.cyclonedx
+ cyclonedx-maven-plugin
+ ${cyclonedx.mvn.plugin.version}
+ true
+
+
+ package
+
+ makeAggregateBom
+
+
+
+ framework
+ true
+
+
+
+
+
+
+
+
+
+ jdk11+
+
+ [11,)
+ src/main/java11/module-info.java
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+
+
+ add.java11
+ generate-sources
+
+ add-source
+
+
+
+
+
+
+
+
+
+
+ maven-compiler-plugin
+
+
+ 11
+ UTF-8
+
+
+
+ maven-antrun-plugin
+
+
+ test
+
+
+
+
+
+
+
+
+
+ run
+
+
+
+
+
+
+
+
+ clean11
+
+
+
+ maven-clean-plugin
+
+
+
+ ${java11.build.outputDirectory}
+
+
+
+
+
+
+
+
+ copyJDK11FilesToMultiReleaseJar
+
+
+
+ target11/classes/module-info.class
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ true
+
+
+ copy-module-info-source
+ prepare-package
+
+ copy-resources
+
+
+ ${project.build.directory}/generated-sources/rsrc-gen/META-INF/versions/11/
+
+
+ ${java11.sourceDirectory}/
+
+
+
+
+
+ copy-module-info-class
+ prepare-package
+
+ copy-resources
+
+
+ ${project.build.outputDirectory}/META-INF/versions/11
+
+
+ ${java11.build.outputDirectory}
+
+
+
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ 5.1.4
+ true
+
+
+ <_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))
+ <_nodefaultversion>false
+ {maven-resources},${project.build.directory}/legal
+ true
+
+
+
+
+ osgi-bundle
+ package
+
+ bundle
+
+
+
+
+
+
+
@@ -767,7 +954,7 @@
org.glassfish.main.extrasglassfish-embedded-all
- 6.2.1
+ ${glassfish.container.version}jakarta.xml.bind
diff --git a/server/src/main/java/module-info.java b/server/src/main/java11/module-info.java
similarity index 100%
rename from server/src/main/java/module-info.java
rename to server/src/main/java11/module-info.java
diff --git a/spi/src/main/java/module-info.java b/spi/src/main/java11/module-info.java
similarity index 100%
rename from spi/src/main/java/module-info.java
rename to spi/src/main/java11/module-info.java
diff --git a/tests/containers/pom.xml b/tests/containers/pom.xml
index 6e8a59e8..d78f032b 100644
--- a/tests/containers/pom.xml
+++ b/tests/containers/pom.xml
@@ -36,6 +36,14 @@
jdk-client
- servlet
+
+
+ JDK11+
+ [11,)
+
+ servlet
+
+
+
diff --git a/tests/containers/servlet/pom.xml b/tests/containers/servlet/pom.xml
index ab3aa4f0..b3ea006e 100644
--- a/tests/containers/servlet/pom.xml
+++ b/tests/containers/servlet/pom.xml
@@ -47,4 +47,16 @@
test
+
+
+
+ maven-compiler-plugin
+
+
+ 11
+ UTF-8
+
+
+
+
diff --git a/tests/e2e/application-config/src/test/java/module-info.java b/tests/e2e/application-config/src/test/java11/module-info.java
similarity index 100%
rename from tests/e2e/application-config/src/test/java/module-info.java
rename to tests/e2e/application-config/src/test/java11/module-info.java
diff --git a/tests/e2e/jdk8/src/test/java/module-info.java b/tests/e2e/jdk8/src/test/java11/module-info.java
similarity index 100%
rename from tests/e2e/jdk8/src/test/java/module-info.java
rename to tests/e2e/jdk8/src/test/java11/module-info.java
diff --git a/tests/e2e/standard-config/src/test/java/module-info.java b/tests/e2e/standard-config/src/test/java11/module-info.java
similarity index 100%
rename from tests/e2e/standard-config/src/test/java/module-info.java
rename to tests/e2e/standard-config/src/test/java11/module-info.java
diff --git a/tests/release-test/src/test/java/org/glassfish/tyrus/test/artifacts/MultiReleaseTest.java b/tests/release-test/src/test/java/org/glassfish/tyrus/test/artifacts/MultiReleaseTest.java
new file mode 100644
index 00000000..0586f1bc
--- /dev/null
+++ b/tests/release-test/src/test/java/org/glassfish/tyrus/test/artifacts/MultiReleaseTest.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+package org.glassfish.tyrus.test.artifacts;
+
+import org.apache.maven.model.Dependency;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.Optional;
+import java.util.Properties;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import java.util.zip.ZipEntry;
+
+public class MultiReleaseTest {
+ private static final String s = "";
+ private static final File localRepository = MavenUtil.getLocalMavenRepository();
+ private static final Properties properties = MavenUtil.getMavenProperties();
+
+ @Test
+ public void testIsJdkMultiRelease() throws IOException, XmlPullParserException {
+ TestResult result = testJdkVersions("11", jdk11multiRelease(properties));
+ //Assertions.assertTrue(result.result(), "Some error occurred, see previous messages");
+ Assert.assertTrue("Some error occurred, see previous messages", result.result());
+ }
+
+ private static TestResult testJdkVersions(String version, DependencyPair... dependencies)
+ throws XmlPullParserException, IOException {
+ final TestResult result = new TestResult();
+ if (dependencies == null || dependencies.length == 0) {
+ System.out.append("No dependencies found for jdk ").println(version);
+ return result;
+ }
+
+ Stream deps = MavenUtil.streamTyrusJars();
+ List files = MavenUtil.keepTyrusJars(deps, dependencies)
+ .map(dependency -> MavenUtil.getArtifactJar(localRepository, dependency, properties))
+ .collect(Collectors.toList());
+
+ //Assertions.assertEquals(dependencies.length, files.size(), "Some jdk " + version + " dependencies not found");
+ if (dependencies.length != files.size()) {
+ System.out.println("Expected:");
+ for (DependencyPair pair : dependencies) {
+ System.out.println(pair);
+ }
+ System.out.println("Resolved:");
+ for (File file : files) {
+ System.out.println(file.getName());
+ }
+ Assert.assertEquals("Some jdk " + version + " dependencies not found", dependencies.length, files.size());
+ }
+
+ for (File jar : files) {
+ JarFile jarFile = new JarFile(jar);
+ if (!jarFile.isMultiRelease()) {
+ result.exception().append("Not a multirelease jar ").append(jar.getName()).println("!");
+ }
+ ZipEntry versions = jarFile.getEntry("META-INF/versions/" + version);
+ System.out.append("Accessing META-INF/versions/").append(version).append(" of ").println(jar.getName());
+ if (versions == null) {
+ result.exception().append("No classes for JDK ").append(version).append(" for ").println(jar.getName());
+ }
+ result.ok().append("Classes for JDK ").append(version).append(" found for ").println(jar.getName());
+
+ Optional file = jarFile.stream()
+ .filter(entry -> !entry.isDirectory())
+ .filter(entry -> !entry.getName().contains("versions"))
+ .filter(entry -> entry.getName().endsWith(".class"))
+ .findAny();
+ JarEntry jarEntry = file.get();
+ result.append(ClassVersionChecker.checkClassVersion(jarFile, jarEntry, properties));
+ }
+
+ // Verify that number of multirelease jars matches the expected dependencies
+ StringBuilder multi = new StringBuilder();
+ int multiCnt = 0;
+ List allFiles = MavenUtil.streamTyrusJars()
+ .map(dependency -> MavenUtil.getArtifactJar(localRepository, dependency, properties))
+ .collect(Collectors.toList());
+ for (File jar : files) {
+ JarFile jarFile = new JarFile(jar);
+ if (jarFile.isMultiRelease()) {
+ multiCnt++;
+ multi.append("Multirelease jar ").append(jar.getName()).append('\n');
+ }
+ }
+ if (files.size() == multiCnt) {
+ result.ok().println("There is expected number of multirelease jars");
+ } else {
+ result.exception().println("There is unexpected number of multirelease jars:");
+ result.exception().append(multi).println("");
+ }
+
+ return result;
+ }
+
+ private static DependencyPair[] jdk11multiRelease(Properties properties) throws XmlPullParserException, IOException {
+ String tyrusVersion = MavenUtil.getTyrusVersion(properties);
+ if (tyrusVersion.startsWith("2.0")) {
+ return MavenUtil.streamTyrusJars()
+ .map(d -> new DependencyPair(d.getGroupId(), d.getArtifactId()))
+ .collect(Collectors.toList())
+ .toArray(new DependencyPair[0]);
+ }
+ return new DependencyPair[]{};
+ }
+
+}
diff --git a/tests/servlet/embedded-glassfish-test/pom.xml b/tests/servlet/embedded-glassfish-test/pom.xml
index dbe676ae..6cb34263 100644
--- a/tests/servlet/embedded-glassfish-test/pom.xml
+++ b/tests/servlet/embedded-glassfish-test/pom.xml
@@ -31,7 +31,7 @@
Tyrus Servlet Tests on Glassfish
- 6.2.1
+ 6.2.55.7.2
@@ -279,10 +279,9 @@
- org.apache.maven.pluginsmaven-compiler-plugin
- 11
+ 11
diff --git a/tests/servlet/pom.xml b/tests/servlet/pom.xml
index e6743bd2..a06adc14 100755
--- a/tests/servlet/pom.xml
+++ b/tests/servlet/pom.xml
@@ -34,7 +34,6 @@
asyncautobahn-serverbasic
- embedded-glassfish-testdynamic-deploynoappconfigoneappconfig
@@ -48,6 +47,13 @@
debug
-
-
+
+
+ JDK11+
+ [11,18)
+
+ embedded-glassfish-test
+
+
+
diff --git a/tests/tools/src/main/java/module-info.java b/tests/tools/src/main/java11/module-info.java
similarity index 100%
rename from tests/tools/src/main/java/module-info.java
rename to tests/tools/src/main/java11/module-info.java