Merge pull request #1225 from jamezp/update-master

fast track: Update main with missing commits
diff --git a/.github/workflows/maven-package.yml b/.github/workflows/maven-package.yml
index 280c93a..c283960 100644
--- a/.github/workflows/maven-package.yml
+++ b/.github/workflows/maven-package.yml
@@ -3,9 +3,9 @@
 
 on:
   push:
-    branches: [ master, 4.0-SNAPSHOT ]
+    branches: [ main ]
   pull_request:
-    branches: [ master, 4.0-SNAPSHOT ]
+    branches: [ main ]
 
 jobs:
   build:
@@ -13,14 +13,14 @@
     runs-on: ubuntu-latest
     strategy:
       matrix:
-        java: [ '11', '17' ]
+        java: ['17', '21' ]
 
     steps:
-    - uses: actions/checkout@v2
+    - uses: actions/checkout@v4
     - name: Set up JDK ${{ matrix.java }}
-      uses: actions/setup-java@v2
+      uses: actions/setup-java@v4
       with:
         java-version: ${{ matrix.java }}
         distribution: 'temurin'
     - name: Build with Maven
-      run: mvn -B verify
+      run: mvn -B -ntp clean verify -Djaxrs.all.build
diff --git a/etc/config/checkstyle.xml b/etc/config/checkstyle.xml
index 254bc1b..2c3f6c8 100644
--- a/etc/config/checkstyle.xml
+++ b/etc/config/checkstyle.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
 
-    Copyright (c) 2011, 2017 Oracle and/or its affiliates. All rights reserved.
+    Copyright (c) 2011, 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
@@ -92,7 +92,6 @@
         <!-- See http://checkstyle.sf.net/config_javadoc.html -->
 
         <module name="JavadocMethod">
-            <property name="accessModifiers" value="protected"/>
             <property name="validateThrows" value="false"/>
         </module>
 
diff --git a/examples/pom.xml b/examples/pom.xml
index 62d5e26..1939e03 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
 
-    Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
+    Copyright (c) 2011, 2024 Oracle and/or its affiliates. All rights reserved.
 
     This program and the accompanying materials are made available under the
     terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -22,198 +22,14 @@
     <parent>
         <groupId>jakarta.ws.rs</groupId>
         <artifactId>all</artifactId>
-        <version>3.1.0</version>
+        <version>4.0.0-SNAPSHOT</version>
     </parent>
 
-    <url>https://github.com/jax-rs/api</url>
-
     <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <maven.compiler.release>11</maven.compiler.release>
-        <microprofile.config.version>3.0-RC1</microprofile.config.version>
+        <microprofile.config.version>3.0.3</microprofile.config.version>
     </properties>
 
-    <organization>
-        <name>Eclipse Foundation</name>
-        <url>https://www.eclipse.org/org/foundation/</url>
-    </organization>
-
-    <issueManagement>
-        <system>Github</system>
-        <url>https://github.com/jax-rs/api/issues</url>
-    </issueManagement>
-
-    <mailingLists>
-        <mailingList>
-            <name>JAX-RS Discussion Group </name>
-            <archive>jaxrs-spec@javaee.groups.io</archive>
-        </mailingList>
-    </mailingLists>
-
-    <licenses>
-        <license>
-            <name>EDL 1.0</name>
-            <url>http://www.eclipse.org/org/documents/edl-v10.php</url>
-            <distribution>repo</distribution>
-        </license>
-    </licenses>
-
-    <scm>
-        <connection>scm:git:https://github.com/jax-rs/api.git</connection>
-        <developerConnection>scm:git:ssh://git@github.com:jax-rs/api.git</developerConnection>
-        <url>https://github.com/jax-rs/api</url>
-    </scm>
-
-    <developers>
-        <developer>
-            <id>developers</id>
-            <name>JAX-RS API Developers</name>
-            <email>jaxrs-dev@eclipse.org</email>
-            <url>https://github.com/jakartaee/rest/graphs/contributors</url>
-        </developer>
-    </developers>
-
     <build>
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <artifactId>maven-compiler-plugin</artifactId>
-                    <version>3.8.1</version>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-jar-plugin</artifactId>
-                    <version>3.2.0</version>
-                </plugin>
-                <plugin>
-                    <!-- This plugin generates the buildNumber property used in maven-bundle-plugin -->
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>buildnumber-maven-plugin</artifactId>
-                    <version>1.4</version>
-                    <configuration>
-                        <format>{0,date,MM/dd/yyyy hh:mm aa}</format>
-                        <items>
-                            <item>timestamp</item>
-                        </items>
-                    </configuration>
-                    <executions>
-                        <execution>
-                            <phase>validate</phase>
-                            <goals>
-                                <goal>create</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-javadoc-plugin</artifactId>
-                    <version>3.3.0</version>
-                    <configuration>
-                        <doctitle>JAX-RS ${project.version} API Specification</doctitle>
-                        <bottom>
-                            <![CDATA[Copyright &#169; 1996-2014,
-                                <a href="http://www.oracle.com">Oracle</a>
-                                and/or its affiliates. All Rights Reserved.
-                            ]]>
-                        </bottom>
-                        <!--javaApiLinks>
-                            <property>
-                                <name>api_1.3</name>
-                                <value>http://download.oracle.com/javase/1.3/docs/api/</value>
-                            </property>
-                            <property>
-                                <name>api_1.4</name>
-                                <value>http://download.oracle.com/javase/1.4.2/docs/api/</value>
-                            </property>
-                            <property>
-                                <name>api_1.5</name>
-                                <value>http://download.oracle.com/javase/1.5.0/docs/api/</value>
-                            </property>
-                            <property>
-                                <name>api_1.6</name>
-                                <value>http://download.oracle.com/javase/6/docs/api/</value>
-                            </property>
-                        </javaApiLinks-->
-                    </configuration>
-                    <executions>
-                        <execution>
-                            <id>attach-javadocs</id>
-                            <goals>
-                                <goal>jar</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-source-plugin</artifactId>
-                    <version>3.2.1</version>
-                    <executions>
-                        <execution>
-                            <id>attach-sources</id>
-                            <goals>
-                                <goal>jar-no-fork</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-jxr-plugin</artifactId>
-                    <version>3.1.1</version>
-                    <executions>
-                        <execution>
-                            <goals>
-                                <goal>jxr</goal>
-                            </goals>
-                            <phase>validate</phase>
-                        </execution>
-                    </executions>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-checkstyle-plugin</artifactId>
-                    <version>3.1.2</version>
-                    <configuration>
-                        <outputDirectory>${project.build.directory}/checkstyle</outputDirectory>
-                        <outputFile>${project.build.directory}/checkstyle/checkstyle-result.xml</outputFile>
-                        <configLocation>${basedir}/../etc/config/checkstyle.xml</configLocation>
-                        <failsOnError>true</failsOnError>
-                    </configuration>
-                    <dependencies>
-                        <dependency>
-                            <groupId>com.puppycrawl.tools</groupId>
-                            <artifactId>checkstyle</artifactId>
-                            <version>8.44</version>
-                        </dependency>
-                    </dependencies>
-                    <executions>
-                        <execution>
-                            <goals>
-                                <goal>checkstyle</goal>
-                            </goals>
-                            <phase>validate</phase>
-                        </execution>
-                    </executions>
-                </plugin>
-                <plugin>
-                    <groupId>org.glassfish.copyright</groupId>
-                    <artifactId>glassfish-copyright-maven-plugin</artifactId>
-                    <version>1.39</version>
-                    <configuration>
-                        <excludeFile>${basedir}/../etc/config/copyright-exclude</excludeFile>
-                        <!--svn|mercurial|git - defaults to svn-->
-                        <scm>git</scm>
-                        <!-- turn on/off debugging -->
-                        <debug>false</debug>
-                        <!-- skip files not under SCM-->
-                        <scmOnly>true</scmOnly>
-                        <!-- turn off warnings -->
-                        <warn>true</warn>
-                        <!-- for use with repair -->
-                        <update>false</update>
-                        <!-- check that year is correct -->
-                        <ignoreYear>false</ignoreYear>
-                    </configuration>
-                </plugin>
-            </plugins>
-        </pluginManagement>
         <plugins>
             <plugin>
                 <artifactId>maven-compiler-plugin</artifactId>
@@ -249,33 +65,18 @@
         </dependency>
 
         <dependency>
-            <groupId>jakarta.xml.bind</groupId>
-            <artifactId>jakarta.xml.bind-api</artifactId>
-            <version>3.0.1</version>
-        </dependency>
-
-        <dependency>
             <groupId>jakarta.enterprise</groupId>
             <artifactId>jakarta.enterprise.cdi-api</artifactId>
-            <version>3.0.0</version>
         </dependency>
 
         <dependency>
             <groupId>jakarta.enterprise.concurrent</groupId>
             <artifactId>jakarta.enterprise.concurrent-api</artifactId>
-            <version>2.0.0</version>
-        </dependency>
-
-        <dependency>
-            <groupId>jakarta.ejb</groupId>
-            <artifactId>jakarta.ejb-api</artifactId>
-            <version>4.0.0</version>
         </dependency>
 
         <dependency>
             <groupId>jakarta.validation</groupId>
             <artifactId>jakarta.validation-api</artifactId>
-            <version>3.0.0</version>
         </dependency>
 
         <dependency>
diff --git a/examples/src/main/java/jaxrs/examples/async/LongRunningEjbResource.java b/examples/src/main/java/jaxrs/examples/async/LongRunningEjbResource.java
deleted file mode 100644
index 02a9f35..0000000
--- a/examples/src/main/java/jaxrs/examples/async/LongRunningEjbResource.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0, which is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-package jaxrs.examples.async;
-
-import jakarta.ejb.Asynchronous;
-import jakarta.ejb.Stateless;
-import jakarta.ws.rs.GET;
-import jakarta.ws.rs.Path;
-import jakarta.ws.rs.container.AsyncResponse;
-import jakarta.ws.rs.container.Suspended;
-
-/**
- * Example of a long running EJB resource.
- *
- * @author Marek Potociar
- */
-@Stateless
-@Path("/")
-public class LongRunningEjbResource {
-    @GET
-    @Asynchronous
-    public void longRunningOperation(@Suspended AsyncResponse ar) {
-        final String result = executeLongRunningOperation();
-        ar.resume(result);
-    }
-
-    private String executeLongRunningOperation() {
-        try {
-            Thread.sleep(10000);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-        return "done";
-    }
-}
diff --git a/examples/src/main/java/jaxrs/examples/client/BasicExamples.java b/examples/src/main/java/jaxrs/examples/client/BasicExamples.java
index 2ee485e..1ac6082 100644
--- a/examples/src/main/java/jaxrs/examples/client/BasicExamples.java
+++ b/examples/src/main/java/jaxrs/examples/client/BasicExamples.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2024 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -41,7 +41,6 @@
 import jakarta.ws.rs.ext.ReaderInterceptorContext;
 import jakarta.ws.rs.ext.WriterInterceptor;
 import jakarta.ws.rs.ext.WriterInterceptorContext;
-import jakarta.xml.bind.annotation.XmlRootElement;
 import jaxrs.examples.client.custom.ThrottledClient;
 
 import static jakarta.ws.rs.client.Entity.form;
@@ -59,7 +58,6 @@
     /**
      * Customer bean.
      */
-    @XmlRootElement
     public static class Customer {
 
         private final String name;
diff --git a/examples/src/main/java/jaxrs/examples/client/spec/SpecExamples.java b/examples/src/main/java/jaxrs/examples/client/spec/SpecExamples.java
index bf79a37..a98cea3 100644
--- a/examples/src/main/java/jaxrs/examples/client/spec/SpecExamples.java
+++ b/examples/src/main/java/jaxrs/examples/client/spec/SpecExamples.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2024 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -21,7 +21,6 @@
 import jakarta.ws.rs.core.Response;
 import static jakarta.ws.rs.client.Entity.entity;
 
-import jakarta.xml.bind.annotation.XmlRootElement;
 import jaxrs.examples.client.custom.ThrottledClient;
 
 /**
@@ -33,7 +32,6 @@
     /**
      * Customer bean.
      */
-    @XmlRootElement
     public static class Customer {
 
         private final String name;
diff --git a/examples/src/main/java/jaxrs/examples/link/clusterservice/Cluster.java b/examples/src/main/java/jaxrs/examples/link/clusterservice/Cluster.java
index cba1196..d2f0835 100644
--- a/examples/src/main/java/jaxrs/examples/link/clusterservice/Cluster.java
+++ b/examples/src/main/java/jaxrs/examples/link/clusterservice/Cluster.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2024 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -13,14 +13,11 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import jakarta.xml.bind.annotation.XmlRootElement;
-
 /**
  * Cluster class.
  *
  * @author Santiago.Pericas-Geertsen@oracle.com
  */
-@XmlRootElement
 public class Cluster {
 
     enum Status {
diff --git a/examples/src/main/java/jaxrs/examples/link/clusterservice/Machine.java b/examples/src/main/java/jaxrs/examples/link/clusterservice/Machine.java
index 12b5a57..4ea9414 100644
--- a/examples/src/main/java/jaxrs/examples/link/clusterservice/Machine.java
+++ b/examples/src/main/java/jaxrs/examples/link/clusterservice/Machine.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2024 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -10,14 +10,11 @@
 
 package jaxrs.examples.link.clusterservice;
 
-import jakarta.xml.bind.annotation.XmlRootElement;
-
 /**
  * Machine class.
  *
  * @author Santiago.Pericas-Geertsen@oracle.com
  */
-@XmlRootElement
 public class Machine {
 
     enum Status {
diff --git a/jaxrs-api/pom.xml b/jaxrs-api/pom.xml
index af83d85..ac9d90c 100644
--- a/jaxrs-api/pom.xml
+++ b/jaxrs-api/pom.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
 
-    Copyright (c) 2011, 2022 Oracle and/or its affiliates. All rights reserved.
+    Copyright (c) 2011, 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
@@ -28,282 +28,11 @@
     <parent>
         <groupId>jakarta.ws.rs</groupId>
         <artifactId>all</artifactId>
-        <version>3.1.0</version>
+        <version>4.0.0-SNAPSHOT</version>
     </parent>
 
-    <url>https://github.com/jakartaee/rest</url>
-
-    <organization>
-        <name>Eclipse Foundation</name>
-        <url>https://www.eclipse.org/org/foundation/</url>
-    </organization>
-
-    <developers>
-        <developer>
-            <id>developers</id>
-            <name>JAX-RS API Developers</name>
-            <email>jaxrs-dev@eclipse.org</email>
-            <url>https://github.com/jakartaee/rest/graphs/contributors</url>
-        </developer>
-    </developers>
-
-    <issueManagement>
-        <system>Github</system>
-        <url>https://github.com/jakartaee/rest/issues</url>
-    </issueManagement>
-
-    <mailingLists>
-        <mailingList>
-            <name>JAX-RS Developer Discussions</name>
-            <archive>jaxrs-dev@eclipse.org</archive>
-        </mailingList>
-    </mailingLists>
-
-    <licenses>
-        <license>
-            <name>EPL-2.0</name>
-            <url>http://www.eclipse.org/legal/epl-2.0</url>
-            <distribution>repo</distribution>
-        </license>
-        <license>
-            <name>GPL-2.0-with-classpath-exception</name>
-            <url>https://www.gnu.org/software/classpath/license.html</url>
-            <distribution>repo</distribution>
-        </license>
-    </licenses>
-
-    <scm>
-        <connection>scm:git:https://github.com/jakartaee/rest</connection>
-        <url>https://github.com/jakartaee/rest</url>
-        <tag>HEAD</tag>
-    </scm>
-
-    <profiles>
-        <profile>
-            <!-- Use it with release-perform goal to skip another test run. -->
-            <id>skip-tests</id>
-            <activation>
-                <activeByDefault>false</activeByDefault>
-            </activation>
-            <properties>
-                <skip.release.tests>true</skip.release.tests>
-            </properties>
-        </profile>
-    </profiles>
-
     <build>
         <finalName>${project.artifactId}</finalName>
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <artifactId>maven-jar-plugin</artifactId>
-                    <version>3.2.0</version>
-                </plugin>
-                <plugin>
-                    <!-- This plugin generates the buildNumber property used in maven-bundle-plugin -->
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>buildnumber-maven-plugin</artifactId>
-                    <version>1.4</version>
-                    <configuration>
-                        <format>{0,date,MM/dd/yyyy hh:mm aa}</format>
-                        <items>
-                            <item>timestamp</item>
-                        </items>
-                    </configuration>
-                    <executions>
-                        <execution>
-                            <phase>validate</phase>
-                            <goals>
-                                <goal>create</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.felix</groupId>
-                    <artifactId>maven-bundle-plugin</artifactId>
-                    <version>${maven.bundle.plugin.version}</version>
-                    <extensions>true</extensions>
-                    <configuration>
-                        <instructions>
-                            <_failok>true</_failok>
-                            <Build-Id>${buildNumber}</Build-Id>
-                            <Bundle-Description>Jakarta RESTful Web Services API (JAX-RS)</Bundle-Description>
-                            <Bundle-Version>${project.version}</Bundle-Version>
-                            <Bundle-SymbolicName>jakarta.ws.rs-api</Bundle-SymbolicName>
-                            <DynamicImport-Package>*</DynamicImport-Package>
-                            <Extension-Name>${api.package}</Extension-Name>
-                            <Implementation-Version>${project.version}</Implementation-Version>
-                            <Specification-Version>${spec.version}</Specification-Version>
-                            <Specification-Vendor>Eclipse Foundation</Specification-Vendor>
-                            <specversion>${spec.version}</specversion>
-                            <_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>
-                            <_nodefaultversion>false</_nodefaultversion>
-                            <Require-Capability>osgi.ee;filter:="(&amp;(osgi.ee=JavaSE)(version=1.8))"</Require-Capability>
-                        </instructions>
-                    </configuration>
-                    <executions>
-                        <execution>
-                            <id>osgi-bundle</id>
-                            <phase>package</phase>
-                            <goals>
-                                <goal>bundle</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-javadoc-plugin</artifactId>
-                    <version>${maven.javadoc.plugin.version}</version>
-                    <configuration>
-                        <source>8</source>
-                        <doctitle>${apidocs.title}</doctitle>
-                        <docfilessubdirs>true</docfilessubdirs>
-                        <bottom>
-                            <![CDATA[<p align="left">Copyright &#169; 2018, 2020 Eclipse Foundation.<br>Use is subject to <a href="{@docRoot}/resources/EFSL.html" target="_top">license terms</a>.]]>
-                        </bottom>
-                        <docfilessubdirs>true</docfilessubdirs>
-                        <!--javaApiLinks>
-                            <property>
-                                <name>api_1.3</name>
-                                <value>http://download.oracle.com/javase/1.3/docs/api/</value>
-                            </property>
-                            <property>
-                                <name>api_1.4</name>
-                                <value>http://download.oracle.com/javase/1.4.2/docs/api/</value>
-                            </property>
-                            <property>
-                                <name>api_1.5</name>
-                                <value>http://download.oracle.com/javase/1.5.0/docs/api/</value>
-                            </property>
-                            <property>
-                                <name>api_1.6</name>
-                                <value>http://download.oracle.com/javase/6/docs/api/</value>
-                            </property>
-                        </javaApiLinks-->
-                        <sourceFileExcludes>
-                            <fileExclude>module-info.java</fileExclude>
-                        </sourceFileExcludes>
-                    </configuration>
-                    <executions>
-                        <execution>
-                            <id>attach-javadocs</id>
-                            <goals>
-                                <goal>jar</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-source-plugin</artifactId>
-                    <version>3.2.1</version>
-                    <executions>
-                        <execution>
-                            <id>attach-sources</id>
-                            <goals>
-                                <goal>jar-no-fork</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                </plugin>
-                <plugin>
-                    <!-- Adding files to jar-->
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>build-helper-maven-plugin</artifactId>
-                    <version>3.2.0</version>
-                    <executions>
-                        <execution>
-                            <id>add-legal-resource</id>
-                            <phase>generate-resources</phase>
-                            <goals>
-                                <goal>add-resource</goal>
-                            </goals>
-                            <configuration>
-                                <resources>
-                                    <resource>
-                                        <directory>${legal.doc.folder}</directory>
-                                        <includes>
-                                            <include>NOTICE.md</include>
-                                            <include>LICENSE.md</include>
-                                        </includes>
-                                        <targetPath>META-INF</targetPath>
-                                    </resource>
-                                </resources>
-                            </configuration>
-                        </execution>
-                    </executions>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-jxr-plugin</artifactId>
-                    <version>3.1.1</version>
-                    <executions>
-                        <execution>
-                            <goals>
-                                <goal>jxr</goal>
-                            </goals>
-                            <phase>validate</phase>
-                        </execution>
-                    </executions>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-checkstyle-plugin</artifactId>
-                    <version>3.1.2</version>
-                    <configuration>
-                        <outputDirectory>${project.build.directory}/checkstyle</outputDirectory>
-                        <outputFile>${project.build.directory}/checkstyle/checkstyle-result.xml</outputFile>
-                        <configLocation>${basedir}/../etc/config/checkstyle.xml</configLocation>
-                        <excludes>**/module-info.java</excludes>
-                        <failsOnError>true</failsOnError>
-                    </configuration>
-                    <dependencies>
-                        <dependency>
-                            <groupId>com.puppycrawl.tools</groupId>
-                            <artifactId>checkstyle</artifactId>
-                            <version>8.44</version>
-                        </dependency>
-                    </dependencies>
-                    <executions>
-                        <execution>
-                            <goals>
-                                <goal>checkstyle</goal>
-                            </goals>
-                            <phase>validate</phase>
-                        </execution>
-                    </executions>
-                </plugin>
-                <plugin>
-                    <groupId>org.glassfish.copyright</groupId>
-                    <artifactId>glassfish-copyright-maven-plugin</artifactId>
-                    <version>1.39</version>
-                    <configuration>
-                        <excludeFile>${basedir}/../etc/config/copyright-exclude</excludeFile>
-                        <!--svn|mercurial|git - defaults to svn-->
-                        <scm>git</scm>
-                        <!-- turn on/off debugging -->
-                        <debug>false</debug>
-                        <!-- skip files not under SCM-->
-                        <scmOnly>true</scmOnly>
-                        <!-- turn off warnings -->
-                        <warn>true</warn>
-                        <!-- for use with repair -->
-                        <update>false</update>
-                        <!-- check that year is correct -->
-                        <ignoreYear>false</ignoreYear>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-surefire-plugin</artifactId>
-                    <version>${maven.surefire.plugin.version}</version>
-                    <configuration>
-                        <argLine>--add-modules jakarta.xml.bind</argLine>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-compiler-plugin</artifactId>
-                    <version>${maven.compiler.plugin.version}</version>
-                </plugin>
-            </plugins>
-        </pluginManagement>
         <plugins>
             <plugin>
                 <groupId>org.apache.felix</groupId>
@@ -332,6 +61,15 @@
                 <artifactId>maven-checkstyle-plugin</artifactId>
             </plugin>
             <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <systemPropertyVariables>
+                        <!-- Workaround for https://github.com/mockito/mockito/issues/3121 -->
+                        <net.bytebuddy.experimental>true</net.bytebuddy.experimental>
+                    </systemPropertyVariables>
+                </configuration>
+            </plugin>
+            <plugin>
                 <groupId>org.glassfish.copyright</groupId>
                 <artifactId>glassfish-copyright-maven-plugin</artifactId>
             </plugin>
@@ -344,64 +82,95 @@
 
     <dependencies>
         <dependency>
-            <groupId>jakarta.xml.bind</groupId>
-            <artifactId>jakarta.xml.bind-api</artifactId>
-            <version>${jaxb.api.version}</version>
-            <scope>provided</scope>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
             <groupId>jakarta.activation</groupId>
             <artifactId>jakarta.activation-api</artifactId>
-            <version>${activation.api.version}</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.glassfish.jaxb</groupId>
-            <artifactId>jaxb-runtime</artifactId>
-            <version>${jaxb.impl.version}</version>
-            <scope>test</scope>
+            <groupId>jakarta.inject</groupId>
+            <artifactId>jakarta.inject-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>jakarta.enterprise</groupId>
+            <artifactId>jakarta.enterprise.cdi-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>jakarta.xml.bind</groupId>
+            <artifactId>jakarta.xml.bind-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.junit.jupiter</groupId>
             <artifactId>junit-jupiter-api</artifactId>
-            <version>5.8.0-M1</version>
+            <scope>test</scope>
+        </dependency>
+        <!-- JAXB Implementation -->
+        <dependency>
+            <groupId>org.glassfish.jaxb</groupId>
+            <artifactId>codemodel</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.glassfish.jaxb</groupId>
+            <artifactId>jaxb-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jaxb</groupId>
+            <artifactId>jaxb-jxc</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jaxb</groupId>
+            <artifactId>jaxb-runtime</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jaxb</groupId>
+            <artifactId>txw2</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jaxb</groupId>
+            <artifactId>jaxb-xjc</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jaxb</groupId>
+            <artifactId>xsom</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.sun.istack</groupId>
+            <artifactId>istack-commons-runtime</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.istack</groupId>
+            <artifactId>istack-commons-tools</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.xml.bind.external</groupId>
+            <artifactId>relaxng-datatype</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.xml.bind.external</groupId>
+            <artifactId>rngom</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <!-- End JAXB Implementation -->
+        <dependency>
             <groupId>org.hamcrest</groupId>
             <artifactId>hamcrest</artifactId>
-            <version>2.2</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-core</artifactId>
-            <version>3.11.1</version>
             <scope>test</scope>
         </dependency>
     </dependencies>
 
-    <properties>
-        <apidocs.title>Jakarta RESTful Web Services ${spec.version} API Specification ${spec.version.revision}</apidocs.title>
-        <java.version>11</java.version>
-
-        <maven.bundle.plugin.version>5.1.2</maven.bundle.plugin.version>
-        <maven.compiler.plugin.version>3.10.1</maven.compiler.plugin.version>
-        <maven.compiler.release>${java.version}</maven.compiler.release>
-        <maven.javadoc.plugin.version>3.3.0</maven.javadoc.plugin.version>
-        <maven.surefire.plugin.version>3.0.0-M7</maven.surefire.plugin.version>
-
-        <api.package>jakarta.ws.rs</api.package>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <skip.release.tests>false</skip.release.tests>
-        <spec.version>3.1</spec.version>
-        <spec.version.revision /> <!-- e.g. (Rev a) -->
-
-        <jaxb.api.version>4.0.0</jaxb.api.version>
-        <jaxb.impl.version>4.0.0</jaxb.impl.version>
-        <activation.api.version>2.1.0</activation.api.version>
-        <legal.doc.folder>${project.basedir}/..</legal.doc.folder>
-    </properties>
-
 </project>
diff --git a/jaxrs-spec/README.md b/jaxrs-spec/README.md
index 6dccecc..6699c1e 100644
--- a/jaxrs-spec/README.md
+++ b/jaxrs-spec/README.md
@@ -8,7 +8,7 @@
 
 Prerequisites:
 
-* JDK 11+
+* JDK 17+
 * Maven 3.6.3+
 
 Run the full build:
diff --git a/jaxrs-spec/pom.xml b/jaxrs-spec/pom.xml
index 7395c62..907f42d 100644
--- a/jaxrs-spec/pom.xml
+++ b/jaxrs-spec/pom.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
 
-    Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
+    Copyright (c) 2017, 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
@@ -27,13 +27,12 @@
     <parent>
         <groupId>jakarta.ws.rs</groupId>
         <artifactId>all</artifactId>
-        <version>3.1.0</version>
+        <version>4.0.0-SNAPSHOT</version>
     </parent>
 
     <properties>
         <site.output.dir>${project.build.directory}/staging</site.output.dir>
         <maven.site.skip>true</maven.site.skip>
-        <asciidoctor.maven.plugin.version>2.1.0</asciidoctor.maven.plugin.version>
         <asciidoctorj.version>2.5.1</asciidoctorj.version>
         <asciidoctorj.pdf.version>1.6.0</asciidoctorj.pdf.version>
         <jruby.version>9.2.19.0</jruby.version>
@@ -44,25 +43,12 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
 
-    <scm>
-        <connection>scm:git:https://github.com/jakartaee/rest</connection>
-        <url>https://github.com/jakartaee/rest</url>
-        <tag>HEAD</tag>
-    </scm>
-
-    <distributionManagement>
-        <site>
-            <url>scm:git:https://github.com/jakartaee/rest</url>
-        </site>
-    </distributionManagement>
-
     <build>
         <defaultGoal>package</defaultGoal>
         <plugins>
             <plugin>
                 <groupId>org.asciidoctor</groupId>
                 <artifactId>asciidoctor-maven-plugin</artifactId>
-                <version>${asciidoctor.maven.plugin.version}</version>
                 <dependencies>
                     <dependency>
                         <groupId>org.jruby</groupId>
diff --git a/jaxrs-spec/src/main/asciidoc/chapters/appendix/_change-log.adoc b/jaxrs-spec/src/main/asciidoc/chapters/appendix/_change-log.adoc
index 75871f4..716a214 100644
--- a/jaxrs-spec/src/main/asciidoc/chapters/appendix/_change-log.adoc
+++ b/jaxrs-spec/src/main/asciidoc/chapters/appendix/_change-log.adoc
@@ -1,6 +1,6 @@
 ////
 *******************************************************************
-* Copyright (c) 2019 Eclipse Foundation
+* Copyright (c) 2019, 2024 Eclipse Foundation
 *
 * This specification document is made available under the terms
 * of the Eclipse Foundation Specification License v1.0, which is
@@ -12,6 +12,8 @@
 [[change-log]]
 == Change Log
 
+include::_changes-since-3.1-release.adoc[]
+
 include::_changes-since-3.0-release.adoc[]
 
 include::_changes-since-2.1-release.adoc[]
diff --git a/jaxrs-spec/src/main/asciidoc/chapters/appendix/_changes-since-3.1-release.adoc b/jaxrs-spec/src/main/asciidoc/chapters/appendix/_changes-since-3.1-release.adoc
new file mode 100644
index 0000000..d0e644e
--- /dev/null
+++ b/jaxrs-spec/src/main/asciidoc/chapters/appendix/_changes-since-3.1-release.adoc
@@ -0,0 +1,15 @@
+////
+*******************************************************************
+* Copyright (c) 2024 Eclipse Foundation
+*
+* This specification document is made available under the terms
+* of the Eclipse Foundation Specification License v1.0, which is
+* available at https://www.eclipse.org/legal/efsl.php.
+*******************************************************************
+////
+
+[[changes-since-3.1-release]]
+=== Changes Since 3.1 Release
+
+* <<javaee>>: Removal of `@ManagedBean`
+annotation support.  Managed bean support is now part of CDI.
\ No newline at end of file
diff --git a/jaxrs-spec/src/main/asciidoc/chapters/environment/_javaee.adoc b/jaxrs-spec/src/main/asciidoc/chapters/environment/_javaee.adoc
index 3c8992d..cb76746 100644
--- a/jaxrs-spec/src/main/asciidoc/chapters/environment/_javaee.adoc
+++ b/jaxrs-spec/src/main/asciidoc/chapters/environment/_javaee.adoc
@@ -1,6 +1,6 @@
 ////
 *******************************************************************
-* Copyright (c) 2019, 2020 Eclipse Foundation
+* Copyright (c) 2019, 2024 Eclipse Foundation
 *
 * This specification document is made available under the terms
 * of the Eclipse Foundation Specification License v1.0, which is
@@ -37,43 +37,6 @@
 server-side features or injected into server-side JAX-RS components. See
 Javadoc for `Application.getProperties` for more information.
 
-[[managed_beans]]
-==== Managed Beans
-
-In a product that supports Managed Beans, implementations MUST support
-the use of Managed Beans as root resource classes, providers and
-`Application` subclasses.
-
-For example, a bean that uses a managed-bean interceptor can be defined
-as a JAX-RS resource as follows:
-
-[source,java]
-----
-@ManagedBean
-@Path("/managedbean")
-public class ManagedBeanResource {
-
-    public static class MyInterceptor {
-        @AroundInvoke
-        public String around(InvocationContext ctx) throws Exception {
-            System.out.println("around() called");
-            return (String) ctx.proceed();
-        }
-    }
-
-    @GET
-    @Produces("text/plain")
-    @Interceptors(MyInterceptor.class)
-    public String getIt() {
-        return "Hi managedbean!";
-    }
-}
-----
-
-The example above uses a managed-bean interceptor to intercept calls to
-the resource method `getIt`. See <<additional_reqs>> for
-additional requirements on Managed Beans.
-
 [[cdi]]
 ==== Context and Dependency Injection (CDI)
 
@@ -203,8 +166,7 @@
 [[additional_reqs]]
 ==== Additional Requirements
 
-The following additional requirements apply when using Managed Beans,
-CDI-style Beans or EJBs as resource classes, providers or `Application`
+The following additional requirements apply when using CDI-style Beans or EJBs as resource classes, providers or `Application`
 subclasses:
 
 * For JAX-RS resources and providers where the JAX-RS implementation 
diff --git a/jaxrs-spec/src/main/asciidoc/chapters/introduction/_status.adoc b/jaxrs-spec/src/main/asciidoc/chapters/introduction/_status.adoc
index f5eb9be..dec77fd 100644
--- a/jaxrs-spec/src/main/asciidoc/chapters/introduction/_status.adoc
+++ b/jaxrs-spec/src/main/asciidoc/chapters/introduction/_status.adoc
@@ -1,6 +1,6 @@
 ////
 *******************************************************************
-* Copyright (c) 2019, 2021 Eclipse Foundation
+* Copyright (c) 2019, 2024 Eclipse Foundation
 *
 * This specification document is made available under the terms
 * of the Eclipse Foundation Specification License v1.0, which is
@@ -11,14 +11,14 @@
 [[status]]
 === Status
 
-This is the final release of version 3.1. The issue tracking system for
+This is the final release of version 3.2. The issue tracking system for
 this release can be found at:
 
 https://github.com/jakartaee/rest/issues
 
 The corresponding Javadocs can be found online at:
 
-https://jakarta.ee/specifications/restful-ws/3.1/apidocs/
+https://jakarta.ee/specifications/restful-ws/4.0/apidocs/
 
 A compatible implementation can be obtained from:
 
diff --git a/jaxrs-tck-docs/TCK-Exclude-List.txt b/jaxrs-tck-docs/TCK-Exclude-List.txt
index c1c1b05..33f0b77 100644
--- a/jaxrs-tck-docs/TCK-Exclude-List.txt
+++ b/jaxrs-tck-docs/TCK-Exclude-List.txt
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2021, 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
@@ -152,3 +152,6 @@
 ee/jakarta/tck/ws/rs/jaxrs21/ee/client/rxinvoker/JAXRSClientIT.java#traceWithResponseClassTest
 ee/jakarta/tck/ws/rs/jaxrs21/ee/client/rxinvoker/JAXRSClientIT.java#traceWithGenericTypeStringTest
 ee/jakarta/tck/ws/rs/jaxrs21/ee/client/rxinvoker/JAXRSClientIT.java#traceWithGenericTypeResponseTest
+
+# https://github.com/jakartaee/rest/issues/1138
+ee/jakarta/tck/ws/rs/ee/rs/core/uriinfo/JAXRSClientIT#getNormalizedUriTest
diff --git a/jaxrs-tck-docs/tckbundle.sh b/jaxrs-tck-docs/tckbundle.sh
index b05559b..7695256 100644
--- a/jaxrs-tck-docs/tckbundle.sh
+++ b/jaxrs-tck-docs/tckbundle.sh
@@ -1,6 +1,6 @@
 #!/bin/bash -xe
 
-# Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
+# 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
@@ -23,7 +23,7 @@
 export VERSION="$2"
 
 if [ -z "$VERSION" ]; then
-  export VERSION="3.1.2"
+  export VERSION="4.0.0-SNAPSHOT"
 fi
 
 if [[ "$1" == "epl" || "$1" == "EPL" ]]; then
@@ -40,6 +40,7 @@
 
 rm -rf $WORKSPACE/bundle
 
+mkdir -p $WORKSPACE/bundle
 mkdir -p $WORKSPACE/bundle/docs
 mkdir -p $WORKSPACE/bundle/docs/html-usersguide
 mkdir -p $WORKSPACE/bundle/docs/pdf-usersguide
@@ -51,17 +52,23 @@
 cp $WORKSPACE/jaxrs-tck-docs/*.txt $WORKSPACE/bundle/docs/
 cp -r $WORKSPACE/jaxrs-tck-docs/assertions $WORKSPACE/bundle/docs/
 
-mkdir -p $WORKSPACE/bundle
 cp $WORKSPACE/jaxrs-tck/target/*.jar $WORKSPACE/bundle/
 
 cd $WORKSPACE/bundle
+mkdir -p $WORKSPACE/bundle/META-INF
 
 if [[ "$1" == "epl" || "$1" == "EPL" ]]; then
     cp $WORKSPACE/LICENSE.md $WORKSPACE/bundle/LICENSE.md
+    cp $WORKSPACE/LICENSE.md $WORKSPACE/bundle/META-INF/LICENSE.md
     cp $WORKSPACE/jaxrs-tck/pom.epl.xml $WORKSPACE/bundle/restful-ws-tck-"$VERSION".pom
+    jar -uvf restful-ws-tck-"$VERSION".jar META-INF/LICENSE.md
+    rm -rf $WORKSPACE/bundle/META-INF
     zip -r restful-ws-tck-"$VERSION".zip *
 else
     cp $WORKSPACE/jaxrs-tck-docs/LICENSE_EFTL.md $WORKSPACE/bundle/LICENSE.md
+    cp $WORKSPACE/jaxrs-tck-docs/LICENSE_EFTL.md $WORKSPACE/bundle/META-INF/LICENSE.md
     cp $WORKSPACE/jaxrs-tck/pom.xml $WORKSPACE/bundle/jakarta-restful-ws-tck-"$VERSION".pom
+    jar -uvf jakarta-restful-ws-tck-"$VERSION".jar META-INF/LICENSE.md
+    rm -rf $WORKSPACE/bundle/META-INF
     zip -r jakarta-restful-ws-tck-"$VERSION".zip * 
 fi
diff --git a/jaxrs-tck-docs/userguide/pom.xml b/jaxrs-tck-docs/userguide/pom.xml
index 7f7c9a9..5dd5127 100644
--- a/jaxrs-tck-docs/userguide/pom.xml
+++ b/jaxrs-tck-docs/userguide/pom.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
 
-    Copyright (c) 2017, 2021 Oracle and/or its affiliates. All rights reserved.
+    Copyright (c) 2017, 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
@@ -27,8 +27,8 @@
     <groupId>org.glassfish</groupId>
     <artifactId>tck_jaxrs</artifactId>
     <packaging>pom</packaging>
-    <version>3.1.2</version>
-    <name>Eclipse Foundation Technology Compatibility Kit User's Guide for Jakarta RESTful Web Services for Jakarta EE, Release 3.1</name>
+    <version>4.0.0-SNAPSHOT</version>
+    <name>Eclipse Foundation Technology Compatibility Kit User's Guide for Jakarta RESTful Web Services for Jakarta EE, Release 4.0</name>
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -56,7 +56,6 @@
         <defaultGoal>package</defaultGoal>
         <plugins>
             <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-clean-plugin</artifactId>
                 <configuration>
                     <filesets>
@@ -70,7 +69,6 @@
                 </configuration>
             </plugin>
             <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-enforcer-plugin</artifactId>
                 <executions>
                     <execution>
@@ -81,8 +79,8 @@
                         <configuration>
                             <rules>
                                 <requireJavaVersion>
-                                    <version>[11.0,)</version>
-                                    <message>You need JDK11 or newer</message>
+                                    <version>[17.0,)</version>
+                                    <message>You need JDK17 or newer</message>
                                 </requireJavaVersion>
                             </rules>
                         </configuration>
@@ -172,7 +170,6 @@
                 </executions>
             </plugin>
             <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-scm-publish-plugin</artifactId>
                 <executions>
                     <execution>
@@ -194,7 +191,6 @@
         <pluginManagement>
             <plugins>
                 <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-clean-plugin</artifactId>
                     <version>3.1.0</version>
                 </plugin>
@@ -204,17 +200,14 @@
                     <version>1.3</version>
                 </plugin>
                 <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-enforcer-plugin</artifactId>
                     <version>3.0.0-M3</version>
                 </plugin>
                 <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-assembly-plugin</artifactId>
                     <version>3.3.0</version>
                 </plugin>
                 <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-scm-publish-plugin</artifactId>
                     <version>3.1.0</version>
                 </plugin>
diff --git a/jaxrs-tck/pom.xml b/jaxrs-tck/pom.xml
index dc28fcc..f6c339b 100644
--- a/jaxrs-tck/pom.xml
+++ b/jaxrs-tck/pom.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!--
 
-    Copyright (c) 2020 Markus Karg. All rights reserved.
+    Copyright (c) 2020, 2024 Markus Karg. 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
@@ -26,140 +26,19 @@
     <name>Jakarta RESTful WS TCK</name>
     <description>Technology Compatibility Kit for Jakarta RESTful Web Services</description>
     <url>https://github.com/jakartaee/rest</url>
-    <version>3.1.2</version>
+    <version>4.0.0-SNAPSHOT</version>
 
     <parent>
         <groupId>jakarta.ws.rs</groupId>
         <artifactId>all</artifactId>
-        <version>3.1.0</version>
+        <version>4.0.0-SNAPSHOT</version>
     </parent>
 
-    <properties>
-        <maven.compiler.source>11</maven.compiler.source>
-        <maven.compiler.target>11</maven.compiler.target>
-        <junit.jupiter.version>[5.7.2, 5.8-A00)</junit.jupiter.version>
-        <tck.artifactId>jakarta-restful-ws-tck</tck.artifactId>
-    </properties>
-
-    <organization>
-        <name>Eclipse Foundation</name>
-        <url>https://www.eclipse.org/org/foundation/</url>
-    </organization>
-
-    <developers>
-        <developer>
-            <id>developers</id>
-            <name>JAX-RS API Developers</name>
-            <email>jaxrs-dev@eclipse.org</email>
-            <url>https://github.com/jakartaee/rest/graphs/contributors</url>
-        </developer>
-    </developers>
-
-    <issueManagement>
-        <system>Github</system>
-        <url>https://github.com/jakartaee/rest/issues</url>
-    </issueManagement>
-
-    <mailingLists>
-        <mailingList>
-            <name>JAX-RS Developer Discussions</name>
-            <archive>jaxrs-dev@eclipse.org</archive>
-        </mailingList>
-    </mailingLists>
-
-    <licenses>
-        <license>
-            <name>EPL-2.0</name>
-            <url>http://www.eclipse.org/legal/epl-2.0</url>
-            <distribution>repo</distribution>
-        </license>
-        <license>
-            <name>GPL-2.0-with-classpath-exception</name>
-            <url>https://www.gnu.org/software/classpath/license.html</url>
-            <distribution>repo</distribution>
-        </license>
-    </licenses>
-
-    <scm>
-        <connection>scm:git:https://github.com/jakartaee/rest</connection>
-        <url>https://github.com/jakartaee/rest</url>
-        <tag>HEAD</tag>
-    </scm>
-
-    <profiles>
-        <profile>
-            <id>record-signature</id>
-            <activation>
-                <activeByDefault>false</activeByDefault>
-            </activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.netbeans.tools</groupId>
-                        <artifactId>sigtest-maven-plugin</artifactId>
-                        <version>1.4</version>
-                        <executions>
-                            <execution>
-                                <goals>
-                                    <goal>generate</goal>
-                                </goals>
-                            </execution>
-                        </executions>
-                        <configuration>
-                            <FileName>${project.build.directory}/jakarta.ws.rs.sig_${project.parent.version}</FileName>
-                            <packages>
-                                jakarta.ws.rs,jakarta.ws.rs.client,jakarta.ws.rs.core,jakarta.ws.rs.container,jakarta.ws.rs.ext,jakarta.ws.rs.sse
-                            </packages>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-
-        <profile>
-            <id>tck-build</id>
-            <activation>
-                <activeByDefault>true</activeByDefault>
-            </activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <artifactId>maven-compiler-plugin</artifactId>
-                        <version>2.3.2</version>
-                    </plugin>
-                    <plugin>
-                        <artifactId>maven-surefire-plugin</artifactId>
-                        <version>3.0.0-M5</version>
-                    </plugin>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-jar-plugin</artifactId>
-                        <version>3.2.0</version>
-                    </plugin>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-source-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <id>attach-sources</id>
-                                <goals>
-                                    <goal>jar</goal>
-                                </goals>
-                            </execution>
-                        </executions>
-                    </plugin>
-
-                </plugins>
-            </build>
-        </profile>
-
-
-    </profiles>
     <dependencies>
         <dependency>
             <groupId>jakarta.ws.rs</groupId>
             <artifactId>jakarta.ws.rs-api</artifactId>
-            <version>${project.parent.version}</version>
+            <version>${project.version}</version>
         </dependency>
 
         <dependency>
@@ -176,15 +55,7 @@
 
         <dependency>
             <groupId>org.junit.jupiter</groupId>
-            <artifactId>junit-jupiter</artifactId>
-            <version>${junit.jupiter.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.junit.platform</groupId>
-            <artifactId>junit-platform-launcher</artifactId>
-            <version>1.7.2</version>
-            <scope>test</scope>
+            <artifactId>junit-jupiter-api</artifactId>
         </dependency>
 
         <dependency>
@@ -195,46 +66,106 @@
 
         <dependency>
             <groupId>org.hamcrest</groupId>
-            <artifactId>hamcrest-library</artifactId>
-            <version>[2.2, 2.3-A00)</version>
+            <artifactId>hamcrest</artifactId>
         </dependency>
 
         <dependency>
             <groupId>org.jboss.arquillian.junit5</groupId>
             <artifactId>arquillian-junit5-container</artifactId>
-            <version>1.7.0.Alpha10</version>
+            <version>1.8.0.Final</version>
         </dependency>
 
         <dependency>
             <groupId>jakarta.annotation</groupId>
             <artifactId>jakarta.annotation-api</artifactId>
-            <version>2.1.0-B1</version>
         </dependency>
 
         <dependency>
             <groupId>jakarta.xml.bind</groupId>
             <artifactId>jakarta.xml.bind-api</artifactId>
-            <version>4.0.0-RC2</version>
         </dependency>
 
         <dependency>
             <groupId>jakarta.activation</groupId>
             <artifactId>jakarta.activation-api</artifactId>
-            <version>2.1.0-RC1</version>
         </dependency>
 
         <dependency>
             <groupId>jakarta.servlet</groupId>
             <artifactId>jakarta.servlet-api</artifactId>
-            <version>5.0.0</version>
+            <version>6.0.0</version>
             <scope>provided</scope>
         </dependency>
 
+        <!-- Test Dependencies -->
         <dependency>
-            <groupId>org.netbeans.tools</groupId>
-            <artifactId>sigtest-maven-plugin</artifactId>
-            <version>1.4</version>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <scope>test</scope>
         </dependency>
 
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-compiler-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <artifactId>maven-jar-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <artifactId>maven-source-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>attach-sources</id>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+        </plugins>
+    </build>
+
+    <profiles>
+        <profile>
+            <id>record-signature</id>
+            <activation>
+                <activeByDefault>false</activeByDefault>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>jakarta.tck</groupId>
+                        <artifactId>sigtest-maven-plugin</artifactId>
+                        <version>2.2</version>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>generate</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                        <configuration>
+                            <sigfile>${project.build.directory}/jakarta.ws.rs.sig_${project.parent.version}</sigfile>
+                            <packages>
+                                jakarta.ws.rs,
+                                jakarta.ws.rs.client,
+                                jakarta.ws.rs.core,
+                                jakarta.ws.rs.container,
+                                jakarta.ws.rs.ext,
+                                jakarta.ws.rs.sse
+                            </packages>
+                            <attach>false</attach>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
 </project>
\ No newline at end of file
diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/common/JAXRSCommonClient.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/common/JAXRSCommonClient.java
index e50a1f2..d5c06b1 100644
--- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/common/JAXRSCommonClient.java
+++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/common/JAXRSCommonClient.java
@@ -1,5 +1,5 @@
  /*
- * Copyright (c) 2007, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 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
@@ -715,29 +715,29 @@
       assertEquals(T first, T second, Object... message)   {
     if (first == null && second == null)
       return;
-    assertFalse(first == null && second != null, message.toString());
-    assertFalse(first != null && second == null, message.toString());
+    assertFalse(first == null && second != null, objectsToString(message));
+    assertFalse(first != null && second == null, objectsToString(message));
     if (first instanceof Comparable)
-      assertTrue(((Comparable<T>) first).compareTo(second) == 0, message.toString());
+      assertTrue(((Comparable<T>) first).compareTo(second) == 0, objectsToString(message));
     else
-      assertTrue(first.equals(second), message.toString());
+      assertTrue(first.equals(second), objectsToString(message));
   }
 
   public static <T> void //
       assertEqualsInt(int first, int second, Object... message)   {
-    assertTrue(first == second, message.toString());
+    assertTrue(first == second, objectsToString(message));
   }
 
   public static <T> void //
       assertEqualsLong(long first, long second, Object... message)
             {
-    assertTrue(first == second, message.toString());
+    assertTrue(first == second, objectsToString(message));
   }
 
   public static <T> void //
       assertEqualsBool(boolean first, boolean second, Object... message)
             {
-    assertTrue(first == second, message.toString());
+    assertTrue(first == second, objectsToString(message));
   }
 
   /**
@@ -751,7 +751,7 @@
    */
   public static void //
       assertNull(Object object, Object... message) {
-    assertTrue(object == null, message.toString());
+    assertTrue(object == null, objectsToString(message));
   }
 
   /**
@@ -765,7 +765,7 @@
    */
   public static void //
       assertNotNull(Object object, Object... message) {
-    assertTrue(object != null, message.toString());
+    assertTrue(object != null, objectsToString(message));
   }
 
   /**
@@ -795,7 +795,7 @@
    */
   public static void assertContains(String string, String substring,
       Object... message)   {
-    assertTrue(string.contains(substring), message.toString());
+    assertTrue(string.contains(substring), objectsToString(message));
   }
 
   /**
@@ -812,7 +812,7 @@
    */
   public static void assertContainsIgnoreCase(String string, String substring,
       Object... message)   {
-    assertTrue(string.toLowerCase().contains(substring.toLowerCase()), message.toString());
+    assertTrue(string.toLowerCase().contains(substring.toLowerCase()), objectsToString(message));
   }
 
   /**
@@ -828,7 +828,7 @@
    */
   public static <T> void assertContains(T text, T subtext, Object... message)
         {
-    assertContains(text.toString(), subtext.toString(), message.toString());
+    assertContains(text.toString(), subtext.toString(), objectsToString(message));
   }
 
   /**
@@ -845,7 +845,7 @@
    */
   public static <T> void assertContainsIgnoreCase(T text, T subtext,
       Object... message)   {
-    assertContainsIgnoreCase(text.toString(), subtext.toString(), message.toString());
+    assertContainsIgnoreCase(text.toString(), subtext.toString(), objectsToString(message));
   }
 
   /**
diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ResponseFilter.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ResponseFilter.java
index 0bf416f..7c7c3c9 100644
--- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ResponseFilter.java
+++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ResponseFilter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2023 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
@@ -317,6 +317,11 @@
         write(b);
       }
 
+      @Override
+      public void close() throws IOException {
+        stream.close();
+      }
+
       public final byte[] intToByteArray(int value) {
         return new byte[] { (byte) (value & 0xff) };
       }
diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/uriinfo/JAXRSClientIT.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/uriinfo/JAXRSClientIT.java
index 3fbaaa5..52a001c 100644
--- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/uriinfo/JAXRSClientIT.java
+++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/uriinfo/JAXRSClientIT.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 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
@@ -34,6 +34,7 @@
 import org.junit.jupiter.api.TestInfo;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Disabled;
 
 /*
  * @class.setup_props: webServerHost;
@@ -414,6 +415,7 @@
    * obtained from an injected UriInfo
    */
   @Test
+  @Disabled
   public void getNormalizedUriTest() throws Fault {
     setProperty(Property.REQUEST, buildRequest(GET, URIInfoTest.DECODED));
     invoke();
diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/jaxrs21/ee/sse/ssebroadcaster/JAXRSClientIT.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/jaxrs21/ee/sse/ssebroadcaster/JAXRSClientIT.java
index 2a6e1dd..677e895 100644
--- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/jaxrs21/ee/sse/ssebroadcaster/JAXRSClientIT.java
+++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/jaxrs21/ee/sse/ssebroadcaster/JAXRSClientIT.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 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
@@ -17,6 +17,7 @@
 package ee.jakarta.tck.ws.rs.jaxrs21.ee.sse.ssebroadcaster;
 
 import java.util.List;
+import java.util.ArrayList;
 import java.io.InputStream;
 import java.io.IOException;
 
@@ -188,17 +189,20 @@
       }
     }
 
-    for (int i = 0; i != CLIENTS; i++) {
-      List<String> events = clients[i].getEvents();
-      assertEquals(events.size(), MSG_MAX + 1,
-          "Received unexpected number of events", events.size());
-      assertTrue(events.get(0).contains("WELCOME"),
-          "Received unexpected message"+ events.get(0));
-      for (int j = 0; j != MSG_MAX; j++)
-        assertEquals(events.get(j + 1), SSEMessage.MESSAGE + j,
-            "Received unexpected message", events.get(j + 1));
+    List<String> expectedEvents = new ArrayList<String>();
+    for (int j = 0; j != MSG_MAX; j++) {
+        expectedEvents.add(SSEMessage.MESSAGE + j);
     }
 
+    for (int i = 0; i != CLIENTS; i++) {
+        List<String> events = clients[i].getEvents();
+        assertEquals(events.size(), MSG_MAX + 1,
+            "Received unexpected number of events", events.size());
+        assertTrue(events.get(0).contains("WELCOME"),
+            "Received unexpected message"+ events.get(0));
+        assertTrue(events.containsAll(expectedEvents), "An expected message was not received");
+    }
+    
     setProperty(Property.REQUEST, buildRequest(Request.GET, "broadcast/check"));
     invoke();
     String response = getResponseBody();
diff --git a/jaxrs-tck/src/main/resources/ee/jakarta/tck/ws/rs/signaturetest/jakarta.ws.rs.sig_3.1.0 b/jaxrs-tck/src/main/resources/ee/jakarta/tck/ws/rs/signaturetest/jakarta.ws.rs.sig_4.0.0
similarity index 98%
rename from jaxrs-tck/src/main/resources/ee/jakarta/tck/ws/rs/signaturetest/jakarta.ws.rs.sig_3.1.0
rename to jaxrs-tck/src/main/resources/ee/jakarta/tck/ws/rs/signaturetest/jakarta.ws.rs.sig_4.0.0
index 9838fc9..db05c75 100644
--- a/jaxrs-tck/src/main/resources/ee/jakarta/tck/ws/rs/signaturetest/jakarta.ws.rs.sig_3.1.0
+++ b/jaxrs-tck/src/main/resources/ee/jakarta/tck/ws/rs/signaturetest/jakarta.ws.rs.sig_4.0.0
@@ -1,5 +1,5 @@
 #Signature file v4.1
-#Version 3.1.0
+#Version 4.0.0
 
 CLSS public abstract interface !annotation jakarta.ws.rs.ApplicationPath
  anno 0 java.lang.annotation.Documented()
@@ -507,6 +507,7 @@
 hcls CreateErrorMessageAction
 
 CLSS public abstract interface jakarta.ws.rs.client.ClientRequestContext
+meth public abstract boolean containsHeaderString(java.lang.String,java.lang.String,java.util.function.Predicate<java.lang.String>)
 meth public abstract boolean hasEntity()
 meth public abstract jakarta.ws.rs.client.Client getClient()
 meth public abstract jakarta.ws.rs.core.Configuration getConfiguration()
@@ -536,12 +537,14 @@
 meth public abstract void setMethod(java.lang.String)
 meth public abstract void setProperty(java.lang.String,java.lang.Object)
 meth public abstract void setUri(java.net.URI)
+meth public boolean containsHeaderString(java.lang.String,java.util.function.Predicate<java.lang.String>)
 meth public boolean hasProperty(java.lang.String)
 
 CLSS public abstract interface jakarta.ws.rs.client.ClientRequestFilter
 meth public abstract void filter(jakarta.ws.rs.client.ClientRequestContext) throws java.io.IOException
 
 CLSS public abstract interface jakarta.ws.rs.client.ClientResponseContext
+meth public abstract boolean containsHeaderString(java.lang.String,java.lang.String,java.util.function.Predicate<java.lang.String>)
 meth public abstract boolean hasEntity()
 meth public abstract boolean hasLink(java.lang.String)
 meth public abstract int getLength()
@@ -564,6 +567,7 @@
 meth public abstract void setEntityStream(java.io.InputStream)
 meth public abstract void setStatus(int)
 meth public abstract void setStatusInfo(jakarta.ws.rs.core.Response$StatusType)
+meth public boolean containsHeaderString(java.lang.String,java.util.function.Predicate<java.lang.String>)
 
 CLSS public abstract interface jakarta.ws.rs.client.ClientResponseFilter
 meth public abstract void filter(jakarta.ws.rs.client.ClientRequestContext,jakarta.ws.rs.client.ClientResponseContext) throws java.io.IOException
@@ -743,6 +747,8 @@
 meth public abstract jakarta.ws.rs.core.UriBuilder getUriBuilder()
 meth public abstract java.net.URI getUri()
 
+CLSS abstract interface jakarta.ws.rs.client.package-info
+
 CLSS public abstract interface jakarta.ws.rs.container.AsyncResponse
 fld public final static long NO_TIMEOUT = 0
 meth public abstract !varargs java.util.Map<java.lang.Class<?>,java.util.Collection<java.lang.Class<?>>> register(java.lang.Class<?>,java.lang.Class<?>[])
@@ -767,6 +773,7 @@
 meth public abstract void onDisconnect(jakarta.ws.rs.container.AsyncResponse)
 
 CLSS public abstract interface jakarta.ws.rs.container.ContainerRequestContext
+meth public abstract boolean containsHeaderString(java.lang.String,java.lang.String,java.util.function.Predicate<java.lang.String>)
 meth public abstract boolean hasEntity()
 meth public abstract int getLength()
 meth public abstract jakarta.ws.rs.core.MediaType getMediaType()
@@ -792,12 +799,14 @@
 meth public abstract void setRequestUri(java.net.URI)
 meth public abstract void setRequestUri(java.net.URI,java.net.URI)
 meth public abstract void setSecurityContext(jakarta.ws.rs.core.SecurityContext)
+meth public boolean containsHeaderString(java.lang.String,java.util.function.Predicate<java.lang.String>)
 meth public boolean hasProperty(java.lang.String)
 
 CLSS public abstract interface jakarta.ws.rs.container.ContainerRequestFilter
 meth public abstract void filter(jakarta.ws.rs.container.ContainerRequestContext) throws java.io.IOException
 
 CLSS public abstract interface jakarta.ws.rs.container.ContainerResponseContext
+meth public abstract boolean containsHeaderString(java.lang.String,java.lang.String,java.util.function.Predicate<java.lang.String>)
 meth public abstract boolean hasEntity()
 meth public abstract boolean hasLink(java.lang.String)
 meth public abstract int getLength()
@@ -827,6 +836,7 @@
 meth public abstract void setEntityStream(java.io.OutputStream)
 meth public abstract void setStatus(int)
 meth public abstract void setStatusInfo(jakarta.ws.rs.core.Response$StatusType)
+meth public boolean containsHeaderString(java.lang.String,java.util.function.Predicate<java.lang.String>)
 
 CLSS public abstract interface jakarta.ws.rs.container.ContainerResponseFilter
 meth public abstract void filter(jakarta.ws.rs.container.ContainerRequestContext,jakarta.ws.rs.container.ContainerResponseContext) throws java.io.IOException
@@ -857,6 +867,8 @@
 CLSS public abstract interface jakarta.ws.rs.container.TimeoutHandler
 meth public abstract void handleTimeout(jakarta.ws.rs.container.AsyncResponse)
 
+CLSS abstract interface jakarta.ws.rs.container.package-info
+
 CLSS public abstract jakarta.ws.rs.core.AbstractMultivaluedMap<%0 extends java.lang.Object, %1 extends java.lang.Object>
 cons public init(java.util.Map<{jakarta.ws.rs.core.AbstractMultivaluedMap%0},java.util.List<{jakarta.ws.rs.core.AbstractMultivaluedMap%1}>>)
 fld protected final java.util.Map<{jakarta.ws.rs.core.AbstractMultivaluedMap%0},java.util.List<{jakarta.ws.rs.core.AbstractMultivaluedMap%1}>> store
@@ -1114,6 +1126,7 @@
 fld public final static java.lang.String USER_AGENT = "User-Agent"
 fld public final static java.lang.String VARY = "Vary"
 fld public final static java.lang.String WWW_AUTHENTICATE = "WWW-Authenticate"
+meth public abstract boolean containsHeaderString(java.lang.String,java.lang.String,java.util.function.Predicate<java.lang.String>)
 meth public abstract int getLength()
 meth public abstract jakarta.ws.rs.core.MediaType getMediaType()
 meth public abstract jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> getRequestHeaders()
@@ -1124,6 +1137,7 @@
 meth public abstract java.util.List<java.util.Locale> getAcceptableLanguages()
 meth public abstract java.util.Locale getLanguage()
 meth public abstract java.util.Map<java.lang.String,jakarta.ws.rs.core.Cookie> getCookies()
+meth public boolean containsHeaderString(java.lang.String,java.util.function.Predicate<java.lang.String>)
 
 CLSS public abstract jakarta.ws.rs.core.Link
 cons public init()
@@ -1199,6 +1213,7 @@
 fld public final static jakarta.ws.rs.core.MediaType APPLICATION_JSON_TYPE
 fld public final static jakarta.ws.rs.core.MediaType APPLICATION_OCTET_STREAM_TYPE
 fld public final static jakarta.ws.rs.core.MediaType APPLICATION_SVG_XML_TYPE
+ anno 0 java.lang.Deprecated(boolean forRemoval=true, java.lang.String since="")
 fld public final static jakarta.ws.rs.core.MediaType APPLICATION_XHTML_XML_TYPE
 fld public final static jakarta.ws.rs.core.MediaType APPLICATION_XML_TYPE
 fld public final static jakarta.ws.rs.core.MediaType MULTIPART_FORM_DATA_TYPE
@@ -1213,6 +1228,7 @@
 fld public final static java.lang.String APPLICATION_JSON_PATCH_JSON = "application/json-patch+json"
 fld public final static java.lang.String APPLICATION_OCTET_STREAM = "application/octet-stream"
 fld public final static java.lang.String APPLICATION_SVG_XML = "application/svg+xml"
+ anno 0 java.lang.Deprecated(boolean forRemoval=true, java.lang.String since="")
 fld public final static java.lang.String APPLICATION_XHTML_XML = "application/xhtml+xml"
 fld public final static java.lang.String APPLICATION_XML = "application/xml"
 fld public final static java.lang.String CHARSET_PARAMETER = "charset"
@@ -1636,6 +1652,8 @@
 meth public static jakarta.ws.rs.core.Variant$VariantListBuilder newInstance()
 supr java.lang.Object
 
+CLSS abstract interface jakarta.ws.rs.core.package-info
+
 CLSS public abstract interface jakarta.ws.rs.ext.ContextResolver<%0 extends java.lang.Object>
 meth public abstract {jakarta.ws.rs.ext.ContextResolver%0} getContext(java.lang.Class<?>)
 
@@ -1739,6 +1757,10 @@
 meth public abstract void setEntity(java.lang.Object)
 meth public abstract void setOutputStream(java.io.OutputStream)
 
+CLSS abstract interface jakarta.ws.rs.ext.package-info
+
+CLSS abstract interface jakarta.ws.rs.package-info
+
 CLSS public abstract interface jakarta.ws.rs.sse.InboundSseEvent
 intf jakarta.ws.rs.sse.SseEvent
 meth public abstract <%0 extends java.lang.Object> {%%0} readData(jakarta.ws.rs.core.GenericType<{%%0}>)
@@ -1795,7 +1817,7 @@
 intf java.lang.AutoCloseable
 meth public abstract boolean isClosed()
 meth public abstract java.util.concurrent.CompletionStage<?> send(jakarta.ws.rs.sse.OutboundSseEvent)
-meth public abstract void close()
+meth public abstract void close() throws java.io.IOException
 
 CLSS public abstract interface jakarta.ws.rs.sse.SseEventSource
 innr public abstract static Builder
@@ -1818,6 +1840,8 @@
 meth public abstract jakarta.ws.rs.sse.SseEventSource$Builder reconnectingEvery(long,java.util.concurrent.TimeUnit)
 supr java.lang.Object
 
+CLSS abstract interface jakarta.ws.rs.sse.package-info
+
 CLSS public abstract jakarta.xml.bind.annotation.adapters.XmlAdapter<%0 extends java.lang.Object, %1 extends java.lang.Object>
 cons protected init()
 meth public abstract {jakarta.xml.bind.annotation.adapters.XmlAdapter%0} marshal({jakarta.xml.bind.annotation.adapters.XmlAdapter%1}) throws java.lang.Exception
@@ -1850,8 +1874,10 @@
 
 CLSS public abstract java.lang.Enum<%0 extends java.lang.Enum<{java.lang.Enum%0}>>
 cons protected init(java.lang.String,int)
+innr public final static EnumDesc
 intf java.io.Serializable
 intf java.lang.Comparable<{java.lang.Enum%0}>
+intf java.lang.constant.Constable
 meth protected final java.lang.Object clone() throws java.lang.CloneNotSupportedException
 meth protected final void finalize()
 meth public final boolean equals(java.lang.Object)
@@ -1860,6 +1886,7 @@
 meth public final int ordinal()
 meth public final java.lang.Class<{java.lang.Enum%0}> getDeclaringClass()
 meth public final java.lang.String name()
+meth public final java.util.Optional<java.lang.Enum$EnumDesc<{java.lang.Enum%0}>> describeConstable()
 meth public java.lang.String toString()
 meth public static <%0 extends java.lang.Enum<{%%0}>> {%%0} valueOf(java.lang.Class<{%%0}>,java.lang.String)
 supr java.lang.Object
@@ -1954,6 +1981,9 @@
 intf java.lang.annotation.Annotation
 meth public abstract java.lang.annotation.ElementType[] value()
 
+CLSS public abstract interface java.lang.constant.Constable
+meth public abstract java.util.Optional<? extends java.lang.constant.ConstantDesc> describeConstable()
+
 CLSS public abstract interface java.util.Map<%0 extends java.lang.Object, %1 extends java.lang.Object>
 innr public abstract interface static Entry
 meth public !varargs static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> ofEntries(java.util.Map$Entry<? extends {%%0},? extends {%%1}>[])
@@ -1996,3 +2026,4 @@
 meth public {java.util.Map%1} merge({java.util.Map%0},{java.util.Map%1},java.util.function.BiFunction<? super {java.util.Map%1},? super {java.util.Map%1},? extends {java.util.Map%1}>)
 meth public {java.util.Map%1} putIfAbsent({java.util.Map%0},{java.util.Map%1})
 meth public {java.util.Map%1} replace({java.util.Map%0},{java.util.Map%1})
+
diff --git a/jaxrs-tck/src/main/resources/ee/jakarta/tck/ws/rs/signaturetest/sig-test.map b/jaxrs-tck/src/main/resources/ee/jakarta/tck/ws/rs/signaturetest/sig-test.map
index 895b2be..caa8640 100644
--- a/jaxrs-tck/src/main/resources/ee/jakarta/tck/ws/rs/signaturetest/sig-test.map
+++ b/jaxrs-tck/src/main/resources/ee/jakarta/tck/ws/rs/signaturetest/sig-test.map
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2018, 2020 Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2018, 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
@@ -17,4 +17,4 @@
 ###############################################################
 # The signature test mapping file for the JAX-RS TCK.
 ###############################################################
-jakarta.ws.rs=3.1.0
+jakarta.ws.rs=4.0.0
diff --git a/jersey-tck/pom.xml b/jersey-tck/pom.xml
index 5ab7e8b..ef76456 100644
--- a/jersey-tck/pom.xml
+++ b/jersey-tck/pom.xml
@@ -22,13 +22,13 @@
 
     <groupId>org.glassfish.jersey.core</groupId>
     <artifactId>jersey-tck</artifactId>
-    <version>3.1.2</version>
+    <version>4.0.0-SNAPSHOT</version>
     <packaging>jar</packaging>
 
     <parent>
         <groupId>jakarta.ws.rs</groupId>
         <artifactId>all</artifactId>
-        <version>3.1.0</version>
+        <version>4.0.0-SNAPSHOT</version>
     </parent>
 
     <name>Jakarta RESTful WS Compliance</name>
@@ -42,7 +42,7 @@
         <glassfish.home>${project.build.directory}/glassfish6</glassfish.home>
         <jakarta.platform.version>10.0.0-RC1</jakarta.platform.version>
         <junit.jupiter.version>5.7.2</junit.jupiter.version>
-        <jakarta.rest.version>3.1.0</jakarta.rest.version>
+        <jakarta.rest.version>4.0.0-SNAPSHOT</jakarta.rest.version>
         <tck.artifactId>jakarta-restful-ws-tck</tck.artifactId>
     </properties>
 
@@ -179,7 +179,6 @@
     <build>	    
     <plugins>
             <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-dependency-plugin</artifactId>
                 <version>3.2.0</version>
                 <executions>
diff --git a/pom.xml b/pom.xml
index e8bf766..4938d3c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
 
-    Copyright (c) 2021 Markus KARG. All rights reserved.
+    Copyright (c) 2021, 2024 Markus KARG. All rights reserved.
 
     This program and the accompanying materials are made available under the
     terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -17,14 +17,14 @@
 
     <groupId>jakarta.ws.rs</groupId>
     <artifactId>all</artifactId>
-    <version>3.1.0</version>
+    <version>4.0.0-SNAPSHOT</version>
     <packaging>pom</packaging>
     <name>Jakarta RESTful WS Project</name>
 
     <parent>
         <groupId>org.eclipse.ee4j</groupId>
         <artifactId>project</artifactId>
-        <version>1.0.7</version>
+        <version>1.0.9</version>
         <relativePath/>
     </parent>
 
@@ -34,7 +34,472 @@
             <name>JAX-RS API Repository - Snapshots</name>
             <url>https://repo.eclipse.org/content/repositories/jax-rs-api-snapshots/</url>
         </snapshotRepository>
-    </distributionManagement>
+    </distributionManagement><url>https://github.com/eclipse-ee4j/jaxrs-api</url>
+
+    <organization>
+        <name>Eclipse Foundation</name>
+        <url>https://www.eclipse.org/org/foundation/</url>
+    </organization>
+
+    <developers>
+        <developer>
+            <id>developers</id>
+            <name>JAX-RS API Developers</name>
+            <email>jaxrs-dev@eclipse.org</email>
+            <url>https://github.com/eclipse-ee4j/jaxrs-api/graphs/contributors</url>
+        </developer>
+    </developers>
+
+    <issueManagement>
+        <system>Github</system>
+        <url>https://github.com/eclipse-ee4j/jaxrs-api/issues</url>
+    </issueManagement>
+
+    <mailingLists>
+        <mailingList>
+            <name>JAX-RS Developer Discussions</name>
+            <archive>jaxrs-dev@eclipse.org</archive>
+        </mailingList>
+    </mailingLists>
+
+    <licenses>
+        <license>
+            <name>EPL-2.0</name>
+            <url>https://www.eclipse.org/legal/epl-2.0</url>
+            <distribution>repo</distribution>
+        </license>
+        <license>
+            <name>GPL-2.0-with-classpath-exception</name>
+            <url>https://www.gnu.org/software/classpath/license.html</url>
+            <distribution>repo</distribution>
+        </license>
+    </licenses>
+
+    <scm>
+        <connection>scm:git:https://github.com/eclipse-ee4j/jaxrs-api</connection>
+        <url>https://github.com/eclipse-ee4j/jaxrs-api</url>
+        <tag>HEAD</tag>
+    </scm>
+    <properties>
+        <jdk.min.version>17</jdk.min.version>
+        <maven.compiler.release>17</maven.compiler.release>
+
+        <apidocs.title>Jakarta RESTful Web Services ${spec.version} API Specification ${spec.version.revision}</apidocs.title>
+        <legal.doc.folder>${project.basedir}</legal.doc.folder>
+
+        <maven.bundle.plugin.version>3.5.0</maven.bundle.plugin.version>
+        <maven.compiler.plugin.version>3.8.1</maven.compiler.plugin.version>
+        <maven.javadoc.plugin.version>3.1.0</maven.javadoc.plugin.version>
+
+        <api.package>jakarta.ws.rs</api.package>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <skip.release.tests>false</skip.release.tests>
+        <spec.version>3.2</spec.version>
+        <spec.version.revision /> <!-- e.g. (Rev a) -->
+
+        <annotation.api.version>2.1.1</annotation.api.version>
+        <activation.api.version>2.0.0</activation.api.version>
+        <inject.api.version>2.0.0</inject.api.version>
+        <validation.api.version>3.0.0</validation.api.version>
+        <concurrent.api.version>2.0.0</concurrent.api.version>
+        <xml.binding.api.version>4.0.0</xml.binding.api.version>
+        <cdi.api.version>3.0.0</cdi.api.version>
+        <junit.version>5.8.2</junit.version>
+        <org.glassfish.jaxb.version>4.0.3</org.glassfish.jaxb.version>
+        <com.sun.istack.version>4.1.2</com.sun.istack.version>
+        <hamcrest.version>2.2</hamcrest.version>
+        <mockito.version>3.6.0</mockito.version>
+    </properties>
+
+    <modules>
+        <module>jaxrs-api</module>
+        <module>examples</module>
+        <module>jaxrs-spec</module>
+        <module>jaxrs-tck</module>
+    </modules>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.junit</groupId>
+                <artifactId>junit-bom</artifactId>
+                <version>${junit.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+            <dependency>
+                <groupId>jakarta.annotation</groupId>
+                <artifactId>jakarta.annotation-api</artifactId>
+                <version>${annotation.api.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>jakarta.activation</groupId>
+                <artifactId>jakarta.activation-api</artifactId>
+                <version>${activation.api.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>jakarta.inject</groupId>
+                <artifactId>jakarta.inject-api</artifactId>
+                <version>${inject.api.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>jakarta.enterprise</groupId>
+                <artifactId>jakarta.enterprise.cdi-api</artifactId>
+                <version>${cdi.api.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>jakarta.validation</groupId>
+                <artifactId>jakarta.validation-api</artifactId>
+                <version>${validation.api.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>jakarta.enterprise.concurrent</groupId>
+                <artifactId>jakarta.enterprise.concurrent-api</artifactId>
+                <version>${concurrent.api.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>jakarta.xml.bind</groupId>
+                <artifactId>jakarta.xml.bind-api</artifactId>
+                <version>${xml.binding.api.version}</version>
+            </dependency>
+            <!-- JAXB Implementation -->
+            <dependency>
+                <groupId>org.glassfish.jaxb</groupId>
+                <artifactId>codemodel</artifactId>
+                <version>${org.glassfish.jaxb.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>*</groupId>
+                        <artifactId>*</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+            <dependency>
+                <groupId>org.glassfish.jaxb</groupId>
+                <artifactId>jaxb-core</artifactId>
+                <version>${org.glassfish.jaxb.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>*</groupId>
+                        <artifactId>*</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+            <dependency>
+                <groupId>org.glassfish.jaxb</groupId>
+                <artifactId>jaxb-jxc</artifactId>
+                <version>${org.glassfish.jaxb.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>*</groupId>
+                        <artifactId>*</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+            <dependency>
+                <groupId>org.glassfish.jaxb</groupId>
+                <artifactId>jaxb-runtime</artifactId>
+                <version>${org.glassfish.jaxb.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>*</groupId>
+                        <artifactId>*</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+            <dependency>
+                <groupId>org.glassfish.jaxb</groupId>
+                <artifactId>txw2</artifactId>
+                <version>${org.glassfish.jaxb.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>*</groupId>
+                        <artifactId>*</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+            <dependency>
+                <groupId>org.glassfish.jaxb</groupId>
+                <artifactId>jaxb-xjc</artifactId>
+                <version>${org.glassfish.jaxb.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>*</groupId>
+                        <artifactId>*</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+            <dependency>
+                <groupId>org.glassfish.jaxb</groupId>
+                <artifactId>xsom</artifactId>
+                <version>${org.glassfish.jaxb.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>*</groupId>
+                        <artifactId>*</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+
+            <dependency>
+                <groupId>com.sun.istack</groupId>
+                <artifactId>istack-commons-runtime</artifactId>
+                <version>${com.sun.istack.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>*</groupId>
+                        <artifactId>*</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+            <dependency>
+                <groupId>com.sun.istack</groupId>
+                <artifactId>istack-commons-tools</artifactId>
+                <version>${com.sun.istack.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>*</groupId>
+                        <artifactId>*</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+            <dependency>
+                <groupId>com.sun.xml.bind.external</groupId>
+                <artifactId>relaxng-datatype</artifactId>
+                <version>${org.glassfish.jaxb.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.sun.xml.bind.external</groupId>
+                <artifactId>rngom</artifactId>
+                <version>${org.glassfish.jaxb.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>relaxngDatatype</groupId>
+                        <artifactId>relaxngDatatype</artifactId>
+                    </exclusion>
+                    <exclusion>
+                        <groupId>com.sun.xml.bind.external</groupId>
+                        <artifactId>relaxng-datatype</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+            <!-- End JAXB Implementation -->
+            <dependency>
+                <groupId>org.hamcrest</groupId>
+                <artifactId>hamcrest</artifactId>
+                <version>${hamcrest.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.mockito</groupId>
+                <artifactId>mockito-core</artifactId>
+                <version>${mockito.version}</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <build>
+        <finalName>${project.artifactId}</finalName>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <artifactId>maven-compiler-plugin</artifactId>
+                    <version>3.11.0</version>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-jar-plugin</artifactId>
+                    <version>3.3.0</version>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-surefire-plugin</artifactId>
+                    <version>3.2.5</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>buildnumber-maven-plugin</artifactId>
+                    <version>1.4</version>
+                    <configuration>
+                        <format>{0,date,MM/dd/yyyy hh:mm aa}</format>
+                        <items>
+                            <item>timestamp</item>
+                        </items>
+                    </configuration>
+                    <executions>
+                        <execution>
+                            <phase>validate</phase>
+                            <goals>
+                                <goal>create</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.felix</groupId>
+                    <artifactId>maven-bundle-plugin</artifactId>
+                    <version>${maven.bundle.plugin.version}</version>
+                    <extensions>true</extensions>
+                    <configuration>
+                        <instructions>
+                            <_failok>true</_failok>
+                            <Build-Id>${buildNumber}</Build-Id>
+                            <Bundle-Description>Jakarta RESTful Web Services API (JAX-RS)</Bundle-Description>
+                            <Bundle-Version>${project.version}</Bundle-Version>
+                            <Bundle-SymbolicName>jakarta.ws.rs-api</Bundle-SymbolicName>
+                            <DynamicImport-Package>*</DynamicImport-Package>
+                            <Extension-Name>${api.package}</Extension-Name>
+                            <Implementation-Version>${project.version}</Implementation-Version>
+                            <Specification-Version>${spec.version}</Specification-Version>
+                            <Specification-Vendor>Eclipse Foundation</Specification-Vendor>
+                            <specversion>${spec.version}</specversion>
+                            <_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>
+                            <_nodefaultversion>false</_nodefaultversion>
+                            <Require-Capability>osgi.ee;filter:="(&amp;(osgi.ee=JavaSE)(version=1.8))"</Require-Capability>
+                        </instructions>
+                    </configuration>
+                    <executions>
+                        <execution>
+                            <id>osgi-bundle</id>
+                            <phase>package</phase>
+                            <goals>
+                                <goal>bundle</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-javadoc-plugin</artifactId>
+                    <version>${maven.javadoc.plugin.version}</version>
+                    <configuration>
+                        <doctitle>${apidocs.title}</doctitle>
+                        <docfilessubdirs>true</docfilessubdirs>
+                        <bottom>
+                            <![CDATA[<p align="left">Copyright &#169; 2018, 2024 Eclipse Foundation.<br>Use is subject to <a href="{@docRoot}/resources/EFSL.html" target="_top">license terms</a>.]]>
+                        </bottom>
+                        <docfilessubdirs>true</docfilessubdirs>
+                        <sourceFileExcludes>
+                            <fileExclude>module-info.java</fileExclude>
+                        </sourceFileExcludes>
+                    </configuration>
+                    <executions>
+                        <execution>
+                            <id>attach-javadocs</id>
+                            <goals>
+                                <goal>jar</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-source-plugin</artifactId>
+                    <version>3.2.1</version>
+                    <executions>
+                        <execution>
+                            <id>attach-sources</id>
+                            <goals>
+                                <goal>jar-no-fork</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </plugin>
+                <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>build-helper-maven-plugin</artifactId>
+                    <version>3.2.0</version>
+                    <executions>
+                        <execution>
+                            <id>add-legal-resource</id>
+                            <phase>generate-resources</phase>
+                            <goals>
+                                <goal>add-resource</goal>
+                            </goals>
+                            <configuration>
+                                <resources>
+                                    <resource>
+                                        <directory>${legal.doc.folder}</directory>
+                                        <includes>
+                                            <include>NOTICE.md</include>
+                                            <include>LICENSE.md</include>
+                                        </includes>
+                                        <targetPath>META-INF</targetPath>
+                                    </resource>
+                                </resources>
+                            </configuration>
+                        </execution>
+                    </executions>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-jxr-plugin</artifactId>
+                    <version>2.5</version>
+                    <executions>
+                        <execution>
+                            <goals>
+                                <goal>jxr</goal>
+                            </goals>
+                            <phase>validate</phase>
+                        </execution>
+                    </executions>
+                </plugin>
+                <plugin>
+                    <artifactId>maven-checkstyle-plugin</artifactId>
+                    <version>3.1.2</version>
+                    <configuration>
+                        <outputDirectory>${project.build.directory}/checkstyle</outputDirectory>
+                        <outputFile>${project.build.directory}/checkstyle/checkstyle-result.xml</outputFile>
+                        <configLocation>${basedir}/../etc/config/checkstyle.xml</configLocation>
+                        <excludes>**/module-info.java</excludes>
+                    </configuration>
+                    <executions>
+                        <execution>
+                            <goals>
+                                <goal>checkstyle</goal>
+                            </goals>
+                            <phase>validate</phase>
+                        </execution>
+                    </executions>
+                </plugin>
+                <plugin>
+                    <groupId>org.glassfish.copyright</groupId>
+                    <artifactId>glassfish-copyright-maven-plugin</artifactId>
+                    <version>1.39</version>
+                    <configuration>
+                        <excludeFile>${basedir}/../etc/config/copyright-exclude</excludeFile>
+                        <!--svn|mercurial|git - defaults to svn-->
+                        <scm>git</scm>
+                        <!-- turn on/off debugging -->
+                        <debug>false</debug>
+                        <!-- skip files not under SCM-->
+                        <scmOnly>true</scmOnly>
+                        <!-- turn off warnings -->
+                        <warn>true</warn>
+                        <!-- for use with repair -->
+                        <update>false</update>
+                        <!-- check that year is correct -->
+                        <ignoreYear>false</ignoreYear>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+        <plugins>
+            <plugin>
+                <artifactId>maven-enforcer-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>enforce-java-version</id>
+                        <goals>
+                            <goal>enforce</goal>
+                        </goals>
+                        <configuration>
+                            <rules>
+                                <requireJavaVersion>
+                                    <message>To build this project JDK ${jdk.min.version} (or greater) is required.</message>
+                                    <version>${jdk.min.version}</version>
+                                </requireJavaVersion>
+                            </rules>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 
     <profiles>
         <profile>
@@ -48,20 +513,6 @@
             </distributionManagement>
         </profile>
         <profile>
-            <id>dependentModules</id>
-            <activation>
-                <activeByDefault>true</activeByDefault>
-                <property>
-                    <name>jaxrs.all.build</name>
-                </property>
-            </activation>
-            <modules>
-                <module>jaxrs-api</module>
-                <module>jaxrs-tck</module>
-                <module>examples</module>
-            </modules>
-        </profile>
-        <profile>
             <id>dependentSpecification</id>
             <activation>
                 <property>