TCK Migration: Move standalone jaxrs tck signature tests from jakartaee-tck (#1044)

* Initial commit to lift sigtest framework from jakartaee-tck

-added signature file, .map file and packagelist txt to resources

* signature test fixes

* Update README

* signature file update, address review comments

* move signature record to profile

- also add missing junit jar to jersey-tck

* generate temp files for mapfile, packagelistfile and signaturefiles

* corrected builderror in previous commit
diff --git a/jaxrs-tck/pom.xml b/jaxrs-tck/pom.xml
index ca46aa6..33d845d 100644
--- a/jaxrs-tck/pom.xml
+++ b/jaxrs-tck/pom.xml
@@ -84,6 +84,39 @@
         <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_${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>
@@ -93,14 +126,19 @@
             <plugin>
                 <artifactId>maven-surefire-plugin</artifactId>
                 <version>3.0.0-M5</version>
-                <configuration>
-					<excludedGroups>optional</excludedGroups>
-				</configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <version>3.2.0</version>
             </plugin>
 
         </plugins>
     </build>
+</profile>
 
+       
+    </profiles>
     <dependencies>
         <dependency>
             <groupId>jakarta.ws.rs</groupId>
@@ -164,5 +202,11 @@
             <scope>provided</scope>
         </dependency>
 
+        <dependency>
+            <groupId>org.netbeans.tools</groupId>
+            <artifactId>sigtest-maven-plugin</artifactId>
+            <version>1.4</version>
+        </dependency>
+
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/lib/util/TestUtil.java b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/lib/util/TestUtil.java
index fe19465..8233757 100644
--- a/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/lib/util/TestUtil.java
+++ b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/lib/util/TestUtil.java
@@ -34,7 +34,7 @@
  *
  */
 public final class TestUtil {
-  public static boolean traceflag = Boolean.getBoolean("junit.log.traceflag");
+  public static boolean traceflag = true;
 
   // this can be set in TestUtil's start logging method!!
   public static String sTestName;
@@ -405,9 +405,7 @@
         }
         if (true) {
           // System.out.println("INIT_CALLED AND SOCKET = NULL");
-          traceflag = Boolean
-              .valueOf(p.getProperty("harness.log.traceflag", "true"))
-              .booleanValue();
+          traceflag =   Boolean.getBoolean("junit.log.traceflag");
           hostOfHarness = p.getProperty("harness.host");
           portOfHarness = Integer
               .parseInt(p.getProperty("harness.log.port", "2000"));
@@ -443,9 +441,7 @@
         try {
           // System.out.println("INIT_CALLED AND TRYING TO ESABLISH CONN. AFTER
           // IOEXCEPTION");
-          traceflag = Boolean
-              .valueOf(p.getProperty("harness.log.traceflag", "true"))
-              .booleanValue();
+          traceflag =   Boolean.getBoolean("junit.log.traceflag");
           hostOfHarness = p.getProperty("harness.host");
           portOfHarness = Integer
               .parseInt(p.getProperty("harness.log.port", "2000"));
@@ -506,8 +502,7 @@
 
     testProps = p;
     NEW_LINE = p.getProperty("line.separator");
-    traceflag = Boolean.valueOf(p.getProperty("harness.log.traceflag", "true"))
-        .booleanValue();
+    traceflag =   Boolean.getBoolean("junit.log.traceflag");
     iWhereAreWe = VM_HARNESS;
     bAlreadyInitialized = true;
   }
@@ -527,9 +522,7 @@
     try {
       testProps = p;
       NEW_LINE = p.getProperty("line.separator");
-      traceflag = Boolean
-          .valueOf(p.getProperty("harness.log.traceflag", "true"))
-          .booleanValue();
+      traceflag =   Boolean.getBoolean("junit.log.traceflag");
       iWhereAreWe = VM_HARNESS;
       ServerSocket ss = getServerSocket(p);
       new Acceptor(ss);
diff --git a/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/ApiCheckDriver.java b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/ApiCheckDriver.java
new file mode 100644
index 0000000..7d7b06c
--- /dev/null
+++ b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/ApiCheckDriver.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2007, 2020 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/*
+ * $Id$
+ */
+package jakarta.ws.rs.tck.signaturetest;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.PrintWriter;
+import java.io.Serializable;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.util.LinkedList;
+import java.util.List;
+
+import jakarta.ws.rs.tck.lib.util.TestUtil;
+
+public final class ApiCheckDriver extends SignatureTestDriver
+    implements Serializable {
+
+  /* flags for the Diff utility argument list */
+  private static final String BASE_FLAG = "-base";
+
+  private static final String TEST_FLAG = "-test";
+
+  private static final String PACKAGE_NO_SUBS_FLAG = "-PackageWithoutSubpackages";
+
+  private static final String PACKAGE_FLAG = "-package";
+
+  private static final String EXPACKAGE_FLAG = "-expackage";
+
+  private static final String REFLECT_FLAG = "-reflect";
+
+  private static final String CONST_FLAG = "-constvalues";
+
+  // ---------------------------------------- Methods from SignatureTestDriver
+
+  @Override
+  protected String normalizeFileName(File f) {
+    return f.getPath();
+  }
+
+  @Override
+  protected String[] createTestArguments(String packageListFile, String mapFile,
+      String signatureRepositoryDir, String packageOrClassUnderTest,
+      String classpath, boolean bStaticMode) throws Exception {
+
+    Class pkgListClass = Class.forName("javasoft.sqe.apiCheck.PackageList");
+    Constructor pkgCtor = pkgListClass
+        .getDeclaredConstructor(new Class[] { String.class });
+    Object pkgInstance = pkgCtor.newInstance(new Object[] { packageListFile });
+
+    Method pkgMethod = pkgListClass.getDeclaredMethod("getSubPackagesFormatted",
+        new Class[] { String.class });
+
+    String excludePkgs = (String) pkgMethod.invoke(pkgInstance,
+        new Object[] { packageOrClassUnderTest });
+
+    List sigArgsList = new LinkedList();
+
+    sigArgsList.add(BASE_FLAG);
+    sigArgsList.add(
+        getSigFileInfo(packageOrClassUnderTest, mapFile, signatureRepositoryDir)
+            .getFile());
+
+    if (classpath != null && classpath.length() > 0) {
+      sigArgsList.add(TEST_FLAG);
+      sigArgsList.add(classpath);
+    }
+
+    sigArgsList.add(REFLECT_FLAG);
+    sigArgsList.add(CONST_FLAG);
+    sigArgsList.add(PACKAGE_FLAG);
+    sigArgsList.add(packageOrClassUnderTest);
+
+    if (excludePkgs != null && excludePkgs.length() > 0) {
+      sigArgsList.add(EXPACKAGE_FLAG);
+      sigArgsList.add(excludePkgs);
+    }
+
+    return (String[]) (sigArgsList.toArray(new String[sigArgsList.size()]));
+
+  } // END createTestArguments
+
+  @Override
+  protected boolean runSignatureTest(String packageOrClassName,
+      String[] testArguments) throws Exception {
+
+    Class diffClass = Class.forName("javasoft.sqe.apiCheck.Diff");
+    Method mainMethod = diffClass.getDeclaredMethod("main",
+        new Class[] { String[].class });
+    mainMethod.invoke(null, new Object[] { testArguments });
+
+    Method diffMethod = diffClass.getDeclaredMethod("diffsFound",
+        new Class[] {});
+    return (!((Boolean) diffMethod.invoke(null, new Object[] {}))
+        .booleanValue());
+
+  } // END runSignatureTest
+
+  @Override
+  protected boolean runPackageSearch(String packageOrClassName,
+      String[] testArguments) throws Exception {
+    Class sigTestClass = Class
+        .forName("com.sun.tdk.signaturetest.SignatureTest");
+    Object sigTestInstance = sigTestClass.newInstance();
+
+    ByteArrayOutputStream output = new ByteArrayOutputStream();
+
+    // we want to replace the PACKAGE_FLAG with PACKAGE_NO_SUBS_FLAG
+    for (int ii = 0; ii < testArguments.length; ii++) {
+      if (testArguments[ii].equals(PACKAGE_FLAG)) {
+        testArguments[ii] = PACKAGE_NO_SUBS_FLAG;
+      }
+    }
+
+    // dump args for debugging aid
+    TestUtil.logTrace(
+        "\nCalling:  com.sun.tdk.signaturetest.SignatureTest() with following args:");
+    for (int ii = 0; ii < testArguments.length; ii++) {
+      TestUtil.logTrace("	  testArguments[" + ii + "] = " + testArguments[ii]);
+    }
+
+    @SuppressWarnings("unchecked")
+    Method runMethod = sigTestClass.getDeclaredMethod("run",
+        new Class[] { String[].class, PrintWriter.class, PrintWriter.class });
+    runMethod.invoke(sigTestInstance,
+        new Object[] { testArguments, new PrintWriter(output, true), null });
+
+    String rawMessages = output.toString();
+
+    // currently, there is no way to determine if there are error msgs in
+    // the rawmessages, so we will always dump this and call it a status.
+    TestUtil.logMsg(
+        "********** Status Report '" + packageOrClassName + "' **********\n");
+    TestUtil.logMsg(rawMessages);
+    return sigTestInstance.toString().substring(7).startsWith("Passed.");
+  }
+
+  @Override
+  protected boolean verifyJTAJarForNoXA(String classpath, String repositoryDir) 
+      throws Exception  {
+    // Need to find out whether implementing this method is really required now.
+    // By default, signature test framework will use sigtest
+    return true;
+  }
+
+} // END ApiCheckDriver
diff --git a/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/ApiCheckRecorder.java b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/ApiCheckRecorder.java
new file mode 100644
index 0000000..69d4503
--- /dev/null
+++ b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/ApiCheckRecorder.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2007, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/*
+ * @(#)SigTestRecorder.java	1.1 03/03/05
+ */
+package jakarta.ws.rs.tck.signaturetest;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * This implementation of {@link Recorder} will record signatures using the
+ * <code>ApiCheck</code> framework.
+ * </p>
+ */
+public class ApiCheckRecorder extends Recorder {
+
+  // ------------------------------------------------------------ Constructors
+
+  public ApiCheckRecorder(String[] args) {
+
+    super(args);
+    System.setProperty("pkg.list.file.path", packageListFile);
+    System.setProperty("map.file.path", signatureMapFile);
+    System.setProperty("signature.repository.dir", signatureRepositoryDir);
+
+  } // END ApiCheckRecorder
+
+  // ------------------------------------------------------- Protected Methods
+
+  protected String[] createCommandLine(String version, String classpath,
+      String outputFileName, String packageName) {
+
+    List command = new ArrayList();
+
+    command.add("-constvalues");
+    command.add("-xpriv");
+
+    command.add("-in");
+    command.add(classpath);
+
+    return ((String[]) command.toArray(new String[command.size()]));
+
+  } // END getCommandLine
+
+  protected void writePackageListFile(String basePackageName,
+      String signatureFile, String packageListFile) throws Exception {
+
+    // no-op as this is done internally by our version of ApiCheck
+
+  } // END writePackageListFile
+
+  protected void doRecord(String[] commandLine) throws Exception {
+
+    Class batchSetup = Class.forName("javasoft.sqe.apiCheck.BatchSetup");
+    Method mainMethod = batchSetup.getDeclaredMethod("main",
+        new Class[] { String[].class });
+    mainMethod.invoke(null, new Object[] { commandLine });
+
+  } // END doRecord
+
+} // END SigTestRecorder
diff --git a/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/PackageList.java b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/PackageList.java
new file mode 100644
index 0000000..a5368ea
--- /dev/null
+++ b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/PackageList.java
@@ -0,0 +1,430 @@
+/*
+ * Copyright (c) 2007, 2020 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/*
+ * $Id$
+ */
+
+package jakarta.ws.rs.tck.signaturetest;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+/**
+ * This class represents a package list file. A package list file is used in
+ * conjunction with a set of signature files to execute API signature tests.
+ * Users specify which set of package APIs are verified. Each package's
+ * signature is verified independently. As such all valid sub-packages must be
+ * excluded while a package's signature is being verified. This allows API check
+ * to determine incompatible additional packages included in a distribution.
+ * <p/>
+ * This class builds a package list file when signatures are recorded and
+ * provides an API to provide valid sub-package lists when signatures are played
+ * back (verified).
+ * <p/>
+ * In record mode, this class reads the existing package list file, if one
+ * exists, and removes the package (as well as sub-packages) that are currently
+ * being recorded. All package names read from the existing package list file
+ * are held in a tree set which sorts the package names and keeps duplicate
+ * package names from ocurring. The user can then instruct this class to write
+ * out the package list file. At this point this class reads the currently
+ * recorded signature file and extracts each package names and adds it to the
+ * tree set. After this step the previous package list file is saved as a backup
+ * and the new package list file is written to disk.
+ * <p/>
+ * In playback mode, this class reads the contents of the package list file and
+ * stores each package name in a tree set. Users can then invoke the
+ * getSubPackages method to retrieve the valid sub-packages for any given
+ * package. This is done by simply examining the package names in the tree set
+ * and returning any package name that starts with the parent package name and a
+ * trailing period character.
+ */
+class PackageList {
+
+  // Any line in the packageFile starting with this character is a comment
+  private static final char COMMENT_CHAR = '#';
+
+  private static final String BACKUP_EXT = ".bak";
+
+  // File containing the list of packages and sub-packages
+  private File packageFile;
+
+  // Signature file where the package signatures were recorded
+  private File sigFile;
+
+  // Name of the package being recorded
+  private String additionalPackageName;
+
+  // Name of packages and sub-packages in the
+  private Set packageNames = new TreeSet();
+
+  /**
+   * Creates an instance of the PackageList class. The PackageList instance
+   * reads the specified package file and populates it's internal state with the
+   * package names found in this file. Users should use this c'tor when playing
+   * back signature files. Users can init the PackageList instance then use the
+   * "String[] getSubPackages(String packageName)" method to get the list of
+   * valid sub-packages for every package who's signature is being verified.
+   *
+   * @param packageFileName
+   *          The name of the file that contains the package list. This file
+   *          contains the names of all the packages that exist across all the
+   *          signature files that makeup this deliverable. This file is used to
+   *          generate a list of valid sub-packages that must be exclued when
+   *          testing theor parent package's signature.
+   *
+   * @throws Exception
+   *           when the packageFileName does not exist.
+   */
+  public PackageList(String packageFileName) throws Exception {
+    packageFile = new File(packageFileName);
+    if (packageFile.exists() && packageFile.isFile()) {
+      extractExistingPackageNames();
+    } else {
+      throw new FileNotFoundException(packageFileName);
+    }
+  }
+
+  /**
+   * Creates an instance of the PackageList class. The PackageList instance
+   * reads the contents of the packageFileName and stores it in it's internal
+   * state. Next, any packages whos name starts with the specified packageName
+   * are removed from the internal package list. This is done because this is
+   * the package being recorded and we need to remove any previously recorded
+   * package names in case any sub-packages have been removed since the last
+   * time the signatures were recorded. Users should use this c'tor when they
+   * are recording signature files never during playback.
+   *
+   * @param packageName
+   *          The name of the package whos signatures are being recorded (along
+   *          with sub-packages).
+   * @param sigFileName
+   *          The name of the file that contains the recored signatures.
+   * @param packageFileName
+   *          The name of the file that contains the package list. This file
+   *          contains the names of all the packages that exist across all the
+   *          signature files that makeup this deliverable. This file is used to
+   *          generate a list of valid sub-packages that must be exclued when
+   *          testing their parent package's signature.
+   *
+   * @throws Exception
+   *           when an error occurs reading the packageFileName or the
+   *           sigFileName does not exist.
+   */
+  public PackageList(String packageName, String sigFileName,
+      String packageFileName) throws Exception {
+    this.additionalPackageName = packageName;
+    sigFile = new File(sigFileName);
+    if (!sigFile.exists() || !sigFile.isFile()) {
+      throw new FileNotFoundException(sigFileName);
+    }
+    packageFile = new File(packageFileName);
+    if (packageFile.exists() && packageFile.isFile()) {
+      extractExistingPackageNames();
+      removeExistingPackage();
+    }
+  }
+
+  /**
+   * Read the package names stored in the package list file. Each package name
+   * found in the package list file is added to the internal tree set.
+   *
+   * @throws Exception
+   *           if there is an error opening or reading the package list file.
+   */
+  private void extractExistingPackageNames() throws Exception {
+    BufferedReader in = new BufferedReader(new FileReader(packageFile));
+    String line;
+    String trimLine;
+    try {
+      while ((line = in.readLine()) != null) {
+        trimLine = line.trim();
+        if (isComment(trimLine) || "".equals(trimLine)) {
+          continue;
+        }
+        packageNames.add(trimLine);
+      }
+    } finally {
+      try {
+        in.close();
+      } catch (Exception e) {
+      }
+    }
+  }
+
+  /**
+   * Returns true if the specified string starts with a comment character as
+   * denoted by the COMMENT_CHAR constant.
+   *
+   * @param line
+   *          Determins of this line is a comment line
+   *
+   * @return boolean True if the specified line is a comment line else false.
+   */
+  private boolean isComment(String line) {
+    if (line == null) {
+      return false;
+    }
+    String theLine = line.trim();
+    if (theLine.length() > 0) {
+      return (theLine.charAt(0) == COMMENT_CHAR);
+    }
+
+    return false;
+  }
+
+  /**
+   * Removes package names from the package list file. The packages that are
+   * removed are the ones currently being recorded. The packages being recorded
+   * is denoted by this.additionalPackageName. This includes any sub-packages of
+   * the additionalPackageName. This step is necessary in the cases where a
+   * sub-package has been removed from a parent package in between signature
+   * recordings.
+   */
+  private void removeExistingPackage() {
+    String delPackage = this.additionalPackageName;
+    String packageName;
+    List delPkgs = new ArrayList();
+    // iterate over package set and find package names to remove
+    for (Iterator i = packageNames.iterator(); i.hasNext();) {
+      packageName = (String) i.next();
+      if (packageName.startsWith(delPackage)) {
+        delPkgs.add(packageName);
+      }
+    }
+    // actually remove the package names from the set
+    for (int i = 0; i < delPkgs.size(); i++) {
+      packageName = (String) (delPkgs.get(i));
+      packageNames.remove(packageName);
+      System.out.println(
+          "PackageList.removeExistingPackage() \"" + packageName + "\"");
+    }
+  }
+
+  /**
+   * Write the package list out to the package list file. This is done by
+   * reading all the package names in the specified signature file and adding
+   * them to the internal tree set. Then the old package list file is removed
+   * and the new package list file is written out.
+   *
+   * @throws Exception
+   *           if there is a problem removing the existing package file or
+   *           writting the new package list file.
+   */
+  public void writePkgListFile() throws Exception {
+    readPkgsFromSigFile();
+    removePkgFile();
+    writePkgFile();
+  }
+
+  /**
+   * Extract the package name from the specified string. The specified string
+   * should have the form: "package jakarta.ejb;"
+   *
+   * @param packageLine
+   *          The string containing the package name.
+   *
+   * @return String The extracted package name.
+   *
+   * @throws Exception
+   *           if the specified string does not conform to the expected format.
+   */
+  private String parsePackageName(String packageLine) throws Exception {
+
+    // sig test framework doesn't have the concept of package entries
+    // as the ApiCheck signature format does.
+    // Instead, we need to parse an entry similar to this:
+    // CLSS public jakarta.some.package.SomeClass
+
+    return packageLine.substring(packageLine.lastIndexOf(' ') + 1,
+        packageLine.lastIndexOf('.'));
+  }
+
+  /**
+   * Reads the package names from the signature file. Each package name that is
+   * read is added to this classes internal tree set.
+   *
+   * @throws Exception
+   *           if there is an error opening or reading the signature file.
+   */
+  private void readPkgsFromSigFile() throws Exception {
+    BufferedReader in = new BufferedReader(new FileReader(sigFile));
+    String line;
+    String trimLine;
+    try {
+      while ((line = in.readLine()) != null) {
+        trimLine = line.trim();
+        if (trimLine.startsWith("CLSS")) {
+          packageNames.add(parsePackageName(trimLine));
+        }
+      }
+    } finally {
+      try {
+        in.close();
+      } catch (Exception e) {
+      }
+    }
+  }
+
+  /**
+   * Removes the existing package list file. The package list file is actually
+   * moved to a backup file if it exists. The old backup is lost.
+   *
+   * @throws Exception
+   *           if there is an error moving the current package list file to a
+   *           backup file.
+   */
+  private void removePkgFile() throws Exception {
+    File backupPkgFile = new File(packageFile.getPath() + BACKUP_EXT);
+    if (backupPkgFile.exists() && backupPkgFile.isFile()) {
+      backupPkgFile.delete();
+    }
+    if (packageFile.isFile() && packageFile.exists()) {
+      File copyPackageFile = new File(packageFile.getPath());
+      copyPackageFile.renameTo(backupPkgFile);
+    }
+  }
+
+  /**
+   * Write a simple header to the package list file to explain what the file is.
+   *
+   * @param out
+   *          The BufferedWriter to dump the header to.
+   *
+   * @throws Exception
+   *           if there is any errors writing the header to the specified
+   *           BufferedWriter.
+   */
+  private void writeHeader(BufferedWriter out) throws Exception {
+    out.write(COMMENT_CHAR);
+    out.write(COMMENT_CHAR);
+    out.newLine();
+    out.write(COMMENT_CHAR + " This file contains a list of all the packages");
+    out.newLine();
+    out.write(COMMENT_CHAR + " contained in the signature files for this");
+    out.newLine();
+    out.write(
+        COMMENT_CHAR + " deliverable.  This file is used to exclude valid");
+    out.newLine();
+    out.write(COMMENT_CHAR + " sub-packages from being verified when their");
+    out.newLine();
+    out.write(COMMENT_CHAR + " parent package's signature is checked.");
+    out.newLine();
+    out.write(COMMENT_CHAR);
+    out.write(COMMENT_CHAR);
+    out.newLine();
+    out.newLine();
+  }
+
+  /**
+   * Write the list of package names out to a package list file.
+   *
+   * @throws Exception
+   *           if there is an error creating and writting the package list file.
+   */
+  private void writePkgFile() throws Exception {
+    BufferedWriter out = null;
+    try {
+      out = new BufferedWriter(new FileWriter(packageFile));
+      writeHeader(out);
+      for (Iterator i = packageNames.iterator(); i.hasNext();) {
+        String packageName = (String) i.next();
+        out.write(packageName);
+        out.newLine();
+        System.out
+            .println("PackageList.writePkgFile() \"" + packageName + "\"");
+      }
+    } finally {
+      if (out != null) {
+        out.close();
+      }
+    }
+  }
+
+  /**
+   * Returns the list of sub-packages that exist in the specified package name.
+   *
+   * @param pkgName
+   *          The name of the package we want the sub-package list for.
+   *
+   * @return String[] The sub-packages that live under the specified parent
+   *         package.
+   */
+  public String[] getSubPackages(String pkgName) {
+    List result = new ArrayList();
+    String subPackageName = pkgName + ".";
+    for (Iterator i = packageNames.iterator(); i.hasNext();) {
+      String packageName = (String) i.next();
+      if (packageName.startsWith(subPackageName)) {
+        result.add(packageName);
+      }
+    }
+    return (String[]) (result.toArray(new String[result.size()]));
+  }
+
+  /**
+   * Returns the list of sub-packages that exist in the specified package name.
+   * The returned string matches the API check format of specifying multiple
+   * packages with a single string. Each package name is separated with the "+"
+   * character.
+   *
+   * @param pkgName
+   *          The name of the package we want the sub-package list for.
+   *
+   * @return String The sub-packages that live under the specified parent
+   *         package.
+   */
+  public String getSubPackagesFormatted(String pkgName) {
+    StringBuffer formattedResult = new StringBuffer();
+    String[] result = getSubPackages(pkgName);
+    for (int i = 0; i < result.length; i++) {
+      formattedResult.append(result[i]);
+      if (i < (result.length - 1)) {
+        formattedResult.append("+");
+      }
+    }
+    return formattedResult.toString();
+  }
+
+  /*
+   * Test Driver
+   */
+  public static void main(String[] args) throws Exception {
+    System.out.println("\n\n*** Creating package list file ***\n\n");
+    PackageList list = new PackageList("jakarta.ejb",
+        "/home/ryano/cts-tools-master/tools/api-check/test/jakarta.ejb.sig_2.1",
+        "/home/ryano/cts-tools-master/tools/api-check/test/pkg-list.txt");
+    list.writePkgListFile();
+
+    System.out
+        .println("\n\n*** Reading sub-packages from package list file ***\n\n");
+    PackageList readList = new PackageList(
+        "/home/ryano/cts-tools-master/tools/api-check/test/pkg-list.txt");
+    System.out.println(Arrays.asList(readList.getSubPackages("jakarta.ejb")));
+    System.out.println(readList.getSubPackagesFormatted("jakarta.ejb"));
+  }
+
+} // end class PackageList
diff --git a/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/README b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/README
new file mode 100644
index 0000000..0738143
--- /dev/null
+++ b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/README
@@ -0,0 +1,43 @@
+The latest signature files are updated in the jaxrsp-api repoitory 
+(jaxrs-api/jaxrs-tck/src/main/resources/jakarta/ws/rs/tck/signaturetest) 
+generated using sigtest-maven-plugin.jar(version 1.4).
+
+The signature tests are run using the sigtest-maven-plugin.jar and the framework avaliable in this folder.
+
+
+
+For TCK developers  :-
+
+  1. Generate Signature Files : The signature file will be generated by the TCK team using jaxrs-tck/pom.xml 
+  by running 'mvn install -Precord-signature'. The classpath should contain the api jar for which we are generating the signature file.
+
+  The signature file name expected is jakarta.ws.rs.sig_${version} , where version is the api version for which the signature is generated.
+
+  2. Place the required files in the TCK folder :
+
+    All the below files has to be placed in the folder jaxrs-tck/src/main/resources/jakarta/ws/rs/tck/signaturetest, so they are included as part of the TCK jar during the build.
+
+    -The signature file generated from above of the name jakarta.ws.rs.sig_${version}
+    -The mapping file will be named sig-test.map, it contains the api to version mapping. This file will be used to pick the right signature file when running the signature test.
+    -The package list file will be named sig-test-pkg-list.txt, contains the list of packages tested.
+
+
+
+For TCK users (to run the signature test as a Junit test) :-
+
+
+  1. Set the below system properties correctly :
+
+    jimage.dir //The jdk9+(jdk11 for this release) will be extracted to this location as to use the Java modules in the path.
+    optional.tech.packages.to.ignore // The optional package that should be ignored while running the signature test
+    signature.sigTestClasspath // the sigTestClasspath that will contain the implementation jar that needs to be tested along with dependent jars.
+
+    For eg:
+
+    <jimage.dir>${project.build.directory}/jdk11-bundle</jimage.dir>
+    <optional.tech.packages.to.ignore>jakarta.xml.bind</optional.tech.packages.to.ignore>
+    <signature.sigTestClasspath>${project.build.directory}/glassfish6/glassfish/modules/jakarta.ws.rs-api.jar:${project.build.directory}/glassfish6/glassfish/modules/jakarta.xml.bind-api.jar:${project.build.directory}/jdk11-bundle/java.base:${project.build.directory}/jdk11-bundle/java.rmi:${project.build.directory}/jdk11-bundle/java.sql:${project.build.directory}/jdk11-bundle/java.naming</signature.sigTestClasspath>
+
+  2. The signature test alone can be run using below command within jersey-tck/ directory.
+
+  mvn clean verify -Parq-glassfish-managed -Dit.test=jakarta.ws.rs.tck.signaturetest.**
diff --git a/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/Recorder.java b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/Recorder.java
new file mode 100644
index 0000000..7838aad
--- /dev/null
+++ b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/Recorder.java
@@ -0,0 +1,284 @@
+/*
+ * Copyright (c) 2007, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/*
+ * $Id$
+ */
+
+package jakarta.ws.rs.tck.signaturetest;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Properties;
+
+import jakarta.ws.rs.tck.lib.util.TestUtil;
+
+public abstract class Recorder {
+
+  protected Properties signatureMap;
+
+  protected String packageListFile;
+
+  protected String classpath;
+
+  protected String signatureRepositoryDir;
+
+  protected String signatureMapFile;
+
+  // ------------------------------------------------------------ Constructors
+
+  public Recorder(String[] args) {
+
+    TestUtil.logTrace("\nCalling:  Recorder with following args:");
+    for (int ii = 0; ii < args.length; ii++) {
+      TestUtil.logTrace("	  args[" + ii + "] = " + args[ii]);
+    }
+
+    Arguments arguments = new Arguments(args);
+    packageListFile = arguments.getPackageList();
+    classpath = arguments.getClasspath();
+    signatureRepositoryDir = arguments.getRepository();
+    signatureMapFile = arguments.getSignatureMap();
+    loadSignatureMap(signatureMapFile);
+  }
+
+  // ---------------------------------------------------------- Public Methods
+
+  /**
+   * <p>
+   * Record the signatures for each package listed in the
+   * <code>TS_HOME/bin/sig-test.map</code> file.
+   * </p>
+   */
+  public void batchRecord() {
+
+    for (Iterator i = signatureMap.keySet().iterator(); i.hasNext();) {
+      String basePackageName = (String) i.next();
+      String version = (String) signatureMap.get(basePackageName);
+      String outputFileName = getOutputFileName(basePackageName, version);
+      String[] commandLine = createCommandLine(version, classpath,
+          outputFileName, basePackageName);
+
+      try {
+
+        // dump command line args passed to Setup()...
+        TestUtil.logTrace("\n\nDUMPING SIGTEST COMMAND LINE: \n");
+        for (int ii = 0; ii < commandLine.length; ii++) {
+          TestUtil.logTrace("commandLine[" + ii + "] = " + commandLine[ii]);
+        }
+        TestUtil.logTrace("\nDONE DUMPING SIGTEST COMMAND LINE. \n\n");
+
+        doRecord(commandLine);
+      } catch (Exception e) {
+        throw new RuntimeException(e);
+      }
+
+      try {
+        writePackageListFile(basePackageName, outputFileName, packageListFile);
+      } catch (Exception e) {
+        System.out.println("Unexpected exception: " + e);
+        e.printStackTrace();
+        System.exit(1);
+      }
+    }
+
+  } // END batchRecord
+
+  // ------------------------------------------------------- Protected Methods
+
+  /**
+   * Write, to a separate file, all of the packages that were recorded. How this
+   * is accomplised will be dependent on the framework.
+   * 
+   * @param basePackageName
+   *          the base package
+   * @param signatureFile
+   *          the file in which the signatures were recorded to
+   * @param packageListFile
+   *          the name of the package list file (which may or may not exist)
+   * @throws Exception
+   *           if an error occurs writing the file
+   */
+  protected abstract void writePackageListFile(String basePackageName,
+      String signatureFile, String packageListFile) throws Exception;
+
+  /**
+   * Create a array of arguments appropriate for use with different signature
+   * recording frameworks.
+   * 
+   * @param version
+   *          The version of the API
+   * @param classpath
+   *          the classpath containing classes that will be recorded
+   * @param outputFileName
+   *          the file in which to write the recorded signatures to
+   * @param packageName
+   *          the base package name of the signatures that will be recorded
+   */
+  protected abstract String[] createCommandLine(String version,
+      String classpath, String outputFileName, String packageName);
+
+  /**
+   * Perform whatever action in necessary to do the actual recording of the
+   * signatures.
+   * 
+   * @param commandLine
+   *          the options to invoke the recording facility
+   * @throws Exception
+   *           if an error occurs during the record process
+   */
+  protected abstract void doRecord(String[] commandLine) throws Exception;
+
+  // --------------------------------------------------------- Private Methods
+
+  private void loadSignatureMap(String signatureTestMapFile) {
+
+    signatureMap = new Properties();
+    try {
+      signatureMap.load(
+          new BufferedInputStream(new FileInputStream(signatureTestMapFile)));
+    } catch (FileNotFoundException fnfe) {
+      throw new RuntimeException(
+          "Unable to find or read file '" + signatureTestMapFile + '\'');
+    } catch (IOException ioe) {
+      throw new RuntimeException(
+          "Error processing file '" + signatureTestMapFile + '\'', ioe);
+    }
+
+  } // END loadSignatureMap
+
+  private String getOutputFileName(String name, String version) {
+
+    StringBuffer fileName = new StringBuffer();
+    fileName.append(signatureRepositoryDir).append(File.separatorChar);
+    fileName.append(name).append(".sig_").append(version);
+    return fileName.toString();
+
+  } // END getOutputFileName
+
+  // --------------------------------------------------- Static Nested Classes
+
+  private static class Arguments {
+
+    private static final String CLASSPATH_ARG = "-classpath";
+
+    private static final String PKG_LIST_ARG = "-packagelist";
+
+    private static final String SIG_MAP_ARG = "-sigmap";
+
+    private static final String REPOSITORY_ARG = "-repository";
+
+    private String classpath;
+
+    private String packageList;
+
+    private String signatureMap;
+
+    private String repository;
+
+    // -------------------------------------------------------- Constructors
+
+    Arguments(String[] args) {
+
+      // all 4 arguments must be defined, thus there should be 8 elements
+      if (args.length != 8) {
+        System.out
+            .println("Error - incorrect number of args should be 8 but was:  "
+                + args.length);
+        System.out.println("Args passed in were:  ");
+        for (int ii = 0; ii < args.length; ii++) {
+          System.out.println("args[" + ii + "] = " + args[ii]);
+        }
+
+        throw new IllegalArgumentException();
+      }
+
+      String[] clonedArgs = (String[]) args.clone();
+      Arrays.sort(clonedArgs);
+      // ensure the proper arguments are specified
+      if (Arrays.binarySearch(clonedArgs, CLASSPATH_ARG) < 0
+          || Arrays.binarySearch(clonedArgs, PKG_LIST_ARG) < 0
+          || Arrays.binarySearch(clonedArgs, SIG_MAP_ARG) < 0
+          || Arrays.binarySearch(clonedArgs, REPOSITORY_ARG) < 0) {
+        usage();
+        System.exit(1);
+      }
+
+      for (int i = 0; i < args.length; i += 2) {
+        if (CLASSPATH_ARG.equals(args[i])) {
+          classpath = args[i + 1];
+        } else if (PKG_LIST_ARG.equals(args[i])) {
+          packageList = args[i + 1];
+        } else if (SIG_MAP_ARG.equals(args[i])) {
+          signatureMap = args[i + 1];
+        } else if (REPOSITORY_ARG.equals(args[i])) {
+          repository = args[i + 1];
+        } else {
+          // shouldn't get here
+          usage();
+          System.exit(1);
+        }
+      }
+
+    } // END Arguments
+
+    // ---------------------------------------------------------- Properties
+
+    public String getClasspath() {
+
+      return classpath;
+
+    } // END getClasspath
+
+    public String getPackageList() {
+
+      return packageList;
+
+    } // END getPackageList
+
+    public String getSignatureMap() {
+
+      return signatureMap;
+
+    } // END getSignatureMap
+
+    public String getRepository() {
+
+      return repository;
+
+    } // END getRepository
+
+    private static void usage() {
+
+      String usage = "Usage:"
+          + "\t-classpath (classpath to JARs and/or classes under test)\n"
+          + "\t-packageList (Reference to the sig-test-pkg-list.txt file)\n"
+          + "\t-sigmap (Reference to the sig-test.map file)\n"
+          + "\t-repository (Directory in which to write the recorded"
+          + "\tsignatures to)\n\n";
+
+      System.err.println(usage);
+
+    } // END usage
+
+  } // END Arguments
+
+}
diff --git a/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/RecorderFactory.java b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/RecorderFactory.java
new file mode 100644
index 0000000..4336f3a
--- /dev/null
+++ b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/RecorderFactory.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2007, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/*
+ * $Id$
+ */
+
+package jakarta.ws.rs.tck.signaturetest;
+
+/**
+ * <p>
+ * This class is a bit overloaded in that it serves as both a factory and entry
+ * point from Ant to handle signature recording.
+ * </p>
+ *
+ * <p>
+ * The desired <code>type</code> is provided using a system property with a key
+ * of <code>recorder.type</code>. Valid values for the
+ * <code>recorder.type</code> property are:
+ * <ul>
+ * <li>apicheck</li>
+ * <li>sigtest</li>
+ * </ul>
+ * </p>
+ * 
+ * <p>
+ * If the <code>recorder.type</code> property is not set, this factory will
+ * return a <code>SignatureTestRecorder</code> using the SigTest framework.
+ * </p>
+ */
+public class RecorderFactory {
+
+  public static final String API_CHECK_RECORDER = "apicheck";
+
+  public static final String SIG_TEST_RECORDER = "sigtest";
+
+  // ---------------------------------------------------------- Public Methods
+
+  /**
+   * Returns a {@link Recorder} instance to handle recording signatures based on
+   * the value specified via the <code>type</code> argument.
+   * 
+   * @param type
+   *          the type of {@link Recorder} to use
+   * @param args
+   *          the args to pass to the {@link Recorder}
+   * @return a {@link Recorder} instanced based on the <code>type</code>
+   *         provided
+   */
+  public static Recorder getRecorder(String type, String[] args) {
+
+    if (type == null) {
+      throw new IllegalArgumentException("'type' cannot be null");
+    }
+
+    if (type.equals(API_CHECK_RECORDER)) {
+      return new ApiCheckRecorder(args);
+    } else if (type.equals(SIG_TEST_RECORDER)) {
+      return new SigTestRecorder(args);
+    } else {
+      throw new IllegalArgumentException("Unknown type: " + type);
+    }
+
+  } // END getRecorder
+
+  public static void main(String[] args) {
+
+    String type = System.getProperty("recorder.type", SIG_TEST_RECORDER);
+    Recorder recorder = getRecorder(type, args);
+    recorder.batchRecord();
+
+  } // END main
+
+}
diff --git a/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SigTest.java b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SigTest.java
new file mode 100644
index 0000000..f5dc71f
--- /dev/null
+++ b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SigTest.java
@@ -0,0 +1,393 @@
+/*
+ * Copyright (c) 2007, 2021 Oracle and/or its affiliates and others.
+ * All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/*
+ * $Id$
+ */
+
+package jakarta.ws.rs.tck.signaturetest;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.io.PrintStream;
+
+import java.util.ArrayList;
+import java.util.Properties;
+
+import jakarta.ws.rs.tck.lib.util.TestUtil;
+
+/**
+ * This class should be extended by TCK developers that wish to create a set of
+ * signature tests that run outside of any Java EE container. Developers must
+ * implement the getPackages method to specify which packages are to be tested
+ * by the signature test framework.
+ */
+public abstract class SigTest {
+
+  protected SignatureTestDriver driver;
+
+  /**
+   * <p>
+   * Returns a {@link SignatureTestDriver} appropriate for the particular TCK
+   * (using API check or the Signature Test Framework).
+   * </p>
+   *
+   * <p>
+   * The default implementation of this method will return a
+   * {@link SignatureTestDriver} that will use API Check. TCK developers can
+   * override this to return the desired {@link SignatureTestDriver} for their
+   * TCK.
+   */
+  protected SignatureTestDriver getSigTestDriver() {
+
+    if (driver == null) {
+      driver = SignatureTestDriverFactory.getInstance(SignatureTestDriverFactory.SIG_TEST);
+    }
+
+    return driver;
+
+  } // END getSigTestDriver
+
+  /**
+   * Returns the location of the package list file. This file denotes the valid
+   * sub-packages of any package being verified in the signature tests.
+   *
+   * Sub-classes are free to override this method if they use a different path
+   * or filename for their package list file. Most users should be able to use
+   * this default implementation.
+   *
+   * @return String The path and name of the package list file.
+   */
+  protected String getPackageFile() {
+    return getSigTestDriver().getPackageFileImpl(testInfo.getBinDir());
+  }
+
+  /**
+   * Returns the path and name of the signature map file that this TCK uses when
+   * conducting signature tests. The signature map file tells the signature test
+   * framework which API versions of tested packages to use. To keep this code
+   * platform independent, be sure to use the File.separator string (or the
+   * File.separatorChar) to denote path separators.
+   *
+   * Sub-classes are free to override this method if they use a different path
+   * or filename for their signature map file. Most users should be able to use
+   * this default implementation.
+   *
+   * @return String The path and name of the signature map file.
+   */
+  protected String getMapFile() {
+    return getSigTestDriver().getMapFileImpl(testInfo.getBinDir());
+  }
+
+  /**
+   * Returns the directory that contains the signature files.
+   *
+   * Sub-classes are free to override this method if they use a different
+   * signature repository directory. Most users should be able to use this
+   * default implementation.
+   *
+   * @return String The signature repository directory.
+   */
+  protected String getRepositoryDir() {
+    return getSigTestDriver().getRepositoryDirImpl(testInfo.getTSHome());
+  }
+
+  /**
+   * Returns the list of Optional Packages which are not accounted for. By
+   * 'unlisted optional' we mean the packages which are Optional to the
+   * technology under test that the user did NOT specifically list for testing.
+   * For example, with Java EE 7 implementation, a user could additionally opt
+   * to test a JSR-88 technology along with the Java EE technology. But if the
+   * user chooses NOT to list this optional technology for testing (via ts.jte
+   * javaee.level prop) then this method will return the packages for JSR-88
+   * technology with this method call.
+   * <p/>
+   * This is useful for checking for a scenarios when a user may have forgotten
+   * to identify a whole or partial technology implementation and in such cases,
+   * Java EE platform still requires testing it.
+   * <p/>
+   * Any partial or complete impl of an unlistedOptionalPackage sends up a red
+   * flag indicating that the user must also pass tests for this optional
+   * technology area.
+   * <p/>
+   * Sub-classes are free to override this method if they use a different
+   * signature repository directory. Most users should be able to use this
+   * default implementation - which means that there was NO optional technology
+   * packages that need to be tested.
+   *
+   * @return ArrayList<String>
+   */
+  protected ArrayList<String> getUnlistedOptionalPackages() {
+    return null;
+  }
+
+  /**
+   * Returns the list of packages that must be tested by the siganture test
+   * framework. TCK developers must implement this method in their signature
+   * test sub-class.
+   *
+   * @return String A list of packages that the developer wishes to test using
+   *         the signature test framework.
+   */
+  protected abstract String[] getPackages();
+
+  /**
+   * Returns an array of individual classes that must be tested by the signature
+   * test framwork. TCK developers may override this method when this
+   * functionality is needed. Most will only need package level granularity.
+   *
+   * @return an Array of Strings containing the individual classes the framework
+   *         should test. The default implementation of this method returns a
+   *         zero-length array.
+   */
+  protected String[] getClasses() {
+
+    return new String[] {};
+
+  } // END getClasses
+
+  protected SigTestData testInfo; // holds the bin.dir property
+
+  /**
+   * Called by the test framework to initialize this test. The method simply
+   * retrieves some state information that is necessary to run the test when
+   * when the test framework invokes the run method (actually the test1 method).
+   *
+   * @param args
+   *          List of arguments passed to this test.
+   * @param p
+   *          Properties specified by the test user and passed to this test via
+   *          the test framework.
+   * @throws Fault
+   *           When an error occurs reading or saving the state information
+   *           processed by this method.
+   */
+  public void setup() {
+    try {
+      TestUtil.logTrace("$$$ SigTest.setup() called");
+      this.testInfo = new SigTestData();
+      TestUtil.logTrace("$$$ SigTest.setup() complete");
+    } catch (Exception e) {
+      TestUtil.logErr("Unexpected exception " + e.getMessage());
+      //throw new Fault("setup failed!", e);
+    }
+  }
+
+
+  /**
+   * Called by the test framework to cleanup any outstanding state. This method
+   * simply passes the message through to the utility class so the
+   * implementation can be used by both framework base classes.
+   *
+   * @throws Fault
+   *           When an error occurs cleaning up the state of this test.
+   */
+  public void cleanup() throws Fault {
+    TestUtil.logTrace("$$$ SigTest.cleanup() called");
+    try {
+      getSigTestDriver().cleanupImpl();
+      TestUtil.logTrace("$$$ SigTest.cleanup() returning");
+    } catch (Exception e) {
+      throw new Fault("Cleanup failed!", e);
+    }
+  }
+
+  public static class Fault extends Exception {
+    private static final long serialVersionUID = -1574745208867827913L;
+
+    public Throwable t;
+
+    /**
+     * creates a Fault with a message
+     */
+    public Fault(String msg) {
+      super(msg);
+      TestUtil.logErr(msg);
+    }
+
+    /**
+     * creates a Fault with a message.
+     *
+     * @param msg
+     *          the message
+     * @param t
+     *          prints this exception's stacktrace
+     */
+    public Fault(String msg, Throwable t) {
+      super(msg);
+      this.t = t;
+      // TestUtil.logErr(msg, t);
+    }
+
+    /**
+     * creates a Fault with a Throwable.
+     *
+     * @param t
+     *          the Throwable
+     */
+    public Fault(Throwable t) {
+      super(t);
+      this.t = t;
+    }
+
+    /**
+     * Prints this Throwable and its backtrace to the standard error stream.
+     *
+     */
+    public void printStackTrace() {
+      if (this.t != null) {
+        this.t.printStackTrace();
+      } else {
+        super.printStackTrace();
+      }
+    }
+
+    /**
+     * Prints this throwable and its backtrace to the specified print stream.
+     *
+     * @param s
+     *          <code>PrintStream</code> to use for output
+     */
+    public void printStackTrace(PrintStream s) {
+      if (this.t != null) {
+        this.t.printStackTrace(s);
+      } else {
+        super.printStackTrace(s);
+      }
+    }
+
+    /**
+     * Prints this throwable and its backtrace to the specified print writer.
+     *
+     * @param s
+     *          <code>PrintWriter</code> to use for output
+     */
+    public void printStackTrace(PrintWriter s) {
+      if (this.t != null) {
+        this.t.printStackTrace(s);
+      } else {
+        super.printStackTrace(s);
+      }
+    }
+
+    @Override
+    public Throwable getCause() {
+      return t;
+    }
+
+    @Override
+    public synchronized Throwable initCause(Throwable cause) {
+      if (t != null)
+        throw new IllegalStateException("Can't overwrite cause");
+      if (!Exception.class.isInstance(cause))
+        throw new IllegalArgumentException("Cause not permitted");
+      this.t = (Exception) cause;
+      return this;
+    }
+  }
+
+  /**
+   * This exception is used only by EETest. Overrides 3 printStackTrace methods
+   * to preserver the original stack trace. Using setStackTraceElement() would
+   * be more elegant but it is not available prior to j2se 1.4.
+   *
+   * @author Kyle Grucci
+   */
+  public static class SetupException extends Exception {
+    private static final long serialVersionUID = -7616313680616499158L;
+
+    public Exception e;
+
+    /**
+     * creates a Fault with a message
+     */
+    public SetupException(String msg) {
+      super(msg);
+    }
+
+    /**
+     * creates a SetupException with a message
+     *
+     * @param msg
+     *          the message
+     * @param e
+     *          prints this exception's stacktrace
+     */
+    public SetupException(String msg, Exception e) {
+      super(msg);
+      this.e = e;
+    }
+
+    /**
+     * Prints this Throwable and its backtrace to the standard error stream.
+     *
+     */
+    public void printStackTrace() {
+      if (this.e != null) {
+        this.e.printStackTrace();
+      } else {
+        super.printStackTrace();
+      }
+    }
+
+    /**
+     * Prints this throwable and its backtrace to the specified print stream.
+     *
+     * @param s
+     *          <code>PrintStream</code> to use for output
+     */
+    public void printStackTrace(PrintStream s) {
+      if (this.e != null) {
+        this.e.printStackTrace(s);
+      } else {
+        super.printStackTrace(s);
+      }
+    }
+
+    /**
+     * Prints this throwable and its backtrace to the specified print writer.
+     *
+     * @param s
+     *          <code>PrintWriter</code> to use for output
+     */
+    public void printStackTrace(PrintWriter s) {
+      if (this.e != null) {
+        this.e.printStackTrace(s);
+      } else {
+        super.printStackTrace(s);
+      }
+    }
+
+    @Override
+    public Throwable getCause() {
+      return e;
+    }
+
+    @Override
+    public synchronized Throwable initCause(Throwable cause) {
+      if (e != null)
+        throw new IllegalStateException("Can't overwrite cause");
+      if (!Exception.class.isInstance(cause))
+        throw new IllegalArgumentException("Cause not permitted");
+      this.e = (Exception) cause;
+      return this;
+    }
+  }
+
+} // end class SigTest
diff --git a/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SigTestData.java b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SigTestData.java
new file mode 100644
index 0000000..fb3171d
--- /dev/null
+++ b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SigTestData.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2007, 2021 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/*
+ * $Id$
+ */
+
+package jakarta.ws.rs.tck.signaturetest;
+
+import java.util.Properties;
+
+/**
+ * This class holds the data passed to a signature test invocation during the
+ * setup phase. This allows us to keep the passed data separate and reuse the
+ * data between the signature test framework base classes.
+ */
+public class SigTestData {
+
+  private Properties props;
+
+  public SigTestData() {
+    this.props = System.getProperties();;
+  }
+
+  public String getVehicle() {
+    return props.getProperty("vehicle", "");
+  }
+
+  public String getBinDir() {
+    return props.getProperty("bin.dir", "");
+  }
+
+  public String getTSHome() {
+    return props.getProperty("ts_home", "");
+  }
+
+  public String getTestClasspath() {
+    return props.getProperty("sigTestClasspath", "");
+  }
+
+  public String getJavaeeLevel() {
+    return props.getProperty("javaee.level", "");
+  }
+
+  public String getCurrentKeywords() {
+    return props.getProperty("current.keywords", "");
+  }
+
+  public String getProperty(String prop) {
+    return props.getProperty(prop);
+  }
+
+  public String getOptionalTechPackagesToIgnore() {
+    return props.getProperty("optional.tech.packages.to.ignore", "jakarta.xml.bind");
+  }
+
+  public String getJtaJarClasspath() {
+    return props.getProperty("jtaJarClasspath", "");
+  }
+
+  public String getJImageDir() {
+    return props.getProperty("jimage.dir", "");
+  }
+} // end class SigTestData
diff --git a/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SigTestDriver.java b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SigTestDriver.java
new file mode 100644
index 0000000..48e0543
--- /dev/null
+++ b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SigTestDriver.java
@@ -0,0 +1,286 @@
+/*
+ * Copyright (c) 2007, 2021 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+package jakarta.ws.rs.tck.signaturetest;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.PrintWriter;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import jakarta.ws.rs.tck.lib.util.TestUtil;
+
+/**
+ * <p>
+ * Wrapper for the <code>Sig Test</code> framework.
+ * </p>
+ */
+public class SigTestDriver extends SignatureTestDriver {
+
+  private static final String CLASSPATH_FLAG = "-Classpath";
+
+  private static final String FILENAME_FLAG = "-FileName";
+
+  private static final String PACKAGE_FLAG = "-Package";
+
+  private static final String PACKAGE_NO_SUBS_FLAG = "-PackageWithoutSubpackages";
+
+  private static final String API_VERSION_FLAG = "-ApiVersion";
+
+  private static final String EXCLUDE_FLAG = "-Exclude";
+  
+  private static final String STATIC_FLAG = "-Static";
+
+  private static final String CHECKVALUE_FLAG = "-CheckValue"; // only valid w/
+                                                               // -static
+
+  private static final String NO_CHECKVALUE_FLAG = "-NoCheckValue";
+
+  private static final String SMODE_FLAG = "-mode"; // requires arg of bin or
+                                                    // src
+
+  private static final String DEBUG_FLAG = "-Debug";
+
+  private static final String FORMATPLAIN_FLAG = "-FormatPlain";
+  
+  private static final String EXCLUDE_JDK_CLASS_FLAG = "-IgnoreJDKClass";
+
+  private static String[] excludeJdkClasses = {
+          "java.util.Map",
+          "java.lang.Object",
+          "java.io.ByteArrayInputStream",
+          "java.io.InputStream",
+          "java.lang.Deprecated",
+          "java.io.Writer",
+          "java.io.OutputStream",
+          "java.util.List",
+          "java.util.Collection",
+          "java.lang.instrument.IllegalClassFormatException",
+          "javax.transaction.xa.XAException",
+          "java.lang.annotation.Repeatable",
+          "java.lang.InterruptedException",
+          "java.lang.CloneNotSupportedException",
+          "java.lang.Throwable",
+          "java.lang.Thread",
+          "java.lang.Enum"
+  };
+          
+  // ---------------------------------------- Methods from SignatureTestDriver
+
+  @Override
+  protected String normalizeFileName(File f) {
+    String sURL = null;
+    try {
+      sURL = f.toURI().toURL().toExternalForm();
+    } catch (Exception e) {
+      throw new RuntimeException(e);
+    }
+    return sURL;
+  }
+
+  @Override
+  protected String[] createTestArguments(String packageListFile, String mapFile,
+      String signatureRepositoryDir, String packageOrClassUnderTest,
+      String classpath, boolean bStaticMode) throws Exception {
+
+    SignatureFileInfo info = getSigFileInfo(packageOrClassUnderTest, mapFile,
+        signatureRepositoryDir);
+
+    PackageList packageList = new PackageList(packageListFile);
+    String[] subPackages = packageList.getSubPackages(packageOrClassUnderTest);
+
+    List command = new ArrayList();
+
+    if (bStaticMode) {
+      // static mode allows finer level of constants checking
+      // -CheckValue says to check the actual const values
+      TestUtil.logTrace("Setting static mode flag to allow constant checking.");
+      command.add(STATIC_FLAG);
+      command.add(CHECKVALUE_FLAG);
+
+      // specifying "-mode src" allows stricter 2 way verification of constant
+      // vals
+      // (note that using "-mode bin" mode is less strict)
+      command.add(SMODE_FLAG);
+      // command.add("bin");
+      command.add("src");
+    } else {
+      TestUtil
+          .logTrace("Not Setting static mode flag to allow constant checking.");
+    }
+
+    if (TestUtil.harnessDebug) {
+      command.add(DEBUG_FLAG);
+    }
+    command.add("-Verbose");
+
+    command.add(FILENAME_FLAG);
+    command.add(info.getFile());
+
+    command.add(CLASSPATH_FLAG);
+    command.add(classpath);
+
+    command.add(PACKAGE_FLAG);
+    command.add(packageOrClassUnderTest);
+
+    for (int i = 0; i < subPackages.length; i++) {
+      command.add(EXCLUDE_FLAG);
+      command.add(subPackages[i]);
+    }
+
+    for(String jdkClassName:excludeJdkClasses) {
+      command.add(EXCLUDE_JDK_CLASS_FLAG);
+      command.add(jdkClassName);
+    }
+    
+            
+    command.add(API_VERSION_FLAG);
+    command.add(info.getVersion());
+
+    return ((String[]) command.toArray(new String[command.size()]));
+
+  } // END createTestArguments
+
+  @Override
+  protected boolean runSignatureTest(String packageOrClassName,
+      String[] testArguments) throws Exception {
+
+    Class sigTestClass = Class
+        .forName("com.sun.tdk.signaturetest.SignatureTest");
+    Object sigTestInstance = sigTestClass.newInstance();
+
+    ByteArrayOutputStream output = new ByteArrayOutputStream();
+
+    // do some logging to help with troubleshooting
+    TestUtil.logTrace(
+        "\nCalling:  com.sun.tdk.signaturetest.SignatureTest() with following args:");
+    for (int ii = 0; ii < testArguments.length; ii++) {
+      TestUtil.logTrace("   testArguments[" + ii + "] = " + testArguments[ii]);
+    }
+
+    @SuppressWarnings("unchecked")
+    Method runMethod = sigTestClass.getDeclaredMethod("run",
+        new Class[] { String[].class, PrintWriter.class, PrintWriter.class });
+    runMethod.invoke(sigTestInstance,
+        new Object[] { testArguments, new PrintWriter(output, true), null });
+
+    String rawMessages = output.toString();
+
+    // currently, there is no way to determine if there are error msgs in
+    // the rawmessages, so we will always dump this and call it a status.
+    TestUtil.logMsg(
+        "********** Status Report '" + packageOrClassName + "' **********\n");
+    TestUtil.logMsg(rawMessages);
+
+    return sigTestInstance.toString().substring(7).startsWith("Passed.");
+  } // END runSignatureTest
+
+  /*
+   * 
+   * @return This returns true if the packageOrClassName is found in the impl.
+   */
+  @Override
+  protected boolean runPackageSearch(String packageOrClassName,
+      String[] testArguments) throws Exception {
+
+    Class sigTestClass = Class
+        .forName("com.sun.tdk.signaturetest.SignatureTest");
+    Object sigTestInstance = sigTestClass.newInstance();
+
+    ByteArrayOutputStream output = new ByteArrayOutputStream();
+
+    // we want to replace the PACKAGE_FLAG with PACKAGE_NO_SUBS_FLAG
+    for (int ii = 0; ii < testArguments.length; ii++) {
+      if (testArguments[ii].equals(PACKAGE_FLAG)) {
+        testArguments[ii] = PACKAGE_NO_SUBS_FLAG;
+      }
+    }
+
+    // dump args for debugging aid
+    TestUtil.logTrace(
+        "\nCalling:  com.sun.tdk.signaturetest.SignatureTest() with following args:");
+    for (int ii = 0; ii < testArguments.length; ii++) {
+      TestUtil.logTrace("	  testArguments[" + ii + "] = " + testArguments[ii]);
+    }
+
+    @SuppressWarnings("unchecked")
+    Method runMethod = sigTestClass.getDeclaredMethod("run",
+        new Class[] { String[].class, PrintWriter.class, PrintWriter.class });
+    runMethod.invoke(sigTestInstance,
+        new Object[] { testArguments, new PrintWriter(output, true), null });
+
+    String rawMessages = output.toString();
+
+    // currently, there is no way to determine if there are error msgs in
+    // the rawmessages, so we will always dump this and call it a status.
+    TestUtil.logMsg(
+        "********** Status Report '" + packageOrClassName + "' **********\n");
+    TestUtil.logMsg(rawMessages);
+
+    return sigTestInstance.toString().substring(7).startsWith("Passed.");
+  }
+
+  /*
+   * @return This returns true if javax.transaction.xa is not found in the
+   * JTA API jar
+   */
+  protected boolean verifyJTAJarForNoXA(String classpath, String repositoryDir) throws Exception  {
+
+    TestUtil.logMsg("SigTestDriver#verifyJTAJarForNoXA - Starting:");
+    boolean result = false;
+    List command = new ArrayList();
+
+    // Build Commandline for com.sun.tdk.signaturetest.SignatureTest
+    command.add(STATIC_FLAG);
+    command.add(FILENAME_FLAG);
+    command.add(repositoryDir  + "empty.sig");
+    command.add(PACKAGE_FLAG);
+    command.add("javax.transaction.xa");
+    command.add(CLASSPATH_FLAG);
+    command.add(classpath);
+
+    String testArguments [] = (String[]) command.toArray(new String[command.size()]);
+
+    // do some logging to help with troubleshooting
+    TestUtil.logTrace("\nCalling:  com.sun.tdk.signaturetest.SignatureTest() with following args:");
+    for (int ii=0; ii < testArguments.length; ii++) {
+      TestUtil.logTrace("   testArguments[" +ii+ "] = " + testArguments[ii]);
+    }
+
+    Class sigTestClass = Class.forName("com.sun.tdk.signaturetest.SignatureTest");
+    Object sigTestInstance = sigTestClass.newInstance();
+    ByteArrayOutputStream output = new ByteArrayOutputStream();
+
+    @SuppressWarnings("unchecked")
+    Method runMethod = sigTestClass.getDeclaredMethod("run",
+                                           new Class[] { String[].class,
+                                                         PrintWriter.class,
+                                                         PrintWriter.class });
+    runMethod.invoke(sigTestInstance,
+                         new Object[] { testArguments, 
+                                        new PrintWriter(output, true), 
+                                        null });
+    String rawMessages = output.toString();
+
+    // currently, there is no way to determine if there are error msgs in 
+    // the rawmessages, so we will always dump this and call it a status.
+    TestUtil.logMsg("********** Status Report JTA JAR validation **********\n");
+    TestUtil.logMsg(rawMessages);
+    return sigTestInstance.toString().substring(7).startsWith("Passed.");
+  }
+}
diff --git a/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SigTestEE.java b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SigTestEE.java
new file mode 100644
index 0000000..75435f1
--- /dev/null
+++ b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SigTestEE.java
@@ -0,0 +1,486 @@
+/*
+ * Copyright (c) 2007, 2021 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+package jakarta.ws.rs.tck.signaturetest;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.PrintStream;
+
+import java.util.ArrayList;
+import java.util.Properties;
+
+import jakarta.ws.rs.tck.lib.util.TestUtil;
+
+/**
+ * This class should be extended by TCK developers that wish to create a set of
+ * signature tests that run inside all the Java EE containers. Developers must
+ * implement the getPackages method to specify which packages are to be tested
+ * by the signature test framework within which container.
+ */
+public abstract class SigTestEE {
+
+  String[] sVehicles;
+
+  private Object theSharedObject;
+
+  private Object theSharedObjectArray[];
+
+
+  protected SignatureTestDriver driver;
+
+  /**
+   * <p>
+   * Returns a {@link SignatureTestDriver} appropriate for the particular TCK
+   * (using API check or the Signature Test Framework).
+   * </p>
+   *
+   * <p>
+   * The default implementation of this method will return a
+   * {@link SignatureTestDriver} that will use API Check. TCK developers can
+   * override this to return the desired {@link SignatureTestDriver} for their
+   * TCK.
+   */
+  protected SignatureTestDriver getSigTestDriver() {
+
+    if (driver == null) {
+        driver = SignatureTestDriverFactory.getInstance(SignatureTestDriverFactory.SIG_TEST);
+    }
+
+    return driver;
+
+  } // END getSigTestDriver
+
+  /**
+   * Returns the location of the package list file. This file denotes the valid
+   * sub-packages of any package being verified in the signature tests.
+   * <p/>
+   * Sub-classes are free to override this method if they use a different path
+   * or filename for their package list file. Most users should be able to use
+   * this default implementation.
+   *
+   * @return String The path and name of the package list file.
+   */
+  protected String getPackageFile() {
+    return getSigTestDriver().getPackageFileImpl(testInfo.getBinDir());
+  }
+
+  /**
+   * Returns the path and name of the signature map file that this TCK uses when
+   * conducting signature tests. The signature map file tells the signature test
+   * framework which API versions of tested packages to use. To keep this code
+   * platform independent, be sure to use the File.separator string (or the
+   * File.separatorChar) to denote path separators.
+   * <p/>
+   * Sub-classes are free to override this method if they use a different path
+   * or filename for their signature map file. Most users should be able to use
+   * this default implementation.
+   *
+   * @return String The path and name of the signature map file.
+   */
+  protected String getMapFile() {
+    return getSigTestDriver().getMapFileImpl(testInfo.getBinDir());
+  }
+
+  /**
+   * Returns the directory that contains the signature files.
+   * <p/>
+   * Sub-classes are free to override this method if they use a different
+   * signature repository directory. Most users should be able to use this
+   * default implementation.
+   *
+   * @return String The signature repository directory.
+   */
+  protected String getRepositoryDir() {
+    return getSigTestDriver().getRepositoryDirImpl(testInfo.getTSHome());
+  }
+
+  /**
+   * Returns the list of Optional Packages which are not accounted for. By
+   * 'unlisted optional' we mean the packages which are Optional to the
+   * technology under test that the user did NOT specifically list for testing.
+   * For example, with Java EE 7 implementation, a user could additionally opt
+   * to test a JSR-88 technology along with the Java EE technology. But if the
+   * user chooses NOT to list this optional technology for testing (via ts.jte
+   * javaee.level prop) then this method will return the packages for JSR-88
+   * technology with this method call.
+   * <p/>
+   * This is useful for checking for a scenarios when a user may have forgotten
+   * to identify a whole or partial technology implementation and in such cases,
+   * Java EE platform still requires testing it.
+   * <p/>
+   * Any partial or complete impl of an unlistedOptionalPackage sends up a red
+   * flag indicating that the user must also pass tests for this optional
+   * technology area.
+   * <p/>
+   * Sub-classes are free to override this method if they use a different
+   * signature repository directory. Most users should be able to use this
+   * default implementation - which means that there was NO optional technology
+   * packages that need to be tested.
+   *
+   * @return ArrayList<String>
+   */
+  protected ArrayList<String> getUnlistedOptionalPackages() {
+    return null;
+  }
+
+  /**
+   * Returns the list of packages that must be tested by the signature test
+   * framework. TCK developers must implement this method in their signature
+   * test sub-class.
+   *
+   * @param vehicleName
+   *          The name of the vehicle the signature tests should be conducted
+   *          in. Valid values for this property are ejb, servlet, ejb and
+   *          appclient.
+   *
+   * @return String[] A list of packages that the developer wishes to test using
+   *         the signature test framework. If the developer does not wish to
+   *         test any package signatures in the specified vehicle this method
+   *         should return null.
+   *         <p>
+   *         Note, The proper way to insure that this method is not called with
+   *         a vehicle name that has no package signatures to verify is to
+   *         modify the vehicle.properties in the $TS_HOME/src directory. This
+   *         file provides a mapping that maps test directories to a list of
+   *         vehicles where the tests in those directory should be run. As an
+   *         extra precaution users are encouraged to return null from this
+   *         method if the specified vehicle has no package signatures to be
+   *         verified within it.
+   */
+  protected abstract String[] getPackages(String vehicleName);
+
+  /**
+   * <p>
+   * Returns an array of individual classes that must be tested by the signature
+   * test framwork within the specified vehicle. TCK developers may override
+   * this method when this functionality is needed. Most will only need package
+   * level granularity.
+   * </p>
+   *
+   * <p>
+   * If the developer doesn't wish to test certain classes within a particular
+   * vehicle, the implementation of this method must return a zero-length array.
+   * </p>
+   *
+   * @param vehicleName
+   *          The name of the vehicle the signature tests should be conducted
+   *          in. Valid values for this property are ejb, servlet, ejb and
+   *          appclient.
+   *
+   * @return an Array of Strings containing the individual classes the framework
+   *         should test based on the specifed vehicle. The default
+   *         implementation of this method returns a zero-length array no matter
+   *         the vehicle specified.
+   */
+  protected String[] getClasses(String vehicleName) {
+
+    return new String[] {};
+
+  } // END getClasses
+
+  protected SigTestData testInfo; // holds the bin.dir and vehicle properties
+
+  /**
+   * Called by the test framework to initialize this test. The method simply
+   * retrieves some state information that is necessary to run the test when
+   * when the test framework invokes the run method (actually the test1 method).
+   *
+   * @param args
+   *          List of arguments passed to this test.
+   * @param p
+   *          Properties specified by the test user and passed to this test via
+   *          the test framework.
+   *
+   * @throws Fault
+   *           When an error occurs reading or saving the state information
+   *           processed by this method.
+   */
+  public void setup() {
+    try {
+      TestUtil.logMsg("$$$ SigTestEE.setup() called");
+      this.testInfo = new SigTestData();
+      TestUtil.logMsg("$$$ SigTestEE.setup() complete");
+    } catch (Exception e) {
+      TestUtil.logErr("Unexpected exception " + e.getMessage());
+    }
+  }
+
+  /**
+   * Called by the test framework to run this test. This method utilizes the
+   * state information set in the setup method to run the signature tests. All
+   * signature test code resides in the utility class so it can be reused by the
+   * signature test framework base classes.
+   *
+   * @throws Fault
+   *           When an error occurs executing the signature tests.
+   */
+  public void signatureTest() throws Fault {
+    TestUtil.logMsg("$$$ SigTestEE.signatureTest() called");
+    SigTestResult results = null;
+    String mapFile = getMapFile();
+    String repositoryDir = getRepositoryDir();
+    String[] packages = getPackages(testInfo.getVehicle());
+    String[] classes = getClasses(testInfo.getVehicle());
+    String packageFile = getPackageFile();
+    String testClasspath = testInfo.getTestClasspath();
+    String optionalPkgToIgnore = testInfo.getOptionalTechPackagesToIgnore();
+
+    // unlisted optional packages are technology packages for those optional
+    // technologies (e.g. jsr-88) that might not have been specified by the
+    // user.
+    // We want to ensure there are no full or partial implementations of an
+    // optional technology which were not declared
+    ArrayList<String> unlistedTechnologyPkgs = getUnlistedOptionalPackages();
+
+    // If testing with Java 9+, extract the JDK's modules so they can be used
+    // on the testcase's classpath.
+    Properties sysProps = System.getProperties();
+    String version = (String) sysProps.get("java.version");
+    if (!version.startsWith("1.")) {
+      String jimageDir = testInfo.getJImageDir();
+      File f = new File(jimageDir);
+      f.mkdirs();
+
+      String javaHome = (String) sysProps.get("java.home");
+      TestUtil.logMsg("Executing JImage");
+
+      try {
+        ProcessBuilder pb = new ProcessBuilder(javaHome + "/bin/jimage", "extract", "--dir=" + jimageDir, javaHome + "/lib/modules");
+        TestUtil.logMsg(javaHome + "/bin/jimage extract --dir=" + jimageDir + " " + javaHome + "/lib/modules");
+        pb.redirectErrorStream(true);
+        Process proc = pb.start();
+        BufferedReader out = new BufferedReader(new InputStreamReader(proc.getInputStream()));
+        String line = null;
+        while ((line = out.readLine()) != null) {
+          TestUtil.logMsg(line);
+        }
+
+        int rc = proc.waitFor();
+        TestUtil.logMsg("JImage RC = " + rc);
+        out.close();
+      } catch (Exception e) {
+        TestUtil.logMsg("Exception while executing JImage!  Some tests may fail.");
+        e.printStackTrace();
+      }
+    }
+
+    try {
+      results = getSigTestDriver().executeSigTest(packageFile, mapFile,
+          repositoryDir, packages, classes, testClasspath,
+          unlistedTechnologyPkgs, optionalPkgToIgnore);
+      TestUtil.logMsg(results.toString());
+      if (!results.passed()) {
+        TestUtil.logErr("results.passed() returned false");
+        throw new Exception();
+      }
+
+      // Call verifyJtaJarTest based on some conditions, please check the
+      // comment for verifyJtaJarTest.
+      if ("standalone".equalsIgnoreCase(testInfo.getVehicle())) {
+        Properties mapFileAsProps = getSigTestDriver().loadMapFile(mapFile);
+        if (mapFileAsProps == null || mapFileAsProps.size() == 0) {
+          // empty signature file, something unusual
+          TestUtil.logMsg("SigTestEE.signatureTest() returning, " +
+              "as signature map file is empty.");
+          return;
+        }
+
+        boolean isJTASigTest = false;
+
+        // Determine whether the signature map file contains package 
+        // jakarta.transaction
+        String jtaVersion = mapFileAsProps.getProperty("jakarta.transaction");
+        if (jtaVersion == null || "".equals(jtaVersion.trim())) {
+          TestUtil.logMsg("SigTestEE.signatureTest() returning, " +
+              "as this is neither JTA TCK run, not Java EE CTS run.");
+          return;
+        }
+
+        TestUtil.logMsg("jtaVersion " + jtaVersion);  
+        // Signature map packaged in JTA TCK will contain a single package 
+        // jakarta.transaction
+        if (mapFileAsProps.size() == 1) {
+            isJTASigTest = true;
+        }
+
+        if (isJTASigTest || !jtaVersion.startsWith("1.2")) {
+          verifyJtaJarTest();
+        }
+      }
+      TestUtil.logMsg("$$$ SigTestEE.signatureTest() returning");
+    } catch (Exception e) {
+      if (results != null && !results.passed()) {
+        throw new Fault("SigTestEE.signatureTest() failed!, diffs found");
+      } else {
+        TestUtil.logErr("Unexpected exception " + e.getMessage());
+        throw new Fault("signatureTest failed with an unexpected exception", e);
+      }
+    }
+  }
+
+  /**
+   * Called by the test framework to run this test.  This method utilizes the
+   * state information set in the setup method to run.  This test validates
+   * that the javax.transaction.xa type is not in the JTA API jar
+   *
+   * This method is called only for standaone vehicle, as calling the same
+   * for all the vehicles in the CTS run is not necessary.
+   *
+   * This method is called always from JTA 1.3 TCK. The test will be run as
+   * part of Java EE Signature Test only when the signature map in the CTS
+   * bundle is using JTA 1.3 (or higher) signature file.
+   *
+   * If property ts.jte jtaJarClasspath is removed in ts.jte of the JTA 1.3 TCK,
+   * this test will display the available options to call SignatureTest and
+   * fail. Similar failure will be seen in CTS run, if the signature map points
+   * to JTA 1.3 signature file and the property jtaJarClasspath is removed from
+   * ts.jte of CTS bundle.
+   *
+   * @throws Fault When an error occurs executing the signature tests.
+   */
+  public void verifyJtaJarTest() throws Exception {
+    TestUtil.logMsg("SigTestEE#verifyJtaJarTest - Starting:");
+    String repositoryDir = getRepositoryDir();
+    String jtaJarClasspath = testInfo.getJtaJarClasspath();
+    boolean result = getSigTestDriver().verifyJTAJarForNoXA(
+                testInfo.getJtaJarClasspath(), repositoryDir);
+    if(result) {
+      TestUtil.logMsg("PASS: javax.transaction.xa not found in API jar");
+    } else {
+      TestUtil.logErr("FAIL: javax.transaction.xa found in API jar");
+      throw new Fault("javax.transaction.xa validation failed");
+    }
+    TestUtil.logMsg("SigTestEE#verifyJtaJarTest returning");
+  }
+
+  /**
+   * Called by the test framework to cleanup any outstanding state. This method
+   * simply passes the message through to the utility class so the
+   * implementation can be used by both framework base classes.
+   *
+   * @throws Fault
+   *           When an error occurs cleaning up the state of this test.
+   */
+  public void cleanup() throws Fault {
+    TestUtil.logMsg("$$$ SigTestEE.cleanup() called");
+    try {
+      getSigTestDriver().cleanupImpl();
+      TestUtil.logMsg("$$$ SigTestEE.cleanup() returning");
+    } catch (Exception e) {
+      throw new Fault("Cleanup failed!", e);
+    }
+  }
+
+
+  public static class Fault extends Exception {
+    private static final long serialVersionUID = -1574745208867827913L;
+
+    public Throwable t;
+
+    /**
+     * creates a Fault with a message
+     */
+    public Fault(String msg) {
+      super(msg);
+      TestUtil.logErr(msg);
+    }
+
+    /**
+     * creates a Fault with a message.
+     *
+     * @param msg
+     *          the message
+     * @param t
+     *          prints this exception's stacktrace
+     */
+    public Fault(String msg, Throwable t) {
+      super(msg);
+      this.t = t;
+      TestUtil.logErr(msg, t);
+    }
+
+    /**
+     * creates a Fault with a Throwable.
+     *
+     * @param t
+     *          the Throwable
+     */
+    public Fault(Throwable t) {
+      super(t);
+      this.t = t;
+    }
+
+    /**
+     * Prints this Throwable and its backtrace to the standard error stream.
+     *
+     */
+    public void printStackTrace() {
+      if (this.t != null) {
+        this.t.printStackTrace();
+      } else {
+        super.printStackTrace();
+      }
+    }
+
+    /**
+     * Prints this throwable and its backtrace to the specified print stream.
+     *
+     * @param s
+     *          <code>PrintStream</code> to use for output
+     */
+    public void printStackTrace(PrintStream s) {
+      if (this.t != null) {
+        this.t.printStackTrace(s);
+      } else {
+        super.printStackTrace(s);
+      }
+    }
+
+    /**
+     * Prints this throwable and its backtrace to the specified print writer.
+     *
+     * @param s
+     *          <code>PrintWriter</code> to use for output
+     */
+    public void printStackTrace(PrintWriter s) {
+      if (this.t != null) {
+        this.t.printStackTrace(s);
+      } else {
+        super.printStackTrace(s);
+      }
+    }
+
+    @Override
+    public Throwable getCause() {
+      return t;
+    }
+
+    @Override
+    public synchronized Throwable initCause(Throwable cause) {
+      if (t != null)
+        throw new IllegalStateException("Can't overwrite cause");
+      if (!Exception.class.isInstance(cause))
+        throw new IllegalArgumentException("Cause not permitted");
+      this.t = (Exception) cause;
+      return this;
+    }
+  }
+
+} // end class SigTestEE
diff --git a/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SigTestRecorder.java b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SigTestRecorder.java
new file mode 100644
index 0000000..d07918c
--- /dev/null
+++ b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SigTestRecorder.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2007, 2021 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/*
+ * @(#)SigTestRecorder.java	1.1 03/03/05
+ */
+package jakarta.ws.rs.tck.signaturetest;
+
+import java.io.File;
+import java.io.PrintWriter;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * This implementation of {@link Recorder} will record signatures using the
+ * <code>Signature Test</code> framework.
+ * </p>
+ */
+public class SigTestRecorder extends Recorder {
+
+  // ------------------------------------------------------------ Constructors
+
+  public SigTestRecorder(String[] args) {
+
+    super(args);
+
+  } // END SigTestRecorder
+
+  // ------------------------------------------------------- Protected Methods
+
+  protected String[] createCommandLine(String version, String classpath,
+      String outputFileName, String packageName) {
+
+    List command = new ArrayList();
+
+    // command.add("-xReflection");
+    command.add("-static");
+    command.add("-debug");
+    command.add("-verbose");
+    command.add("-classpath");
+    command.add(classpath);
+
+    command.add("-FileName");
+    try {
+      command.add(new File(outputFileName).toURI().toURL().toExternalForm());
+    } catch (Exception e) {
+      throw new RuntimeException(e);
+    }
+
+    command.add("-package");
+    command.add(packageName);
+
+    command.add("-apiVersion");
+    command.add(version);
+
+    return ((String[]) command.toArray(new String[command.size()]));
+
+  } // END getCommandLine
+
+  protected void writePackageListFile(String basePackageName,
+      String signatureFile, String packageListFile) throws Exception {
+
+    PackageList packageList = new PackageList(basePackageName, signatureFile,
+        packageListFile);
+    packageList.writePkgListFile();
+
+  } // END writePackageListFile
+
+  protected void doRecord(String[] commandLine) throws Exception {
+
+    Class batchSetup = Class.forName("com.sun.tdk.signaturetest.Setup");
+    Object batchSetupInstance = batchSetup.newInstance();
+    Method runMethod = batchSetup.getDeclaredMethod("run",
+        new Class[] { String[].class, PrintWriter.class, PrintWriter.class });
+
+    runMethod.invoke(batchSetupInstance, new Object[] { commandLine,
+        new PrintWriter(System.out, true), new PrintWriter(System.err, true) });
+
+  } // END doRecord
+
+} // END SigTestRecorder
diff --git a/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SigTestResult.java b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SigTestResult.java
new file mode 100644
index 0000000..e977f75
--- /dev/null
+++ b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SigTestResult.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) 2007, 2020 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/*
+ * $Id$
+ */
+package jakarta.ws.rs.tck.signaturetest;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+public class SigTestResult implements Serializable {
+
+  private static final String NL = System.getProperty("line.separator", "\n");
+
+  private List failedPkgs = new ArrayList();
+
+  private List passedPkgs = new ArrayList();
+
+  private List failedClasses = new ArrayList();
+
+  private List passedClasses = new ArrayList();
+
+  // ---------------------------------------------------------- Public Methods
+
+  public synchronized boolean passed() {
+
+    return (failedPkgs.size() == 0 && failedClasses.size() == 0);
+
+  } // end passed
+
+  public synchronized void addFailedPkg(String pkg) {
+
+    failedPkgs.add(pkg);
+
+  } // END addFailedPkg
+
+  public synchronized void addPassedPkg(String pkg) {
+
+    passedPkgs.add(pkg);
+
+  } // END addPassedPkg
+
+  public synchronized void addFailedClass(String className) {
+
+    failedClasses.add(className);
+
+  } // END addFailedClass
+
+  public synchronized void addPassedClass(String className) {
+
+    passedClasses.add(className);
+
+  } // END addPassedClass
+
+  public String toString() {
+
+    String delim = "******************************************************"
+        + NL;
+    if (!pkgsTested() && !classesTested()) {
+      return (delim + "******** No packages or classes were tested **********"
+          + NL + delim);
+    }
+    StringBuffer buf = new StringBuffer();
+    buf.append(delim);
+    buf.append(delim);
+    if (passed()) {
+      buf.append("All package signatures passed.").append(NL);
+    } else {
+      buf.append("Some signatures failed.").append(NL);
+      if (failedPkgs.size() > 0) {
+        buf.append("\tFailed packages listed below: ").append(NL);
+        formatList(failedPkgs, buf);
+      }
+      if (failedClasses.size() > 0) {
+        buf.append("\tFailed classes listed below: ").append(NL);
+        formatList(failedClasses, buf);
+      }
+    }
+    if (passedPkgs.size() > 0) {
+      buf.append("\tPassed packages listed below: ").append(NL);
+      formatList(passedPkgs, buf);
+    }
+    if (passedClasses.size() > 0) {
+      buf.append("\tPassed classes listed below: ").append(NL);
+      formatList(passedClasses, buf);
+    }
+    buf.append("\t");
+    buf.append(delim);
+    buf.append(delim);
+    return buf.toString();
+
+  } // END toString
+
+  // --------------------------------------------------------- Private Methods
+
+  private synchronized void formatList(List list, StringBuffer buf) {
+
+    synchronized (this) {
+      for (int i = 0; i < list.size(); i++) {
+        String pkg = (String) (list.get(i));
+        buf.append("\t\t").append(pkg).append(NL);
+      }
+    }
+
+  } // END formatList
+
+  private synchronized boolean pkgsTested() {
+
+    return (failedPkgs.size() != 0 || passedPkgs.size() != 0);
+
+  } // END pkgsTested
+
+  private synchronized boolean classesTested() {
+
+    return (failedClasses.size() != 0 || passedClasses.size() != 0);
+
+  } // END classesTested
+
+} // end class SigTestResult
diff --git a/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SignatureTestDriver.java b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SignatureTestDriver.java
new file mode 100644
index 0000000..2370571
--- /dev/null
+++ b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SignatureTestDriver.java
@@ -0,0 +1,699 @@
+/*
+ * Copyright (c) 2007, 2021 Oracle and/or its affiliates and others.
+ * All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+package jakarta.ws.rs.tck.signaturetest;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Properties;
+
+import jakarta.ws.rs.tck.lib.util.TestUtil;
+
+/**
+ * Allows the sigtest framework to be extended using different signature test
+ * implementations (e.g. ApiCheck, or SigTest)
+ */
+public abstract class SignatureTestDriver {
+
+  private static final String SIG_FILE_EXT = ".sig";
+
+  private static final String SIG_FILE_VER_SEP = "_";
+
+  // ---------------------------------------------------------- Public Methods
+
+  /**
+   * Implementation of the getPackageFile method defined in both the SigTest and
+   * SigTestEE class.
+   */
+  public String getPackageFileImpl(String binDir) {
+
+    String thePkgListFile = "sig-test-pkg-list.txt";
+
+    TestUtil.logMsg(
+        "Using the following as the SigTest Package file: " + thePkgListFile);
+
+    String theFile = binDir + File.separator + thePkgListFile;
+    File ff = new File(theFile);
+    if (!ff.exists()) {
+      // we could not find the map file that coresponded to our SE version so
+      // lets
+      // try to default to use the sig-test-pkg-list.txt
+      TestUtil
+          .logErr("The SigTest Package file does not exist: " + thePkgListFile);
+      theFile = binDir + File.separator + "sig-test-pkg-list.txt";
+      File ff2 = new File(theFile);
+      if (!ff2.exists()) {
+        TestUtil
+            .logErr("The Default SigTest Package file does not exist either: "
+                + theFile);
+      } else {
+        TestUtil.logMsg("Defaulting to using SigTest Package file: " + theFile);
+      }
+    }
+
+    return (theFile);
+
+  } // END getPackageFileImpl
+
+  /**
+   * Implementation of the getMapFile method defined in both the SigTest and
+   * SigTestEE class.
+   */
+  public String getMapFileImpl(String binDir) {
+
+    String  theMapFile = "sig-test.map";
+
+    TestUtil
+        .logMsg("Using the following as the sig-Test map file: " + theMapFile);
+
+    String theFile = binDir + File.separator + theMapFile;
+    File ff = new File(theFile);
+    if (!ff.exists()) {
+      // we could not find the map file that coresponded to our SE version so
+      // lets
+      // try to default to use the sig-test.map
+      TestUtil.logErr("The SigTest Map file does not exist: " + theMapFile);
+      theFile = binDir + File.separator + "sig-test.map";
+      File ff2 = new File(theFile);
+      if (!ff2.exists()) {
+        TestUtil
+            .logErr("The SigTest Map file does not exist either: " + theFile);
+      } else {
+        TestUtil.logMsg("Defaulting to using SigTest Map file: " + theFile);
+      }
+    }
+
+    return (theFile);
+
+  } // END getMapFileImpl
+
+  /**
+   * Returns true if the passed in version matches the current Java version
+   * being used.
+   * 
+   */
+  public Boolean isJavaSEVersion(String ver) {
+
+    String strOSVersion = System.getProperty("java.version");
+    if (strOSVersion.startsWith(ver)) {
+      return true;
+    } else {
+      return false;
+    }
+  }
+
+  /**
+   * Implementation of the getRepositoryDir method defined in both the SigTest
+   * and SigTestEE class.
+   */
+  public String getRepositoryDirImpl(String tsHome) {
+
+    return (tsHome + File.separator + "src" + File.separator + "com"
+        + File.separator + "sun" + File.separator + "ts" + File.separator
+        + "tests" + File.separator + "signaturetest" + File.separator
+        + "signature-repository" + File.separator);
+
+  } // END getRepositoryDirImpl
+
+  /**
+   * Implementation of the cleanup method defined in both the SigTest and
+   * SigTestEE class.
+   */
+  public void cleanupImpl() throws Exception {
+
+    try {
+      TestUtil.logMsg("cleanup");
+    } catch (Exception e) {
+      TestUtil.logErr("Exception in cleanup method" + e);
+      throw e;
+    }
+
+  } // END cleanupImpl
+
+  /**
+   * <p>
+   * Execute the signature test. By default, this method passes the result of
+   * {@link #createTestArguments(String, String, String, String, String)} and
+   * passes the result to {@link #runSignatureTest(String, String[])}.
+   *
+   * @param packageListFile
+   *          - file containing the packages/classes that are to be verified
+   * @param mapFile
+   *          sig-test.map file
+   * @param signatureRepositoryDir
+   *          directory containing the recorded signatures
+   * @param packagesUnderTest
+   *          packages, defined by the test client, that should be tested
+   * @param classesUnderTest
+   *          classes, defined by the test client, that should be tested
+   * @param classpath
+   *          The location of the API being verified. Normally the checked API
+   *          will be available in the test environment and testClasspath will
+   *          be null. In some rare cases the tested API may not be part of the
+   *          test environment and will have to specified using this parameter.
+   * @param unaccountedTechPkgs
+   *          packages that should not exist within the technology under test.
+   *          These will be searched for and if found, will be flagged as error
+   *          since they were not explicitly declared as being under test. Their
+   *          existence requires explicit testing.
+   *
+   * @return a {@link SigTestResult} containing the result of the test execution
+   */
+  public SigTestResult executeSigTest(String packageListFile, String mapFile,
+      String signatureRepositoryDir, String[] packagesUnderTest,
+      String[] classesUnderTest, String classpath,
+      ArrayList<String> unaccountedTechPkgs, String optionalPkgToIgnore)
+      throws Exception {
+
+    SigTestResult result = new SigTestResult();
+
+    TestUtil.logMsg("optionalPkgToIgnore = " + optionalPkgToIgnore);
+    String[] arrayOptionalPkgsToIgnore = null;
+    if (optionalPkgToIgnore != null) {
+      arrayOptionalPkgsToIgnore = optionalPkgToIgnore.split(",");
+    }
+
+    if (packagesUnderTest != null && packagesUnderTest.length > 0) {
+      TestUtil.logMsg("********** BEGIN PACKAGE LEVEL SIGNATURE "
+          + "VALIDATION **********\n\n");
+      for (int i = 0; i < packagesUnderTest.length; i++) {
+
+        String packageName = packagesUnderTest[i];
+
+        TestUtil.logMsg("********** BEGIN VALIDATE PACKAGE '"
+            + packagesUnderTest[i] + "' **********\n");
+
+        TestUtil.logMsg(
+            "********** VALIDATE IN STATIC MODE - TO CHECK CONSANT VALUES ****");
+        TestUtil
+            .logMsg("Static mode supports checks of static constants values ");
+
+        String[] args = createTestArguments(packageListFile, mapFile,
+            signatureRepositoryDir, packageName, classpath, true);
+        dumpTestArguments(args);
+
+        if (runSignatureTest(packageName, args)) {
+          TestUtil.logMsg("********** Package '" + packageName
+              + "' - PASSED (STATIC MODE) **********");
+          result.addPassedPkg(packageName + "(static mode)");
+        } else {
+          result.addFailedPkg(packageName + "(static mode)");
+          TestUtil.logMsg("********** Package '" + packageName
+              + "' - FAILED (STATIC MODE) **********");
+        }
+
+        TestUtil.logMsg("\n\n");
+        TestUtil.logMsg("********** VALIDATE IN REFLECTIVE MODE  ****");
+        TestUtil.logMsg(
+            "Reflective mode supports verification within containers (ie ejb, servlet, etc)");
+
+        String[] args2 = createTestArguments(packageListFile, mapFile,
+            signatureRepositoryDir, packageName, classpath, false);
+        dumpTestArguments(args2);
+
+        if (runSignatureTest(packageName, args2)) {
+          TestUtil.logMsg("********** Package '" + packageName
+              + "' - PASSED (REFLECTION MODE) **********");
+          result.addPassedPkg(packageName + "(reflection mode)");
+        } else {
+          result.addFailedPkg(packageName + "(reflection mode)");
+          TestUtil.logMsg("********** Package '" + packageName
+              + "' - FAILED (REFLECTION MODE) **********");
+        }
+
+        TestUtil.logMsg("********** END VALIDATE PACKAGE '"
+            + packagesUnderTest[i] + "' **********\n");
+
+        TestUtil.logMsg("\n");
+        TestUtil.logMsg("\n");
+
+      }
+    }
+
+    if (classesUnderTest != null && classesUnderTest.length > 0) {
+      TestUtil.logMsg("********** BEGIN CLASS LEVEL SIGNATURE "
+          + "VALIDATION **********\n\n");
+
+      for (int i = 0; i < classesUnderTest.length; i++) {
+
+        String className = classesUnderTest[i];
+
+        TestUtil.logMsg("********** BEGIN VALIDATE CLASS '"
+            + classesUnderTest[i] + "' **********\n");
+
+        TestUtil.logMsg(
+            "********** VALIDATE IN STATIC MODE - TO CHECK CONSANT VALUES ****");
+        TestUtil
+            .logMsg("Static mode supports checks of static constants values ");
+
+        String[] args = createTestArguments(packageListFile, mapFile,
+            signatureRepositoryDir, className, classpath, true);
+        dumpTestArguments(args);
+
+        if (runSignatureTest(className, args)) {
+          TestUtil.logMsg("********** Class '" + className
+              + "' - PASSED (STATIC MODE) **********");
+          result.addPassedClass(className + "(static mode)");
+        } else {
+          TestUtil.logMsg("********** Class '" + className
+              + "' - FAILED (STATIC MODE) **********");
+          result.addFailedClass(className + "(static mode)");
+        }
+
+        TestUtil.logMsg("\n\n");
+        TestUtil.logMsg("********** VALIDATE IN REFLECTIVE MODE  ****");
+        TestUtil.logMsg(
+            "Reflective mode supports verification within containers (ie ejb, servlet, etc)");
+
+        String[] args2 = createTestArguments(packageListFile, mapFile,
+            signatureRepositoryDir, className, classpath, false);
+        dumpTestArguments(args2);
+
+        if (runSignatureTest(className, args2)) {
+          TestUtil.logMsg("********** Class '" + className
+              + "' - PASSED (REFLECTION MODE) **********");
+          result.addPassedClass(className + "(reflection mode)");
+        } else {
+          TestUtil.logMsg("********** Class '" + className
+              + "' - FAILED (REFLECTION MODE) **********");
+          result.addFailedClass(className + "(reflection mode)");
+        }
+
+        TestUtil.logMsg("********** END VALIDATE CLASS '" + classesUnderTest[i]
+            + "' **********\n");
+
+        TestUtil.logMsg("\n");
+        TestUtil.logMsg("\n");
+
+      }
+    }
+
+    /*
+     * The following will check if there are Optional Technologies being
+     * implemented but not explicitly defined thru (ts.jte) javaee.level
+     * property. This is a problem because if an optional technolgy is defined
+     * (either whole or partially) than the TCK tests (and sig tests) for those
+     * Optional Technology(s) MUST be run according to related specs.
+     */
+    if (unaccountedTechPkgs != null) {
+      for (int ii = 0; ii < unaccountedTechPkgs.size(); ii++) {
+        // 'unaccountedTechPkgs' are t hose packages which do not beling to
+        // base technology nor one of the *declared* optionalal technologies.
+        // 'unaccountedTechPkgs' refers to packages for Optional Technologies
+        // which were not defined thru (ts.jte) javaee.level property.
+        // So, make sure there are no whole or partial implementations of
+        // undeclared optional technologies in the implementation
+
+        String packageName = unaccountedTechPkgs.get(ii);
+
+        // this is a special case exception to our validation of Optional
+        // Technologies. Normally any partial technology implementations
+        // would be a compatibility failure. HOWEVER, EE 7 Spec (see section
+        // EE 6.1.2 of the Platform spec in the footnote on p. 156.)
+        // requires us to add special handling to avoid testing 'certain' pkgs
+        // within an optional technology.
+        if (isIgnorePackageUnderTest(packageName, arrayOptionalPkgsToIgnore)) {
+          TestUtil.logMsg(
+              "Ignoring special optional technology package: " + packageName);
+          continue;
+        }
+
+        TestUtil.logMsg("\n\n");
+        TestUtil.logMsg(
+            "********** CHECK IF OPTIONAL TECHNOLOGIES EXIST IN REFLECTIVE MODE  ****");
+        TestUtil.logMsg(
+            "Reflective mode supports verification within containers (ie ejb, servlet, etc)");
+
+        String[] args3 = createTestArguments(packageListFile, mapFile,
+            signatureRepositoryDir, packageName, classpath, false);
+        dumpTestArguments(args3);
+
+        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+        // - - - -
+        // NOTE: this is the opposite of above in that *if* we find that an
+        // undeclared
+        // optional technology package exists - then we want to raise a red
+        // flag.
+        // The user would have to either remove the technology from the impl if
+        // they do not want to include it in their impl -OR- they must
+        // explicitly
+        // set javaee.level (in ts.jte) to include that Optional Technology AND
+        // after setting this property, they have to pass all related TCK tests.
+        if (runPackageSearch(packageName, args3)) {
+          // if this passed we have an issue because it should not exist - thus
+          // should NOT pass.
+          TestUtil.logMsg("********** Package '" + packageName
+              + "' - WAS FOUND BUT SHOULD NOT BE (REFLECTION MODE) **********");
+          String err = "ERROR:  An area of concern has been identified.  ";
+          err += "You must run sigtests with (ts.jte) javaee.level set to ";
+          err += "include all optional technology keywords.  Whole and/or ";
+          err += "partial implementations of Optional Technologies ";
+          err += "must be implemented according to the specs AND must pass ";
+          err += "all related TCK tests.  To properly pass the ";
+          err += "signature tests - you must identify all Optional Technology ";
+          err += "areas (via javaee.level) that you wish to pass signature tests for.";
+          TestUtil.logMsg(err);
+          result.addFailedPkg(packageName
+              + " (Undeclared Optional Technology package found in reflection mode)");
+        } else {
+          TestUtil.logMsg("********** Undeclared Optional Technology package '"
+              + packageName + "' - PASSED (REFLECTION MODE) **********");
+        }
+      }
+    }
+
+    return result;
+
+  } // END executeSigTest
+
+  // ------------------------------------------------------- Protected Methods
+
+  /**
+   * Using a common set of information, create arguments that are appropriate to
+   * be used with the underlying signature test framework.
+   *
+   * @param packageListFile
+   *          - file containing the packages/classes that are to be verified
+   * @param mapFile
+   *          sig-test.map file
+   * @param signatureRepositoryDir
+   *          directory containing the recorded signatures
+   * @param packageOrClassUnderTest
+   *          the class or package
+   * @param classpath
+   *          The location of the API being verified. Normally the checked API
+   *          will be available in the test environment and testClasspath will
+   *          be null. In some rare cases the tested API may not be part of the
+   *          test environment and will have to specified using this parameter.
+   */
+  protected abstract String[] createTestArguments(String packageListFile,
+      String mapFile, String signatureRepositoryDir,
+      String packageOrClassUnderTest, String classpath, boolean bStaticMode)
+      throws Exception;
+
+  /**
+   * Invoke the underlying signature test framework for the specified package or
+   * class.
+   *
+   * @param packageOrClassName
+   *          the package or class to be validated
+   * @param testArguments
+   *          the arguments necessary to invoke the signature test framework
+   *
+   * @return <code>true</code> if the test passed, otherwise <code>false</code>
+   */
+  protected abstract boolean runSignatureTest(String packageOrClassName,
+      String[] testArguments) throws Exception;
+
+  /**
+   * This checks if a class exists or not within the impl.
+   *
+   * @param packageOrClassName
+   *          the package or class to be validated
+   *
+   * @return <code>true</code> if the package was found to exist, otherwise
+   *         <code>false</code>
+   */
+  protected abstract boolean runPackageSearch(String packageOrClassName,
+      String[] testArguments) throws Exception;
+
+
+  /**
+   * This method checks whether JTA API jar contains classes from
+   * javax.transaction.xa package
+   *
+   * @param classpath
+   *           the classpath, pointing JTA API jar
+   * @param repositoryDir
+   *           the directory containing an empty signature file
+   *
+   * @return <code>true</code> if the package javax.transaction.xa is not
+   *        found in the JTA API jar, otherwise <code>false</code>
+   */
+   protected  abstract boolean verifyJTAJarForNoXA(String classpath,
+            String repositoryDir) throws Exception;
+
+  /**
+   * Loads the specified file into a Properties object provided the specified
+   * file exists and is a regular file. The call to new FileInputStream verifies
+   * that the specfied file is a regular file and exists.
+   *
+   * @param mapFile
+   *          the path and name of the map file to be loaded
+   *
+   * @return Properties The Properties object initialized with the contents of
+   *         the specified file
+   *
+   * @throws java.io.IOException
+   *           If the specified map file does not exist or is not a regular
+   *           file, can also be thrown if there is an error creating an input
+   *           stream from the specified file.
+   */
+  public Properties loadMapFile(String mapFile)
+      throws IOException, FileNotFoundException {
+
+    FileInputStream in = null;
+    try {
+      File map = new File(mapFile);
+      Properties props = new Properties();
+      in = new FileInputStream(map);
+      props.load(in);
+      return props;
+    } finally {
+      try {
+        if (in != null) {
+          in.close();
+        }
+      } catch (Throwable t) {
+        // do nothing
+      }
+    }
+
+  } // END loadMapFile
+
+  /**
+   * This method will attempt to build a fully-qualified filename in the format
+   * of <code>respositoryDir</code> + </code>baseName</code> +
+   * <code>.sig_</code> + </code>version</code>.
+   *
+   * @param baseName
+   *          the base portion of the signature filename
+   * @param repositoryDir
+   *          the directory in which the signatures are stored
+   * @param version
+   *          the version of the signature file
+   * @throws FileNotFoundException
+   *           if the file cannot be validated as existing and is in fact a file
+   * @return a valid, fully qualified filename, appropriate for the system the
+   *         test is being run on
+   */
+  protected String getSigFileName(String baseName, String repositoryDir,
+      String version) throws FileNotFoundException {
+
+    String sigFile;
+    if (repositoryDir.endsWith(File.separator)) {
+      sigFile = repositoryDir + baseName + SIG_FILE_EXT + SIG_FILE_VER_SEP
+          + version;
+    } else {
+      sigFile = repositoryDir + File.separator + baseName + SIG_FILE_EXT
+          + SIG_FILE_VER_SEP + version;
+    }
+
+    File testFile = new File(sigFile);
+
+    if (!testFile.exists() && !testFile.isFile()) {
+      throw new FileNotFoundException(
+          "Signature file \"" + sigFile + "\" does not exist.");
+    }
+
+    // we are actually requiring this normalizeFileName call to get
+    // things working on Windows. Without this, if we just return the
+    // testFile; we will fail on windows. (Solaris works either way)
+    // IMPORTANT UPDATE!! (4/5/2011)
+    // in sigtest 2.2: they stopped supporting the normalized version which
+    // created a string filename =
+    // "file://com/sun/ts/tests/signaturetest/foo.sig"
+    // so now use file path and name only.
+    // return normalizeFileName(testFile);
+    return testFile.toString();
+
+  } // END getSigFileName
+
+  protected abstract String normalizeFileName(File f);
+
+  /**
+   * Returns the name and path to the signature file that contains the specified
+   * package's signatures.
+   *
+   * @param packageName
+   *          The package under test
+   * @param mapFile
+   *          The name of the file that maps package names to versions
+   * @param repositoryDir
+   *          The directory that conatisn all signature files
+   *
+   * @return String The path and name of the siganture file that contains the
+   *         specified package's signatures
+   *
+   * @throws Exception
+   *           if the determined signature file is not a regular file or does
+   *           not exist
+   */
+  protected SignatureFileInfo getSigFileInfo(String packageName, String mapFile,
+      String repositoryDir) throws Exception {
+
+    String originalPackage = packageName;
+    String name = null;
+    String version = null;
+    Properties props = loadMapFile(mapFile);
+
+    while (true) {
+      boolean packageFound = false;
+      for (Enumeration<?> e = props.propertyNames(); e.hasMoreElements();) {
+        name = (String) (e.nextElement());
+        if (name.equals(packageName)) {
+          version = props.getProperty(name);
+          packageFound = true;
+          break;
+        } // end if
+      } // end for
+
+      if (packageFound) {
+        break;
+      }
+
+      /*
+       * If we get here we did not find a package name in the properties file
+       * that matches the package name under test. So we look for a package name
+       * in the properties file that could be the parent package for the package
+       * under test. We do this by removing the specified packages last package
+       * name section. So jakarta.ejb.spi would become jakarta.ejb
+       */
+      int index = packageName.lastIndexOf(".");
+      if (index <= 0) {
+        throw new Exception("Package \"" + originalPackage
+            + "\" not specified in mapping file \"" + mapFile + "\".");
+      }
+      packageName = packageName.substring(0, index);
+    } // end while
+
+    /* Return the expected name of the signature file */
+
+    return new SignatureFileInfo(getSigFileName(name, repositoryDir, version),
+        version);
+
+  } // END getSigFileInfo
+
+  // --------------------------------------------------------- Private Methods
+
+  /*
+   * This returns true is the passed in packageName matches one of the packages
+   * that are listed in the arrayOptionalPkgsToIgnore. arrayOptionalPkgsToIgnore
+   * is ultimately defined in the ts.jte property
+   * 'optional.tech.packages.to.ignore' If one of the entries in
+   * arrayOptionalPkgsToIgnore matches the packageName then that means we return
+   * TRUE to indicate we should ignore and NOT TEST that particular package.
+   */
+  private static boolean isIgnorePackageUnderTest(String packageName,
+      String[] arrayOptionalPkgsToIgnore) {
+
+    // if anything is null - consider no match
+    if ((packageName == null) || (arrayOptionalPkgsToIgnore == null)) {
+      return false;
+    }
+
+    for (int ii = 0; ii < arrayOptionalPkgsToIgnore.length; ii++) {
+      if (packageName.equals(arrayOptionalPkgsToIgnore[ii])) {
+        // we found a match -
+        return true;
+      }
+    }
+
+    return false;
+  }
+
+  /**
+   * Prints the specified list of parameters to the message log. Used for
+   * debugging purposes only.
+   *
+   * @param params
+   *          The list of parameters to dump.
+   */
+  private static void dumpTestArguments(String[] params) {
+
+    if (params != null && params.length > 0) {
+      TestUtil
+          .logTrace("----------------- BEGIN SIG PARAM DUMP -----------------");
+      for (int i = 0; i < params.length; i++) {
+        TestUtil.logTrace("   Param[" + i + "]: " + params[i]);
+      }
+      TestUtil
+          .logTrace("------------------ END SIG PARAM DUMP ------------------");
+    }
+
+  } // END dumpTestArguments
+
+  // ----------------------------------------------------------- Inner Classes
+
+  /**
+   * A simple data structure containing the fully qualified path to the
+   * signature file as well as the version being tested.
+   */
+  protected static class SignatureFileInfo {
+
+    private String file;
+
+    private String version;
+
+    // -------------------------------------------------------- Constructors
+
+    public SignatureFileInfo(String file, String version) {
+
+      if (file == null) {
+        throw new IllegalArgumentException("'file' argument cannot be null");
+      }
+
+      if (version == null) {
+        throw new IllegalArgumentException("'version' argument cannot be null");
+      }
+
+      this.file = file;
+      this.version = version;
+
+    } // END SignatureFileInfo
+
+    // ------------------------------------------------------ Public Methods
+
+    public String getFile() {
+
+      return file;
+
+    } // END getFileIncludingPath
+
+    public String getVersion() {
+
+      return version;
+
+    } // END getVersion
+
+  }
+
+} // END SigTestDriver
diff --git a/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SignatureTestDriverFactory.java b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SignatureTestDriverFactory.java
new file mode 100644
index 0000000..ff7434e
--- /dev/null
+++ b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/SignatureTestDriverFactory.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2007, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/*
+ * $Id$
+ */
+
+package jakarta.ws.rs.tck.signaturetest;
+
+/**
+ * <p>
+ * Factory to obtain SignatureTestDriver implementations.
+ * </p>
+ */
+public class SignatureTestDriverFactory {
+
+  /**
+   * <p>
+   * Identifier for the driver that uses API Check to perform signature
+   * validation.
+   * </p>
+   */
+  public static final String API_CHECK = "apicheck";
+
+  /**
+   * <p>
+   * Identifier for the driver that uses the Signature Test framwork for
+   * signature validation.
+   * </p>
+   */
+  public static final String SIG_TEST = "sigtest";
+
+  // ------------------------------------------------------------ Constructors
+
+  // Access via factory method
+  private SignatureTestDriverFactory() {
+  } // END SignatureTestDriverFactory
+
+  // ---------------------------------------------------------- Public Methods
+
+  /**
+   * <p>
+   * Obtain a {@link SignatureTestDriver} instance based on the
+   * <code>type</code> argument.
+   *
+   * @param type
+   *          the driver type to create
+   * @return a {@link SignatureTestDriver} implementation
+   */
+  public static SignatureTestDriver getInstance(String type) {
+
+    if (type == null || type.length() == 0) {
+      throw new IllegalArgumentException("Type was null or empty");
+    }
+
+    if (API_CHECK.equals(type)) {
+      return new ApiCheckDriver();
+    } else if (SIG_TEST.equals(type)) {
+      return new SigTestDriver();
+    } else {
+      throw new IllegalArgumentException("Unknown Type: '" + type + '\'');
+    }
+
+  } // END getInstance
+
+} // END SignatureTestDriverFactory
diff --git a/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/jaxrs/JAXRSSigTestIT.java b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/jaxrs/JAXRSSigTestIT.java
new file mode 100644
index 0000000..d513392
--- /dev/null
+++ b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/signaturetest/jaxrs/JAXRSSigTestIT.java
@@ -0,0 +1,429 @@
+/*
+ * Copyright (c) 2008, 2021 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/*
+ * $Id:
+ */
+package jakarta.ws.rs.tck.signaturetest.jaxrs;
+
+import java.io.PrintWriter;
+import java.util.LinkedList;
+import java.util.List;
+
+import jakarta.ws.rs.tck.signaturetest.SigTestEE;
+import jakarta.ws.rs.tck.signaturetest.SigTestResult;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import org.junit.jupiter.api.Test;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.PrintStream;
+
+import java.io.FileOutputStream;
+import java.io.FileInputStream;
+import java.util.ArrayList;
+import java.util.Properties;
+import java.io.InputStream;
+import java.io.FileNotFoundException;
+import java.util.Properties;
+
+import jakarta.ws.rs.tck.lib.util.TestUtil;
+
+/*
+ * This class is a simple example of a signature test that extends the
+ * SigTest framework class.  This signature test is run outside of the
+ * Java EE containers.  This class also contains the boilerplate
+ * code necessary to create a signature test using the test framework.
+ * To see a complete TCK example see the javaee directory for the Java EE
+ * TCK signature test class.
+ */
+public class JAXRSSigTestIT extends SigTestEE {
+
+  private static final long serialVersionUID = 1675845761668114828L;
+
+  public static final String EJB_VEHICLE = "ejb";
+
+  public static final String SERVLET_VEHICLE = "servlet";
+
+  public static final String JSP_VEHICLE = "jsp";
+
+  public static final String APP_CLIENT_VEHICLE = "appclient";
+
+  public static final String NO_VEHICLE = "standalone";
+
+  public JAXRSSigTestIT(){
+    setup();
+  }
+
+  /*
+   * Defines the packages that are included when running signature tests for any
+   * container (the default packages). This includes the appclient, ejb, jsp,
+   * and servlet containers.
+   */
+  private static final String[] DEFAULT_PKGS = { "jakarta.ws.rs",
+      "jakarta.ws.rs.client", "jakarta.ws.rs.core", "jakarta.ws.rs.container",
+      "jakarta.ws.rs.ext", "jakarta.ws.rs.sse", };
+
+  /*
+   * Defines additional packages that are included when running signature tests
+   * for the ejb, jsp and servlet containers.
+   */
+  private static final String[] EJB_SERVLET_JSP_PKGS = {};
+
+  /*
+   * Defines additional packages that are included when running signature tests
+   * for the jsp and servlet containers.
+   */
+  private static final String[] SERVLET_JSP_PKGS = {};
+
+  private static final String[] NO_CONTAINER_PKGS = { "jakarta.ws.rs",
+      "jakarta.ws.rs.client", "jakarta.ws.rs.core", "jakarta.ws.rs.container",
+      "jakarta.ws.rs.ext", "jakarta.ws.rs.sse", };
+
+  /***** Abstract Method Implementation *****/
+  /**
+   * Returns a list of strings where each string represents a package name. Each
+   * package name will have it's signature tested by the signature test
+   * framework.
+   * 
+   * @return String[] The names of the packages whose signatures should be
+   *         verified.
+   */
+  protected String[] getPackages() {
+    return DEFAULT_PKGS;
+  }
+
+  /**
+   * Adds the default packages and the command line flags to the specified list
+   * for each package defined in the list of default packages to check during
+   * signature tests. Note: The specified list is modified as a result of this
+   * method call.
+   *
+   * @param sigArgsList
+   *          The arg list being constructed to pass to the utility that records
+   *          and runs signature file tests.
+   */
+  private static void addDefaultPkgs(List<String> sigArgsList) {
+    for (int i = 0; i < DEFAULT_PKGS.length; i++) {
+      sigArgsList.add(DEFAULT_PKGS[i]);
+    }
+  }
+
+  /**
+   * Adds the ejb, servlet, and jsp packages and the command line flags to the
+   * specified list for each package defined in the list of ejb, servlet, and
+   * jsp packages to check during signature tests. Note: The specified list is
+   * modified as a result of this method call.
+   *
+   * @param sigArgsList
+   *          The arg list being constructed to pass to the utility that records
+   *          and runs signature file tests.
+   */
+  private static void addEjbServletJspPkgs(List<String> sigArgsList) {
+    for (int i = 0; i < EJB_SERVLET_JSP_PKGS.length; i++) {
+      sigArgsList.add(EJB_SERVLET_JSP_PKGS[i]);
+    }
+  }
+
+  /**
+   * Adds the servlet, and jsp packages and the command line flags to the
+   * specified list for each package defined in the list of servlet, and jsp
+   * packages to check during signature tests. Note: The specified list is
+   * modified as a result of this method call.
+   *
+   * @param sigArgsList
+   *          The arg list being constructed to pass to the utility that records
+   *          and runs signature file tests.
+   */
+  private static void addServletJspPkgs(List<String> sigArgsList) {
+    for (int i = 0; i < SERVLET_JSP_PKGS.length; i++) {
+      sigArgsList.add(SERVLET_JSP_PKGS[i]);
+    }
+  }
+
+  /**
+   * Adds the pkgs for tests to be run in NO Container (ie standalone) packages
+   * to check during signature tests. Note: The specified list is modified as a
+   * result of this method call.
+   *
+   * @param sigArgsList
+   *          The arg list being constructed to pass to the utility that records
+   *          and runs signature file tests.
+   */
+  private static void addNoContainerPkgs(List<String> sigArgsList) {
+    for (int i = 0; i < NO_CONTAINER_PKGS.length; i++) {
+      sigArgsList.add(NO_CONTAINER_PKGS[i]);
+    }
+  }
+
+  /**
+   * Returns a list of strings where each string represents a package name. Each
+   * package name will have it's signature tested by the signature test
+   * framework.
+   * 
+   * @param vehicleName
+   *          The name of the Jaspic container where the signature tests should
+   *          be conducted.
+   * @return String[] The names of the packages whose signatures should be
+   *         verified.
+   */
+  protected String[] getPackages(String vehicleName) {
+    List<String> packages = new LinkedList<String>();
+
+    if (vehicleName.equals(NO_VEHICLE)) {
+      addNoContainerPkgs(packages);
+    } else {
+      addDefaultPkgs(packages); // add default vehicle packages
+      if (vehicleName.equals(EJB_VEHICLE) || vehicleName.equals(SERVLET_VEHICLE)
+          || vehicleName.equals(JSP_VEHICLE)) {
+        addEjbServletJspPkgs(packages);
+      }
+      if (vehicleName.equals(SERVLET_VEHICLE)
+          || vehicleName.equals(JSP_VEHICLE)) {
+        addServletJspPkgs(packages);
+      }
+    }
+    return packages.toArray(new String[packages.size()]);
+  }
+
+  public File writeStreamToTempFile(InputStream inputStream, String tempFilePrefix, String tempFileSuffix) throws IOException {
+    FileOutputStream outputStream = null;
+
+    try {
+        File file = File.createTempFile(tempFilePrefix, tempFileSuffix);
+        outputStream = new FileOutputStream(file);
+        byte[] buffer = new byte[1024];
+        while (true) {
+            int bytesRead = inputStream.read(buffer);
+            if (bytesRead == -1) {
+                break;
+            }
+            outputStream.write(buffer, 0, bytesRead);
+        }
+        return file;
+    }
+
+    finally {
+        if (outputStream != null) {
+            outputStream.close();
+        }
+    }
+  }
+
+  public File writeStreamToSigFile(InputStream inputStream, String packageVersion) throws IOException {
+    FileOutputStream outputStream = null;
+    String tmpdir = System.getProperty("java.io.tmpdir");
+    try {
+        File sigfile = new File(tmpdir+File.separator+"jakarta.ws.rs.sig_"+packageVersion);
+        if(sigfile.exists()){
+          sigfile.delete();
+          TestUtil.logMsg("Existing signature file deleted to create new one");
+        }
+        if(!sigfile.createNewFile()){
+          TestUtil.logErr("signature file is not created");
+        }
+        outputStream = new FileOutputStream(sigfile);
+        byte[] buffer = new byte[1024];
+        while (true) {
+            int bytesRead = inputStream.read(buffer);
+            if (bytesRead == -1) {
+                break;
+            }
+            outputStream.write(buffer, 0, bytesRead);
+        }
+        return sigfile;
+    }
+
+    finally {
+        if (outputStream != null) {
+            outputStream.close();
+        }
+    }
+  }
+
+
+  /***** Boilerplate Code *****/
+
+
+  /*
+   * The following comments are specified in the base class that defines the
+   * signature tests. This is done so the test finders will find the right class
+   * to run. The implementation of these methods is inherited from the super
+   * class which is part of the signature test framework.
+   */
+
+  // NOTE: If the API under test is not part of your testing runtime
+  // environment, you may use the property sigTestClasspath to specify
+  // where the API under test lives. This should almost never be used.
+  // Normally the API under test should be specified in the classpath
+  // of the VM running the signature tests. Use either the first
+  // comment or the one below it depending on which properties your
+  // signature tests need. Please do not use both comments.
+
+
+  /*
+   * @class.setup_props: ts_home, The base path of this TCK; sigTestClasspath;
+   */
+  /*
+   * @testName: signatureTest
+   * 
+   * @assertion: A JAXRS container must implement the required classes and APIs
+   * specified in the JAXRS Specification.
+   * 
+   * @test_Strategy: Using reflection, gather the implementation specific
+   * classes and APIs. Compare these results with the expected (required)
+   * classes and APIs.
+   *
+   */
+  @Test
+  public void signatureTest() throws Fault {
+    TestUtil.logMsg("$$$ JAXRSSigTestIT.signatureTest() called");
+    SigTestResult results = null;
+    String mapFile = null;
+    String packageFile = null;
+    String repositoryDir = null;
+    Properties mapFileAsProps = null;
+    try {
+
+    InputStream inStreamMapfile = JAXRSSigTestIT.class.getClassLoader().getResourceAsStream("jakarta/ws/rs/tck/signaturetest/sig-test.map");
+    File mFile = writeStreamToTempFile(inStreamMapfile, "sig-test", ".map");
+    mapFile = mFile.getCanonicalPath();
+    TestUtil.logMsg("mapFile location is :"+mapFile);
+
+    InputStream inStreamPackageFile = JAXRSSigTestIT.class.getClassLoader().getResourceAsStream("jakarta/ws/rs/tck/signaturetest/sig-test-pkg-list.txt");
+    File pFile = writeStreamToTempFile(inStreamPackageFile, "sig-test-pkg-list", ".txt");
+    packageFile = pFile.getCanonicalPath();
+    TestUtil.logMsg("packageFile location is :"+packageFile);
+  
+    mapFileAsProps = getSigTestDriver().loadMapFile(mapFile);
+    String packageVersion = mapFileAsProps.getProperty("jakarta.ws.rs");
+    TestUtil.logMsg("Package version from mapfile :"+packageVersion);
+
+    InputStream inStreamSigFile = JAXRSSigTestIT.class.getClassLoader().getResourceAsStream("jakarta/ws/rs/tck/signaturetest/jakarta.ws.rs.sig_"+packageVersion);
+    File sigFile = writeStreamToSigFile(inStreamSigFile, packageVersion);
+    TestUtil.logMsg("signature File location is :"+sigFile.getCanonicalPath());
+    repositoryDir = System.getProperty("java.io.tmpdir");
+
+
+    } catch(IOException ex){
+        TestUtil.logMsg("Exception while creating temp files :"+ex);
+    }
+
+    String[] packages = getPackages(testInfo.getVehicle());
+    String[] classes = getClasses(testInfo.getVehicle());
+    String testClasspath = System.getProperty("signature.sigTestClasspath");
+    String optionalPkgToIgnore = testInfo.getOptionalTechPackagesToIgnore();
+
+    // unlisted optional packages are technology packages for those optional
+    // technologies (e.g. jsr-88) that might not have been specified by the
+    // user.
+    // We want to ensure there are no full or partial implementations of an
+    // optional technology which were not declared
+    ArrayList<String> unlistedTechnologyPkgs = getUnlistedOptionalPackages();
+
+    // If testing with Java 9+, extract the JDK's modules so they can be used
+    // on the testcase's classpath.
+    Properties sysProps = System.getProperties();
+    String version = (String) sysProps.get("java.version");
+    if (!version.startsWith("1.")) {
+      String jimageDir = testInfo.getJImageDir();
+      File f = new File(jimageDir);
+      f.mkdirs();
+
+      String javaHome = (String) sysProps.get("java.home");
+      TestUtil.logMsg("Executing JImage");
+
+      try {
+        ProcessBuilder pb = new ProcessBuilder(javaHome + "/bin/jimage", "extract", "--dir=" + jimageDir, javaHome + "/lib/modules");
+        TestUtil.logMsg(javaHome + "/bin/jimage extract --dir=" + jimageDir + " " + javaHome + "/lib/modules");
+        pb.redirectErrorStream(true);
+        Process proc = pb.start();
+        BufferedReader out = new BufferedReader(new InputStreamReader(proc.getInputStream()));
+        String line = null;
+        while ((line = out.readLine()) != null) {
+          TestUtil.logMsg(line);
+        }
+
+        int rc = proc.waitFor();
+        TestUtil.logMsg("JImage RC = " + rc);
+        out.close();
+      } catch (Exception e) {
+        TestUtil.logMsg("Exception while executing JImage!  Some tests may fail.");
+        e.printStackTrace();
+      }
+    }
+
+    try {
+      results = getSigTestDriver().executeSigTest(packageFile, mapFile,
+          repositoryDir, packages, classes, testClasspath,
+          unlistedTechnologyPkgs, optionalPkgToIgnore);
+      TestUtil.logMsg(results.toString());
+      if (!results.passed()) {
+        TestUtil.logErr("results.passed() returned false");
+        throw new Exception();
+      }
+
+      // Call verifyJtaJarTest based on some conditions, please check the
+      // comment for verifyJtaJarTest.
+      if ("standalone".equalsIgnoreCase(testInfo.getVehicle())) {
+        if (mapFileAsProps == null || mapFileAsProps.size() == 0) {
+          // empty signature file, something unusual
+          TestUtil.logMsg("JAXRSSigTestIT.signatureTest() returning, " +
+              "as signature map file is empty.");
+          return;
+        }
+
+        boolean isJTASigTest = false;
+
+        // Determine whether the signature map file contains package 
+        // jakarta.transaction
+        String jtaVersion = mapFileAsProps.getProperty("jakarta.transaction");
+        if (jtaVersion == null || "".equals(jtaVersion.trim())) {
+          TestUtil.logMsg("JAXRSSigTestIT.signatureTest() returning, " +
+              "as this is neither JTA TCK run, not Java EE CTS run.");
+          return;
+        }
+
+        TestUtil.logMsg("jtaVersion " + jtaVersion);  
+        // Signature map packaged in JTA TCK will contain a single package 
+        // jakarta.transaction
+        if (mapFileAsProps.size() == 1) {
+            isJTASigTest = true;
+        }
+
+        if (isJTASigTest || !jtaVersion.startsWith("1.2")) {
+          verifyJtaJarTest();
+        }
+      }
+      TestUtil.logMsg("$$$ JAXRSSigTestIT.signatureTest() returning");
+    } catch (Exception e) {
+      if (results != null && !results.passed()) {
+        throw new Fault("JAXRSSigTestIT.signatureTest() failed!, diffs found");
+      } else {
+        TestUtil.logErr("Unexpected exception " + e.getMessage());
+        throw new Fault("signatureTest failed with an unexpected exception", e);
+      }
+    }
+  }
+
+  /*
+   * Call the parent class's cleanup method.
+   */
+}
diff --git a/jaxrs-tck/src/main/resources/jakarta/ws/rs/tck/signaturetest/jakarta.ws.rs.sig_3.1.0 b/jaxrs-tck/src/main/resources/jakarta/ws/rs/tck/signaturetest/jakarta.ws.rs.sig_3.1.0
new file mode 100644
index 0000000..9838fc9
--- /dev/null
+++ b/jaxrs-tck/src/main/resources/jakarta/ws/rs/tck/signaturetest/jakarta.ws.rs.sig_3.1.0
@@ -0,0 +1,1998 @@
+#Signature file v4.1
+#Version 3.1.0
+
+CLSS public abstract interface !annotation jakarta.ws.rs.ApplicationPath
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[TYPE])
+intf java.lang.annotation.Annotation
+meth public abstract java.lang.String value()
+
+CLSS public jakarta.ws.rs.BadRequestException
+cons public init()
+cons public init(jakarta.ws.rs.core.Response)
+cons public init(jakarta.ws.rs.core.Response,java.lang.Throwable)
+cons public init(java.lang.String)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response,java.lang.Throwable)
+cons public init(java.lang.String,java.lang.Throwable)
+cons public init(java.lang.Throwable)
+supr jakarta.ws.rs.ClientErrorException
+hfds serialVersionUID
+
+CLSS public abstract interface !annotation jakarta.ws.rs.BeanParam
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[PARAMETER, METHOD, FIELD])
+intf java.lang.annotation.Annotation
+
+CLSS public jakarta.ws.rs.ClientErrorException
+cons public init(int)
+cons public init(int,java.lang.Throwable)
+cons public init(jakarta.ws.rs.core.Response$Status)
+cons public init(jakarta.ws.rs.core.Response$Status,java.lang.Throwable)
+cons public init(jakarta.ws.rs.core.Response)
+cons public init(jakarta.ws.rs.core.Response,java.lang.Throwable)
+cons public init(java.lang.String,int)
+cons public init(java.lang.String,int,java.lang.Throwable)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response$Status)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response$Status,java.lang.Throwable)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response,java.lang.Throwable)
+supr jakarta.ws.rs.WebApplicationException
+hfds serialVersionUID
+
+CLSS public abstract interface !annotation jakarta.ws.rs.ConstrainedTo
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[TYPE])
+intf java.lang.annotation.Annotation
+meth public abstract jakarta.ws.rs.RuntimeType value()
+
+CLSS public abstract interface !annotation jakarta.ws.rs.Consumes
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Inherited()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[TYPE, METHOD])
+intf java.lang.annotation.Annotation
+meth public abstract !hasdefault java.lang.String[] value()
+
+CLSS public abstract interface !annotation jakarta.ws.rs.CookieParam
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[PARAMETER, METHOD, FIELD])
+intf java.lang.annotation.Annotation
+meth public abstract java.lang.String value()
+
+CLSS public abstract interface !annotation jakarta.ws.rs.DELETE
+ anno 0 jakarta.ws.rs.HttpMethod(java.lang.String value="DELETE")
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[METHOD])
+intf java.lang.annotation.Annotation
+
+CLSS public abstract interface !annotation jakarta.ws.rs.DefaultValue
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[PARAMETER, METHOD, FIELD])
+intf java.lang.annotation.Annotation
+meth public abstract java.lang.String value()
+
+CLSS public abstract interface !annotation jakarta.ws.rs.Encoded
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[PARAMETER, METHOD, FIELD, CONSTRUCTOR, TYPE])
+intf java.lang.annotation.Annotation
+
+CLSS public jakarta.ws.rs.ForbiddenException
+cons public init()
+cons public init(jakarta.ws.rs.core.Response)
+cons public init(jakarta.ws.rs.core.Response,java.lang.Throwable)
+cons public init(java.lang.String)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response,java.lang.Throwable)
+cons public init(java.lang.String,java.lang.Throwable)
+cons public init(java.lang.Throwable)
+supr jakarta.ws.rs.ClientErrorException
+hfds serialVersionUID
+
+CLSS public abstract interface !annotation jakarta.ws.rs.FormParam
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[PARAMETER, METHOD, FIELD])
+intf java.lang.annotation.Annotation
+meth public abstract java.lang.String value()
+
+CLSS public abstract interface !annotation jakarta.ws.rs.GET
+ anno 0 jakarta.ws.rs.HttpMethod(java.lang.String value="GET")
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[METHOD])
+intf java.lang.annotation.Annotation
+
+CLSS public abstract interface !annotation jakarta.ws.rs.HEAD
+ anno 0 jakarta.ws.rs.HttpMethod(java.lang.String value="HEAD")
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[METHOD])
+intf java.lang.annotation.Annotation
+
+CLSS public abstract interface !annotation jakarta.ws.rs.HeaderParam
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[PARAMETER, METHOD, FIELD])
+intf java.lang.annotation.Annotation
+meth public abstract java.lang.String value()
+
+CLSS public abstract interface !annotation jakarta.ws.rs.HttpMethod
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[ANNOTATION_TYPE])
+fld public final static java.lang.String DELETE = "DELETE"
+fld public final static java.lang.String GET = "GET"
+fld public final static java.lang.String HEAD = "HEAD"
+fld public final static java.lang.String OPTIONS = "OPTIONS"
+fld public final static java.lang.String PATCH = "PATCH"
+fld public final static java.lang.String POST = "POST"
+fld public final static java.lang.String PUT = "PUT"
+intf java.lang.annotation.Annotation
+meth public abstract java.lang.String value()
+
+CLSS public jakarta.ws.rs.InternalServerErrorException
+cons public init()
+cons public init(jakarta.ws.rs.core.Response)
+cons public init(jakarta.ws.rs.core.Response,java.lang.Throwable)
+cons public init(java.lang.String)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response,java.lang.Throwable)
+cons public init(java.lang.String,java.lang.Throwable)
+cons public init(java.lang.Throwable)
+supr jakarta.ws.rs.ServerErrorException
+hfds serialVersionUID
+
+CLSS public abstract interface !annotation jakarta.ws.rs.MatrixParam
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[PARAMETER, METHOD, FIELD])
+intf java.lang.annotation.Annotation
+meth public abstract java.lang.String value()
+
+CLSS public abstract interface !annotation jakarta.ws.rs.NameBinding
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[ANNOTATION_TYPE])
+intf java.lang.annotation.Annotation
+
+CLSS public jakarta.ws.rs.NotAcceptableException
+cons public init()
+cons public init(jakarta.ws.rs.core.Response)
+cons public init(jakarta.ws.rs.core.Response,java.lang.Throwable)
+cons public init(java.lang.String)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response,java.lang.Throwable)
+cons public init(java.lang.String,java.lang.Throwable)
+cons public init(java.lang.Throwable)
+supr jakarta.ws.rs.ClientErrorException
+hfds serialVersionUID
+
+CLSS public jakarta.ws.rs.NotAllowedException
+cons public !varargs init(java.lang.String,java.lang.String,java.lang.String[])
+cons public !varargs init(java.lang.String,java.lang.String[])
+cons public !varargs init(java.lang.String,java.lang.Throwable,java.lang.String[])
+cons public !varargs init(java.lang.Throwable,java.lang.String[])
+cons public init(jakarta.ws.rs.core.Response)
+cons public init(jakarta.ws.rs.core.Response,java.lang.Throwable)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response,java.lang.Throwable)
+supr jakarta.ws.rs.ClientErrorException
+hfds serialVersionUID
+
+CLSS public jakarta.ws.rs.NotAuthorizedException
+cons public !varargs init(java.lang.Object,java.lang.Object[])
+cons public !varargs init(java.lang.String,java.lang.Object,java.lang.Object[])
+cons public !varargs init(java.lang.String,java.lang.Throwable,java.lang.Object,java.lang.Object[])
+cons public !varargs init(java.lang.Throwable,java.lang.Object,java.lang.Object[])
+cons public init(jakarta.ws.rs.core.Response)
+cons public init(jakarta.ws.rs.core.Response,java.lang.Throwable)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response,java.lang.Throwable)
+meth public java.util.List<java.lang.Object> getChallenges()
+supr jakarta.ws.rs.ClientErrorException
+hfds challenges,serialVersionUID
+
+CLSS public jakarta.ws.rs.NotFoundException
+cons public init()
+cons public init(jakarta.ws.rs.core.Response)
+cons public init(jakarta.ws.rs.core.Response,java.lang.Throwable)
+cons public init(java.lang.String)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response,java.lang.Throwable)
+cons public init(java.lang.String,java.lang.Throwable)
+cons public init(java.lang.Throwable)
+supr jakarta.ws.rs.ClientErrorException
+hfds serialVersionUID
+
+CLSS public jakarta.ws.rs.NotSupportedException
+cons public init()
+cons public init(jakarta.ws.rs.core.Response)
+cons public init(jakarta.ws.rs.core.Response,java.lang.Throwable)
+cons public init(java.lang.String)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response,java.lang.Throwable)
+cons public init(java.lang.String,java.lang.Throwable)
+cons public init(java.lang.Throwable)
+supr jakarta.ws.rs.ClientErrorException
+hfds serialVersionUID
+
+CLSS public abstract interface !annotation jakarta.ws.rs.OPTIONS
+ anno 0 jakarta.ws.rs.HttpMethod(java.lang.String value="OPTIONS")
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[METHOD])
+intf java.lang.annotation.Annotation
+
+CLSS public abstract interface !annotation jakarta.ws.rs.PATCH
+ anno 0 jakarta.ws.rs.HttpMethod(java.lang.String value="PATCH")
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[METHOD])
+intf java.lang.annotation.Annotation
+
+CLSS public abstract interface !annotation jakarta.ws.rs.POST
+ anno 0 jakarta.ws.rs.HttpMethod(java.lang.String value="POST")
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[METHOD])
+intf java.lang.annotation.Annotation
+
+CLSS public abstract interface !annotation jakarta.ws.rs.PUT
+ anno 0 jakarta.ws.rs.HttpMethod(java.lang.String value="PUT")
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[METHOD])
+intf java.lang.annotation.Annotation
+
+CLSS public abstract interface !annotation jakarta.ws.rs.Path
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[TYPE, METHOD])
+intf java.lang.annotation.Annotation
+meth public abstract java.lang.String value()
+
+CLSS public abstract interface !annotation jakarta.ws.rs.PathParam
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[PARAMETER, METHOD, FIELD])
+intf java.lang.annotation.Annotation
+meth public abstract java.lang.String value()
+
+CLSS public final jakarta.ws.rs.Priorities
+fld public final static int AUTHENTICATION = 1000
+fld public final static int AUTHORIZATION = 2000
+fld public final static int ENTITY_CODER = 4000
+fld public final static int HEADER_DECORATOR = 3000
+fld public final static int USER = 5000
+supr java.lang.Object
+
+CLSS public jakarta.ws.rs.ProcessingException
+cons public init(java.lang.String)
+cons public init(java.lang.String,java.lang.Throwable)
+cons public init(java.lang.Throwable)
+supr java.lang.RuntimeException
+hfds serialVersionUID
+
+CLSS public abstract interface !annotation jakarta.ws.rs.Produces
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Inherited()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[TYPE, METHOD])
+intf java.lang.annotation.Annotation
+meth public abstract !hasdefault java.lang.String[] value()
+
+CLSS public abstract interface !annotation jakarta.ws.rs.QueryParam
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[PARAMETER, METHOD, FIELD])
+intf java.lang.annotation.Annotation
+meth public abstract java.lang.String value()
+
+CLSS public jakarta.ws.rs.RedirectionException
+cons public init(int,java.net.URI)
+cons public init(jakarta.ws.rs.core.Response$Status,java.net.URI)
+cons public init(jakarta.ws.rs.core.Response)
+cons public init(java.lang.String,int,java.net.URI)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response$Status,java.net.URI)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response)
+meth public java.net.URI getLocation()
+supr jakarta.ws.rs.WebApplicationException
+hfds serialVersionUID
+
+CLSS public final !enum jakarta.ws.rs.RuntimeType
+fld public final static jakarta.ws.rs.RuntimeType CLIENT
+fld public final static jakarta.ws.rs.RuntimeType SERVER
+meth public static jakarta.ws.rs.RuntimeType valueOf(java.lang.String)
+meth public static jakarta.ws.rs.RuntimeType[] values()
+supr java.lang.Enum<jakarta.ws.rs.RuntimeType>
+
+CLSS public abstract interface jakarta.ws.rs.SeBootstrap
+innr public abstract interface static Configuration
+innr public abstract interface static Instance
+meth public static java.util.concurrent.CompletionStage<jakarta.ws.rs.SeBootstrap$Instance> start(jakarta.ws.rs.core.Application)
+meth public static java.util.concurrent.CompletionStage<jakarta.ws.rs.SeBootstrap$Instance> start(jakarta.ws.rs.core.Application,jakarta.ws.rs.SeBootstrap$Configuration)
+meth public static java.util.concurrent.CompletionStage<jakarta.ws.rs.SeBootstrap$Instance> start(java.lang.Class<? extends jakarta.ws.rs.core.Application>)
+meth public static java.util.concurrent.CompletionStage<jakarta.ws.rs.SeBootstrap$Instance> start(java.lang.Class<? extends jakarta.ws.rs.core.Application>,jakarta.ws.rs.SeBootstrap$Configuration)
+
+CLSS public abstract interface static jakarta.ws.rs.SeBootstrap$Configuration
+ outer jakarta.ws.rs.SeBootstrap
+fld public final static int DEFAULT_PORT = -1
+fld public final static int FREE_PORT = 0
+fld public final static java.lang.String HOST = "jakarta.ws.rs.SeBootstrap.Host"
+fld public final static java.lang.String PORT = "jakarta.ws.rs.SeBootstrap.Port"
+fld public final static java.lang.String PROTOCOL = "jakarta.ws.rs.SeBootstrap.Protocol"
+fld public final static java.lang.String ROOT_PATH = "jakarta.ws.rs.SeBootstrap.RootPath"
+fld public final static java.lang.String SSL_CLIENT_AUTHENTICATION = "jakarta.ws.rs.SeBootstrap.SSLClientAuthentication"
+fld public final static java.lang.String SSL_CONTEXT = "jakarta.ws.rs.SeBootstrap.SSLContext"
+innr public abstract interface static Builder
+innr public final static !enum SSLClientAuthentication
+meth public abstract java.lang.Object property(java.lang.String)
+meth public boolean hasProperty(java.lang.String)
+meth public int port()
+meth public jakarta.ws.rs.SeBootstrap$Configuration$SSLClientAuthentication sslClientAuthentication()
+meth public jakarta.ws.rs.core.UriBuilder baseUriBuilder()
+meth public java.lang.String host()
+meth public java.lang.String protocol()
+meth public java.lang.String rootPath()
+meth public java.net.URI baseUri()
+meth public javax.net.ssl.SSLContext sslContext()
+meth public static jakarta.ws.rs.SeBootstrap$Configuration$Builder builder()
+
+CLSS public abstract interface static jakarta.ws.rs.SeBootstrap$Configuration$Builder
+ outer jakarta.ws.rs.SeBootstrap$Configuration
+meth public abstract <%0 extends java.lang.Object> jakarta.ws.rs.SeBootstrap$Configuration$Builder from(java.util.function.BiFunction<java.lang.String,java.lang.Class<{%%0}>,java.util.Optional<{%%0}>>)
+meth public abstract jakarta.ws.rs.SeBootstrap$Configuration build()
+meth public abstract jakarta.ws.rs.SeBootstrap$Configuration$Builder property(java.lang.String,java.lang.Object)
+meth public jakarta.ws.rs.SeBootstrap$Configuration$Builder from(java.lang.Object)
+meth public jakarta.ws.rs.SeBootstrap$Configuration$Builder host(java.lang.String)
+meth public jakarta.ws.rs.SeBootstrap$Configuration$Builder port(java.lang.Integer)
+meth public jakarta.ws.rs.SeBootstrap$Configuration$Builder protocol(java.lang.String)
+meth public jakarta.ws.rs.SeBootstrap$Configuration$Builder rootPath(java.lang.String)
+meth public jakarta.ws.rs.SeBootstrap$Configuration$Builder sslClientAuthentication(jakarta.ws.rs.SeBootstrap$Configuration$SSLClientAuthentication)
+meth public jakarta.ws.rs.SeBootstrap$Configuration$Builder sslContext(javax.net.ssl.SSLContext)
+
+CLSS public final static !enum jakarta.ws.rs.SeBootstrap$Configuration$SSLClientAuthentication
+ outer jakarta.ws.rs.SeBootstrap$Configuration
+fld public final static jakarta.ws.rs.SeBootstrap$Configuration$SSLClientAuthentication MANDATORY
+fld public final static jakarta.ws.rs.SeBootstrap$Configuration$SSLClientAuthentication NONE
+fld public final static jakarta.ws.rs.SeBootstrap$Configuration$SSLClientAuthentication OPTIONAL
+meth public static jakarta.ws.rs.SeBootstrap$Configuration$SSLClientAuthentication valueOf(java.lang.String)
+meth public static jakarta.ws.rs.SeBootstrap$Configuration$SSLClientAuthentication[] values()
+supr java.lang.Enum<jakarta.ws.rs.SeBootstrap$Configuration$SSLClientAuthentication>
+
+CLSS public abstract interface static jakarta.ws.rs.SeBootstrap$Instance
+ outer jakarta.ws.rs.SeBootstrap
+innr public abstract interface static StopResult
+meth public abstract <%0 extends java.lang.Object> {%%0} unwrap(java.lang.Class<{%%0}>)
+meth public abstract jakarta.ws.rs.SeBootstrap$Configuration configuration()
+meth public abstract java.util.concurrent.CompletionStage<jakarta.ws.rs.SeBootstrap$Instance$StopResult> stop()
+meth public void stopOnShutdown(java.util.function.Consumer<jakarta.ws.rs.SeBootstrap$Instance$StopResult>)
+
+CLSS public abstract interface static jakarta.ws.rs.SeBootstrap$Instance$StopResult
+ outer jakarta.ws.rs.SeBootstrap$Instance
+meth public abstract <%0 extends java.lang.Object> {%%0} unwrap(java.lang.Class<{%%0}>)
+
+CLSS public jakarta.ws.rs.ServerErrorException
+cons public init(int)
+cons public init(int,java.lang.Throwable)
+cons public init(jakarta.ws.rs.core.Response$Status)
+cons public init(jakarta.ws.rs.core.Response$Status,java.lang.Throwable)
+cons public init(jakarta.ws.rs.core.Response)
+cons public init(jakarta.ws.rs.core.Response,java.lang.Throwable)
+cons public init(java.lang.String,int)
+cons public init(java.lang.String,int,java.lang.Throwable)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response$Status)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response$Status,java.lang.Throwable)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response,java.lang.Throwable)
+supr jakarta.ws.rs.WebApplicationException
+hfds serialVersionUID
+
+CLSS public jakarta.ws.rs.ServiceUnavailableException
+cons public init()
+cons public init(jakarta.ws.rs.core.Response)
+cons public init(jakarta.ws.rs.core.Response,java.lang.Throwable)
+cons public init(java.lang.Long)
+cons public init(java.lang.Long,java.lang.Throwable)
+cons public init(java.lang.String)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response,java.lang.Throwable)
+cons public init(java.lang.String,java.lang.Long)
+cons public init(java.lang.String,java.lang.Long,java.lang.Throwable)
+cons public init(java.lang.String,java.util.Date)
+cons public init(java.lang.String,java.util.Date,java.lang.Throwable)
+cons public init(java.util.Date)
+cons public init(java.util.Date,java.lang.Throwable)
+meth public boolean hasRetryAfter()
+meth public java.util.Date getRetryTime(java.util.Date)
+supr jakarta.ws.rs.ServerErrorException
+hfds serialVersionUID
+
+CLSS public jakarta.ws.rs.WebApplicationException
+cons public init()
+cons public init(int)
+cons public init(jakarta.ws.rs.core.Response$Status)
+cons public init(jakarta.ws.rs.core.Response)
+cons public init(java.lang.String)
+cons public init(java.lang.String,int)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response$Status)
+cons public init(java.lang.String,jakarta.ws.rs.core.Response)
+cons public init(java.lang.String,java.lang.Throwable)
+cons public init(java.lang.String,java.lang.Throwable,int)
+cons public init(java.lang.String,java.lang.Throwable,jakarta.ws.rs.core.Response$Status)
+cons public init(java.lang.String,java.lang.Throwable,jakarta.ws.rs.core.Response)
+cons public init(java.lang.Throwable)
+cons public init(java.lang.Throwable,int)
+cons public init(java.lang.Throwable,jakarta.ws.rs.core.Response$Status)
+cons public init(java.lang.Throwable,jakarta.ws.rs.core.Response)
+meth public jakarta.ws.rs.core.Response getResponse()
+supr java.lang.RuntimeException
+hfds response,serialVersionUID
+
+CLSS public abstract interface jakarta.ws.rs.client.AsyncInvoker
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> delete(jakarta.ws.rs.client.InvocationCallback<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> delete(jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> delete(java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> get(jakarta.ws.rs.client.InvocationCallback<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> get(jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> get(java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> method(java.lang.String,jakarta.ws.rs.client.Entity<?>,jakarta.ws.rs.client.InvocationCallback<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> method(java.lang.String,jakarta.ws.rs.client.Entity<?>,jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> method(java.lang.String,jakarta.ws.rs.client.Entity<?>,java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> method(java.lang.String,jakarta.ws.rs.client.InvocationCallback<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> method(java.lang.String,jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> method(java.lang.String,java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> options(jakarta.ws.rs.client.InvocationCallback<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> options(jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> options(java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> post(jakarta.ws.rs.client.Entity<?>,jakarta.ws.rs.client.InvocationCallback<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> post(jakarta.ws.rs.client.Entity<?>,jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> post(jakarta.ws.rs.client.Entity<?>,java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> put(jakarta.ws.rs.client.Entity<?>,jakarta.ws.rs.client.InvocationCallback<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> put(jakarta.ws.rs.client.Entity<?>,jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> put(jakarta.ws.rs.client.Entity<?>,java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> trace(jakarta.ws.rs.client.InvocationCallback<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> trace(jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> trace(java.lang.Class<{%%0}>)
+meth public abstract java.util.concurrent.Future<jakarta.ws.rs.core.Response> delete()
+meth public abstract java.util.concurrent.Future<jakarta.ws.rs.core.Response> get()
+meth public abstract java.util.concurrent.Future<jakarta.ws.rs.core.Response> head()
+meth public abstract java.util.concurrent.Future<jakarta.ws.rs.core.Response> head(jakarta.ws.rs.client.InvocationCallback<jakarta.ws.rs.core.Response>)
+meth public abstract java.util.concurrent.Future<jakarta.ws.rs.core.Response> method(java.lang.String)
+meth public abstract java.util.concurrent.Future<jakarta.ws.rs.core.Response> method(java.lang.String,jakarta.ws.rs.client.Entity<?>)
+meth public abstract java.util.concurrent.Future<jakarta.ws.rs.core.Response> options()
+meth public abstract java.util.concurrent.Future<jakarta.ws.rs.core.Response> post(jakarta.ws.rs.client.Entity<?>)
+meth public abstract java.util.concurrent.Future<jakarta.ws.rs.core.Response> put(jakarta.ws.rs.client.Entity<?>)
+meth public abstract java.util.concurrent.Future<jakarta.ws.rs.core.Response> trace()
+
+CLSS public abstract interface jakarta.ws.rs.client.Client
+intf jakarta.ws.rs.core.Configurable<jakarta.ws.rs.client.Client>
+intf java.lang.AutoCloseable
+meth public abstract jakarta.ws.rs.client.Invocation$Builder invocation(jakarta.ws.rs.core.Link)
+meth public abstract jakarta.ws.rs.client.WebTarget target(jakarta.ws.rs.core.Link)
+meth public abstract jakarta.ws.rs.client.WebTarget target(jakarta.ws.rs.core.UriBuilder)
+meth public abstract jakarta.ws.rs.client.WebTarget target(java.lang.String)
+meth public abstract jakarta.ws.rs.client.WebTarget target(java.net.URI)
+meth public abstract javax.net.ssl.HostnameVerifier getHostnameVerifier()
+meth public abstract javax.net.ssl.SSLContext getSslContext()
+meth public abstract void close()
+
+CLSS public abstract jakarta.ws.rs.client.ClientBuilder
+cons protected init()
+fld public final static java.lang.String JAXRS_DEFAULT_CLIENT_BUILDER_PROPERTY = "jakarta.ws.rs.client.ClientBuilder"
+intf jakarta.ws.rs.core.Configurable<jakarta.ws.rs.client.ClientBuilder>
+meth public abstract jakarta.ws.rs.client.Client build()
+meth public abstract jakarta.ws.rs.client.ClientBuilder connectTimeout(long,java.util.concurrent.TimeUnit)
+meth public abstract jakarta.ws.rs.client.ClientBuilder executorService(java.util.concurrent.ExecutorService)
+meth public abstract jakarta.ws.rs.client.ClientBuilder hostnameVerifier(javax.net.ssl.HostnameVerifier)
+meth public abstract jakarta.ws.rs.client.ClientBuilder keyStore(java.security.KeyStore,char[])
+meth public abstract jakarta.ws.rs.client.ClientBuilder readTimeout(long,java.util.concurrent.TimeUnit)
+meth public abstract jakarta.ws.rs.client.ClientBuilder scheduledExecutorService(java.util.concurrent.ScheduledExecutorService)
+meth public abstract jakarta.ws.rs.client.ClientBuilder sslContext(javax.net.ssl.SSLContext)
+meth public abstract jakarta.ws.rs.client.ClientBuilder trustStore(java.security.KeyStore)
+meth public abstract jakarta.ws.rs.client.ClientBuilder withConfig(jakarta.ws.rs.core.Configuration)
+meth public jakarta.ws.rs.client.ClientBuilder keyStore(java.security.KeyStore,java.lang.String)
+meth public static jakarta.ws.rs.client.Client newClient()
+meth public static jakarta.ws.rs.client.Client newClient(jakarta.ws.rs.core.Configuration)
+meth public static jakarta.ws.rs.client.ClientBuilder newBuilder()
+supr java.lang.Object
+hcls CreateErrorMessageAction
+
+CLSS public abstract interface jakarta.ws.rs.client.ClientRequestContext
+meth public abstract boolean hasEntity()
+meth public abstract jakarta.ws.rs.client.Client getClient()
+meth public abstract jakarta.ws.rs.core.Configuration getConfiguration()
+meth public abstract jakarta.ws.rs.core.MediaType getMediaType()
+meth public abstract jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.Object> getHeaders()
+meth public abstract jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> getStringHeaders()
+meth public abstract java.io.OutputStream getEntityStream()
+meth public abstract java.lang.Class<?> getEntityClass()
+meth public abstract java.lang.Object getEntity()
+meth public abstract java.lang.Object getProperty(java.lang.String)
+meth public abstract java.lang.String getHeaderString(java.lang.String)
+meth public abstract java.lang.String getMethod()
+meth public abstract java.lang.annotation.Annotation[] getEntityAnnotations()
+meth public abstract java.lang.reflect.Type getEntityType()
+meth public abstract java.net.URI getUri()
+meth public abstract java.util.Collection<java.lang.String> getPropertyNames()
+meth public abstract java.util.Date getDate()
+meth public abstract java.util.List<jakarta.ws.rs.core.MediaType> getAcceptableMediaTypes()
+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 abstract void abortWith(jakarta.ws.rs.core.Response)
+meth public abstract void removeProperty(java.lang.String)
+meth public abstract void setEntity(java.lang.Object)
+meth public abstract void setEntity(java.lang.Object,java.lang.annotation.Annotation[],jakarta.ws.rs.core.MediaType)
+meth public abstract void setEntityStream(java.io.OutputStream)
+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 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 hasEntity()
+meth public abstract boolean hasLink(java.lang.String)
+meth public abstract int getLength()
+meth public abstract int getStatus()
+meth public abstract jakarta.ws.rs.core.EntityTag getEntityTag()
+meth public abstract jakarta.ws.rs.core.Link getLink(java.lang.String)
+meth public abstract jakarta.ws.rs.core.Link$Builder getLinkBuilder(java.lang.String)
+meth public abstract jakarta.ws.rs.core.MediaType getMediaType()
+meth public abstract jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> getHeaders()
+meth public abstract jakarta.ws.rs.core.Response$StatusType getStatusInfo()
+meth public abstract java.io.InputStream getEntityStream()
+meth public abstract java.lang.String getHeaderString(java.lang.String)
+meth public abstract java.net.URI getLocation()
+meth public abstract java.util.Date getDate()
+meth public abstract java.util.Date getLastModified()
+meth public abstract java.util.Locale getLanguage()
+meth public abstract java.util.Map<java.lang.String,jakarta.ws.rs.core.NewCookie> getCookies()
+meth public abstract java.util.Set<jakarta.ws.rs.core.Link> getLinks()
+meth public abstract java.util.Set<java.lang.String> getAllowedMethods()
+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)
+
+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
+
+CLSS public abstract interface jakarta.ws.rs.client.CompletionStageRxInvoker
+intf jakarta.ws.rs.client.RxInvoker<java.util.concurrent.CompletionStage>
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.CompletionStage<{%%0}> delete(jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.CompletionStage<{%%0}> delete(java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.CompletionStage<{%%0}> get(jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.CompletionStage<{%%0}> get(java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.CompletionStage<{%%0}> method(java.lang.String,jakarta.ws.rs.client.Entity<?>,jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.CompletionStage<{%%0}> method(java.lang.String,jakarta.ws.rs.client.Entity<?>,java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.CompletionStage<{%%0}> method(java.lang.String,jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.CompletionStage<{%%0}> method(java.lang.String,java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.CompletionStage<{%%0}> options(jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.CompletionStage<{%%0}> options(java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.CompletionStage<{%%0}> post(jakarta.ws.rs.client.Entity<?>,jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.CompletionStage<{%%0}> post(jakarta.ws.rs.client.Entity<?>,java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.CompletionStage<{%%0}> put(jakarta.ws.rs.client.Entity<?>,jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.CompletionStage<{%%0}> put(jakarta.ws.rs.client.Entity<?>,java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.CompletionStage<{%%0}> trace(jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.CompletionStage<{%%0}> trace(java.lang.Class<{%%0}>)
+meth public abstract java.util.concurrent.CompletionStage<jakarta.ws.rs.core.Response> delete()
+meth public abstract java.util.concurrent.CompletionStage<jakarta.ws.rs.core.Response> get()
+meth public abstract java.util.concurrent.CompletionStage<jakarta.ws.rs.core.Response> head()
+meth public abstract java.util.concurrent.CompletionStage<jakarta.ws.rs.core.Response> method(java.lang.String)
+meth public abstract java.util.concurrent.CompletionStage<jakarta.ws.rs.core.Response> method(java.lang.String,jakarta.ws.rs.client.Entity<?>)
+meth public abstract java.util.concurrent.CompletionStage<jakarta.ws.rs.core.Response> options()
+meth public abstract java.util.concurrent.CompletionStage<jakarta.ws.rs.core.Response> post(jakarta.ws.rs.client.Entity<?>)
+meth public abstract java.util.concurrent.CompletionStage<jakarta.ws.rs.core.Response> put(jakarta.ws.rs.client.Entity<?>)
+meth public abstract java.util.concurrent.CompletionStage<jakarta.ws.rs.core.Response> trace()
+
+CLSS public final jakarta.ws.rs.client.Entity<%0 extends java.lang.Object>
+meth public boolean equals(java.lang.Object)
+meth public int hashCode()
+meth public jakarta.ws.rs.core.MediaType getMediaType()
+meth public jakarta.ws.rs.core.Variant getVariant()
+meth public java.lang.String getEncoding()
+meth public java.lang.String toString()
+meth public java.lang.annotation.Annotation[] getAnnotations()
+meth public java.util.Locale getLanguage()
+meth public static <%0 extends java.lang.Object> jakarta.ws.rs.client.Entity<{%%0}> entity({%%0},jakarta.ws.rs.core.MediaType)
+meth public static <%0 extends java.lang.Object> jakarta.ws.rs.client.Entity<{%%0}> entity({%%0},jakarta.ws.rs.core.MediaType,java.lang.annotation.Annotation[])
+meth public static <%0 extends java.lang.Object> jakarta.ws.rs.client.Entity<{%%0}> entity({%%0},jakarta.ws.rs.core.Variant)
+meth public static <%0 extends java.lang.Object> jakarta.ws.rs.client.Entity<{%%0}> entity({%%0},jakarta.ws.rs.core.Variant,java.lang.annotation.Annotation[])
+meth public static <%0 extends java.lang.Object> jakarta.ws.rs.client.Entity<{%%0}> entity({%%0},java.lang.String)
+meth public static <%0 extends java.lang.Object> jakarta.ws.rs.client.Entity<{%%0}> html({%%0})
+meth public static <%0 extends java.lang.Object> jakarta.ws.rs.client.Entity<{%%0}> json({%%0})
+meth public static <%0 extends java.lang.Object> jakarta.ws.rs.client.Entity<{%%0}> text({%%0})
+meth public static <%0 extends java.lang.Object> jakarta.ws.rs.client.Entity<{%%0}> xhtml({%%0})
+meth public static <%0 extends java.lang.Object> jakarta.ws.rs.client.Entity<{%%0}> xml({%%0})
+meth public static jakarta.ws.rs.client.Entity<jakarta.ws.rs.core.Form> form(jakarta.ws.rs.core.Form)
+meth public static jakarta.ws.rs.client.Entity<jakarta.ws.rs.core.Form> form(jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String>)
+meth public {jakarta.ws.rs.client.Entity%0} getEntity()
+supr java.lang.Object
+hfds EMPTY_ANNOTATIONS,annotations,entity,variant
+
+CLSS public abstract interface jakarta.ws.rs.client.Invocation
+innr public abstract interface static Builder
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> submit(jakarta.ws.rs.client.InvocationCallback<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> submit(jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> java.util.concurrent.Future<{%%0}> submit(java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} invoke(jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} invoke(java.lang.Class<{%%0}>)
+meth public abstract jakarta.ws.rs.client.Invocation property(java.lang.String,java.lang.Object)
+meth public abstract jakarta.ws.rs.core.Response invoke()
+meth public abstract java.util.concurrent.Future<jakarta.ws.rs.core.Response> submit()
+
+CLSS public abstract interface static jakarta.ws.rs.client.Invocation$Builder
+ outer jakarta.ws.rs.client.Invocation
+intf jakarta.ws.rs.client.SyncInvoker
+meth public abstract !varargs jakarta.ws.rs.client.Invocation$Builder accept(jakarta.ws.rs.core.MediaType[])
+meth public abstract !varargs jakarta.ws.rs.client.Invocation$Builder accept(java.lang.String[])
+meth public abstract !varargs jakarta.ws.rs.client.Invocation$Builder acceptEncoding(java.lang.String[])
+meth public abstract !varargs jakarta.ws.rs.client.Invocation$Builder acceptLanguage(java.lang.String[])
+meth public abstract !varargs jakarta.ws.rs.client.Invocation$Builder acceptLanguage(java.util.Locale[])
+meth public abstract <%0 extends jakarta.ws.rs.client.RxInvoker> {%%0} rx(java.lang.Class<{%%0}>)
+meth public abstract jakarta.ws.rs.client.AsyncInvoker async()
+meth public abstract jakarta.ws.rs.client.CompletionStageRxInvoker rx()
+meth public abstract jakarta.ws.rs.client.Invocation build(java.lang.String)
+meth public abstract jakarta.ws.rs.client.Invocation build(java.lang.String,jakarta.ws.rs.client.Entity<?>)
+meth public abstract jakarta.ws.rs.client.Invocation buildDelete()
+meth public abstract jakarta.ws.rs.client.Invocation buildGet()
+meth public abstract jakarta.ws.rs.client.Invocation buildPost(jakarta.ws.rs.client.Entity<?>)
+meth public abstract jakarta.ws.rs.client.Invocation buildPut(jakarta.ws.rs.client.Entity<?>)
+meth public abstract jakarta.ws.rs.client.Invocation$Builder cacheControl(jakarta.ws.rs.core.CacheControl)
+meth public abstract jakarta.ws.rs.client.Invocation$Builder cookie(jakarta.ws.rs.core.Cookie)
+meth public abstract jakarta.ws.rs.client.Invocation$Builder cookie(java.lang.String,java.lang.String)
+meth public abstract jakarta.ws.rs.client.Invocation$Builder header(java.lang.String,java.lang.Object)
+meth public abstract jakarta.ws.rs.client.Invocation$Builder headers(jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.Object>)
+meth public abstract jakarta.ws.rs.client.Invocation$Builder property(java.lang.String,java.lang.Object)
+
+CLSS public abstract interface jakarta.ws.rs.client.InvocationCallback<%0 extends java.lang.Object>
+meth public abstract void completed({jakarta.ws.rs.client.InvocationCallback%0})
+meth public abstract void failed(java.lang.Throwable)
+
+CLSS public jakarta.ws.rs.client.ResponseProcessingException
+cons public init(jakarta.ws.rs.core.Response,java.lang.String)
+cons public init(jakarta.ws.rs.core.Response,java.lang.String,java.lang.Throwable)
+cons public init(jakarta.ws.rs.core.Response,java.lang.Throwable)
+meth public jakarta.ws.rs.core.Response getResponse()
+supr jakarta.ws.rs.ProcessingException
+hfds response,serialVersionUID
+
+CLSS public abstract interface jakarta.ws.rs.client.RxInvoker<%0 extends java.lang.Object>
+meth public abstract <%0 extends java.lang.Object> {jakarta.ws.rs.client.RxInvoker%0} delete(jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {jakarta.ws.rs.client.RxInvoker%0} delete(java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {jakarta.ws.rs.client.RxInvoker%0} get(jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {jakarta.ws.rs.client.RxInvoker%0} get(java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {jakarta.ws.rs.client.RxInvoker%0} method(java.lang.String,jakarta.ws.rs.client.Entity<?>,jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {jakarta.ws.rs.client.RxInvoker%0} method(java.lang.String,jakarta.ws.rs.client.Entity<?>,java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {jakarta.ws.rs.client.RxInvoker%0} method(java.lang.String,jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {jakarta.ws.rs.client.RxInvoker%0} method(java.lang.String,java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {jakarta.ws.rs.client.RxInvoker%0} options(jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {jakarta.ws.rs.client.RxInvoker%0} options(java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {jakarta.ws.rs.client.RxInvoker%0} post(jakarta.ws.rs.client.Entity<?>,jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {jakarta.ws.rs.client.RxInvoker%0} post(jakarta.ws.rs.client.Entity<?>,java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {jakarta.ws.rs.client.RxInvoker%0} put(jakarta.ws.rs.client.Entity<?>,jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {jakarta.ws.rs.client.RxInvoker%0} put(jakarta.ws.rs.client.Entity<?>,java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {jakarta.ws.rs.client.RxInvoker%0} trace(jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {jakarta.ws.rs.client.RxInvoker%0} trace(java.lang.Class<{%%0}>)
+meth public abstract {jakarta.ws.rs.client.RxInvoker%0} delete()
+meth public abstract {jakarta.ws.rs.client.RxInvoker%0} get()
+meth public abstract {jakarta.ws.rs.client.RxInvoker%0} head()
+meth public abstract {jakarta.ws.rs.client.RxInvoker%0} method(java.lang.String)
+meth public abstract {jakarta.ws.rs.client.RxInvoker%0} method(java.lang.String,jakarta.ws.rs.client.Entity<?>)
+meth public abstract {jakarta.ws.rs.client.RxInvoker%0} options()
+meth public abstract {jakarta.ws.rs.client.RxInvoker%0} post(jakarta.ws.rs.client.Entity<?>)
+meth public abstract {jakarta.ws.rs.client.RxInvoker%0} put(jakarta.ws.rs.client.Entity<?>)
+meth public abstract {jakarta.ws.rs.client.RxInvoker%0} trace()
+
+CLSS public abstract interface jakarta.ws.rs.client.RxInvokerProvider<%0 extends jakarta.ws.rs.client.RxInvoker>
+meth public abstract boolean isProviderFor(java.lang.Class<?>)
+meth public abstract {jakarta.ws.rs.client.RxInvokerProvider%0} getRxInvoker(jakarta.ws.rs.client.SyncInvoker,java.util.concurrent.ExecutorService)
+
+CLSS public abstract interface jakarta.ws.rs.client.SyncInvoker
+meth public abstract <%0 extends java.lang.Object> {%%0} delete(jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} delete(java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} get(jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} get(java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} method(java.lang.String,jakarta.ws.rs.client.Entity<?>,jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} method(java.lang.String,jakarta.ws.rs.client.Entity<?>,java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} method(java.lang.String,jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} method(java.lang.String,java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} options(jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} options(java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} post(jakarta.ws.rs.client.Entity<?>,jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} post(jakarta.ws.rs.client.Entity<?>,java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} put(jakarta.ws.rs.client.Entity<?>,jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} put(jakarta.ws.rs.client.Entity<?>,java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} trace(jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} trace(java.lang.Class<{%%0}>)
+meth public abstract jakarta.ws.rs.core.Response delete()
+meth public abstract jakarta.ws.rs.core.Response get()
+meth public abstract jakarta.ws.rs.core.Response head()
+meth public abstract jakarta.ws.rs.core.Response method(java.lang.String)
+meth public abstract jakarta.ws.rs.core.Response method(java.lang.String,jakarta.ws.rs.client.Entity<?>)
+meth public abstract jakarta.ws.rs.core.Response options()
+meth public abstract jakarta.ws.rs.core.Response post(jakarta.ws.rs.client.Entity<?>)
+meth public abstract jakarta.ws.rs.core.Response put(jakarta.ws.rs.client.Entity<?>)
+meth public abstract jakarta.ws.rs.core.Response trace()
+
+CLSS public abstract interface jakarta.ws.rs.client.WebTarget
+intf jakarta.ws.rs.core.Configurable<jakarta.ws.rs.client.WebTarget>
+meth public abstract !varargs jakarta.ws.rs.client.Invocation$Builder request(jakarta.ws.rs.core.MediaType[])
+meth public abstract !varargs jakarta.ws.rs.client.Invocation$Builder request(java.lang.String[])
+meth public abstract !varargs jakarta.ws.rs.client.WebTarget matrixParam(java.lang.String,java.lang.Object[])
+meth public abstract !varargs jakarta.ws.rs.client.WebTarget queryParam(java.lang.String,java.lang.Object[])
+meth public abstract jakarta.ws.rs.client.Invocation$Builder request()
+meth public abstract jakarta.ws.rs.client.WebTarget path(java.lang.String)
+meth public abstract jakarta.ws.rs.client.WebTarget resolveTemplate(java.lang.String,java.lang.Object)
+meth public abstract jakarta.ws.rs.client.WebTarget resolveTemplate(java.lang.String,java.lang.Object,boolean)
+meth public abstract jakarta.ws.rs.client.WebTarget resolveTemplateFromEncoded(java.lang.String,java.lang.Object)
+meth public abstract jakarta.ws.rs.client.WebTarget resolveTemplates(java.util.Map<java.lang.String,java.lang.Object>)
+meth public abstract jakarta.ws.rs.client.WebTarget resolveTemplates(java.util.Map<java.lang.String,java.lang.Object>,boolean)
+meth public abstract jakarta.ws.rs.client.WebTarget resolveTemplatesFromEncoded(java.util.Map<java.lang.String,java.lang.Object>)
+meth public abstract jakarta.ws.rs.core.UriBuilder getUriBuilder()
+meth public abstract java.net.URI getUri()
+
+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<?>[])
+meth public abstract !varargs java.util.Map<java.lang.Class<?>,java.util.Collection<java.lang.Class<?>>> register(java.lang.Object,java.lang.Object[])
+meth public abstract boolean cancel()
+meth public abstract boolean cancel(int)
+meth public abstract boolean cancel(java.util.Date)
+meth public abstract boolean isCancelled()
+meth public abstract boolean isDone()
+meth public abstract boolean isSuspended()
+meth public abstract boolean resume(java.lang.Object)
+meth public abstract boolean resume(java.lang.Throwable)
+meth public abstract boolean setTimeout(long,java.util.concurrent.TimeUnit)
+meth public abstract java.util.Collection<java.lang.Class<?>> register(java.lang.Class<?>)
+meth public abstract java.util.Collection<java.lang.Class<?>> register(java.lang.Object)
+meth public abstract void setTimeoutHandler(jakarta.ws.rs.container.TimeoutHandler)
+
+CLSS public abstract interface jakarta.ws.rs.container.CompletionCallback
+meth public abstract void onComplete(java.lang.Throwable)
+
+CLSS public abstract interface jakarta.ws.rs.container.ConnectionCallback
+meth public abstract void onDisconnect(jakarta.ws.rs.container.AsyncResponse)
+
+CLSS public abstract interface jakarta.ws.rs.container.ContainerRequestContext
+meth public abstract boolean hasEntity()
+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> getHeaders()
+meth public abstract jakarta.ws.rs.core.Request getRequest()
+meth public abstract jakarta.ws.rs.core.SecurityContext getSecurityContext()
+meth public abstract jakarta.ws.rs.core.UriInfo getUriInfo()
+meth public abstract java.io.InputStream getEntityStream()
+meth public abstract java.lang.Object getProperty(java.lang.String)
+meth public abstract java.lang.String getHeaderString(java.lang.String)
+meth public abstract java.lang.String getMethod()
+meth public abstract java.util.Collection<java.lang.String> getPropertyNames()
+meth public abstract java.util.Date getDate()
+meth public abstract java.util.List<jakarta.ws.rs.core.MediaType> getAcceptableMediaTypes()
+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 abstract void abortWith(jakarta.ws.rs.core.Response)
+meth public abstract void removeProperty(java.lang.String)
+meth public abstract void setEntityStream(java.io.InputStream)
+meth public abstract void setMethod(java.lang.String)
+meth public abstract void setProperty(java.lang.String,java.lang.Object)
+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 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 hasEntity()
+meth public abstract boolean hasLink(java.lang.String)
+meth public abstract int getLength()
+meth public abstract int getStatus()
+meth public abstract jakarta.ws.rs.core.EntityTag getEntityTag()
+meth public abstract jakarta.ws.rs.core.Link getLink(java.lang.String)
+meth public abstract jakarta.ws.rs.core.Link$Builder getLinkBuilder(java.lang.String)
+meth public abstract jakarta.ws.rs.core.MediaType getMediaType()
+meth public abstract jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.Object> getHeaders()
+meth public abstract jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> getStringHeaders()
+meth public abstract jakarta.ws.rs.core.Response$StatusType getStatusInfo()
+meth public abstract java.io.OutputStream getEntityStream()
+meth public abstract java.lang.Class<?> getEntityClass()
+meth public abstract java.lang.Object getEntity()
+meth public abstract java.lang.String getHeaderString(java.lang.String)
+meth public abstract java.lang.annotation.Annotation[] getEntityAnnotations()
+meth public abstract java.lang.reflect.Type getEntityType()
+meth public abstract java.net.URI getLocation()
+meth public abstract java.util.Date getDate()
+meth public abstract java.util.Date getLastModified()
+meth public abstract java.util.Locale getLanguage()
+meth public abstract java.util.Map<java.lang.String,jakarta.ws.rs.core.NewCookie> getCookies()
+meth public abstract java.util.Set<jakarta.ws.rs.core.Link> getLinks()
+meth public abstract java.util.Set<java.lang.String> getAllowedMethods()
+meth public abstract void setEntity(java.lang.Object)
+meth public abstract void setEntity(java.lang.Object,java.lang.annotation.Annotation[],jakarta.ws.rs.core.MediaType)
+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)
+
+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
+
+CLSS public abstract interface jakarta.ws.rs.container.DynamicFeature
+meth public abstract void configure(jakarta.ws.rs.container.ResourceInfo,jakarta.ws.rs.core.FeatureContext)
+
+CLSS public abstract interface !annotation jakarta.ws.rs.container.PreMatching
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[TYPE])
+intf java.lang.annotation.Annotation
+
+CLSS public abstract interface jakarta.ws.rs.container.ResourceContext
+meth public abstract <%0 extends java.lang.Object> {%%0} getResource(java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} initResource({%%0})
+
+CLSS public abstract interface jakarta.ws.rs.container.ResourceInfo
+meth public abstract java.lang.Class<?> getResourceClass()
+meth public abstract java.lang.reflect.Method getResourceMethod()
+
+CLSS public abstract interface !annotation jakarta.ws.rs.container.Suspended
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[PARAMETER])
+intf java.lang.annotation.Annotation
+
+CLSS public abstract interface jakarta.ws.rs.container.TimeoutHandler
+meth public abstract void handleTimeout(jakarta.ws.rs.container.AsyncResponse)
+
+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
+intf jakarta.ws.rs.core.MultivaluedMap<{jakarta.ws.rs.core.AbstractMultivaluedMap%0},{jakarta.ws.rs.core.AbstractMultivaluedMap%1}>
+intf java.io.Serializable
+meth protected final java.util.List<{jakarta.ws.rs.core.AbstractMultivaluedMap%1}> getValues({jakarta.ws.rs.core.AbstractMultivaluedMap%0})
+meth protected void addFirstNull(java.util.List<{jakarta.ws.rs.core.AbstractMultivaluedMap%1}>)
+meth protected void addNull(java.util.List<{jakarta.ws.rs.core.AbstractMultivaluedMap%1}>)
+meth public !varargs final void addAll({jakarta.ws.rs.core.AbstractMultivaluedMap%0},{jakarta.ws.rs.core.AbstractMultivaluedMap%1}[])
+meth public boolean containsKey(java.lang.Object)
+meth public boolean containsValue(java.lang.Object)
+meth public boolean equals(java.lang.Object)
+meth public boolean equalsIgnoreValueOrder(jakarta.ws.rs.core.MultivaluedMap<{jakarta.ws.rs.core.AbstractMultivaluedMap%0},{jakarta.ws.rs.core.AbstractMultivaluedMap%1}>)
+meth public boolean isEmpty()
+meth public final void add({jakarta.ws.rs.core.AbstractMultivaluedMap%0},{jakarta.ws.rs.core.AbstractMultivaluedMap%1})
+meth public final void addAll({jakarta.ws.rs.core.AbstractMultivaluedMap%0},java.util.List<{jakarta.ws.rs.core.AbstractMultivaluedMap%1}>)
+meth public final void addFirst({jakarta.ws.rs.core.AbstractMultivaluedMap%0},{jakarta.ws.rs.core.AbstractMultivaluedMap%1})
+meth public final void putSingle({jakarta.ws.rs.core.AbstractMultivaluedMap%0},{jakarta.ws.rs.core.AbstractMultivaluedMap%1})
+meth public final {jakarta.ws.rs.core.AbstractMultivaluedMap%1} getFirst({jakarta.ws.rs.core.AbstractMultivaluedMap%0})
+meth public int hashCode()
+meth public int size()
+meth public java.lang.String toString()
+meth public java.util.Collection<java.util.List<{jakarta.ws.rs.core.AbstractMultivaluedMap%1}>> values()
+meth public java.util.List<{jakarta.ws.rs.core.AbstractMultivaluedMap%1}> get(java.lang.Object)
+meth public java.util.List<{jakarta.ws.rs.core.AbstractMultivaluedMap%1}> put({jakarta.ws.rs.core.AbstractMultivaluedMap%0},java.util.List<{jakarta.ws.rs.core.AbstractMultivaluedMap%1}>)
+meth public java.util.List<{jakarta.ws.rs.core.AbstractMultivaluedMap%1}> remove(java.lang.Object)
+meth public java.util.Set<java.util.Map$Entry<{jakarta.ws.rs.core.AbstractMultivaluedMap%0},java.util.List<{jakarta.ws.rs.core.AbstractMultivaluedMap%1}>>> entrySet()
+meth public java.util.Set<{jakarta.ws.rs.core.AbstractMultivaluedMap%0}> keySet()
+meth public void clear()
+meth public void putAll(java.util.Map<? extends {jakarta.ws.rs.core.AbstractMultivaluedMap%0},? extends java.util.List<{jakarta.ws.rs.core.AbstractMultivaluedMap%1}>>)
+supr java.lang.Object
+
+CLSS public jakarta.ws.rs.core.Application
+cons public init()
+meth public java.util.Map<java.lang.String,java.lang.Object> getProperties()
+meth public java.util.Set<java.lang.Class<?>> getClasses()
+meth public java.util.Set<java.lang.Object> getSingletons()
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+supr java.lang.Object
+
+CLSS public jakarta.ws.rs.core.CacheControl
+cons public init()
+meth public boolean equals(java.lang.Object)
+meth public boolean isMustRevalidate()
+meth public boolean isNoCache()
+meth public boolean isNoStore()
+meth public boolean isNoTransform()
+meth public boolean isPrivate()
+meth public boolean isProxyRevalidate()
+meth public int getMaxAge()
+meth public int getSMaxAge()
+meth public int hashCode()
+meth public java.lang.String toString()
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+meth public java.util.List<java.lang.String> getNoCacheFields()
+meth public java.util.List<java.lang.String> getPrivateFields()
+meth public java.util.Map<java.lang.String,java.lang.String> getCacheExtension()
+meth public static jakarta.ws.rs.core.CacheControl valueOf(java.lang.String)
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+meth public void setMaxAge(int)
+meth public void setMustRevalidate(boolean)
+meth public void setNoCache(boolean)
+meth public void setNoStore(boolean)
+meth public void setNoTransform(boolean)
+meth public void setPrivate(boolean)
+meth public void setProxyRevalidate(boolean)
+meth public void setSMaxAge(int)
+supr java.lang.Object
+hfds HEADER_DELEGATE,cacheExtension,maxAge,mustRevalidate,noCache,noCacheFields,noStore,noTransform,privateFields,privateFlag,proxyRevalidate,sMaxAge
+
+CLSS public abstract interface jakarta.ws.rs.core.Configurable<%0 extends jakarta.ws.rs.core.Configurable>
+meth public abstract !varargs {jakarta.ws.rs.core.Configurable%0} register(java.lang.Class<?>,java.lang.Class<?>[])
+meth public abstract !varargs {jakarta.ws.rs.core.Configurable%0} register(java.lang.Object,java.lang.Class<?>[])
+meth public abstract jakarta.ws.rs.core.Configuration getConfiguration()
+meth public abstract {jakarta.ws.rs.core.Configurable%0} property(java.lang.String,java.lang.Object)
+meth public abstract {jakarta.ws.rs.core.Configurable%0} register(java.lang.Class<?>)
+meth public abstract {jakarta.ws.rs.core.Configurable%0} register(java.lang.Class<?>,int)
+meth public abstract {jakarta.ws.rs.core.Configurable%0} register(java.lang.Class<?>,java.util.Map<java.lang.Class<?>,java.lang.Integer>)
+meth public abstract {jakarta.ws.rs.core.Configurable%0} register(java.lang.Object)
+meth public abstract {jakarta.ws.rs.core.Configurable%0} register(java.lang.Object,int)
+meth public abstract {jakarta.ws.rs.core.Configurable%0} register(java.lang.Object,java.util.Map<java.lang.Class<?>,java.lang.Integer>)
+
+CLSS public abstract interface jakarta.ws.rs.core.Configuration
+meth public abstract boolean isEnabled(jakarta.ws.rs.core.Feature)
+meth public abstract boolean isEnabled(java.lang.Class<? extends jakarta.ws.rs.core.Feature>)
+meth public abstract boolean isRegistered(java.lang.Class<?>)
+meth public abstract boolean isRegistered(java.lang.Object)
+meth public abstract jakarta.ws.rs.RuntimeType getRuntimeType()
+meth public abstract java.lang.Object getProperty(java.lang.String)
+meth public abstract java.util.Collection<java.lang.String> getPropertyNames()
+meth public abstract java.util.Map<java.lang.Class<?>,java.lang.Integer> getContracts(java.lang.Class<?>)
+meth public abstract java.util.Map<java.lang.String,java.lang.Object> getProperties()
+meth public abstract java.util.Set<java.lang.Class<?>> getClasses()
+meth public abstract java.util.Set<java.lang.Object> getInstances()
+meth public boolean hasProperty(java.lang.String)
+
+CLSS public abstract interface !annotation jakarta.ws.rs.core.Context
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[PARAMETER, METHOD, FIELD])
+intf java.lang.annotation.Annotation
+
+CLSS public jakarta.ws.rs.core.Cookie
+cons protected init(jakarta.ws.rs.core.Cookie$AbstractCookieBuilder<?>)
+cons public init(java.lang.String,java.lang.String)
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+cons public init(java.lang.String,java.lang.String,java.lang.String,java.lang.String)
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+cons public init(java.lang.String,java.lang.String,java.lang.String,java.lang.String,int)
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+fld public final static int DEFAULT_VERSION = 1
+innr public abstract static AbstractCookieBuilder
+innr public static Builder
+meth public boolean equals(java.lang.Object)
+meth public int getVersion()
+meth public int hashCode()
+meth public java.lang.String getDomain()
+meth public java.lang.String getName()
+meth public java.lang.String getPath()
+meth public java.lang.String getValue()
+meth public java.lang.String toString()
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+meth public static jakarta.ws.rs.core.Cookie valueOf(java.lang.String)
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+supr java.lang.Object
+hfds HEADER_DELEGATE,domain,name,path,value,version
+
+CLSS public abstract static jakarta.ws.rs.core.Cookie$AbstractCookieBuilder<%0 extends jakarta.ws.rs.core.Cookie$AbstractCookieBuilder<{jakarta.ws.rs.core.Cookie$AbstractCookieBuilder%0}>>
+ outer jakarta.ws.rs.core.Cookie
+cons public init(java.lang.String)
+meth public abstract jakarta.ws.rs.core.Cookie build()
+meth public {jakarta.ws.rs.core.Cookie$AbstractCookieBuilder%0} domain(java.lang.String)
+meth public {jakarta.ws.rs.core.Cookie$AbstractCookieBuilder%0} path(java.lang.String)
+meth public {jakarta.ws.rs.core.Cookie$AbstractCookieBuilder%0} value(java.lang.String)
+meth public {jakarta.ws.rs.core.Cookie$AbstractCookieBuilder%0} version(int)
+supr java.lang.Object
+hfds domain,name,path,value,version
+
+CLSS public static jakarta.ws.rs.core.Cookie$Builder
+ outer jakarta.ws.rs.core.Cookie
+cons public init(java.lang.String)
+meth public jakarta.ws.rs.core.Cookie build()
+supr jakarta.ws.rs.core.Cookie$AbstractCookieBuilder<jakarta.ws.rs.core.Cookie$Builder>
+
+CLSS public abstract interface jakarta.ws.rs.core.EntityPart
+innr public abstract interface static Builder
+meth public abstract <%0 extends java.lang.Object> {%%0} getContent(jakarta.ws.rs.core.GenericType<{%%0}>) throws java.io.IOException
+meth public abstract <%0 extends java.lang.Object> {%%0} getContent(java.lang.Class<{%%0}>) throws java.io.IOException
+meth public abstract jakarta.ws.rs.core.MediaType getMediaType()
+meth public abstract jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> getHeaders()
+meth public abstract java.io.InputStream getContent()
+meth public abstract java.lang.String getName()
+meth public abstract java.util.Optional<java.lang.String> getFileName()
+meth public static jakarta.ws.rs.core.EntityPart$Builder withFileName(java.lang.String)
+meth public static jakarta.ws.rs.core.EntityPart$Builder withName(java.lang.String)
+
+CLSS public abstract interface static jakarta.ws.rs.core.EntityPart$Builder
+ outer jakarta.ws.rs.core.EntityPart
+meth public abstract !varargs jakarta.ws.rs.core.EntityPart$Builder header(java.lang.String,java.lang.String[])
+meth public abstract <%0 extends java.lang.Object> jakarta.ws.rs.core.EntityPart$Builder content({%%0},jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> jakarta.ws.rs.core.EntityPart$Builder content({%%0},java.lang.Class<? extends {%%0}>)
+meth public abstract jakarta.ws.rs.core.EntityPart build() throws java.io.IOException
+meth public abstract jakarta.ws.rs.core.EntityPart$Builder content(java.io.InputStream)
+meth public abstract jakarta.ws.rs.core.EntityPart$Builder fileName(java.lang.String)
+meth public abstract jakarta.ws.rs.core.EntityPart$Builder headers(jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String>)
+meth public abstract jakarta.ws.rs.core.EntityPart$Builder mediaType(jakarta.ws.rs.core.MediaType)
+meth public abstract jakarta.ws.rs.core.EntityPart$Builder mediaType(java.lang.String)
+meth public jakarta.ws.rs.core.EntityPart$Builder content(java.lang.Object)
+meth public jakarta.ws.rs.core.EntityPart$Builder content(java.lang.String,java.io.InputStream)
+
+CLSS public jakarta.ws.rs.core.EntityTag
+cons public init(java.lang.String)
+cons public init(java.lang.String,boolean)
+meth public boolean equals(java.lang.Object)
+meth public boolean isWeak()
+meth public int hashCode()
+meth public java.lang.String getValue()
+meth public java.lang.String toString()
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+meth public static jakarta.ws.rs.core.EntityTag valueOf(java.lang.String)
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+supr java.lang.Object
+hfds HEADER_DELEGATE,value,weak
+
+CLSS public abstract interface jakarta.ws.rs.core.Feature
+meth public abstract boolean configure(jakarta.ws.rs.core.FeatureContext)
+
+CLSS public abstract interface jakarta.ws.rs.core.FeatureContext
+intf jakarta.ws.rs.core.Configurable<jakarta.ws.rs.core.FeatureContext>
+
+CLSS public jakarta.ws.rs.core.Form
+cons public init()
+cons public init(jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String>)
+cons public init(java.lang.String,java.lang.String)
+meth public jakarta.ws.rs.core.Form param(java.lang.String,java.lang.String)
+meth public jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> asMap()
+supr java.lang.Object
+hfds parameters
+
+CLSS public jakarta.ws.rs.core.GenericEntity<%0 extends java.lang.Object>
+cons protected init({jakarta.ws.rs.core.GenericEntity%0})
+cons public init({jakarta.ws.rs.core.GenericEntity%0},java.lang.reflect.Type)
+meth public boolean equals(java.lang.Object)
+meth public final java.lang.Class<?> getRawType()
+meth public final java.lang.reflect.Type getType()
+meth public final {jakarta.ws.rs.core.GenericEntity%0} getEntity()
+meth public int hashCode()
+meth public java.lang.String toString()
+supr java.lang.Object
+hfds entity,rawType,type
+
+CLSS public jakarta.ws.rs.core.GenericType<%0 extends java.lang.Object>
+cons protected init()
+cons public init(java.lang.reflect.Type)
+meth public boolean equals(java.lang.Object)
+meth public final java.lang.Class<?> getRawType()
+meth public final java.lang.reflect.Type getType()
+meth public int hashCode()
+meth public java.lang.String toString()
+meth public static jakarta.ws.rs.core.GenericType forInstance(java.lang.Object)
+supr java.lang.Object
+hfds rawType,type
+
+CLSS public abstract interface jakarta.ws.rs.core.HttpHeaders
+fld public final static java.lang.String ACCEPT = "Accept"
+fld public final static java.lang.String ACCEPT_CHARSET = "Accept-Charset"
+fld public final static java.lang.String ACCEPT_ENCODING = "Accept-Encoding"
+fld public final static java.lang.String ACCEPT_LANGUAGE = "Accept-Language"
+fld public final static java.lang.String ALLOW = "Allow"
+fld public final static java.lang.String AUTHORIZATION = "Authorization"
+fld public final static java.lang.String CACHE_CONTROL = "Cache-Control"
+fld public final static java.lang.String CONTENT_DISPOSITION = "Content-Disposition"
+fld public final static java.lang.String CONTENT_ENCODING = "Content-Encoding"
+fld public final static java.lang.String CONTENT_ID = "Content-ID"
+fld public final static java.lang.String CONTENT_LANGUAGE = "Content-Language"
+fld public final static java.lang.String CONTENT_LENGTH = "Content-Length"
+fld public final static java.lang.String CONTENT_LOCATION = "Content-Location"
+fld public final static java.lang.String CONTENT_TYPE = "Content-Type"
+fld public final static java.lang.String COOKIE = "Cookie"
+fld public final static java.lang.String DATE = "Date"
+fld public final static java.lang.String ETAG = "ETag"
+fld public final static java.lang.String EXPECT = "Expect"
+fld public final static java.lang.String EXPIRES = "Expires"
+fld public final static java.lang.String HOST = "Host"
+fld public final static java.lang.String IF_MATCH = "If-Match"
+fld public final static java.lang.String IF_MODIFIED_SINCE = "If-Modified-Since"
+fld public final static java.lang.String IF_NONE_MATCH = "If-None-Match"
+fld public final static java.lang.String IF_UNMODIFIED_SINCE = "If-Unmodified-Since"
+fld public final static java.lang.String LAST_EVENT_ID_HEADER = "Last-Event-ID"
+fld public final static java.lang.String LAST_MODIFIED = "Last-Modified"
+fld public final static java.lang.String LINK = "Link"
+fld public final static java.lang.String LOCATION = "Location"
+fld public final static java.lang.String RETRY_AFTER = "Retry-After"
+fld public final static java.lang.String SET_COOKIE = "Set-Cookie"
+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 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()
+meth public abstract java.lang.String getHeaderString(java.lang.String)
+meth public abstract java.util.Date getDate()
+meth public abstract java.util.List<jakarta.ws.rs.core.MediaType> getAcceptableMediaTypes()
+meth public abstract java.util.List<java.lang.String> getRequestHeader(java.lang.String)
+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()
+
+CLSS public abstract jakarta.ws.rs.core.Link
+cons public init()
+fld public final static java.lang.String REL = "rel"
+fld public final static java.lang.String TITLE = "title"
+fld public final static java.lang.String TYPE = "type"
+innr public abstract interface static Builder
+innr public static JaxbAdapter
+innr public static JaxbLink
+meth public abstract jakarta.ws.rs.core.UriBuilder getUriBuilder()
+meth public abstract java.lang.String getRel()
+meth public abstract java.lang.String getTitle()
+meth public abstract java.lang.String getType()
+meth public abstract java.lang.String toString()
+meth public abstract java.net.URI getUri()
+meth public abstract java.util.List<java.lang.String> getRels()
+meth public abstract java.util.Map<java.lang.String,java.lang.String> getParams()
+meth public static jakarta.ws.rs.core.Link valueOf(java.lang.String)
+meth public static jakarta.ws.rs.core.Link$Builder fromLink(jakarta.ws.rs.core.Link)
+meth public static jakarta.ws.rs.core.Link$Builder fromMethod(java.lang.Class<?>,java.lang.String)
+meth public static jakarta.ws.rs.core.Link$Builder fromPath(java.lang.String)
+meth public static jakarta.ws.rs.core.Link$Builder fromResource(java.lang.Class<?>)
+meth public static jakarta.ws.rs.core.Link$Builder fromUri(java.lang.String)
+meth public static jakarta.ws.rs.core.Link$Builder fromUri(java.net.URI)
+meth public static jakarta.ws.rs.core.Link$Builder fromUriBuilder(jakarta.ws.rs.core.UriBuilder)
+supr java.lang.Object
+
+CLSS public abstract interface static jakarta.ws.rs.core.Link$Builder
+ outer jakarta.ws.rs.core.Link
+meth public abstract !varargs jakarta.ws.rs.core.Link build(java.lang.Object[])
+meth public abstract !varargs jakarta.ws.rs.core.Link buildRelativized(java.net.URI,java.lang.Object[])
+meth public abstract jakarta.ws.rs.core.Link$Builder baseUri(java.lang.String)
+meth public abstract jakarta.ws.rs.core.Link$Builder baseUri(java.net.URI)
+meth public abstract jakarta.ws.rs.core.Link$Builder link(jakarta.ws.rs.core.Link)
+meth public abstract jakarta.ws.rs.core.Link$Builder link(java.lang.String)
+meth public abstract jakarta.ws.rs.core.Link$Builder param(java.lang.String,java.lang.String)
+meth public abstract jakarta.ws.rs.core.Link$Builder rel(java.lang.String)
+meth public abstract jakarta.ws.rs.core.Link$Builder title(java.lang.String)
+meth public abstract jakarta.ws.rs.core.Link$Builder type(java.lang.String)
+meth public abstract jakarta.ws.rs.core.Link$Builder uri(java.lang.String)
+meth public abstract jakarta.ws.rs.core.Link$Builder uri(java.net.URI)
+meth public abstract jakarta.ws.rs.core.Link$Builder uriBuilder(jakarta.ws.rs.core.UriBuilder)
+
+CLSS public static jakarta.ws.rs.core.Link$JaxbAdapter
+ outer jakarta.ws.rs.core.Link
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+cons public init()
+meth public jakarta.ws.rs.core.Link unmarshal(jakarta.ws.rs.core.Link$JaxbLink)
+meth public jakarta.ws.rs.core.Link$JaxbLink marshal(jakarta.ws.rs.core.Link)
+supr jakarta.xml.bind.annotation.adapters.XmlAdapter<jakarta.ws.rs.core.Link$JaxbLink,jakarta.ws.rs.core.Link>
+
+CLSS public static jakarta.ws.rs.core.Link$JaxbLink
+ outer jakarta.ws.rs.core.Link
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+cons public init()
+cons public init(java.net.URI)
+cons public init(java.net.URI,java.util.Map<javax.xml.namespace.QName,java.lang.Object>)
+meth public boolean equals(java.lang.Object)
+meth public int hashCode()
+meth public java.net.URI getUri()
+meth public java.util.Map<javax.xml.namespace.QName,java.lang.Object> getParams()
+supr java.lang.Object
+hfds params,uri
+
+CLSS public jakarta.ws.rs.core.MediaType
+cons public init()
+cons public init(java.lang.String,java.lang.String)
+cons public init(java.lang.String,java.lang.String,java.lang.String)
+cons public init(java.lang.String,java.lang.String,java.util.Map<java.lang.String,java.lang.String>)
+fld public final static jakarta.ws.rs.core.MediaType APPLICATION_ATOM_XML_TYPE
+fld public final static jakarta.ws.rs.core.MediaType APPLICATION_FORM_URLENCODED_TYPE
+fld public final static jakarta.ws.rs.core.MediaType APPLICATION_JSON_PATCH_JSON_TYPE
+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
+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
+fld public final static jakarta.ws.rs.core.MediaType SERVER_SENT_EVENTS_TYPE
+fld public final static jakarta.ws.rs.core.MediaType TEXT_HTML_TYPE
+fld public final static jakarta.ws.rs.core.MediaType TEXT_PLAIN_TYPE
+fld public final static jakarta.ws.rs.core.MediaType TEXT_XML_TYPE
+fld public final static jakarta.ws.rs.core.MediaType WILDCARD_TYPE
+fld public final static java.lang.String APPLICATION_ATOM_XML = "application/atom+xml"
+fld public final static java.lang.String APPLICATION_FORM_URLENCODED = "application/x-www-form-urlencoded"
+fld public final static java.lang.String APPLICATION_JSON = "application/json"
+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"
+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"
+fld public final static java.lang.String MEDIA_TYPE_WILDCARD = "*"
+fld public final static java.lang.String MULTIPART_FORM_DATA = "multipart/form-data"
+fld public final static java.lang.String SERVER_SENT_EVENTS = "text/event-stream"
+fld public final static java.lang.String TEXT_HTML = "text/html"
+fld public final static java.lang.String TEXT_PLAIN = "text/plain"
+fld public final static java.lang.String TEXT_XML = "text/xml"
+fld public final static java.lang.String WILDCARD = "*/*"
+meth public boolean equals(java.lang.Object)
+meth public boolean isCompatible(jakarta.ws.rs.core.MediaType)
+meth public boolean isWildcardSubtype()
+meth public boolean isWildcardType()
+meth public int hashCode()
+meth public jakarta.ws.rs.core.MediaType withCharset(java.lang.String)
+meth public java.lang.String getSubtype()
+meth public java.lang.String getType()
+meth public java.lang.String toString()
+meth public java.util.Map<java.lang.String,java.lang.String> getParameters()
+meth public static jakarta.ws.rs.core.MediaType valueOf(java.lang.String)
+supr java.lang.Object
+hfds hash,parameters,subtype,type
+
+CLSS public jakarta.ws.rs.core.MultivaluedHashMap<%0 extends java.lang.Object, %1 extends java.lang.Object>
+cons public init()
+cons public init(int)
+cons public init(int,float)
+cons public init(jakarta.ws.rs.core.MultivaluedMap<? extends {jakarta.ws.rs.core.MultivaluedHashMap%0},? extends {jakarta.ws.rs.core.MultivaluedHashMap%1}>)
+cons public init(java.util.Map<? extends {jakarta.ws.rs.core.MultivaluedHashMap%0},? extends {jakarta.ws.rs.core.MultivaluedHashMap%1}>)
+intf java.io.Serializable
+supr jakarta.ws.rs.core.AbstractMultivaluedMap<{jakarta.ws.rs.core.MultivaluedHashMap%0},{jakarta.ws.rs.core.MultivaluedHashMap%1}>
+hfds serialVersionUID
+
+CLSS public abstract interface jakarta.ws.rs.core.MultivaluedMap<%0 extends java.lang.Object, %1 extends java.lang.Object>
+intf java.util.Map<{jakarta.ws.rs.core.MultivaluedMap%0},java.util.List<{jakarta.ws.rs.core.MultivaluedMap%1}>>
+meth public abstract !varargs void addAll({jakarta.ws.rs.core.MultivaluedMap%0},{jakarta.ws.rs.core.MultivaluedMap%1}[])
+meth public abstract boolean equalsIgnoreValueOrder(jakarta.ws.rs.core.MultivaluedMap<{jakarta.ws.rs.core.MultivaluedMap%0},{jakarta.ws.rs.core.MultivaluedMap%1}>)
+meth public abstract void add({jakarta.ws.rs.core.MultivaluedMap%0},{jakarta.ws.rs.core.MultivaluedMap%1})
+meth public abstract void addAll({jakarta.ws.rs.core.MultivaluedMap%0},java.util.List<{jakarta.ws.rs.core.MultivaluedMap%1}>)
+meth public abstract void addFirst({jakarta.ws.rs.core.MultivaluedMap%0},{jakarta.ws.rs.core.MultivaluedMap%1})
+meth public abstract void putSingle({jakarta.ws.rs.core.MultivaluedMap%0},{jakarta.ws.rs.core.MultivaluedMap%1})
+meth public abstract {jakarta.ws.rs.core.MultivaluedMap%1} getFirst({jakarta.ws.rs.core.MultivaluedMap%0})
+
+CLSS public jakarta.ws.rs.core.NewCookie
+cons protected init(jakarta.ws.rs.core.NewCookie$AbstractNewCookieBuilder<?>)
+cons public init(jakarta.ws.rs.core.Cookie)
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+cons public init(jakarta.ws.rs.core.Cookie,java.lang.String,int,boolean)
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+cons public init(jakarta.ws.rs.core.Cookie,java.lang.String,int,java.util.Date,boolean,boolean)
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+cons public init(jakarta.ws.rs.core.Cookie,java.lang.String,int,java.util.Date,boolean,boolean,jakarta.ws.rs.core.NewCookie$SameSite)
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+cons public init(java.lang.String,java.lang.String)
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+cons public init(java.lang.String,java.lang.String,java.lang.String,java.lang.String,int,java.lang.String,int,boolean)
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+cons public init(java.lang.String,java.lang.String,java.lang.String,java.lang.String,int,java.lang.String,int,java.util.Date,boolean,boolean)
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+cons public init(java.lang.String,java.lang.String,java.lang.String,java.lang.String,int,java.lang.String,int,java.util.Date,boolean,boolean,jakarta.ws.rs.core.NewCookie$SameSite)
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+cons public init(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,int,boolean)
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+cons public init(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,int,boolean,boolean)
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+fld public final static int DEFAULT_MAX_AGE = -1
+innr public abstract static AbstractNewCookieBuilder
+innr public final static !enum SameSite
+innr public static Builder
+meth public boolean equals(java.lang.Object)
+meth public boolean isHttpOnly()
+meth public boolean isSecure()
+meth public int getMaxAge()
+meth public int hashCode()
+meth public jakarta.ws.rs.core.Cookie toCookie()
+meth public jakarta.ws.rs.core.NewCookie$SameSite getSameSite()
+meth public java.lang.String getComment()
+meth public java.lang.String toString()
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+meth public java.util.Date getExpiry()
+meth public static jakarta.ws.rs.core.NewCookie valueOf(java.lang.String)
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
+supr jakarta.ws.rs.core.Cookie
+hfds DELEGATE,comment,expiry,httpOnly,maxAge,sameSite,secure
+
+CLSS public abstract static jakarta.ws.rs.core.NewCookie$AbstractNewCookieBuilder<%0 extends jakarta.ws.rs.core.NewCookie$AbstractNewCookieBuilder<{jakarta.ws.rs.core.NewCookie$AbstractNewCookieBuilder%0}>>
+ outer jakarta.ws.rs.core.NewCookie
+cons public init(jakarta.ws.rs.core.Cookie)
+cons public init(java.lang.String)
+meth public abstract jakarta.ws.rs.core.NewCookie build()
+meth public {jakarta.ws.rs.core.NewCookie$AbstractNewCookieBuilder%0} comment(java.lang.String)
+meth public {jakarta.ws.rs.core.NewCookie$AbstractNewCookieBuilder%0} expiry(java.util.Date)
+meth public {jakarta.ws.rs.core.NewCookie$AbstractNewCookieBuilder%0} httpOnly(boolean)
+meth public {jakarta.ws.rs.core.NewCookie$AbstractNewCookieBuilder%0} maxAge(int)
+meth public {jakarta.ws.rs.core.NewCookie$AbstractNewCookieBuilder%0} sameSite(jakarta.ws.rs.core.NewCookie$SameSite)
+meth public {jakarta.ws.rs.core.NewCookie$AbstractNewCookieBuilder%0} secure(boolean)
+supr jakarta.ws.rs.core.Cookie$AbstractCookieBuilder<jakarta.ws.rs.core.NewCookie$AbstractNewCookieBuilder<{jakarta.ws.rs.core.NewCookie$AbstractNewCookieBuilder%0}>>
+hfds comment,expiry,httpOnly,maxAge,sameSite,secure
+
+CLSS public static jakarta.ws.rs.core.NewCookie$Builder
+ outer jakarta.ws.rs.core.NewCookie
+cons public init(jakarta.ws.rs.core.Cookie)
+cons public init(java.lang.String)
+meth public jakarta.ws.rs.core.NewCookie build()
+supr jakarta.ws.rs.core.NewCookie$AbstractNewCookieBuilder<jakarta.ws.rs.core.NewCookie$Builder>
+
+CLSS public final static !enum jakarta.ws.rs.core.NewCookie$SameSite
+ outer jakarta.ws.rs.core.NewCookie
+fld public final static jakarta.ws.rs.core.NewCookie$SameSite LAX
+fld public final static jakarta.ws.rs.core.NewCookie$SameSite NONE
+fld public final static jakarta.ws.rs.core.NewCookie$SameSite STRICT
+meth public static jakarta.ws.rs.core.NewCookie$SameSite valueOf(java.lang.String)
+meth public static jakarta.ws.rs.core.NewCookie$SameSite[] values()
+supr java.lang.Enum<jakarta.ws.rs.core.NewCookie$SameSite>
+
+CLSS public jakarta.ws.rs.core.NoContentException
+cons public init(java.lang.String)
+cons public init(java.lang.String,java.lang.Throwable)
+cons public init(java.lang.Throwable)
+supr java.io.IOException
+hfds serialVersionUID
+
+CLSS public abstract interface jakarta.ws.rs.core.PathSegment
+meth public abstract jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> getMatrixParameters()
+meth public abstract java.lang.String getPath()
+
+CLSS public abstract interface jakarta.ws.rs.core.Request
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder evaluatePreconditions()
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder evaluatePreconditions(jakarta.ws.rs.core.EntityTag)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder evaluatePreconditions(java.util.Date)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder evaluatePreconditions(java.util.Date,jakarta.ws.rs.core.EntityTag)
+meth public abstract jakarta.ws.rs.core.Variant selectVariant(java.util.List<jakarta.ws.rs.core.Variant>)
+meth public abstract java.lang.String getMethod()
+
+CLSS public abstract jakarta.ws.rs.core.Response
+cons protected init()
+innr public abstract interface static StatusType
+innr public abstract static ResponseBuilder
+innr public final static !enum Status
+intf java.lang.AutoCloseable
+meth public abstract <%0 extends java.lang.Object> {%%0} readEntity(jakarta.ws.rs.core.GenericType<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} readEntity(jakarta.ws.rs.core.GenericType<{%%0}>,java.lang.annotation.Annotation[])
+meth public abstract <%0 extends java.lang.Object> {%%0} readEntity(java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} readEntity(java.lang.Class<{%%0}>,java.lang.annotation.Annotation[])
+meth public abstract boolean bufferEntity()
+meth public abstract boolean hasEntity()
+meth public abstract boolean hasLink(java.lang.String)
+meth public abstract int getLength()
+meth public abstract int getStatus()
+meth public abstract jakarta.ws.rs.core.EntityTag getEntityTag()
+meth public abstract jakarta.ws.rs.core.Link getLink(java.lang.String)
+meth public abstract jakarta.ws.rs.core.Link$Builder getLinkBuilder(java.lang.String)
+meth public abstract jakarta.ws.rs.core.MediaType getMediaType()
+meth public abstract jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.Object> getMetadata()
+meth public abstract jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> getStringHeaders()
+meth public abstract jakarta.ws.rs.core.Response$StatusType getStatusInfo()
+meth public abstract java.lang.Object getEntity()
+meth public abstract java.lang.String getHeaderString(java.lang.String)
+meth public abstract java.net.URI getLocation()
+meth public abstract java.util.Date getDate()
+meth public abstract java.util.Date getLastModified()
+meth public abstract java.util.Locale getLanguage()
+meth public abstract java.util.Map<java.lang.String,jakarta.ws.rs.core.NewCookie> getCookies()
+meth public abstract java.util.Set<jakarta.ws.rs.core.Link> getLinks()
+meth public abstract java.util.Set<java.lang.String> getAllowedMethods()
+meth public abstract void close()
+meth public boolean isClosed()
+meth public jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.Object> getHeaders()
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder accepted()
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder accepted(java.lang.Object)
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder created(java.net.URI)
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder fromResponse(jakarta.ws.rs.core.Response)
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder noContent()
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder notAcceptable(java.util.List<jakarta.ws.rs.core.Variant>)
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder notModified()
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder notModified(jakarta.ws.rs.core.EntityTag)
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder notModified(java.lang.String)
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder ok()
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder ok(java.lang.Object)
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder ok(java.lang.Object,jakarta.ws.rs.core.MediaType)
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder ok(java.lang.Object,jakarta.ws.rs.core.Variant)
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder ok(java.lang.Object,java.lang.String)
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder seeOther(java.net.URI)
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder serverError()
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder status(int)
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder status(int,java.lang.String)
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder status(jakarta.ws.rs.core.Response$Status)
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder status(jakarta.ws.rs.core.Response$StatusType)
+meth public static jakarta.ws.rs.core.Response$ResponseBuilder temporaryRedirect(java.net.URI)
+supr java.lang.Object
+
+CLSS public abstract static jakarta.ws.rs.core.Response$ResponseBuilder
+ outer jakarta.ws.rs.core.Response
+cons protected init()
+meth protected static jakarta.ws.rs.core.Response$ResponseBuilder newInstance()
+meth public abstract !varargs jakarta.ws.rs.core.Response$ResponseBuilder allow(java.lang.String[])
+meth public abstract !varargs jakarta.ws.rs.core.Response$ResponseBuilder cookie(jakarta.ws.rs.core.NewCookie[])
+meth public abstract !varargs jakarta.ws.rs.core.Response$ResponseBuilder links(jakarta.ws.rs.core.Link[])
+meth public abstract !varargs jakarta.ws.rs.core.Response$ResponseBuilder variants(jakarta.ws.rs.core.Variant[])
+meth public abstract jakarta.ws.rs.core.Response build()
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder allow(java.util.Set<java.lang.String>)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder cacheControl(jakarta.ws.rs.core.CacheControl)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder clone()
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder contentLocation(java.net.URI)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder encoding(java.lang.String)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder entity(java.lang.Object)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder entity(java.lang.Object,java.lang.annotation.Annotation[])
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder expires(java.util.Date)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder header(java.lang.String,java.lang.Object)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder language(java.lang.String)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder language(java.util.Locale)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder lastModified(java.util.Date)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder link(java.lang.String,java.lang.String)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder link(java.net.URI,java.lang.String)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder location(java.net.URI)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder replaceAll(jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.Object>)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder status(int)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder status(int,java.lang.String)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder tag(jakarta.ws.rs.core.EntityTag)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder tag(java.lang.String)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder type(jakarta.ws.rs.core.MediaType)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder type(java.lang.String)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder variant(jakarta.ws.rs.core.Variant)
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder variants(java.util.List<jakarta.ws.rs.core.Variant>)
+meth public jakarta.ws.rs.core.Response$ResponseBuilder status(jakarta.ws.rs.core.Response$Status)
+meth public jakarta.ws.rs.core.Response$ResponseBuilder status(jakarta.ws.rs.core.Response$StatusType)
+supr java.lang.Object
+
+CLSS public final static !enum jakarta.ws.rs.core.Response$Status
+ outer jakarta.ws.rs.core.Response
+fld public final static jakarta.ws.rs.core.Response$Status ACCEPTED
+fld public final static jakarta.ws.rs.core.Response$Status BAD_GATEWAY
+fld public final static jakarta.ws.rs.core.Response$Status BAD_REQUEST
+fld public final static jakarta.ws.rs.core.Response$Status CONFLICT
+fld public final static jakarta.ws.rs.core.Response$Status CREATED
+fld public final static jakarta.ws.rs.core.Response$Status EXPECTATION_FAILED
+fld public final static jakarta.ws.rs.core.Response$Status FORBIDDEN
+fld public final static jakarta.ws.rs.core.Response$Status FOUND
+fld public final static jakarta.ws.rs.core.Response$Status GATEWAY_TIMEOUT
+fld public final static jakarta.ws.rs.core.Response$Status GONE
+fld public final static jakarta.ws.rs.core.Response$Status HTTP_VERSION_NOT_SUPPORTED
+fld public final static jakarta.ws.rs.core.Response$Status INTERNAL_SERVER_ERROR
+fld public final static jakarta.ws.rs.core.Response$Status LENGTH_REQUIRED
+fld public final static jakarta.ws.rs.core.Response$Status METHOD_NOT_ALLOWED
+fld public final static jakarta.ws.rs.core.Response$Status MOVED_PERMANENTLY
+fld public final static jakarta.ws.rs.core.Response$Status MULTIPLE_CHOICES
+fld public final static jakarta.ws.rs.core.Response$Status NETWORK_AUTHENTICATION_REQUIRED
+fld public final static jakarta.ws.rs.core.Response$Status NOT_ACCEPTABLE
+fld public final static jakarta.ws.rs.core.Response$Status NOT_FOUND
+fld public final static jakarta.ws.rs.core.Response$Status NOT_IMPLEMENTED
+fld public final static jakarta.ws.rs.core.Response$Status NOT_MODIFIED
+fld public final static jakarta.ws.rs.core.Response$Status NO_CONTENT
+fld public final static jakarta.ws.rs.core.Response$Status OK
+fld public final static jakarta.ws.rs.core.Response$Status PARTIAL_CONTENT
+fld public final static jakarta.ws.rs.core.Response$Status PAYMENT_REQUIRED
+fld public final static jakarta.ws.rs.core.Response$Status PERMANENT_REDIRECT
+fld public final static jakarta.ws.rs.core.Response$Status PRECONDITION_FAILED
+fld public final static jakarta.ws.rs.core.Response$Status PRECONDITION_REQUIRED
+fld public final static jakarta.ws.rs.core.Response$Status PROXY_AUTHENTICATION_REQUIRED
+fld public final static jakarta.ws.rs.core.Response$Status REQUESTED_RANGE_NOT_SATISFIABLE
+fld public final static jakarta.ws.rs.core.Response$Status REQUEST_ENTITY_TOO_LARGE
+fld public final static jakarta.ws.rs.core.Response$Status REQUEST_HEADER_FIELDS_TOO_LARGE
+fld public final static jakarta.ws.rs.core.Response$Status REQUEST_TIMEOUT
+fld public final static jakarta.ws.rs.core.Response$Status REQUEST_URI_TOO_LONG
+fld public final static jakarta.ws.rs.core.Response$Status RESET_CONTENT
+fld public final static jakarta.ws.rs.core.Response$Status SEE_OTHER
+fld public final static jakarta.ws.rs.core.Response$Status SERVICE_UNAVAILABLE
+fld public final static jakarta.ws.rs.core.Response$Status TEMPORARY_REDIRECT
+fld public final static jakarta.ws.rs.core.Response$Status TOO_MANY_REQUESTS
+fld public final static jakarta.ws.rs.core.Response$Status UNAUTHORIZED
+fld public final static jakarta.ws.rs.core.Response$Status UNAVAILABLE_FOR_LEGAL_REASONS
+fld public final static jakarta.ws.rs.core.Response$Status UNSUPPORTED_MEDIA_TYPE
+fld public final static jakarta.ws.rs.core.Response$Status USE_PROXY
+innr public final static !enum Family
+intf jakarta.ws.rs.core.Response$StatusType
+meth public int getStatusCode()
+meth public jakarta.ws.rs.core.Response$Status$Family getFamily()
+meth public java.lang.String getReasonPhrase()
+meth public java.lang.String toString()
+meth public static jakarta.ws.rs.core.Response$Status fromStatusCode(int)
+meth public static jakarta.ws.rs.core.Response$Status valueOf(java.lang.String)
+meth public static jakarta.ws.rs.core.Response$Status[] values()
+supr java.lang.Enum<jakarta.ws.rs.core.Response$Status>
+hfds code,family,reason
+
+CLSS public final static !enum jakarta.ws.rs.core.Response$Status$Family
+ outer jakarta.ws.rs.core.Response$Status
+fld public final static jakarta.ws.rs.core.Response$Status$Family CLIENT_ERROR
+fld public final static jakarta.ws.rs.core.Response$Status$Family INFORMATIONAL
+fld public final static jakarta.ws.rs.core.Response$Status$Family OTHER
+fld public final static jakarta.ws.rs.core.Response$Status$Family REDIRECTION
+fld public final static jakarta.ws.rs.core.Response$Status$Family SERVER_ERROR
+fld public final static jakarta.ws.rs.core.Response$Status$Family SUCCESSFUL
+meth public static jakarta.ws.rs.core.Response$Status$Family familyOf(int)
+meth public static jakarta.ws.rs.core.Response$Status$Family valueOf(java.lang.String)
+meth public static jakarta.ws.rs.core.Response$Status$Family[] values()
+supr java.lang.Enum<jakarta.ws.rs.core.Response$Status$Family>
+
+CLSS public abstract interface static jakarta.ws.rs.core.Response$StatusType
+ outer jakarta.ws.rs.core.Response
+meth public abstract int getStatusCode()
+meth public abstract jakarta.ws.rs.core.Response$Status$Family getFamily()
+meth public abstract java.lang.String getReasonPhrase()
+meth public jakarta.ws.rs.core.Response$Status toEnum()
+
+CLSS public abstract interface jakarta.ws.rs.core.SecurityContext
+fld public final static java.lang.String BASIC_AUTH = "BASIC"
+fld public final static java.lang.String CLIENT_CERT_AUTH = "CLIENT_CERT"
+fld public final static java.lang.String DIGEST_AUTH = "DIGEST"
+fld public final static java.lang.String FORM_AUTH = "FORM"
+meth public abstract boolean isSecure()
+meth public abstract boolean isUserInRole(java.lang.String)
+meth public abstract java.lang.String getAuthenticationScheme()
+meth public abstract java.security.Principal getUserPrincipal()
+
+CLSS public abstract interface jakarta.ws.rs.core.StreamingOutput
+meth public abstract void write(java.io.OutputStream) throws java.io.IOException
+
+CLSS public abstract jakarta.ws.rs.core.UriBuilder
+cons protected init()
+meth public abstract !varargs jakarta.ws.rs.core.UriBuilder matrixParam(java.lang.String,java.lang.Object[])
+meth public abstract !varargs jakarta.ws.rs.core.UriBuilder queryParam(java.lang.String,java.lang.Object[])
+meth public abstract !varargs jakarta.ws.rs.core.UriBuilder replaceMatrixParam(java.lang.String,java.lang.Object[])
+meth public abstract !varargs jakarta.ws.rs.core.UriBuilder replaceQueryParam(java.lang.String,java.lang.Object[])
+meth public abstract !varargs jakarta.ws.rs.core.UriBuilder segment(java.lang.String[])
+meth public abstract !varargs java.net.URI build(java.lang.Object[])
+meth public abstract !varargs java.net.URI buildFromEncoded(java.lang.Object[])
+meth public abstract jakarta.ws.rs.core.UriBuilder clone()
+meth public abstract jakarta.ws.rs.core.UriBuilder fragment(java.lang.String)
+meth public abstract jakarta.ws.rs.core.UriBuilder host(java.lang.String)
+meth public abstract jakarta.ws.rs.core.UriBuilder path(java.lang.Class)
+meth public abstract jakarta.ws.rs.core.UriBuilder path(java.lang.Class,java.lang.String)
+meth public abstract jakarta.ws.rs.core.UriBuilder path(java.lang.String)
+meth public abstract jakarta.ws.rs.core.UriBuilder path(java.lang.reflect.Method)
+meth public abstract jakarta.ws.rs.core.UriBuilder port(int)
+meth public abstract jakarta.ws.rs.core.UriBuilder replaceMatrix(java.lang.String)
+meth public abstract jakarta.ws.rs.core.UriBuilder replacePath(java.lang.String)
+meth public abstract jakarta.ws.rs.core.UriBuilder replaceQuery(java.lang.String)
+meth public abstract jakarta.ws.rs.core.UriBuilder resolveTemplate(java.lang.String,java.lang.Object)
+meth public abstract jakarta.ws.rs.core.UriBuilder resolveTemplate(java.lang.String,java.lang.Object,boolean)
+meth public abstract jakarta.ws.rs.core.UriBuilder resolveTemplateFromEncoded(java.lang.String,java.lang.Object)
+meth public abstract jakarta.ws.rs.core.UriBuilder resolveTemplates(java.util.Map<java.lang.String,java.lang.Object>)
+meth public abstract jakarta.ws.rs.core.UriBuilder resolveTemplates(java.util.Map<java.lang.String,java.lang.Object>,boolean)
+meth public abstract jakarta.ws.rs.core.UriBuilder resolveTemplatesFromEncoded(java.util.Map<java.lang.String,java.lang.Object>)
+meth public abstract jakarta.ws.rs.core.UriBuilder scheme(java.lang.String)
+meth public abstract jakarta.ws.rs.core.UriBuilder schemeSpecificPart(java.lang.String)
+meth public abstract jakarta.ws.rs.core.UriBuilder uri(java.lang.String)
+meth public abstract jakarta.ws.rs.core.UriBuilder uri(java.net.URI)
+meth public abstract jakarta.ws.rs.core.UriBuilder userInfo(java.lang.String)
+meth public abstract java.lang.String toTemplate()
+meth public abstract java.net.URI build(java.lang.Object[],boolean)
+meth public abstract java.net.URI buildFromEncodedMap(java.util.Map<java.lang.String,?>)
+meth public abstract java.net.URI buildFromMap(java.util.Map<java.lang.String,?>)
+meth public abstract java.net.URI buildFromMap(java.util.Map<java.lang.String,?>,boolean)
+meth public static jakarta.ws.rs.core.UriBuilder fromLink(jakarta.ws.rs.core.Link)
+meth public static jakarta.ws.rs.core.UriBuilder fromMethod(java.lang.Class<?>,java.lang.String)
+meth public static jakarta.ws.rs.core.UriBuilder fromPath(java.lang.String)
+meth public static jakarta.ws.rs.core.UriBuilder fromResource(java.lang.Class<?>)
+meth public static jakarta.ws.rs.core.UriBuilder fromUri(java.lang.String)
+meth public static jakarta.ws.rs.core.UriBuilder fromUri(java.net.URI)
+meth public static jakarta.ws.rs.core.UriBuilder newInstance()
+supr java.lang.Object
+
+CLSS public jakarta.ws.rs.core.UriBuilderException
+cons public init()
+cons public init(java.lang.String)
+cons public init(java.lang.String,java.lang.Throwable)
+cons public init(java.lang.Throwable)
+supr java.lang.RuntimeException
+hfds serialVersionUID
+
+CLSS public abstract interface jakarta.ws.rs.core.UriInfo
+meth public abstract jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> getPathParameters()
+meth public abstract jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> getPathParameters(boolean)
+meth public abstract jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> getQueryParameters()
+meth public abstract jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> getQueryParameters(boolean)
+meth public abstract jakarta.ws.rs.core.UriBuilder getAbsolutePathBuilder()
+meth public abstract jakarta.ws.rs.core.UriBuilder getBaseUriBuilder()
+meth public abstract jakarta.ws.rs.core.UriBuilder getRequestUriBuilder()
+meth public abstract java.lang.String getPath()
+meth public abstract java.lang.String getPath(boolean)
+meth public abstract java.net.URI getAbsolutePath()
+meth public abstract java.net.URI getBaseUri()
+meth public abstract java.net.URI getRequestUri()
+meth public abstract java.net.URI relativize(java.net.URI)
+meth public abstract java.net.URI resolve(java.net.URI)
+meth public abstract java.util.List<jakarta.ws.rs.core.PathSegment> getPathSegments()
+meth public abstract java.util.List<jakarta.ws.rs.core.PathSegment> getPathSegments(boolean)
+meth public abstract java.util.List<java.lang.Object> getMatchedResources()
+meth public abstract java.util.List<java.lang.String> getMatchedURIs()
+meth public abstract java.util.List<java.lang.String> getMatchedURIs(boolean)
+
+CLSS public jakarta.ws.rs.core.Variant
+cons public init(jakarta.ws.rs.core.MediaType,java.lang.String,java.lang.String)
+cons public init(jakarta.ws.rs.core.MediaType,java.lang.String,java.lang.String,java.lang.String)
+cons public init(jakarta.ws.rs.core.MediaType,java.lang.String,java.lang.String,java.lang.String,java.lang.String)
+cons public init(jakarta.ws.rs.core.MediaType,java.util.Locale,java.lang.String)
+innr public abstract static VariantListBuilder
+meth public !varargs static jakarta.ws.rs.core.Variant$VariantListBuilder encodings(java.lang.String[])
+meth public !varargs static jakarta.ws.rs.core.Variant$VariantListBuilder languages(java.util.Locale[])
+meth public !varargs static jakarta.ws.rs.core.Variant$VariantListBuilder mediaTypes(jakarta.ws.rs.core.MediaType[])
+meth public boolean equals(java.lang.Object)
+meth public int hashCode()
+meth public jakarta.ws.rs.core.MediaType getMediaType()
+meth public java.lang.String getEncoding()
+meth public java.lang.String getLanguageString()
+meth public java.lang.String toString()
+meth public java.util.Locale getLanguage()
+supr java.lang.Object
+hfds encoding,language,mediaType
+
+CLSS public abstract static jakarta.ws.rs.core.Variant$VariantListBuilder
+ outer jakarta.ws.rs.core.Variant
+cons protected init()
+meth public abstract !varargs jakarta.ws.rs.core.Variant$VariantListBuilder encodings(java.lang.String[])
+meth public abstract !varargs jakarta.ws.rs.core.Variant$VariantListBuilder languages(java.util.Locale[])
+meth public abstract !varargs jakarta.ws.rs.core.Variant$VariantListBuilder mediaTypes(jakarta.ws.rs.core.MediaType[])
+meth public abstract jakarta.ws.rs.core.Variant$VariantListBuilder add()
+meth public abstract java.util.List<jakarta.ws.rs.core.Variant> build()
+meth public static jakarta.ws.rs.core.Variant$VariantListBuilder newInstance()
+supr java.lang.Object
+
+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<?>)
+
+CLSS public abstract interface jakarta.ws.rs.ext.ExceptionMapper<%0 extends java.lang.Throwable>
+meth public abstract jakarta.ws.rs.core.Response toResponse({jakarta.ws.rs.ext.ExceptionMapper%0})
+
+CLSS public abstract interface jakarta.ws.rs.ext.InterceptorContext
+meth public abstract jakarta.ws.rs.core.MediaType getMediaType()
+meth public abstract java.lang.Class<?> getType()
+meth public abstract java.lang.Object getProperty(java.lang.String)
+meth public abstract java.lang.annotation.Annotation[] getAnnotations()
+meth public abstract java.lang.reflect.Type getGenericType()
+meth public abstract java.util.Collection<java.lang.String> getPropertyNames()
+meth public abstract void removeProperty(java.lang.String)
+meth public abstract void setAnnotations(java.lang.annotation.Annotation[])
+meth public abstract void setGenericType(java.lang.reflect.Type)
+meth public abstract void setMediaType(jakarta.ws.rs.core.MediaType)
+meth public abstract void setProperty(java.lang.String,java.lang.Object)
+meth public abstract void setType(java.lang.Class<?>)
+meth public boolean hasProperty(java.lang.String)
+
+CLSS public abstract interface jakarta.ws.rs.ext.MessageBodyReader<%0 extends java.lang.Object>
+meth public abstract boolean isReadable(java.lang.Class<?>,java.lang.reflect.Type,java.lang.annotation.Annotation[],jakarta.ws.rs.core.MediaType)
+meth public abstract {jakarta.ws.rs.ext.MessageBodyReader%0} readFrom(java.lang.Class<{jakarta.ws.rs.ext.MessageBodyReader%0}>,java.lang.reflect.Type,java.lang.annotation.Annotation[],jakarta.ws.rs.core.MediaType,jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String>,java.io.InputStream) throws java.io.IOException
+
+CLSS public abstract interface jakarta.ws.rs.ext.MessageBodyWriter<%0 extends java.lang.Object>
+meth public abstract boolean isWriteable(java.lang.Class<?>,java.lang.reflect.Type,java.lang.annotation.Annotation[],jakarta.ws.rs.core.MediaType)
+meth public abstract void writeTo({jakarta.ws.rs.ext.MessageBodyWriter%0},java.lang.Class<?>,java.lang.reflect.Type,java.lang.annotation.Annotation[],jakarta.ws.rs.core.MediaType,jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.Object>,java.io.OutputStream) throws java.io.IOException
+meth public long getSize({jakarta.ws.rs.ext.MessageBodyWriter%0},java.lang.Class<?>,java.lang.reflect.Type,java.lang.annotation.Annotation[],jakarta.ws.rs.core.MediaType)
+
+CLSS public abstract interface jakarta.ws.rs.ext.ParamConverter<%0 extends java.lang.Object>
+innr public abstract interface static !annotation Lazy
+meth public abstract java.lang.String toString({jakarta.ws.rs.ext.ParamConverter%0})
+meth public abstract {jakarta.ws.rs.ext.ParamConverter%0} fromString(java.lang.String)
+
+CLSS public abstract interface static !annotation jakarta.ws.rs.ext.ParamConverter$Lazy
+ outer jakarta.ws.rs.ext.ParamConverter
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[TYPE])
+intf java.lang.annotation.Annotation
+
+CLSS public abstract interface jakarta.ws.rs.ext.ParamConverterProvider
+meth public abstract <%0 extends java.lang.Object> jakarta.ws.rs.ext.ParamConverter<{%%0}> getConverter(java.lang.Class<{%%0}>,java.lang.reflect.Type,java.lang.annotation.Annotation[])
+
+CLSS public abstract interface !annotation jakarta.ws.rs.ext.Provider
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[TYPE])
+intf java.lang.annotation.Annotation
+
+CLSS public abstract interface jakarta.ws.rs.ext.Providers
+meth public abstract <%0 extends java.lang.Object> jakarta.ws.rs.ext.ContextResolver<{%%0}> getContextResolver(java.lang.Class<{%%0}>,jakarta.ws.rs.core.MediaType)
+meth public abstract <%0 extends java.lang.Object> jakarta.ws.rs.ext.MessageBodyReader<{%%0}> getMessageBodyReader(java.lang.Class<{%%0}>,java.lang.reflect.Type,java.lang.annotation.Annotation[],jakarta.ws.rs.core.MediaType)
+meth public abstract <%0 extends java.lang.Object> jakarta.ws.rs.ext.MessageBodyWriter<{%%0}> getMessageBodyWriter(java.lang.Class<{%%0}>,java.lang.reflect.Type,java.lang.annotation.Annotation[],jakarta.ws.rs.core.MediaType)
+meth public abstract <%0 extends java.lang.Throwable> jakarta.ws.rs.ext.ExceptionMapper<{%%0}> getExceptionMapper(java.lang.Class<{%%0}>)
+
+CLSS public abstract interface jakarta.ws.rs.ext.ReaderInterceptor
+meth public abstract java.lang.Object aroundReadFrom(jakarta.ws.rs.ext.ReaderInterceptorContext) throws java.io.IOException
+
+CLSS public abstract interface jakarta.ws.rs.ext.ReaderInterceptorContext
+intf jakarta.ws.rs.ext.InterceptorContext
+meth public abstract jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> getHeaders()
+meth public abstract java.io.InputStream getInputStream()
+meth public abstract java.lang.Object proceed() throws java.io.IOException
+meth public abstract void setInputStream(java.io.InputStream)
+
+CLSS public abstract jakarta.ws.rs.ext.RuntimeDelegate
+cons protected init()
+fld public final static java.lang.String JAXRS_RUNTIME_DELEGATE_PROPERTY = "jakarta.ws.rs.ext.RuntimeDelegate"
+innr public abstract interface static HeaderDelegate
+meth public abstract <%0 extends java.lang.Object> jakarta.ws.rs.ext.RuntimeDelegate$HeaderDelegate<{%%0}> createHeaderDelegate(java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} createEndpoint(jakarta.ws.rs.core.Application,java.lang.Class<{%%0}>)
+meth public abstract jakarta.ws.rs.SeBootstrap$Configuration$Builder createConfigurationBuilder()
+meth public abstract jakarta.ws.rs.core.EntityPart$Builder createEntityPartBuilder(java.lang.String)
+meth public abstract jakarta.ws.rs.core.Link$Builder createLinkBuilder()
+meth public abstract jakarta.ws.rs.core.Response$ResponseBuilder createResponseBuilder()
+meth public abstract jakarta.ws.rs.core.UriBuilder createUriBuilder()
+meth public abstract jakarta.ws.rs.core.Variant$VariantListBuilder createVariantListBuilder()
+meth public abstract java.util.concurrent.CompletionStage<jakarta.ws.rs.SeBootstrap$Instance> bootstrap(jakarta.ws.rs.core.Application,jakarta.ws.rs.SeBootstrap$Configuration)
+meth public abstract java.util.concurrent.CompletionStage<jakarta.ws.rs.SeBootstrap$Instance> bootstrap(java.lang.Class<? extends jakarta.ws.rs.core.Application>,jakarta.ws.rs.SeBootstrap$Configuration)
+meth public static jakarta.ws.rs.ext.RuntimeDelegate getInstance()
+meth public static void setInstance(jakarta.ws.rs.ext.RuntimeDelegate)
+supr java.lang.Object
+hfds RD_LOCK,cachedDelegate,suppressAccessChecksPermission
+
+CLSS public abstract interface static jakarta.ws.rs.ext.RuntimeDelegate$HeaderDelegate<%0 extends java.lang.Object>
+ outer jakarta.ws.rs.ext.RuntimeDelegate
+meth public abstract java.lang.String toString({jakarta.ws.rs.ext.RuntimeDelegate$HeaderDelegate%0})
+meth public abstract {jakarta.ws.rs.ext.RuntimeDelegate$HeaderDelegate%0} fromString(java.lang.String)
+
+CLSS public abstract interface jakarta.ws.rs.ext.WriterInterceptor
+meth public abstract void aroundWriteTo(jakarta.ws.rs.ext.WriterInterceptorContext) throws java.io.IOException
+
+CLSS public abstract interface jakarta.ws.rs.ext.WriterInterceptorContext
+intf jakarta.ws.rs.ext.InterceptorContext
+meth public abstract jakarta.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.Object> getHeaders()
+meth public abstract java.io.OutputStream getOutputStream()
+meth public abstract java.lang.Object getEntity()
+meth public abstract void proceed() throws java.io.IOException
+meth public abstract void setEntity(java.lang.Object)
+meth public abstract void setOutputStream(java.io.OutputStream)
+
+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}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} readData(jakarta.ws.rs.core.GenericType<{%%0}>,jakarta.ws.rs.core.MediaType)
+meth public abstract <%0 extends java.lang.Object> {%%0} readData(java.lang.Class<{%%0}>)
+meth public abstract <%0 extends java.lang.Object> {%%0} readData(java.lang.Class<{%%0}>,jakarta.ws.rs.core.MediaType)
+meth public abstract boolean isEmpty()
+meth public abstract java.lang.String readData()
+
+CLSS public abstract interface jakarta.ws.rs.sse.OutboundSseEvent
+innr public abstract interface static Builder
+intf jakarta.ws.rs.sse.SseEvent
+meth public abstract jakarta.ws.rs.core.MediaType getMediaType()
+meth public abstract java.lang.Class<?> getType()
+meth public abstract java.lang.Object getData()
+meth public abstract java.lang.reflect.Type getGenericType()
+
+CLSS public abstract interface static jakarta.ws.rs.sse.OutboundSseEvent$Builder
+ outer jakarta.ws.rs.sse.OutboundSseEvent
+meth public abstract jakarta.ws.rs.sse.OutboundSseEvent build()
+meth public abstract jakarta.ws.rs.sse.OutboundSseEvent$Builder comment(java.lang.String)
+meth public abstract jakarta.ws.rs.sse.OutboundSseEvent$Builder data(jakarta.ws.rs.core.GenericType,java.lang.Object)
+meth public abstract jakarta.ws.rs.sse.OutboundSseEvent$Builder data(java.lang.Class,java.lang.Object)
+meth public abstract jakarta.ws.rs.sse.OutboundSseEvent$Builder data(java.lang.Object)
+meth public abstract jakarta.ws.rs.sse.OutboundSseEvent$Builder id(java.lang.String)
+meth public abstract jakarta.ws.rs.sse.OutboundSseEvent$Builder mediaType(jakarta.ws.rs.core.MediaType)
+meth public abstract jakarta.ws.rs.sse.OutboundSseEvent$Builder name(java.lang.String)
+meth public abstract jakarta.ws.rs.sse.OutboundSseEvent$Builder reconnectDelay(long)
+
+CLSS public abstract interface jakarta.ws.rs.sse.Sse
+meth public abstract jakarta.ws.rs.sse.OutboundSseEvent$Builder newEventBuilder()
+meth public abstract jakarta.ws.rs.sse.SseBroadcaster newBroadcaster()
+meth public jakarta.ws.rs.sse.OutboundSseEvent newEvent(java.lang.String)
+meth public jakarta.ws.rs.sse.OutboundSseEvent newEvent(java.lang.String,java.lang.String)
+
+CLSS public abstract interface jakarta.ws.rs.sse.SseBroadcaster
+intf java.lang.AutoCloseable
+meth public abstract java.util.concurrent.CompletionStage<?> broadcast(jakarta.ws.rs.sse.OutboundSseEvent)
+meth public abstract void close()
+meth public abstract void close(boolean)
+meth public abstract void onClose(java.util.function.Consumer<jakarta.ws.rs.sse.SseEventSink>)
+meth public abstract void onError(java.util.function.BiConsumer<jakarta.ws.rs.sse.SseEventSink,java.lang.Throwable>)
+meth public abstract void register(jakarta.ws.rs.sse.SseEventSink)
+
+CLSS public abstract interface jakarta.ws.rs.sse.SseEvent
+fld public final static long RECONNECT_NOT_SET = -1
+meth public abstract boolean isReconnectDelaySet()
+meth public abstract java.lang.String getComment()
+meth public abstract java.lang.String getId()
+meth public abstract java.lang.String getName()
+meth public abstract long getReconnectDelay()
+
+CLSS public abstract interface jakarta.ws.rs.sse.SseEventSink
+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()
+
+CLSS public abstract interface jakarta.ws.rs.sse.SseEventSource
+innr public abstract static Builder
+intf java.lang.AutoCloseable
+meth public abstract boolean close(long,java.util.concurrent.TimeUnit)
+meth public abstract boolean isOpen()
+meth public abstract void open()
+meth public abstract void register(java.util.function.Consumer<jakarta.ws.rs.sse.InboundSseEvent>)
+meth public abstract void register(java.util.function.Consumer<jakarta.ws.rs.sse.InboundSseEvent>,java.util.function.Consumer<java.lang.Throwable>)
+meth public abstract void register(java.util.function.Consumer<jakarta.ws.rs.sse.InboundSseEvent>,java.util.function.Consumer<java.lang.Throwable>,java.lang.Runnable)
+meth public static jakarta.ws.rs.sse.SseEventSource$Builder target(jakarta.ws.rs.client.WebTarget)
+meth public void close()
+
+CLSS public abstract static jakarta.ws.rs.sse.SseEventSource$Builder
+ outer jakarta.ws.rs.sse.SseEventSource
+cons protected init()
+fld public final static java.lang.String JAXRS_DEFAULT_SSE_BUILDER_PROPERTY = "jakarta.ws.rs.sse.SseEventSource.Builder"
+meth protected abstract jakarta.ws.rs.sse.SseEventSource$Builder target(jakarta.ws.rs.client.WebTarget)
+meth public abstract jakarta.ws.rs.sse.SseEventSource build()
+meth public abstract jakarta.ws.rs.sse.SseEventSource$Builder reconnectingEvery(long,java.util.concurrent.TimeUnit)
+supr java.lang.Object
+
+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
+meth public abstract {jakarta.xml.bind.annotation.adapters.XmlAdapter%1} unmarshal({jakarta.xml.bind.annotation.adapters.XmlAdapter%0}) throws java.lang.Exception
+supr java.lang.Object
+
+CLSS public java.io.IOException
+cons public init()
+cons public init(java.lang.String)
+cons public init(java.lang.String,java.lang.Throwable)
+cons public init(java.lang.Throwable)
+supr java.lang.Exception
+hfds serialVersionUID
+
+CLSS public abstract interface java.io.Serializable
+
+CLSS public abstract interface java.lang.AutoCloseable
+meth public abstract void close() throws java.lang.Exception
+
+CLSS public abstract interface java.lang.Comparable<%0 extends java.lang.Object>
+meth public abstract int compareTo({java.lang.Comparable%0})
+
+CLSS public abstract interface !annotation java.lang.Deprecated
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE])
+intf java.lang.annotation.Annotation
+meth public abstract !hasdefault boolean forRemoval()
+meth public abstract !hasdefault java.lang.String since()
+
+CLSS public abstract java.lang.Enum<%0 extends java.lang.Enum<{java.lang.Enum%0}>>
+cons protected init(java.lang.String,int)
+intf java.io.Serializable
+intf java.lang.Comparable<{java.lang.Enum%0}>
+meth protected final java.lang.Object clone() throws java.lang.CloneNotSupportedException
+meth protected final void finalize()
+meth public final boolean equals(java.lang.Object)
+meth public final int compareTo({java.lang.Enum%0})
+meth public final int hashCode()
+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 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
+hfds name,ordinal
+
+CLSS public java.lang.Exception
+cons protected init(java.lang.String,java.lang.Throwable,boolean,boolean)
+cons public init()
+cons public init(java.lang.String)
+cons public init(java.lang.String,java.lang.Throwable)
+cons public init(java.lang.Throwable)
+supr java.lang.Throwable
+hfds serialVersionUID
+
+CLSS public java.lang.Object
+cons public init()
+meth protected java.lang.Object clone() throws java.lang.CloneNotSupportedException
+meth protected void finalize() throws java.lang.Throwable
+ anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="9")
+meth public boolean equals(java.lang.Object)
+meth public final java.lang.Class<?> getClass()
+meth public final void notify()
+meth public final void notifyAll()
+meth public final void wait() throws java.lang.InterruptedException
+meth public final void wait(long) throws java.lang.InterruptedException
+meth public final void wait(long,int) throws java.lang.InterruptedException
+meth public int hashCode()
+meth public java.lang.String toString()
+
+CLSS public java.lang.RuntimeException
+cons protected init(java.lang.String,java.lang.Throwable,boolean,boolean)
+cons public init()
+cons public init(java.lang.String)
+cons public init(java.lang.String,java.lang.Throwable)
+cons public init(java.lang.Throwable)
+supr java.lang.Exception
+hfds serialVersionUID
+
+CLSS public java.lang.Throwable
+cons protected init(java.lang.String,java.lang.Throwable,boolean,boolean)
+cons public init()
+cons public init(java.lang.String)
+cons public init(java.lang.String,java.lang.Throwable)
+cons public init(java.lang.Throwable)
+intf java.io.Serializable
+meth public final java.lang.Throwable[] getSuppressed()
+meth public final void addSuppressed(java.lang.Throwable)
+meth public java.lang.StackTraceElement[] getStackTrace()
+meth public java.lang.String getLocalizedMessage()
+meth public java.lang.String getMessage()
+meth public java.lang.String toString()
+meth public java.lang.Throwable fillInStackTrace()
+meth public java.lang.Throwable getCause()
+meth public java.lang.Throwable initCause(java.lang.Throwable)
+meth public void printStackTrace()
+meth public void printStackTrace(java.io.PrintStream)
+meth public void printStackTrace(java.io.PrintWriter)
+meth public void setStackTrace(java.lang.StackTraceElement[])
+supr java.lang.Object
+hfds CAUSE_CAPTION,EMPTY_THROWABLE_ARRAY,NULL_CAUSE_MESSAGE,SELF_SUPPRESSION_MESSAGE,SUPPRESSED_CAPTION,SUPPRESSED_SENTINEL,UNASSIGNED_STACK,backtrace,cause,depth,detailMessage,serialVersionUID,stackTrace,suppressedExceptions
+hcls PrintStreamOrWriter,SentinelHolder,WrappedPrintStream,WrappedPrintWriter
+
+CLSS public abstract interface java.lang.annotation.Annotation
+meth public abstract boolean equals(java.lang.Object)
+meth public abstract int hashCode()
+meth public abstract java.lang.Class<? extends java.lang.annotation.Annotation> annotationType()
+meth public abstract java.lang.String toString()
+
+CLSS public abstract interface !annotation java.lang.annotation.Documented
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[ANNOTATION_TYPE])
+intf java.lang.annotation.Annotation
+
+CLSS public abstract interface !annotation java.lang.annotation.Inherited
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[ANNOTATION_TYPE])
+intf java.lang.annotation.Annotation
+
+CLSS public abstract interface !annotation java.lang.annotation.Retention
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[ANNOTATION_TYPE])
+intf java.lang.annotation.Annotation
+meth public abstract java.lang.annotation.RetentionPolicy value()
+
+CLSS public abstract interface !annotation java.lang.annotation.Target
+ anno 0 java.lang.annotation.Documented()
+ anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
+ anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[ANNOTATION_TYPE])
+intf java.lang.annotation.Annotation
+meth public abstract java.lang.annotation.ElementType[] value()
+
+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}>[])
+ anno 0 java.lang.SafeVarargs()
+meth public abstract boolean containsKey(java.lang.Object)
+meth public abstract boolean containsValue(java.lang.Object)
+meth public abstract boolean equals(java.lang.Object)
+meth public abstract boolean isEmpty()
+meth public abstract int hashCode()
+meth public abstract int size()
+meth public abstract java.util.Collection<{java.util.Map%1}> values()
+meth public abstract java.util.Set<java.util.Map$Entry<{java.util.Map%0},{java.util.Map%1}>> entrySet()
+meth public abstract java.util.Set<{java.util.Map%0}> keySet()
+meth public abstract void clear()
+meth public abstract void putAll(java.util.Map<? extends {java.util.Map%0},? extends {java.util.Map%1}>)
+meth public abstract {java.util.Map%1} get(java.lang.Object)
+meth public abstract {java.util.Map%1} put({java.util.Map%0},{java.util.Map%1})
+meth public abstract {java.util.Map%1} remove(java.lang.Object)
+meth public boolean remove(java.lang.Object,java.lang.Object)
+meth public boolean replace({java.util.Map%0},{java.util.Map%1},{java.util.Map%1})
+meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map$Entry<{%%0},{%%1}> entry({%%0},{%%1})
+meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> copyOf(java.util.Map<? extends {%%0},? extends {%%1}>)
+meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of()
+meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1})
+meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1},{%%0},{%%1})
+meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1},{%%0},{%%1},{%%0},{%%1})
+meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1})
+meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1})
+meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1})
+meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1})
+meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1})
+meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1})
+meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1})
+meth public void forEach(java.util.function.BiConsumer<? super {java.util.Map%0},? super {java.util.Map%1}>)
+meth public void replaceAll(java.util.function.BiFunction<? super {java.util.Map%0},? super {java.util.Map%1},? extends {java.util.Map%1}>)
+meth public {java.util.Map%1} compute({java.util.Map%0},java.util.function.BiFunction<? super {java.util.Map%0},? super {java.util.Map%1},? extends {java.util.Map%1}>)
+meth public {java.util.Map%1} computeIfAbsent({java.util.Map%0},java.util.function.Function<? super {java.util.Map%0},? extends {java.util.Map%1}>)
+meth public {java.util.Map%1} computeIfPresent({java.util.Map%0},java.util.function.BiFunction<? super {java.util.Map%0},? super {java.util.Map%1},? extends {java.util.Map%1}>)
+meth public {java.util.Map%1} getOrDefault(java.lang.Object,{java.util.Map%1})
+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/jakarta/ws/rs/tck/signaturetest/sig-test-pkg-list.txt b/jaxrs-tck/src/main/resources/jakarta/ws/rs/tck/signaturetest/sig-test-pkg-list.txt
new file mode 100644
index 0000000..e4a04a5
--- /dev/null
+++ b/jaxrs-tck/src/main/resources/jakarta/ws/rs/tck/signaturetest/sig-test-pkg-list.txt
@@ -0,0 +1,30 @@
+#
+# Copyright (c) 2018, 2020 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License v. 2.0, which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# Licenses when the conditions for such availability set forth in the
+# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+# version 2 with the GNU Classpath Exception, which is available at
+# https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+#
+
+##
+# This file contains a list of all the packages
+# contained in the signature files for this
+# deliverable.  This file is used to exclude valid
+# sub-packages from being verified when their
+# parent package's signature is checked.
+##
+
+jakarta.ws.rs
+jakarta.ws.rs.client
+jakarta.ws.rs.container
+jakarta.ws.rs.core
+jakarta.ws.rs.ext
+jakarta.ws.rs.sse
diff --git a/jaxrs-tck/src/main/resources/jakarta/ws/rs/tck/signaturetest/sig-test.map b/jaxrs-tck/src/main/resources/jakarta/ws/rs/tck/signaturetest/sig-test.map
new file mode 100644
index 0000000..895b2be
--- /dev/null
+++ b/jaxrs-tck/src/main/resources/jakarta/ws/rs/tck/signaturetest/sig-test.map
@@ -0,0 +1,20 @@
+#
+# Copyright (c) 2018, 2020 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License v. 2.0, which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# Licenses when the conditions for such availability set forth in the
+# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+# version 2 with the GNU Classpath Exception, which is available at
+# https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+#
+
+###############################################################
+# The signature test mapping file for the JAX-RS TCK.
+###############################################################
+jakarta.ws.rs=3.1.0
diff --git a/jersey-tck/pom.xml b/jersey-tck/pom.xml
index e4caf57..376801d 100644
--- a/jersey-tck/pom.xml
+++ b/jersey-tck/pom.xml
@@ -59,6 +59,12 @@
 
     <dependencies>
         <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <version>${junit.jupiter.version}</version>
+        </dependency>
+        
+        <dependency>
             <groupId>org.glassfish.hk2</groupId>
             <artifactId>hk2-locator</artifactId>
             <version>3.0.0</version>
@@ -122,6 +128,11 @@
             <scope>test</scope>
         </dependency> 
         <dependency>
+            <groupId>org.netbeans.tools</groupId>
+            <artifactId>sigtest-maven-plugin</artifactId>
+            <version>1.4</version>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.jersey.media</groupId>
             <artifactId>jersey-media-json-binding</artifactId>
             <version>${jersey.version}</version>
@@ -393,6 +404,9 @@
                                 <authuser>javajoe</authuser>
                                 <authpassword>javajoe</authpassword>
                                 <porting.ts.url.class.1>jakarta.ws.rs.tck.lib.implementation.sun.common.SunRIURL</porting.ts.url.class.1>
+                                <jimage.dir>${project.build.directory}/jdk11-bundle</jimage.dir>
+                                <optional.tech.packages.to.ignore>jakarta.xml.bind</optional.tech.packages.to.ignore>
+                                <signature.sigTestClasspath>${project.build.directory}/glassfish6/glassfish/modules/jakarta.ws.rs-api.jar:${project.build.directory}/glassfish6/glassfish/modules/jakarta.xml.bind-api.jar:${project.build.directory}/jdk11-bundle/java.base:${project.build.directory}/jdk11-bundle/java.rmi:${project.build.directory}/jdk11-bundle/java.sql:${project.build.directory}/jdk11-bundle/java.naming</signature.sigTestClasspath>
                             </systemPropertyVariables>
                             <environmentVariables>
                                 <GLASSFISH_HOME>${project.build.directory}/glassfish6</GLASSFISH_HOME>