diff --git a/appserver/tests/appserv-tests/devtests/security/build.xml b/appserver/tests/appserv-tests/devtests/security/build.xml
index 4bd858a..28d7193 100644
--- a/appserver/tests/appserv-tests/devtests/security/build.xml
+++ b/appserver/tests/appserv-tests/devtests/security/build.xml
@@ -47,7 +47,6 @@
         <ant dir="authConf" target="all"/>
         <ant dir="negativeRealmPerApp" target="all"/>
         <ant dir="realmPerApp" target="all"/>
-        <ant dir="soteria" target="all"/>
 <!--    <ant dir="weblogic-dd" target="all"/>-->                <!-- DISABLED: Failures -->
         <ant dir="sful" target="all"/>
         <ant dir="userWithAtSymbol" target="all"/>
@@ -88,15 +87,6 @@
         <ant dir="realmPerApp" target="all"/>
         <ant dir="sful" target="all"/>
     </target>
-    <target name="soteria">
-      <delete>
-         <fileset dir="${env.APS_HOME}" includes="test_results*, security-gtest-results.xml"/>
-      </delete>
-      <record name="soteria.output" action="start" />
-      <ant dir="soteria" target="all"/>
-      <record name="soteria.output" action="stop" />
-      <antcall target="report"/>
-    </target>
 
    <target name="usage">
         <echo>
diff --git a/appserver/tests/appserv-tests/devtests/security/ciphertest/build.xml b/appserver/tests/appserv-tests/devtests/security/ciphertest/build.xml
index 3595ac1..b0c0a46 100644
--- a/appserver/tests/appserv-tests/devtests/security/ciphertest/build.xml
+++ b/appserver/tests/appserv-tests/devtests/security/ciphertest/build.xml
@@ -162,42 +162,7 @@
 
      <property name="https.1.port" value="1${https.port}" />
      <property name="https.2.port" value="2${https.port}" />
-
-<!-- JDK 8 u172 - 3DES cipher suites disabled
      <antcall target="cipher-test">
-        <param name="should-pass-cipher" value="SSL_RSA_WITH_3DES_EDE_CBC_SHA"/>
-        <param name="enable-cipher"      value="SSL_RSA_WITH_3DES_EDE_CBC_SHA"/>
-        <param name="https.port"         value="${https.2.port}"/>
-      </antcall>
--->
-
-<!-- Disable failing test cases (use of -Dsun.security.ssl.allowUnsafeRenegotiation=true has no impact)
-      <antcall target="cipher-test">
-        <param name="should-pass-cipher" value="SSL_RSA_WITH_DES_CBC_SHA"/>
-        <param name="enable-cipher"      value="SSL_RSA_WITH_DES_CBC_SHA"/>
-        <param name="https.port"         value="${https.2.port}"/>
-      </antcall>
-
-      <antcall target="cipher-test">
-        <param name="should-pass-cipher" value="SSL_RSA_EXPORT_WITH_RC4_40_MD5"/>
-        <param name="enable-cipher"      value="SSL_RSA_EXPORT_WITH_RC4_40_MD5"/>
-        <param name="https.port"         value="${https.2.port}"/>
-      </antcall>
--->
-
-      <antcall target="cipher-test">
-        <param name="should-pass-cipher" value="SSL_RSA_WITH_NULL_MD5"/>
-        <param name="enable-cipher"      value="SSL_RSA_WITH_NULL_MD5"/>
-        <param name="https.port"         value="${https.2.port}"/>
-      </antcall>
-
-      <antcall target="cipher-test">
-        <param name="should-pass-cipher" value="SSL_RSA_WITH_NULL_SHA"/>
-        <param name="enable-cipher"      value="SSL_RSA_WITH_NULL_SHA"/>
-        <param name="https.port"         value="${https.2.port}"/>
-      </antcall>
-
-      <antcall target="cipher-test">
         <param name="should-pass-cipher" value=""/>
         <param name="enable-cipher"      value="SSL_RSA_WITH_RC4_128_MD5"/>
         <param name="https.port"         value="${https.2.port}"/>
diff --git a/appserver/tests/appserv-tests/devtests/security/common.xml b/appserver/tests/appserv-tests/devtests/security/common.xml
index cd59de0..ff63d50 100644
--- a/appserver/tests/appserv-tests/devtests/security/common.xml
+++ b/appserver/tests/appserv-tests/devtests/security/common.xml
@@ -166,7 +166,10 @@
 
 <target name="generate-jks-key" depends="init-common">
     <exec executable="${java.home}/bin/keytool" failonerror="true">
-        <arg line="-genkey -alias ssltest -dname"/>
+        <arg line="-genkey -alias ssltest"/>
+        <arg value="-keyalg" />
+        <arg value="RSA" />
+        <arg value="-dname" />
         <arg value="CN=SSLTest, OU=Sun Java System Application Server, O=Sun Microsystems, L=Santa Clara, ST=California, C=US"/>
         <arg value="-validity"/>
         <arg value="3650"/>
@@ -387,12 +390,14 @@
 
 <target name="wsgen" depends="init-common,setJAXWSToolsForWin,setJAXWSToolsForUnix">
     <exec executable="${WSGEN}" failonerror="true" >
+        <env key="AS_JAVA" value="${env.JAVA_HOME}" />
         <arg line="${wsgen.args}" />
     </exec>
 </target>
 
 <target name="wsimport" depends="init-common,setJAXWSToolsForWin,setJAXWSToolsForUnix">
     <exec executable="${WSIMPORT}" failonerror="true" >
+        <env key="AS_JAVA" value="${env.JAVA_HOME}" />
         <env key="WSIMPORT_OPTS" value="${wsimport.VMARGS}"/>
         <arg line="${wsimport.args}" />
     </exec>
diff --git a/appserver/tests/appserv-tests/devtests/security/container-auth/build.xml b/appserver/tests/appserv-tests/devtests/security/container-auth/build.xml
index 16a60db..4176672 100644
--- a/appserver/tests/appserv-tests/devtests/security/container-auth/build.xml
+++ b/appserver/tests/appserv-tests/devtests/security/container-auth/build.xml
@@ -58,22 +58,17 @@
    </target>
 
     <target name="runaccxml" depends="init-common">
-<!--TODO uncomment later-->
-            <java classname="AuthConfigTest" fork="yes">
+        <java classname="AuthConfigTest" fork="yes">
         <classpath>
                 <pathelement path="${env.S1AS_HOME}/lib/appserv-rt.jar:${build.classes.dir}"/>
-                <pathelement path="${env.S1AS_HOME}/lib/appserv-admin.jar"/>
-                <pathelement path="${env.S1AS_HOME}/lib/j2ee.jar"/>
-                <pathelement path="${env.S1AS_HOME}/lib/jmac-api.jar"/>
+                <pathelement path="${env.S1AS_HOME}/lib/javaee.jar"/>
                 <pathelement path="${env.S1AS_HOME}/lib/dtds"/>
                 <pathelement path="${env.S1AS_HOME}/lib/schemas"/>
                 <pathelement path="${env.APS_HOME}/lib/reporter.jar"/>
         </classpath>
         <arg value="xml-parse" />
         <sysproperty key="java.security.debug" value="configfile,configxmlparser"/>
-        <sysproperty key="sun-acc.xml.url" value="${env.APS_HOME}/devtests/security/container-auth/testConfig/sun-acc.xml"/>
-        <!--<jvmarg value="-Xdebug" />
-        <jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8008"/>-->
+        <sysproperty key="glassfish-acc.xml.url" value="${env.APS_HOME}/devtests/security/container-auth/testConfig/glassfish-acc.xml"/>
         </java>
     </target>
      <target name="usage">
diff --git a/appserver/tests/appserv-tests/devtests/security/container-auth/jauth/AuthConfigTest.java b/appserver/tests/appserv-tests/devtests/security/container-auth/jauth/AuthConfigTest.java
index 028e169..e07d34b 100644
--- a/appserver/tests/appserv-tests/devtests/security/container-auth/jauth/AuthConfigTest.java
+++ b/appserver/tests/appserv-tests/devtests/security/container-auth/jauth/AuthConfigTest.java
@@ -34,7 +34,7 @@
  *
  * 2. sun-acc.xml test:
  *
- *    %java -Dsun-acc.xml.url=sun-acc.xml
+ *    %java -Dglassfish-acc.xml.url=sun-acc.xml
  *        -Djava.security.debug=configfile,configxmlparser
  *        -classpath .:classes:config-api.jar:appserv-commons.jar:schema2beans.jar
  *        AuthConfigTest xml-parse
diff --git a/appserver/tests/appserv-tests/devtests/security/container-auth/testConfig/sun-acc.xml b/appserver/tests/appserv-tests/devtests/security/container-auth/testConfig/glassfish-acc.xml
similarity index 82%
rename from appserver/tests/appserv-tests/devtests/security/container-auth/testConfig/sun-acc.xml
rename to appserver/tests/appserv-tests/devtests/security/container-auth/testConfig/glassfish-acc.xml
index 4cae425..184989f 100644
--- a/appserver/tests/appserv-tests/devtests/security/container-auth/testConfig/sun-acc.xml
+++ b/appserver/tests/appserv-tests/devtests/security/container-auth/testConfig/glassfish-acc.xml
@@ -48,24 +48,4 @@
                 <response-policy auth-source="content" auth-recipient="after-content"></response-policy>
           </provider-config>
         </message-security-config>
-
-
-<!-- not supported yet
-
-
-        <message-security-config auth-layer="HTTP" default-provider="app8">
-          </provider-config>
-          <provider-config provider-id="app8" provider-type="server" class-name="ServerModule1">
-          </provider-config>
-          <provider-config provider-id="app9" provider-type="server" class-name="ServerModule1">
-        </message-security-config>
-
-
-        <message-security-config auth-layer="EJB" default-provider="app10">
-          </provider-config>
-          <provider-config provider-id="app10" provider-type="server" class-name="ServerModule1">
-        </message-security-config>
-
--->
-
 </client-container>
diff --git a/appserver/tests/appserv-tests/devtests/security/ejb-mutual-ssl/client/ConverterClient.java b/appserver/tests/appserv-tests/devtests/security/ejb-mutual-ssl/client/ConverterClient.java
index 527b250..7f94ffd 100644
--- a/appserver/tests/appserv-tests/devtests/security/ejb-mutual-ssl/client/ConverterClient.java
+++ b/appserver/tests/appserv-tests/devtests/security/ejb-mutual-ssl/client/ConverterClient.java
@@ -119,7 +119,7 @@
                 // Create Home object
                 obj = context.lookup(jndiName);
             }
-            String mys = "CN=SSLTest, OU=Sun Java System Application Server, O=Sun Microsystems, L=Santa Clara, ST=California, C=US";
+            String mys = "CN=SSLTest,OU=Sun Java System Application Server,O=Sun Microsystems,L=Santa Clara,ST=California,C=US";
             System.out.println("Certname in appclication-client ->"+mys);
             ConverterRemoteHome home =
                (ConverterRemoteHome) PortableRemoteObject.narrow(obj,
diff --git a/appserver/tests/appserv-tests/devtests/security/jaccApi/build.xml b/appserver/tests/appserv-tests/devtests/security/jaccApi/build.xml
index 2c95c03..a8ef830 100644
--- a/appserver/tests/appserv-tests/devtests/security/jaccApi/build.xml
+++ b/appserver/tests/appserv-tests/devtests/security/jaccApi/build.xml
@@ -61,7 +61,7 @@
       <ant dir="prog-auth" target="all"/>
     </target>
     <target name="run-test" depends="init-common">
-        <java classname="javax.security.jacc.Test" fork="yes"
+        <java classname="jakarta.security.jacc.Test" fork="yes"
             classpath="${s1astest.classpath}"/>
     </target>
 
@@ -71,7 +71,7 @@
         <property name="PFL" value="-Djava.security.policy=${basedir}/config/java.policy"/>
         <property name="PFL2" value="-Djava.security.policy=${basedir}/config/java.policy2"/>
 
-        <java classname="javax.security.jacc.TestPCF" fork="yes"
+        <java classname="jakarta.security.jacc.TestPCF" fork="yes"
             classpath="${s1astest.classpath}">
             <jvmarg value="-DAPS_HOME=${env.APS_HOME}"/>
             <jvmarg value="${PFL2}"/>
@@ -79,7 +79,7 @@
             <arg value="java.lang.ClassNotFoundException"/>
         </java>
 
-        <java classname="javax.security.jacc.TestPCF" fork="yes"
+        <java classname="jakarta.security.jacc.TestPCF" fork="yes"
             classpath="${s1astest.classpath}">
             <jvmarg value="-DAPS_HOME=${env.APS_HOME}"/>
             <jvmarg value="${NOTPCF}"/>
@@ -88,16 +88,16 @@
             <arg value="java.lang.ClassCastException"/>
         </java>
 
-        <java classname="javax.security.jacc.TestPCF" fork="yes"
+        <java classname="jakarta.security.jacc.TestPCF" fork="yes"
             classpath="${s1astest.classpath}">
             <jvmarg value="-DAPS_HOME=${env.APS_HOME}"/>
             <jvmarg value="${ISPCF}"/>
             <jvmarg value="${PFL2}"/>
             <arg value="true"/>
-            <arg value="javax.security.jacc.PolicyContextException"/>
+            <arg value="jakarta.security.jacc.PolicyContextException"/>
         </java>
 
-        <java classname="javax.security.jacc.TestPCF" fork="yes"
+        <java classname="jakarta.security.jacc.TestPCF" fork="yes"
             classpath="${s1astest.classpath}">
             <jvmarg value="-DAPS_HOME=${env.APS_HOME}"/>
             <jvmarg value="${NOTPCF}"/>
@@ -106,7 +106,7 @@
             <arg value="java.lang.ClassCastException"/>
         </java>
 
-        <java classname="javax.security.jacc.TestPCF" fork="yes"
+        <java classname="jakarta.security.jacc.TestPCF" fork="yes"
             classpath="${s1astest.classpath}">
             <jvmarg value="-DAPS_HOME=${env.APS_HOME}"/>
             <jvmarg value="${ISPCF}"/>
@@ -116,21 +116,21 @@
     </target>
 
     <target name="run-ejbtests" depends="init-common">
-        <java classname="javax.security.jacc.TestEJBPerms" fork="yes"
+        <java classname="jakarta.security.jacc.TestEJBPerms" fork="yes"
             classpath="${s1astest.classpath}">
             <jvmarg value="-Ddebug=${debug}"/>
         </java>
     </target>
 
     <target name="run-urltests" depends="init-common">
-        <java classname="javax.security.jacc.TestURLPattern" fork="yes"
+        <java classname="jakarta.security.jacc.TestURLPattern" fork="yes"
             classpath="${s1astest.classpath}"/>
-        <java classname="javax.security.jacc.TestURLPatternSpec" fork="yes"
+        <java classname="jakarta.security.jacc.TestURLPatternSpec" fork="yes"
             classpath="${s1astest.classpath}"/>
     </target>
 
     <target name="run-webtests" depends="init-common">
-        <java classname="javax.security.jacc.TestWebPerms" fork="yes"
+        <java classname="jakarta.security.jacc.TestWebPerms" fork="yes"
             classpath="${s1astest.classpath}">
             <jvmarg value="-Ddebug=${debug}"/>
         </java>
diff --git a/appserver/tests/appserv-tests/devtests/security/jaccApi/prog-auth/build.xml b/appserver/tests/appserv-tests/devtests/security/jaccApi/prog-auth/build.xml
index ea284df..75fd865 100644
--- a/appserver/tests/appserv-tests/devtests/security/jaccApi/prog-auth/build.xml
+++ b/appserver/tests/appserv-tests/devtests/security/jaccApi/prog-auth/build.xml
@@ -39,6 +39,7 @@
     <target name="all" depends="runMaven"/>
     <target name="runMaven">
       <artifact:mvn mavenHome="${env.M2_HOME}" fork="true">
+        <jvmarg value="-Dglassfish.version=${env.GF_VERSION}" />
         <jvmarg value="-Dmaven.multiModuleProjectDirectory"/>
         <jvmarg value="-Dmaven.javadoc.skip=true" />
         <arg value="clean"/>
diff --git a/appserver/tests/appserv-tests/devtests/security/jaccApi/prog-auth/common/src/main/java/org/glassfish/jaccApi/common/ArquillianBase.java b/appserver/tests/appserv-tests/devtests/security/jaccApi/prog-auth/common/src/main/java/org/glassfish/jaccApi/common/ArquillianBase.java
index 9da9e9c..de07c87 100644
--- a/appserver/tests/appserv-tests/devtests/security/jaccApi/prog-auth/common/src/main/java/org/glassfish/jaccApi/common/ArquillianBase.java
+++ b/appserver/tests/appserv-tests/devtests/security/jaccApi/prog-auth/common/src/main/java/org/glassfish/jaccApi/common/ArquillianBase.java
@@ -31,25 +31,16 @@
 import org.jboss.shrinkwrap.api.Archive;
 import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
 import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.shrinkwrap.api.importer.ZipImporter;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
-import static org.jboss.shrinkwrap.api.ShrinkWrap.create;
-
-import java.io.File;
-
-import org.jboss.shrinkwrap.api.importer.ZipImporter;
-import org.jboss.shrinkwrap.api.spec.WebArchive;
 
 import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
 import com.gargoylesoftware.htmlunit.WebClient;
 
-/**
- *
- *
- */
 public class ArquillianBase {
 
     private static final String WEBAPP_SRC = "src/main/webapp";
diff --git a/appserver/tests/appserv-tests/devtests/security/jaccApi/prog-auth/pom.xml b/appserver/tests/appserv-tests/devtests/security/jaccApi/prog-auth/pom.xml
index a631763..20600ad 100644
--- a/appserver/tests/appserv-tests/devtests/security/jaccApi/prog-auth/pom.xml
+++ b/appserver/tests/appserv-tests/devtests/security/jaccApi/prog-auth/pom.xml
@@ -21,15 +21,16 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.glassfish.jaccApi.test</groupId>
     <artifactId>prog-auth</artifactId>
-    <version>6.2.6-SNAPSHOT</version>
     <packaging>pom</packaging>
 
+    <parent>
+        <groupId>org.glassfish.main.tests</groupId>
+        <artifactId>ant-tests</artifactId>
+        <version>6.2.6-SNAPSHOT</version>
+        <relativePath>../../../..</relativePath>
+    </parent>
+
     <name>Programmatic authentication with Jakarta Authorization api</name>
-    <properties>
-        <glassfish.version>5.0</glassfish.version>
-        <maven.compiler.source>11</maven.compiler.source>
-        <maven.compiler.target>11</maven.compiler.target>
-    </properties>
 
     <modules>
         <module>common</module>
@@ -40,7 +41,7 @@
             <dependency>
                 <groupId>org.jboss.arquillian</groupId>
                 <artifactId>arquillian-bom</artifactId>
-                <version>1.3.0.Final</version>
+                <version>1.6.0.Final</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
@@ -64,13 +65,13 @@
         <dependency>
             <groupId>net.sourceforge.htmlunit</groupId>
             <artifactId>htmlunit</artifactId>
-            <version>2.29</version>
+            <version>2.58.0</version>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>javax</groupId>
-            <artifactId>javaee-api</artifactId>
-            <version>7.0</version>
+            <groupId>jakarta.platform</groupId>
+            <artifactId>jakarta.jakartaee-api</artifactId>
+            <version>9.1.0</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
@@ -92,7 +93,6 @@
         <plugins>
            <plugin>
               <artifactId>maven-failsafe-plugin</artifactId>
-              <version>2.20</version>
               <executions>
                 <execution>
                   <goals>
diff --git a/appserver/tests/appserv-tests/devtests/security/jaccmr8/client/Client.java b/appserver/tests/appserv-tests/devtests/security/jaccmr8/client/Client.java
index 0e02126..2e99779 100644
--- a/appserver/tests/appserv-tests/devtests/security/jaccmr8/client/Client.java
+++ b/appserver/tests/appserv-tests/devtests/security/jaccmr8/client/Client.java
@@ -18,6 +18,7 @@
 
 import java.net.*;
 import java.io.*;
+import java.util.Base64;
 import java.util.Enumeration;
 import java.util.Hashtable;
 
@@ -442,15 +443,14 @@
                 if ((user != null) && (user.length() > 0)) {
                         // Add BASIC header for authentication
                         String auth =  user + ":" + password;
-                        String authEncoded = new sun.misc.BASE64Encoder().encode(auth.getBytes());
+                        String authEncoded = Base64.getEncoder().encodeToString(auth.getBytes());
                         c1.setRequestProperty("Authorization", "Basic " + authEncoded);
                 }
                 c1.setDoOutput(true);
                 c1.setUseCaches(false);
 
                 // get the output stream to POST to.
-                DataOutputStream out;
-                out = new DataOutputStream(c1.getOutputStream());
+                DataOutputStream out = new DataOutputStream(c1.getOutputStream());
                 String content = "";
 
                 // Create a single String value to be POSTED from the parameters passed
diff --git a/appserver/tests/appserv-tests/devtests/security/jdbcrealm/build.xml b/appserver/tests/appserv-tests/devtests/security/jdbcrealm/build.xml
index ec94262..98ec09c 100644
--- a/appserver/tests/appserv-tests/devtests/security/jdbcrealm/build.xml
+++ b/appserver/tests/appserv-tests/devtests/security/jdbcrealm/build.xml
@@ -34,172 +34,171 @@
    &commonSecurity;
    &testProperties;
 
-   <property file="./config.properties"/>
+   <property file="./config.properties" />
 
-   <target name="all" depends="display-header">
-           <antcall target="setup"/>
-           <antcall target="build"/>
-           <antcall target="deploy"/>
-           <antcall target="run"/>
-           <antcall target="undeploy"/>
-           <antcall target="unsetup"/>
-   </target>
+  <target name="all" depends="display-header">
+    <antcall target="setup" />
+    <antcall target="build" />
+    <antcall target="deploy" />
+    <antcall target="run" />
+    <antcall target="undeploy" />
+    <antcall target="unsetup" />
+  </target>
 
-   <target name="all-oracle" depends="display-header">
-           <antcall target="setup-oracle"/>
-           <antcall target="build"/>
-           <antcall target="deploy"/>
-           <antcall target="run"/>
-           <antcall target="undeploy"/>
-           <antcall target="unsetup-oracle"/>
-   </target>
+  <target name="all-oracle" depends="display-header">
+    <antcall target="setup-oracle" />
+    <antcall target="build" />
+    <antcall target="deploy" />
+    <antcall target="run" />
+    <antcall target="undeploy" />
+    <antcall target="unsetup-oracle" />
+  </target>
 
-   <target name="display-header">
-     <echo message="-->Running ${ant.project.name} tests from ${basedir} ..."/>
-    </target>
+  <target name="display-header">
+    <echo message="-->Running ${ant.project.name} tests from ${basedir} ..." />
+  </target>
 
-    <target name="setup" depends="init-common">
-       <antcall target="create-db-schema"/>
-       <antcall target="create-db-usrgrps"/>
-       <antcall target="modify-domain-xml"/>
-    </target>
+  <target name="setup" depends="init-common">
+    <antcall target="create-db-schema" />
+    <antcall target="create-db-usrgrps" />
+    <antcall target="modify-domain-xml" />
+  </target>
 
-    <target name="unsetup" depends="init-common">
-       <antcall target="un-modify-domain-xml"/>
-       <antcall target="delete-db-schema"/>
-    </target>
+  <target name="unsetup" depends="init-common">
+    <antcall target="un-modify-domain-xml" />
+    <antcall target="delete-db-schema" />
+  </target>
 
-    <target name="setup-oracle" depends="init-common">
-       <antcall target="create-db-schema-oracle"/>
-       <antcall target="create-db-usrgrps-oracle"/>
-       <antcall target="modify-domain-xml-oracle"/>
-    </target>
+  <target name="setup-oracle" depends="init-common">
+    <antcall target="create-db-schema-oracle" />
+    <antcall target="create-db-usrgrps-oracle" />
+    <antcall target="modify-domain-xml-oracle" />
+  </target>
 
-    <target name="unsetup-oracle" depends="init-common">
-       <antcall target="un-modify-domain-xml-oracle"/>
-       <antcall target="delete-db-schema-oracle"/>
-    </target>
+  <target name="unsetup-oracle" depends="init-common">
+    <antcall target="un-modify-domain-xml-oracle" />
+    <antcall target="delete-db-schema-oracle" />
+  </target>
 
 
-    <target name="create-db-schema-oracle" depends="init-common">
-      <echo message="Executing sql statement at ${basedir} from ${create.sql.file.oracle} for db.url ${oracle.db.url}"/>
-      <sql
-        driver="${oracle.db.driver}"
-        url="${oracle.db.url}"
-        userid="${oracle.db.user}"
-        password="${oracle.db.user}"
-        src="${create.sql.file.oracle}"
-        onerror="continue"
-        print="yes"
-        output="create-db-schema.out"
-        classpath="${env.APS_HOME}/lib/ojdbc14.jar:${s1astest.classpath}" />
-    </target>
-    <target name="delete-db-schema-oracle" depends="init-common">
-      <echo message="Executing sql statement at ${basedir} from ${delete.sql.file}"
-        level="verbose"/>
-      <sql
-        driver="${oracle.db.driver}"
-        url="${oracle.db.url}"
-        userid="${oracle.db.user}"
-        password="${oracle.db.user}"
-        src="${delete.sql.file}"
-        onerror="continue"
-        print="yes"
-        output="delete-db-schema.out"
-        classpath="${env.APS_HOME}/lib/ojdbc14.jar:${s1astest.classpath}" />
-    </target>
+  <target name="create-db-schema-oracle" depends="init-common">
+    <echo message="Executing sql statement at ${basedir} from ${create.sql.file.oracle} for db.url ${oracle.db.url}"
+    />
+    <sql driver="${oracle.db.driver}"
+         url="${oracle.db.url}"
+         userid="${oracle.db.user}"
+         password="${oracle.db.user}"
+         src="${create.sql.file.oracle}"
+         onerror="continue"
+         print="yes"
+         output="create-db-schema.out"
+         classpath="${env.APS_HOME}/lib/ojdbc14.jar:${s1astest.classpath}"
+    />
+  </target>
+  <target name="delete-db-schema-oracle" depends="init-common">
+    <echo message="Executing sql statement at ${basedir} from ${delete.sql.file}" level="verbose" />
+    <sql driver="${oracle.db.driver}"
+         url="${oracle.db.url}"
+         userid="${oracle.db.user}"
+         password="${oracle.db.user}"
+         src="${delete.sql.file}"
+         onerror="continue"
+         print="yes"
+         output="delete-db-schema.out"
+         classpath="${env.APS_HOME}/lib/ojdbc14.jar:${s1astest.classpath}"
+    />
+  </target>
 
-    <target name="create-db-schema" depends="init-common">
-      <echo message="Executing sql statement at ${basedir} from ${create.sql.file} for db.url ${derby.db.url}"/>
-      <sql
-        driver="${derby.db.driver}"
-        url="${derby.db.url}"
-        userid="${derby.db.user}"
-        password="${derby.db.user}"
-        src="${create.sql.file}"
-        onerror="continue"
-        print="yes"
-        output="create-db-schema.out"
-        classpath="${s1astest.classpath}" />
-    </target>
+  <target name="create-db-schema" depends="init-common">
+    <echo message="Executing sql statement at ${basedir} from ${create.sql.file} for db.url ${derby.db.url}"
+    />
+    <sql driver="${derby.db.driver}"
+         url="${derby.db.url}"
+         userid="${derby.db.user}"
+         password="${derby.db.user}"
+         src="${create.sql.file}"
+         onerror="continue"
+         print="yes"
+         output="create-db-schema.out"
+         classpath="${s1astest.classpath}"
+    />
+  </target>
 
-    <target name="delete-db-schema" depends="init-common">
-      <echo message="Executing sql statement at ${basedir} from ${delete.sql.file}"
-        level="verbose"/>
-      <sql
-        driver="${derby.db.driver}"
-        url="${derby.db.url}"
-        userid="${derby.db.user}"
-        password="${derby.db.user}"
-        src="${delete.sql.file}"
-        onerror="continue"
-        print="yes"
-        output="delete-db-schema.out"
-        classpath="${s1astest.classpath}" />
-    </target>
+  <target name="delete-db-schema" depends="init-common">
+    <echo message="Executing sql statement at ${basedir} from ${delete.sql.file}" level="verbose" />
+    <sql driver="${derby.db.driver}"
+         url="${derby.db.url}"
+         userid="${derby.db.user}"
+         password="${derby.db.user}"
+         src="${delete.sql.file}"
+         onerror="continue"
+         print="yes"
+         output="delete-db-schema.out"
+         classpath="${s1astest.classpath}"
+    />
+  </target>
 
-    <target name="create-db-usrgrps" depends="init-common">
-      <antcall target="compile-common">
-         <param name="src" value="util"/>
-      </antcall>
-      <java classname="com.sun.devtests.security.jdbcrealm.PopulateDB" fork="true">
-        <classpath>
-                 <pathelement path="${build.classes.dir}:${s1astest.classpath}"/>
-        </classpath>
-        <arg value="-url"/>
-        <arg value="${derby.db.url}"/>
-        <arg value="-dbDriver"/>
-        <arg value="${derby.db.driver}"/>
-        <arg value="-username"/>
-        <arg value="${derby.db.user}"/>
-        <arg value="-password"/>
-        <arg value="${derby.db.pass}"/>
-      </java>
-    </target>
+  <target name="create-db-usrgrps" depends="init-common">
+    <antcall target="compile-common">
+      <param name="src" value="util" />
+    </antcall>
+    <java classname="com.sun.devtests.security.jdbcrealm.PopulateDB" fork="true">
+      <classpath>
+        <pathelement path="${build.classes.dir}:${s1astest.classpath}" />
+      </classpath>
+      <arg value="-url" />
+      <arg value="${derby.db.url}" />
+      <arg value="-dbDriver" />
+      <arg value="${derby.db.driver}" />
+      <arg value="-username" />
+      <arg value="${derby.db.user}" />
+      <arg value="-password" />
+      <arg value="${derby.db.pass}" />
+    </java>
+  </target>
 
-    <target name="create-db-usrgrps-oracle" depends="init-common">
-      <java classname="com.sun.devtests.security.jdbcrealm.PopulateDB" fork="true">
-        <classpath>
-                 <pathelement path="${env.APS_HOME}/lib/ojdbc14.jar:${build.classes.dir}:${s1astest.classpath}"/>
-        </classpath>
-        <arg value="-url"/>
-        <arg value="${oracle.db.url}"/>
-        <arg value="-dbDriver"/>
-        <arg value="${oracle.db.driver}"/>
-        <arg value="-username"/>
-        <arg value="${oracle.db.user}"/>
-        <arg value="-password"/>
-        <arg value="${oracle.db.pass}"/>
-        <arg value="-verbose"/>
-      </java>
-    </target>
+  <target name="create-db-usrgrps-oracle" depends="init-common">
+    <java classname="com.sun.devtests.security.jdbcrealm.PopulateDB" fork="true">
+      <classpath>
+        <pathelement path="${env.APS_HOME}/lib/ojdbc14.jar:${build.classes.dir}:${s1astest.classpath}"
+        />
+      </classpath>
+      <arg value="-url" />
+      <arg value="${oracle.db.url}" />
+      <arg value="-dbDriver" />
+      <arg value="${oracle.db.driver}" />
+      <arg value="-username" />
+      <arg value="${oracle.db.user}" />
+      <arg value="-password" />
+      <arg value="${oracle.db.pass}" />
+      <arg value="-verbose" />
+    </java>
+  </target>
 
-    <target name="modify-domain-xml" depends="init-common">
-       <antcall target="create-jdbcrealm-connection-pool">
-           <param name="db.datasource.classname"
-                  value="${derby.db.datasource.classname}"/>
-           <param name="db.port" value="${derby.db.port}"/>
-           <param name="db.host" value="${derby.db.host}"/>
-           <param name="db.name" value="${derby.db.name}"/>
-           <param name="db.poolname" value="${derby.db.poolname}"/>
-           <param name="db.connection-attributes"
-                  value="connectionAttributes=;create\=true"/>
-       </antcall>
-       <antcall target="create-jdbcrealm-resource">
-         <param name="db.poolname" value="${derby.db.poolname}"/>
-         <param name="db.jndiname" value="${derby.db.jndiname}"/>
-       </antcall>
-       <antcall target="create-auth-jdbcrealm">
-           <param name="db.poolname" value="${derby.db.poolname}"/>
-           <param name="db.jndiname" value="${derby.db.jndiname}"/>
-           <param name="db.user" value="${derby.db.user}"/>
-           <param name="db.pass" value="${derby.db.pass}"/>
-       </antcall>
-    </target>
+  <target name="modify-domain-xml" depends="init-common">
+    <antcall target="create-jdbcrealm-connection-pool">
+      <param name="db.datasource.classname" value="${derby.db.datasource.classname}" />
+      <param name="db.port" value="${derby.db.port}" />
+      <param name="db.host" value="${derby.db.host}" />
+      <param name="db.name" value="${derby.db.name}" />
+      <param name="db.poolname" value="${derby.db.poolname}" />
+      <param name="db.connection-attributes" value="connectionAttributes=;create\=true" />
+    </antcall>
+    <antcall target="create-jdbcrealm-resource">
+      <param name="db.poolname" value="${derby.db.poolname}" />
+      <param name="db.jndiname" value="${derby.db.jndiname}" />
+    </antcall>
+    <antcall target="create-auth-jdbcrealm">
+      <param name="db.poolname" value="${derby.db.poolname}" />
+      <param name="db.jndiname" value="${derby.db.jndiname}" />
+      <param name="db.user" value="${derby.db.user}" />
+      <param name="db.pass" value="${derby.db.pass}" />
+    </antcall>
+  </target>
 
-    <target name="modify-domain-xml-oracle" depends="init-common">
+  <target name="modify-domain-xml-oracle" depends="init-common">
 
-<!--
+    <!--
        <antcall target="create-jdbcrealm-connection-pool">
            <param name="db.datasource.classname"
                   value="${oracle.db.datasource.classname}"/>
@@ -210,724 +209,727 @@
            <param name="db.connection-attributes" value=""/>
        </antcall>
 -->
-       <exec executable="${ASADMIN}">
-         <arg line="create-jdbc-connection-pool"/>
-         <arg line="${as.props} --target=${appserver.instance.name}"/>
-         <arg line="--datasourceclassname com.sun.sql.jdbcx.oracle.OracleDataSource"/>
-         <arg line="--property"/>
-         <arg value="PortNumber=${oracle.db.port}:serverName=${oracle.db.host}:SID=${oracle.db.SID}"/>
-         <arg line="${oracle.db.poolname}"/>
-       </exec>
+    <exec executable="${ASADMIN}">
+      <arg line="create-jdbc-connection-pool" />
+      <arg line="${as.props} --target=${appserver.instance.name}" />
+      <arg line="--datasourceclassname com.sun.sql.jdbcx.oracle.OracleDataSource" />
+      <arg line="--property" />
+      <arg value="PortNumber=${oracle.db.port}:serverName=${oracle.db.host}:SID=${oracle.db.SID}" />
+      <arg line="${oracle.db.poolname}" />
+    </exec>
 
-       <antcall target="create-jdbcrealm-resource">
-         <param name="db.poolname" value="${oracle.db.poolname}"/>
-         <param name="db.jndiname" value="${oracle.db.jndiname}"/>
-       </antcall>
+    <antcall target="create-jdbcrealm-resource">
+      <param name="db.poolname" value="${oracle.db.poolname}" />
+      <param name="db.jndiname" value="${oracle.db.jndiname}" />
+    </antcall>
 
-       <antcall target="create-auth-jdbcrealm">
-           <param name="db.poolname" value="${oracle.db.poolname}"/>
-           <param name="db.jndiname" value="${oracle.db.jndiname}"/>
-           <param name="db.user" value="${oracle.db.user}"/>
-<!--           <param name="db.pass" value="${oracle.db.pass}"/> -->
-           <param name="db.pass" value="${oracle.db.alias-pass}"/>
-       </antcall>
+    <antcall target="create-auth-jdbcrealm">
+      <param name="db.poolname" value="${oracle.db.poolname}" />
+      <param name="db.jndiname" value="${oracle.db.jndiname}" />
+      <param name="db.user" value="${oracle.db.user}" />
+      <!--           <param name="db.pass" value="${oracle.db.pass}"/> -->
+      <param name="db.pass" value="${oracle.db.alias-pass}" />
+    </antcall>
 
-    </target>
+  </target>
 
-    <target name="un-modify-domain-xml" depends="init-common">
-       <antcall target="delete-auth-jdbcrealm"/>
-       <antcall target="delete-jdbcrealm-resource">
-           <param name="db.jndiname" value="${derby.db.jndiname}"/>
-       </antcall>
-       <antcall target="delete-jdbcrealm-connection-pool">
-           <param name="db.poolname" value="${derby.db.poolname}"/>
-       </antcall>
-    </target>
+  <target name="un-modify-domain-xml" depends="init-common">
+    <antcall target="delete-auth-jdbcrealm" />
+    <antcall target="delete-jdbcrealm-resource">
+      <param name="db.jndiname" value="${derby.db.jndiname}" />
+    </antcall>
+    <antcall target="delete-jdbcrealm-connection-pool">
+      <param name="db.poolname" value="${derby.db.poolname}" />
+    </antcall>
+  </target>
 
-    <target name="un-modify-domain-xml-oracle" depends="init-common">
-       <antcall target="delete-auth-jdbcrealm"/>
-       <antcall target="delete-jdbcrealm-resource">
-           <param name="db.jndiname" value="${oracle.db.jndiname}"/>
-       </antcall>
-       <antcall target="delete-jdbcrealm-connection-pool">
-           <param name="db.poolname" value="${oracle.db.poolname}"/>
-       </antcall>
-    </target>
+  <target name="un-modify-domain-xml-oracle" depends="init-common">
+    <antcall target="delete-auth-jdbcrealm" />
+    <antcall target="delete-jdbcrealm-resource">
+      <param name="db.jndiname" value="${oracle.db.jndiname}" />
+    </antcall>
+    <antcall target="delete-jdbcrealm-connection-pool">
+      <param name="db.poolname" value="${oracle.db.poolname}" />
+    </antcall>
+  </target>
 
 
-    <target name="create-jdbcrealm-resource" depends="init-common">
-     <exec executable="${ASADMIN}">
-       <arg line="create-jdbc-resource"/>
-       <arg line="${as.props} --target=${appserver.instance.name}"/>
-       <arg line="--connectionpoolid ${db.poolname}"/>
-       <arg line="${db.jndiname}"/>
-     </exec>
-    </target>
+  <target name="create-jdbcrealm-resource" depends="init-common">
+    <exec executable="${ASADMIN}">
+      <arg line="create-jdbc-resource" />
+      <arg line="${as.props} --target=${appserver.instance.name}" />
+      <arg line="--connectionpoolid ${db.poolname}" />
+      <arg line="${db.jndiname}" />
+    </exec>
+  </target>
 
-    <target name="delete-jdbcrealm-resource" depends="init-common">
-     <exec executable="${ASADMIN}">
-       <arg line="delete-jdbc-resource"/>
-       <arg line="${as.props} --target=${appserver.instance.name}"/>
-       <arg line="${db.jndiname}"/>
-     </exec>
-    </target>
+  <target name="delete-jdbcrealm-resource" depends="init-common">
+    <exec executable="${ASADMIN}">
+      <arg line="delete-jdbc-resource" />
+      <arg line="${as.props} --target=${appserver.instance.name}" />
+      <arg line="${db.jndiname}" />
+    </exec>
+  </target>
 
-    <target name="create-jdbcrealm-connection-pool" depends="init-common">
-     <exec executable="${ASADMIN}">
-       <arg line="create-jdbc-connection-pool"/>
-       <arg line="${as.props} --target=${appserver.instance.name}"/>
-       <arg line="--datasourceclassname ${db.datasource.classname}"/>
-       <arg line="--property"/>
-       <arg value="PortNumber=${db.port}:serverName=${db.host}:DatabaseName=${db.name}:${db.connection-attributes}"/>
-       <arg line="${db.poolname}"/>
-     </exec>
-    </target>
+  <target name="create-jdbcrealm-connection-pool" depends="init-common">
+    <exec executable="${ASADMIN}">
+      <arg line="create-jdbc-connection-pool" />
+      <arg line="${as.props} --target=${appserver.instance.name}" />
+      <arg line="--datasourceclassname ${db.datasource.classname}" />
+      <arg line="--property" />
+      <arg value="PortNumber=${db.port}:serverName=${db.host}:DatabaseName=${db.name}:${db.connection-attributes}"
+      />
+      <arg line="${db.poolname}" />
+    </exec>
+  </target>
 
-    <target name="delete-jdbcrealm-connection-pool" depends="init-common">
-     <exec executable="${ASADMIN}">
-       <arg line="delete-jdbc-connection-pool"/>
-       <arg line="${as.props} --target=${appserver.instance.name}"/>
-       <arg line="${db.poolname}"/>
-     </exec>
-    </target>
+  <target name="delete-jdbcrealm-connection-pool" depends="init-common">
+    <exec executable="${ASADMIN}">
+      <arg line="delete-jdbc-connection-pool" />
+      <arg line="${as.props} --target=${appserver.instance.name}" />
+      <arg line="${db.poolname}" />
+    </exec>
+  </target>
 
-    <target name="create-auth-jdbcrealm" depends="init-common">
+  <target name="create-auth-jdbcrealm" depends="init-common">
 
-          <antcall target="create-custom-auth-realm">
-            <param name="realmname" value="JDBCRealm_CLEAR"/>
-                <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm"/>
-                <param name="realmproperties" value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:user-table=USER_TABLE:digest-algorithm=NONE"/>
-      </antcall>
+    <antcall target="create-custom-auth-realm">
+      <param name="realmname" value="JDBCRealm_CLEAR" />
+      <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" />
+      <param name="realmproperties"
+             value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:user-table=USER_TABLE:digest-algorithm=NONE"
+      />
+    </antcall>
 
-          <antcall target="create-custom-auth-realm">
-            <param name="realmname" value="JDBCRealm_CLEAR_BASE64"/>
-                <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm"/>
-                <param name="realmproperties" value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:user-table=USER_TABLE_BASE64:digest-algorithm=NONE:encoding=BASE64"/>
-      </antcall>
+    <antcall target="create-custom-auth-realm">
+      <param name="realmname" value="JDBCRealm_CLEAR_BASE64" />
+      <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" />
+      <param name="realmproperties"
+             value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:user-table=USER_TABLE_BASE64:digest-algorithm=NONE:encoding=BASE64"
+      />
+    </antcall>
 
-          <antcall target="create-custom-auth-realm">
-            <param name="realmname" value="JDBCRealm_CLEAR_HEX"/>
-                <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm"/>
-                <param name="realmproperties" value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:user-table=USER_TABLE_HEX:digest-algorithm=NONE:encoding=HEX"/>
-      </antcall>
+    <antcall target="create-custom-auth-realm">
+      <param name="realmname" value="JDBCRealm_CLEAR_HEX" />
+      <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" />
+      <param name="realmproperties"
+             value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:user-table=USER_TABLE_HEX:digest-algorithm=NONE:encoding=HEX"
+      />
+    </antcall>
 
 
 
 
-          <antcall target="create-custom-auth-realm">
-            <param name="realmname" value="JDBCRealm_MD2_BASE64"/>
-                <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm"/>
-                <param name="realmproperties" value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:user-table=USER_TABLE_MD2_BASE64:digest-algorithm=MD2:encoding=BASE64"/>
-      </antcall>
+    <antcall target="create-custom-auth-realm">
+      <param name="realmname" value="JDBCRealm_MD2_BASE64" />
+      <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" />
+      <param name="realmproperties"
+             value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:user-table=USER_TABLE_MD2_BASE64:digest-algorithm=MD2:encoding=BASE64"
+      />
+    </antcall>
 
-          <antcall target="create-custom-auth-realm">
-            <param name="realmname" value="JDBCRealm_MD5_BASE64"/>
-                <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm"/>
-                <param name="realmproperties" value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:user-table=USER_TABLE_MD5_BASE64:digest-algorithm=MD5:encoding=BASE64"/>
-      </antcall>
+    <antcall target="create-custom-auth-realm">
+      <param name="realmname" value="JDBCRealm_MD5_BASE64" />
+      <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" />
+      <param name="realmproperties"
+             value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:user-table=USER_TABLE_MD5_BASE64:digest-algorithm=MD5:encoding=BASE64"
+      />
+    </antcall>
 
-          <antcall target="create-custom-auth-realm">
-            <param name="realmname" value="JDBCRealm_SHA_BASE64"/>
-                <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm"/>
-                <param name="realmproperties" value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:user-table=USER_TABLE_SHA_BASE64:digest-algorithm=SHA:encoding=BASE64"/>
-      </antcall>
+    <antcall target="create-custom-auth-realm">
+      <param name="realmname" value="JDBCRealm_SHA_BASE64" />
+      <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" />
+      <param name="realmproperties"
+             value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:user-table=USER_TABLE_SHA_BASE64:digest-algorithm=SHA:encoding=BASE64"
+      />
+    </antcall>
 
-          <antcall target="create-custom-auth-realm">
-            <param name="realmname" value="JDBCRealm_SHA256_BASE64"/>
-                <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm"/>
-                <param name="realmproperties" value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:user-table=USER_TABLE_SHA256_BASE64:digest-algorithm=SHA-256:encoding=BASE64"/>
-      </antcall>
+    <antcall target="create-custom-auth-realm">
+      <param name="realmname" value="JDBCRealm_SHA256_BASE64" />
+      <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" />
+      <param name="realmproperties"
+             value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:user-table=USER_TABLE_SHA256_BASE64:digest-algorithm=SHA-256:encoding=BASE64"
+      />
+    </antcall>
 
-          <antcall target="create-custom-auth-realm">
-            <param name="realmname" value="JDBCRealm_SHA384_BASE64"/>
-                <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm"/>
-                <param name="realmproperties" value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:encoding=BASE64:user-table=USER_TABLE_SHA384_BASE64:digest-algorithm=SHA-384"/>
-      </antcall>
+    <antcall target="create-custom-auth-realm">
+      <param name="realmname" value="JDBCRealm_SHA384_BASE64" />
+      <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" />
+      <param name="realmproperties"
+             value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:encoding=BASE64:user-table=USER_TABLE_SHA384_BASE64:digest-algorithm=SHA-384"
+      />
+    </antcall>
 
-          <antcall target="create-custom-auth-realm">
-            <param name="realmname" value="JDBCRealm_SHA512_BASE64"/>
-                <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm"/>
-                <param name="realmproperties" value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:encoding=BASE64:user-table=USER_TABLE_SHA512_BASE64:digest-algorithm=SHA-512"/>
-      </antcall>
 
 
 
 
-          <antcall target="create-custom-auth-realm">
-            <param name="realmname" value="JDBCRealm_MD2_HEX"/>
-                <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm"/>
-                <param name="realmproperties" value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:encoding=HEX:user-table=USER_TABLE_MD2_HEX:digest-algorithm=MD2"/>
-      </antcall>
+    <antcall target="create-custom-auth-realm">
+      <param name="realmname" value="JDBCRealm_MD2_HEX" />
+      <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" />
+      <param name="realmproperties"
+             value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:encoding=HEX:user-table=USER_TABLE_MD2_HEX:digest-algorithm=MD2"
+      />
+    </antcall>
 
-          <antcall target="create-custom-auth-realm">
-            <param name="realmname" value="JDBCRealm_MD5_HEX"/>
-                <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm"/>
-                <param name="realmproperties" value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:encoding=HEX:user-table=USER_TABLE_MD5_HEX:digest-algorithm=MD5"/>
-      </antcall>
+    <antcall target="create-custom-auth-realm">
+      <param name="realmname" value="JDBCRealm_MD5_HEX" />
+      <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" />
+      <param name="realmproperties"
+             value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:encoding=HEX:user-table=USER_TABLE_MD5_HEX:digest-algorithm=MD5"
+      />
+    </antcall>
 
-          <antcall target="create-custom-auth-realm">
-            <param name="realmname" value="JDBCRealm_SHA_HEX"/>
-                <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm"/>
-                <param name="realmproperties" value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:encoding=HEX:user-table=USER_TABLE_SHA_HEX:digest-algorithm=SHA"/>
-      </antcall>
+    <antcall target="create-custom-auth-realm">
+      <param name="realmname" value="JDBCRealm_SHA_HEX" />
+      <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" />
+      <param name="realmproperties"
+             value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:encoding=HEX:user-table=USER_TABLE_SHA_HEX:digest-algorithm=SHA"
+      />
+    </antcall>
 
-          <antcall target="create-custom-auth-realm">
-            <param name="realmname" value="JDBCRealm_SHA256_HEX"/>
-                <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm"/>
-                <param name="realmproperties" value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:encoding=HEX:user-table=USER_TABLE_SHA256_HEX:digest-algorithm=SHA-256"/>
-      </antcall>
+    <antcall target="create-custom-auth-realm">
+      <param name="realmname" value="JDBCRealm_SHA256_HEX" />
+      <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" />
+      <param name="realmproperties"
+             value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:encoding=HEX:user-table=USER_TABLE_SHA256_HEX:digest-algorithm=SHA-256"
+      />
+    </antcall>
 
-          <antcall target="create-custom-auth-realm">
-            <param name="realmname" value="JDBCRealm_SHA384_HEX"/>
-                <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm"/>
-                <param name="realmproperties" value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:encoding=HEX:user-table=USER_TABLE_SHA384_HEX:digest-algorithm=SHA-384"/>
-      </antcall>
+    <antcall target="create-custom-auth-realm">
+      <param name="realmname" value="JDBCRealm_SHA384_HEX" />
+      <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" />
+      <param name="realmproperties"
+             value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:encoding=HEX:user-table=USER_TABLE_SHA384_HEX:digest-algorithm=SHA-384"
+      />
+    </antcall>
 
-          <antcall target="create-custom-auth-realm">
-            <param name="realmname" value="JDBCRealm_SHA512_HEX"/>
-                <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm"/>
-                <param name="realmproperties" value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:encoding=HEX:user-table=USER_TABLE_SHA512_HEX:digest-algorithm=SHA-512"/>
-      </antcall>
+    <antcall target="create-custom-auth-realm">
+      <param name="realmname" value="JDBCRealm_SHA512_HEX" />
+      <param name="realmclass" value="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" />
+      <param name="realmproperties"
+             value="datasource-jndi=${db.jndiname}:jaas-context=jdbcRealm:db-user=${db.user}:db-password=${db.pass}:user-name-column=USERNAME:password-column=PASSWORD:group-table=GROUP_TABLE:group-name-column=GROUPNAME:encoding=HEX:user-table=USER_TABLE_SHA512_HEX:digest-algorithm=SHA-512"
+      />
+    </antcall>
 
-    </target>
+  </target>
 
-    <target name="delete-auth-jdbcrealm" depends="init-common">
+  <target name="delete-auth-jdbcrealm" depends="init-common">
 
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="delete-auth-realm" />
-            <param name="operand.props" value="JDBCRealm_CLEAR"/>
-        </antcall>
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="delete-auth-realm" />
-            <param name="operand.props" value="JDBCRealm_CLEAR_BASE64"/>
-        </antcall>
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="delete-auth-realm" />
-            <param name="operand.props" value="JDBCRealm_CLEAR_HEX"/>
-        </antcall>
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="delete-auth-realm" />
+      <param name="operand.props" value="JDBCRealm_CLEAR" />
+    </antcall>
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="delete-auth-realm" />
+      <param name="operand.props" value="JDBCRealm_CLEAR_BASE64" />
+    </antcall>
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="delete-auth-realm" />
+      <param name="operand.props" value="JDBCRealm_CLEAR_HEX" />
+    </antcall>
 
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="delete-auth-realm" />
-            <param name="operand.props" value="JDBCRealm_MD2_BASE64"/>
-        </antcall>
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="delete-auth-realm" />
-            <param name="operand.props" value="JDBCRealm_MD5_BASE64"/>
-        </antcall>
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="delete-auth-realm" />
-            <param name="operand.props" value="JDBCRealm_SHA_BASE64"/>
-        </antcall>
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="delete-auth-realm" />
-            <param name="operand.props" value="JDBCRealm_SHA256_BASE64"/>
-        </antcall>
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="delete-auth-realm" />
-            <param name="operand.props" value="JDBCRealm_SHA384_BASE64"/>
-        </antcall>
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="delete-auth-realm" />
-            <param name="operand.props" value="JDBCRealm_SHA512_BASE64"/>
-        </antcall>
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="delete-auth-realm" />
+      <param name="operand.props" value="JDBCRealm_MD2_BASE64" />
+    </antcall>
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="delete-auth-realm" />
+      <param name="operand.props" value="JDBCRealm_MD5_BASE64" />
+    </antcall>
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="delete-auth-realm" />
+      <param name="operand.props" value="JDBCRealm_SHA_BASE64" />
+    </antcall>
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="delete-auth-realm" />
+      <param name="operand.props" value="JDBCRealm_SHA256_BASE64" />
+    </antcall>
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="delete-auth-realm" />
+      <param name="operand.props" value="JDBCRealm_SHA384_BASE64" />
+    </antcall>
 
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="delete-auth-realm" />
-            <param name="operand.props" value="JDBCRealm_MD2_HEX"/>
-        </antcall>
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="delete-auth-realm" />
-            <param name="operand.props" value="JDBCRealm_MD5_HEX"/>
-        </antcall>
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="delete-auth-realm" />
-            <param name="operand.props" value="JDBCRealm_SHA_HEX"/>
-        </antcall>
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="delete-auth-realm" />
-            <param name="operand.props" value="JDBCRealm_SHA256_HEX"/>
-        </antcall>
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="delete-auth-realm" />
-            <param name="operand.props" value="JDBCRealm_SHA384_HEX"/>
-        </antcall>
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="delete-auth-realm" />
-            <param name="operand.props" value="JDBCRealm_SHA512_HEX"/>
-        </antcall>
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="delete-auth-realm" />
+      <param name="operand.props" value="JDBCRealm_MD2_HEX" />
+    </antcall>
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="delete-auth-realm" />
+      <param name="operand.props" value="JDBCRealm_MD5_HEX" />
+    </antcall>
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="delete-auth-realm" />
+      <param name="operand.props" value="JDBCRealm_SHA_HEX" />
+    </antcall>
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="delete-auth-realm" />
+      <param name="operand.props" value="JDBCRealm_SHA256_HEX" />
+    </antcall>
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="delete-auth-realm" />
+      <param name="operand.props" value="JDBCRealm_SHA384_HEX" />
+    </antcall>
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="delete-auth-realm" />
+      <param name="operand.props" value="JDBCRealm_SHA512_HEX" />
+    </antcall>
 
-    </target>
+  </target>
 
-    <target name="create-custom-auth-realm" depends="init-common">
-        <echo message="Creating auth realm ${realmname} ..."/>
-         <exec executable="${ASADMIN}">
-           <arg line="create-auth-realm"/>
-           <arg line="${as.props} --target=${appserver.instance.name}"/>
-           <arg line="--classname ${realmclass}"/>
-           <arg line="--property"/>
-           <arg value="${realmproperties}"/>
-           <arg line="${realmname}"/>
-         </exec>
-    </target>
+  <target name="create-custom-auth-realm" depends="init-common">
+    <echo message="Creating auth realm ${realmname} ..." />
+    <exec executable="${ASADMIN}">
+      <arg line="create-auth-realm" />
+      <arg line="${as.props} --target=${appserver.instance.name}" />
+      <arg line="--classname ${realmclass}" />
+      <arg line="--property" />
+      <arg value="${realmproperties}" />
+      <arg line="${realmname}" />
+    </exec>
+  </target>
 
-    <target name="clean" depends="init-common">
-        <delete dir="${build.classes.dir}"/>
-        <delete dir="${assemble.dir}"/>
-    </target>
+  <target name="clean" depends="init-common">
+    <delete dir="${build.classes.dir}" />
+    <delete dir="${assemble.dir}" />
+  </target>
 
-    <target name="compile" depends="clean">
-        <antcall target="compile-common">
-            <param name="src" value="client"/>
-        </antcall>
-        <antcall target="compile-common">
-            <param name="src" value="web"/>
-        </antcall>
-    </target>
+  <target name="compile" depends="clean">
+    <antcall target="compile-common">
+      <param name="src" value="client" />
+    </antcall>
+    <antcall target="compile-common">
+      <param name="src" value="web" />
+    </antcall>
+  </target>
 
-    <target name="build" depends="compile">
-        <antcall target="custom-build">
-            <param name="jdbc.realm.name" value="JDBCRealm_CLEAR"/>
-            <param name="jdbc.realm.user" value="qwert"/>
-            <param name="appname"         value="jdbc-realm-clear"/>
-        </antcall>
-        <antcall target="custom-build">
-            <param name="jdbc.realm.name" value="JDBCRealm_CLEAR_BASE64"/>
-            <param name="jdbc.realm.user" value="qwertBASE64"/>
-            <param name="appname"         value="jdbc-realm-clear-base64"/>
-        </antcall>
-        <antcall target="custom-build">
-            <param name="jdbc.realm.name" value="JDBCRealm_CLEAR_HEX"/>
-            <param name="jdbc.realm.user" value="qwertHEX"/>
-            <param name="appname"         value="jdbc-realm-clear-hex"/>
-        </antcall>
+  <target name="build" depends="compile">
+    <antcall target="custom-build">
+      <param name="jdbc.realm.name" value="JDBCRealm_CLEAR" />
+      <param name="jdbc.realm.user" value="qwert" />
+      <param name="appname" value="jdbc-realm-clear" />
+    </antcall>
+    <antcall target="custom-build">
+      <param name="jdbc.realm.name" value="JDBCRealm_CLEAR_BASE64" />
+      <param name="jdbc.realm.user" value="qwertBASE64" />
+      <param name="appname" value="jdbc-realm-clear-base64" />
+    </antcall>
+    <antcall target="custom-build">
+      <param name="jdbc.realm.name" value="JDBCRealm_CLEAR_HEX" />
+      <param name="jdbc.realm.user" value="qwertHEX" />
+      <param name="appname" value="jdbc-realm-clear-hex" />
+    </antcall>
 
-        <antcall target="custom-build">
-            <param name="jdbc.realm.name" value="JDBCRealm_MD2_BASE64"/>
-            <param name="jdbc.realm.user" value="qwertMD2BASE64"/>
-            <param name="appname"         value="jdbc-realm-md2-base64"/>
-        </antcall>
-        <antcall target="custom-build">
-            <param name="jdbc.realm.name" value="JDBCRealm_MD5_BASE64"/>
-            <param name="jdbc.realm.user" value="qwertMD5BASE64"/>
-            <param name="appname"         value="jdbc-realm-md5-base64"/>
-        </antcall>
-        <antcall target="custom-build">
-            <param name="jdbc.realm.name" value="JDBCRealm_SHA_BASE64"/>
-            <param name="jdbc.realm.user" value="qwertSHABASE64"/>
-            <param name="appname"         value="jdbc-realm-sha-base64"/>
-        </antcall>
-        <antcall target="custom-build">
-            <param name="jdbc.realm.name" value="JDBCRealm_SHA256_BASE64"/>
-            <param name="jdbc.realm.user" value="qwertSHA256BASE64"/>
-            <param name="appname"         value="jdbc-realm-sha256-base64"/>
-        </antcall>
-        <antcall target="custom-build">
-            <param name="jdbc.realm.name" value="JDBCRealm_SHA384_BASE64"/>
-            <param name="jdbc.realm.user" value="qwertSHA384BASE64"/>
-            <param name="appname"         value="jdbc-realm-sha384-base64"/>
-        </antcall>
-        <antcall target="custom-build">
-            <param name="jdbc.realm.name" value="JDBCRealm_SHA512_BASE64"/>
-            <param name="jdbc.realm.user" value="qwertSHA512BASE64"/>
-            <param name="appname"         value="jdbc-realm-sha512-base64"/>
-        </antcall>
+    <antcall target="custom-build">
+      <param name="jdbc.realm.name" value="JDBCRealm_MD2_BASE64" />
+      <param name="jdbc.realm.user" value="qwertMD2BASE64" />
+      <param name="appname" value="jdbc-realm-md2-base64" />
+    </antcall>
+    <antcall target="custom-build">
+      <param name="jdbc.realm.name" value="JDBCRealm_MD5_BASE64" />
+      <param name="jdbc.realm.user" value="qwertMD5BASE64" />
+      <param name="appname" value="jdbc-realm-md5-base64" />
+    </antcall>
+    <antcall target="custom-build">
+      <param name="jdbc.realm.name" value="JDBCRealm_SHA_BASE64" />
+      <param name="jdbc.realm.user" value="qwertSHABASE64" />
+      <param name="appname" value="jdbc-realm-sha-base64" />
+    </antcall>
+    <antcall target="custom-build">
+      <param name="jdbc.realm.name" value="JDBCRealm_SHA256_BASE64" />
+      <param name="jdbc.realm.user" value="qwertSHA256BASE64" />
+      <param name="appname" value="jdbc-realm-sha256-base64" />
+    </antcall>
+    <antcall target="custom-build">
+      <param name="jdbc.realm.name" value="JDBCRealm_SHA384_BASE64" />
+      <param name="jdbc.realm.user" value="qwertSHA384BASE64" />
+      <param name="appname" value="jdbc-realm-sha384-base64" />
+    </antcall>
 
-
-        <antcall target="custom-build">
-            <param name="jdbc.realm.name" value="JDBCRealm_MD2_HEX"/>
-            <param name="jdbc.realm.user" value="qwertMD2HEX"/>
-            <param name="appname"         value="jdbc-realm-md2-hex"/>
-        </antcall>
-        <antcall target="custom-build">
-            <param name="jdbc.realm.name" value="JDBCRealm_MD5_HEX"/>
-            <param name="jdbc.realm.user" value="qwertMD5HEX"/>
-            <param name="appname"         value="jdbc-realm-md5-hex"/>
-        </antcall>
-        <antcall target="custom-build">
-            <param name="jdbc.realm.name" value="JDBCRealm_SHA_HEX"/>
-            <param name="jdbc.realm.user" value="qwertSHAHEX"/>
-            <param name="appname"         value="jdbc-realm-sha-hex"/>
-        </antcall>
-        <antcall target="custom-build">
-            <param name="jdbc.realm.name" value="JDBCRealm_SHA256_HEX"/>
-            <param name="jdbc.realm.user" value="qwertSHA256HEX"/>
-            <param name="appname"         value="jdbc-realm-sha256-hex"/>
-        </antcall>
-        <antcall target="custom-build">
-            <param name="jdbc.realm.name" value="JDBCRealm_SHA384_HEX"/>
-            <param name="jdbc.realm.user" value="qwertSHA384HEX"/>
-            <param name="appname"         value="jdbc-realm-sha384-hex"/>
-        </antcall>
-        <antcall target="custom-build">
-            <param name="jdbc.realm.name" value="JDBCRealm_SHA512_HEX"/>
-            <param name="jdbc.realm.user" value="qwertSHA512HEX"/>
-            <param name="appname"         value="jdbc-realm-sha512-hex"/>
-        </antcall>
+    <antcall target="custom-build">
+      <param name="jdbc.realm.name" value="JDBCRealm_MD2_HEX" />
+      <param name="jdbc.realm.user" value="qwertMD2HEX" />
+      <param name="appname" value="jdbc-realm-md2-hex" />
+    </antcall>
+    <antcall target="custom-build">
+      <param name="jdbc.realm.name" value="JDBCRealm_MD5_HEX" />
+      <param name="jdbc.realm.user" value="qwertMD5HEX" />
+      <param name="appname" value="jdbc-realm-md5-hex" />
+    </antcall>
+    <antcall target="custom-build">
+      <param name="jdbc.realm.name" value="JDBCRealm_SHA_HEX" />
+      <param name="jdbc.realm.user" value="qwertSHAHEX" />
+      <param name="appname" value="jdbc-realm-sha-hex" />
+    </antcall>
+    <antcall target="custom-build">
+      <param name="jdbc.realm.name" value="JDBCRealm_SHA256_HEX" />
+      <param name="jdbc.realm.user" value="qwertSHA256HEX" />
+      <param name="appname" value="jdbc-realm-sha256-hex" />
+    </antcall>
+    <antcall target="custom-build">
+      <param name="jdbc.realm.name" value="JDBCRealm_SHA384_HEX" />
+      <param name="jdbc.realm.user" value="qwertSHA384HEX" />
+      <param name="appname" value="jdbc-realm-sha384-hex" />
+    </antcall>
+    <antcall target="custom-build">
+      <param name="jdbc.realm.name" value="JDBCRealm_SHA512_HEX" />
+      <param name="jdbc.realm.user" value="qwertSHA512HEX" />
+      <param name="appname" value="jdbc-realm-sha512-hex" />
+    </antcall>
 
 
-    </target>
+  </target>
 
-    <target name="deploy" depends="init-common">
-        <antcall target="deploy-war-common">
-            <param name="contextroot" value="jdbc-realm-clear"/>
-            <param name="appname" value="jdbc-realm-clear"/>
-        </antcall>
-        <antcall target="deploy-war-common">
-            <param name="contextroot" value="jdbc-realm-clear-base64"/>
-            <param name="appname" value="jdbc-realm-clear-base64"/>
-        </antcall>
-        <antcall target="deploy-war-common">
-            <param name="contextroot" value="jdbc-realm-clear-hex"/>
-            <param name="appname" value="jdbc-realm-clear-hex"/>
-        </antcall>
+  <target name="deploy" depends="init-common">
+    <antcall target="deploy-war-common">
+      <param name="contextroot" value="jdbc-realm-clear" />
+      <param name="appname" value="jdbc-realm-clear" />
+    </antcall>
+    <antcall target="deploy-war-common">
+      <param name="contextroot" value="jdbc-realm-clear-base64" />
+      <param name="appname" value="jdbc-realm-clear-base64" />
+    </antcall>
+    <antcall target="deploy-war-common">
+      <param name="contextroot" value="jdbc-realm-clear-hex" />
+      <param name="appname" value="jdbc-realm-clear-hex" />
+    </antcall>
 
-        <antcall target="deploy-war-common">
-            <param name="contextroot" value="jdbc-realm-md2-base64"/>
-            <param name="appname" value="jdbc-realm-md2-base64"/>
-        </antcall>
-        <antcall target="deploy-war-common">
-            <param name="contextroot" value="jdbc-realm-md5-base64"/>
-            <param name="appname" value="jdbc-realm-md5-base64"/>
-        </antcall>
-        <antcall target="deploy-war-common">
-            <param name="contextroot" value="jdbc-realm-sha-base64"/>
-            <param name="appname" value="jdbc-realm-sha-base64"/>
-        </antcall>
-        <antcall target="deploy-war-common">
-            <param name="contextroot" value="jdbc-realm-sha256-base64"/>
-            <param name="appname" value="jdbc-realm-sha256-base64"/>
-        </antcall>
-        <antcall target="deploy-war-common">
-            <param name="contextroot" value="jdbc-realm-sha384-base64"/>
-            <param name="appname" value="jdbc-realm-sha384-base64"/>
-        </antcall>
-        <antcall target="deploy-war-common">
-            <param name="contextroot" value="jdbc-realm-sha512-base64"/>
-            <param name="appname" value="jdbc-realm-sha512-base64"/>
-        </antcall>
+    <antcall target="deploy-war-common">
+      <param name="contextroot" value="jdbc-realm-md2-base64" />
+      <param name="appname" value="jdbc-realm-md2-base64" />
+    </antcall>
+    <antcall target="deploy-war-common">
+      <param name="contextroot" value="jdbc-realm-md5-base64" />
+      <param name="appname" value="jdbc-realm-md5-base64" />
+    </antcall>
+    <antcall target="deploy-war-common">
+      <param name="contextroot" value="jdbc-realm-sha-base64" />
+      <param name="appname" value="jdbc-realm-sha-base64" />
+    </antcall>
+    <antcall target="deploy-war-common">
+      <param name="contextroot" value="jdbc-realm-sha256-base64" />
+      <param name="appname" value="jdbc-realm-sha256-base64" />
+    </antcall>
+    <antcall target="deploy-war-common">
+      <param name="contextroot" value="jdbc-realm-sha384-base64" />
+      <param name="appname" value="jdbc-realm-sha384-base64" />
+    </antcall>
 
-        <antcall target="deploy-war-common">
-            <param name="contextroot" value="jdbc-realm-md2-hex"/>
-            <param name="appname" value="jdbc-realm-md2-hex"/>
-        </antcall>
-        <antcall target="deploy-war-common">
-            <param name="contextroot" value="jdbc-realm-md5-hex"/>
-            <param name="appname" value="jdbc-realm-md5-hex"/>
-        </antcall>
-        <antcall target="deploy-war-common">
-            <param name="contextroot" value="jdbc-realm-sha-hex"/>
-            <param name="appname" value="jdbc-realm-sha-hex"/>
-        </antcall>
-        <antcall target="deploy-war-common">
-            <param name="contextroot" value="jdbc-realm-sha256-hex"/>
-            <param name="appname" value="jdbc-realm-sha256-hex"/>
-        </antcall>
-        <antcall target="deploy-war-common">
-            <param name="contextroot" value="jdbc-realm-sha384-hex"/>
-            <param name="appname" value="jdbc-realm-sha384-hex"/>
-        </antcall>
-        <antcall target="deploy-war-common">
-            <param name="contextroot" value="jdbc-realm-sha512-hex"/>
-            <param name="appname" value="jdbc-realm-sha512-hex"/>
-        </antcall>
+    <antcall target="deploy-war-common">
+      <param name="contextroot" value="jdbc-realm-md2-hex" />
+      <param name="appname" value="jdbc-realm-md2-hex" />
+    </antcall>
+    <antcall target="deploy-war-common">
+      <param name="contextroot" value="jdbc-realm-md5-hex" />
+      <param name="appname" value="jdbc-realm-md5-hex" />
+    </antcall>
+    <antcall target="deploy-war-common">
+      <param name="contextroot" value="jdbc-realm-sha-hex" />
+      <param name="appname" value="jdbc-realm-sha-hex" />
+    </antcall>
+    <antcall target="deploy-war-common">
+      <param name="contextroot" value="jdbc-realm-sha256-hex" />
+      <param name="appname" value="jdbc-realm-sha256-hex" />
+    </antcall>
+    <antcall target="deploy-war-common">
+      <param name="contextroot" value="jdbc-realm-sha384-hex" />
+      <param name="appname" value="jdbc-realm-sha384-hex" />
+    </antcall>
+    <antcall target="deploy-war-common">
+      <param name="contextroot" value="jdbc-realm-sha512-hex" />
+      <param name="appname" value="jdbc-realm-sha512-hex" />
+    </antcall>
 
-    </target>
+  </target>
 
-    <target name="run" depends="init-common">
-        <antcall target="run-positive"/>
-        <antcall target="run-negative"/>
-    </target>
+  <target name="run" depends="init-common">
+    <antcall target="run-positive" />
+    <antcall target="run-negative" />
+  </target>
 
-    <target name="run-positive" depends="init-common">
+  <target name="run-positive" depends="init-common">
 
-        <antcall target="custom-run">
-            <param name="jdbc.realm.pass" value="qwert"/>
-            <param name="jdbc.realm.user" value="qwert"/>
-            <param name="appname"         value="jdbc-realm-clear"/>
-        </antcall>
-        <antcall target="custom-run">
-            <param name="jdbc.realm.pass" value="qwertBASE64"/>
-            <param name="jdbc.realm.user" value="qwertBASE64"/>
-            <param name="appname"         value="jdbc-realm-clear-base64"/>
-        </antcall>
-        <antcall target="custom-run">
-            <param name="jdbc.realm.pass" value="qwertHEX"/>
-            <param name="jdbc.realm.user" value="qwertHEX"/>
-            <param name="appname"         value="jdbc-realm-clear-hex"/>
-        </antcall>
+    <antcall target="custom-run">
+      <param name="jdbc.realm.pass" value="qwert" />
+      <param name="jdbc.realm.user" value="qwert" />
+      <param name="appname" value="jdbc-realm-clear" />
+    </antcall>
+    <antcall target="custom-run">
+      <param name="jdbc.realm.pass" value="qwertBASE64" />
+      <param name="jdbc.realm.user" value="qwertBASE64" />
+      <param name="appname" value="jdbc-realm-clear-base64" />
+    </antcall>
+    <antcall target="custom-run">
+      <param name="jdbc.realm.pass" value="qwertHEX" />
+      <param name="jdbc.realm.user" value="qwertHEX" />
+      <param name="appname" value="jdbc-realm-clear-hex" />
+    </antcall>
 
-        <antcall target="custom-run">
-            <param name="jdbc.realm.pass" value="qwertMD2BASE64"/>
-            <param name="jdbc.realm.user" value="qwertMD2BASE64"/>
-            <param name="appname"         value="jdbc-realm-md2-base64"/>
-        </antcall>
-        <antcall target="custom-run">
-            <param name="jdbc.realm.pass" value="qwertMD5BASE64"/>
-            <param name="jdbc.realm.user" value="qwertMD5BASE64"/>
-            <param name="appname"         value="jdbc-realm-md5-base64"/>
-        </antcall>
-        <antcall target="custom-run">
-            <param name="jdbc.realm.pass" value="qwertSHABASE64"/>
-            <param name="jdbc.realm.user" value="qwertSHABASE64"/>
-            <param name="appname"         value="jdbc-realm-sha-base64"/>
-        </antcall>
-        <antcall target="custom-run">
-            <param name="jdbc.realm.pass" value="qwertSHA256BASE64"/>
-            <param name="jdbc.realm.user" value="qwertSHA256BASE64"/>
-            <param name="appname"         value="jdbc-realm-sha256-base64"/>
-        </antcall>
-        <antcall target="custom-run">
-            <param name="jdbc.realm.pass" value="qwertSHA384BASE64"/>
-            <param name="jdbc.realm.user" value="qwertSHA384BASE64"/>
-            <param name="appname"         value="jdbc-realm-sha384-base64"/>
-        </antcall>
-        <antcall target="custom-run">
-            <param name="jdbc.realm.pass" value="qwertSHA512BASE64"/>
-            <param name="jdbc.realm.user" value="qwertSHA512BASE64"/>
-            <param name="appname"         value="jdbc-realm-sha512-base64"/>
-        </antcall>
+    <antcall target="custom-run">
+      <param name="jdbc.realm.pass" value="qwertMD2BASE64" />
+      <param name="jdbc.realm.user" value="qwertMD2BASE64" />
+      <param name="appname" value="jdbc-realm-md2-base64" />
+    </antcall>
+    <antcall target="custom-run">
+      <param name="jdbc.realm.pass" value="qwertMD5BASE64" />
+      <param name="jdbc.realm.user" value="qwertMD5BASE64" />
+      <param name="appname" value="jdbc-realm-md5-base64" />
+    </antcall>
+    <antcall target="custom-run">
+      <param name="jdbc.realm.pass" value="qwertSHABASE64" />
+      <param name="jdbc.realm.user" value="qwertSHABASE64" />
+      <param name="appname" value="jdbc-realm-sha-base64" />
+    </antcall>
+    <antcall target="custom-run">
+      <param name="jdbc.realm.pass" value="qwertSHA256BASE64" />
+      <param name="jdbc.realm.user" value="qwertSHA256BASE64" />
+      <param name="appname" value="jdbc-realm-sha256-base64" />
+    </antcall>
+    <antcall target="custom-run">
+      <param name="jdbc.realm.pass" value="qwertSHA384BASE64" />
+      <param name="jdbc.realm.user" value="qwertSHA384BASE64" />
+      <param name="appname" value="jdbc-realm-sha384-base64" />
+    </antcall>
 
-        <antcall target="custom-run">
-            <param name="jdbc.realm.pass" value="qwertMD2HEX"/>
-            <param name="jdbc.realm.user" value="qwertMD2HEX"/>
-            <param name="appname"         value="jdbc-realm-md2-hex"/>
-        </antcall>
-        <antcall target="custom-run">
-            <param name="jdbc.realm.pass" value="qwertMD5HEX"/>
-            <param name="jdbc.realm.user" value="qwertMD5HEX"/>
-            <param name="appname"         value="jdbc-realm-md5-hex"/>
-        </antcall>
-        <antcall target="custom-run">
-            <param name="jdbc.realm.pass" value="qwertSHAHEX"/>
-            <param name="jdbc.realm.user" value="qwertSHAHEX"/>
-            <param name="appname"         value="jdbc-realm-sha-hex"/>
-        </antcall>
-        <antcall target="custom-run">
-            <param name="jdbc.realm.pass" value="qwertSHA256HEX"/>
-            <param name="jdbc.realm.user" value="qwertSHA256HEX"/>
-            <param name="appname"         value="jdbc-realm-sha256-hex"/>
-        </antcall>
-        <antcall target="custom-run">
-            <param name="jdbc.realm.pass" value="qwertSHA384HEX"/>
-            <param name="jdbc.realm.user" value="qwertSHA384HEX"/>
-            <param name="appname"         value="jdbc-realm-sha384-hex"/>
-        </antcall>
-        <antcall target="custom-run">
-            <param name="jdbc.realm.pass" value="qwertSHA512HEX"/>
-            <param name="jdbc.realm.user" value="qwertSHA512HEX"/>
-            <param name="appname"         value="jdbc-realm-sha512-hex"/>
-        </antcall>
+    <antcall target="custom-run">
+      <param name="jdbc.realm.pass" value="qwertMD2HEX" />
+      <param name="jdbc.realm.user" value="qwertMD2HEX" />
+      <param name="appname" value="jdbc-realm-md2-hex" />
+    </antcall>
+    <antcall target="custom-run">
+      <param name="jdbc.realm.pass" value="qwertMD5HEX" />
+      <param name="jdbc.realm.user" value="qwertMD5HEX" />
+      <param name="appname" value="jdbc-realm-md5-hex" />
+    </antcall>
+    <antcall target="custom-run">
+      <param name="jdbc.realm.pass" value="qwertSHAHEX" />
+      <param name="jdbc.realm.user" value="qwertSHAHEX" />
+      <param name="appname" value="jdbc-realm-sha-hex" />
+    </antcall>
+    <antcall target="custom-run">
+      <param name="jdbc.realm.pass" value="qwertSHA256HEX" />
+      <param name="jdbc.realm.user" value="qwertSHA256HEX" />
+      <param name="appname" value="jdbc-realm-sha256-hex" />
+    </antcall>
+    <antcall target="custom-run">
+      <param name="jdbc.realm.pass" value="qwertSHA384HEX" />
+      <param name="jdbc.realm.user" value="qwertSHA384HEX" />
+      <param name="appname" value="jdbc-realm-sha384-hex" />
+    </antcall>
+    <antcall target="custom-run">
+      <param name="jdbc.realm.pass" value="qwertSHA512HEX" />
+      <param name="jdbc.realm.user" value="qwertSHA512HEX" />
+      <param name="appname" value="jdbc-realm-sha512-hex" />
+    </antcall>
 
-    </target>
+  </target>
 
-    <target name="run-negative" depends="init-common">
+  <target name="run-negative" depends="init-common">
 
-        <antcall target="custom-neg-run">
-            <param name="jdbc.realm.pass" value="qwert"/>
-            <param name="jdbc.realm.user" value="qwerta"/>
-            <param name="appname"         value="jdbc-realm-clear"/>
-        </antcall>
-        <antcall target="custom-neg-run">
-            <param name="jdbc.realm.pass" value="qwertBASE64"/>
-            <param name="jdbc.realm.user" value="qwertBASE64a"/>
-            <param name="appname"         value="jdbc-realm-clear-base64"/>
-        </antcall>
-        <antcall target="custom-neg-run">
-            <param name="jdbc.realm.pass" value="qwertHEX"/>
-            <param name="jdbc.realm.user" value="qwertHEXa"/>
-            <param name="appname"         value="jdbc-realm-clear-hex"/>
-        </antcall>
+    <antcall target="custom-neg-run">
+      <param name="jdbc.realm.pass" value="qwert" />
+      <param name="jdbc.realm.user" value="qwerta" />
+      <param name="appname" value="jdbc-realm-clear" />
+    </antcall>
+    <antcall target="custom-neg-run">
+      <param name="jdbc.realm.pass" value="qwertBASE64" />
+      <param name="jdbc.realm.user" value="qwertBASE64a" />
+      <param name="appname" value="jdbc-realm-clear-base64" />
+    </antcall>
+    <antcall target="custom-neg-run">
+      <param name="jdbc.realm.pass" value="qwertHEX" />
+      <param name="jdbc.realm.user" value="qwertHEXa" />
+      <param name="appname" value="jdbc-realm-clear-hex" />
+    </antcall>
 
-        <antcall target="custom-neg-run">
-            <param name="jdbc.realm.pass" value="qwertMD2BASE64"/>
-            <param name="jdbc.realm.user" value="qwertMD2BASE64a"/>
-            <param name="appname"         value="jdbc-realm-md2-base64"/>
-        </antcall>
-        <antcall target="custom-neg-run">
-            <param name="jdbc.realm.pass" value="qwertMD5BASE64"/>
-            <param name="jdbc.realm.user" value="qwertMD5BASE64a"/>
-            <param name="appname"         value="jdbc-realm-md5-base64"/>
-        </antcall>
-        <antcall target="custom-neg-run">
-            <param name="jdbc.realm.pass" value="qwertSHABASE64"/>
-            <param name="jdbc.realm.user" value="qwertSHABASE64a"/>
-            <param name="appname"         value="jdbc-realm-sha-base64"/>
-        </antcall>
-        <antcall target="custom-neg-run">
-            <param name="jdbc.realm.pass" value="qwertSHA256BASE64"/>
-            <param name="jdbc.realm.user" value="qwertSHA256BASE64a"/>
-            <param name="appname"         value="jdbc-realm-sha256-base64"/>
-        </antcall>
-        <antcall target="custom-neg-run">
-            <param name="jdbc.realm.pass" value="qwertSHA384BASE64"/>
-            <param name="jdbc.realm.user" value="qwertSHA384BASE64a"/>
-            <param name="appname"         value="jdbc-realm-sha384-base64"/>
-        </antcall>
-        <antcall target="custom-neg-run">
-            <param name="jdbc.realm.pass" value="qwertSHA512BASE64"/>
-            <param name="jdbc.realm.user" value="qwertSHA512BASE64a"/>
-            <param name="appname"         value="jdbc-realm-sha512-base64"/>
-        </antcall>
+    <antcall target="custom-neg-run">
+      <param name="jdbc.realm.pass" value="qwertMD2BASE64" />
+      <param name="jdbc.realm.user" value="qwertMD2BASE64a" />
+      <param name="appname" value="jdbc-realm-md2-base64" />
+    </antcall>
+    <antcall target="custom-neg-run">
+      <param name="jdbc.realm.pass" value="qwertMD5BASE64" />
+      <param name="jdbc.realm.user" value="qwertMD5BASE64a" />
+      <param name="appname" value="jdbc-realm-md5-base64" />
+    </antcall>
+    <antcall target="custom-neg-run">
+      <param name="jdbc.realm.pass" value="qwertSHABASE64" />
+      <param name="jdbc.realm.user" value="qwertSHABASE64a" />
+      <param name="appname" value="jdbc-realm-sha-base64" />
+    </antcall>
+    <antcall target="custom-neg-run">
+      <param name="jdbc.realm.pass" value="qwertSHA256BASE64" />
+      <param name="jdbc.realm.user" value="qwertSHA256BASE64a" />
+      <param name="appname" value="jdbc-realm-sha256-base64" />
+    </antcall>
+    <antcall target="custom-neg-run">
+      <param name="jdbc.realm.pass" value="qwertSHA384BASE64" />
+      <param name="jdbc.realm.user" value="qwertSHA384BASE64a" />
+      <param name="appname" value="jdbc-realm-sha384-base64" />
+    </antcall>
 
-        <antcall target="custom-neg-run">
-            <param name="jdbc.realm.pass" value="qwertMD2HEX"/>
-            <param name="jdbc.realm.user" value="qwertMD2HEXa"/>
-            <param name="appname"         value="jdbc-realm-md2-hex"/>
-        </antcall>
-        <antcall target="custom-neg-run">
-            <param name="jdbc.realm.pass" value="qwertMD5HEX"/>
-            <param name="jdbc.realm.user" value="qwertMD5HEXa"/>
-            <param name="appname"         value="jdbc-realm-md5-hex"/>
-        </antcall>
-        <antcall target="custom-neg-run">
-            <param name="jdbc.realm.pass" value="qwertSHAHEX"/>
-            <param name="jdbc.realm.user" value="qwertSHAHEXa"/>
-            <param name="appname"         value="jdbc-realm-sha-hex"/>
-        </antcall>
-        <antcall target="custom-neg-run">
-            <param name="jdbc.realm.pass" value="qwertSHA256HEX"/>
-            <param name="jdbc.realm.user" value="qwertSHA256HEXa"/>
-            <param name="appname"         value="jdbc-realm-sha256-hex"/>
-        </antcall>
-        <antcall target="custom-neg-run">
-            <param name="jdbc.realm.pass" value="qwertSHA384HEX"/>
-            <param name="jdbc.realm.user" value="qwertSHA384HEXa"/>
-            <param name="appname"         value="jdbc-realm-sha384-hex"/>
-        </antcall>
-        <antcall target="custom-neg-run">
-            <param name="jdbc.realm.pass" value="qwertSHA512HEX"/>
-            <param name="jdbc.realm.user" value="qwertSHA512HEXa"/>
-            <param name="appname"         value="jdbc-realm-sha512-hex"/>
-        </antcall>
+    <antcall target="custom-neg-run">
+      <param name="jdbc.realm.pass" value="qwertMD2HEX" />
+      <param name="jdbc.realm.user" value="qwertMD2HEXa" />
+      <param name="appname" value="jdbc-realm-md2-hex" />
+    </antcall>
+    <antcall target="custom-neg-run">
+      <param name="jdbc.realm.pass" value="qwertMD5HEX" />
+      <param name="jdbc.realm.user" value="qwertMD5HEXa" />
+      <param name="appname" value="jdbc-realm-md5-hex" />
+    </antcall>
+    <antcall target="custom-neg-run">
+      <param name="jdbc.realm.pass" value="qwertSHAHEX" />
+      <param name="jdbc.realm.user" value="qwertSHAHEXa" />
+      <param name="appname" value="jdbc-realm-sha-hex" />
+    </antcall>
+    <antcall target="custom-neg-run">
+      <param name="jdbc.realm.pass" value="qwertSHA256HEX" />
+      <param name="jdbc.realm.user" value="qwertSHA256HEXa" />
+      <param name="appname" value="jdbc-realm-sha256-hex" />
+    </antcall>
+    <antcall target="custom-neg-run">
+      <param name="jdbc.realm.pass" value="qwertSHA384HEX" />
+      <param name="jdbc.realm.user" value="qwertSHA384HEXa" />
+      <param name="appname" value="jdbc-realm-sha384-hex" />
+    </antcall>
+    <antcall target="custom-neg-run">
+      <param name="jdbc.realm.pass" value="qwertSHA512HEX" />
+      <param name="jdbc.realm.user" value="qwertSHA512HEXa" />
+      <param name="appname" value="jdbc-realm-sha512-hex" />
+    </antcall>
 
-    </target>
+  </target>
 
-    <target name="undeploy" depends="init-common">
-        <antcall target="undeploy-war-common">
-            <param name="appname" value="jdbc-realm-clear"/>
-        </antcall>
-        <antcall target="undeploy-war-common">
-            <param name="appname" value="jdbc-realm-clear-base64"/>
-        </antcall>
-        <antcall target="undeploy-war-common">
-            <param name="appname" value="jdbc-realm-clear-hex"/>
-        </antcall>
+  <target name="undeploy" depends="init-common">
+    <antcall target="undeploy-war-common">
+      <param name="appname" value="jdbc-realm-clear" />
+    </antcall>
+    <antcall target="undeploy-war-common">
+      <param name="appname" value="jdbc-realm-clear-base64" />
+    </antcall>
+    <antcall target="undeploy-war-common">
+      <param name="appname" value="jdbc-realm-clear-hex" />
+    </antcall>
 
-        <antcall target="undeploy-war-common">
-            <param name="appname" value="jdbc-realm-md2-base64"/>
-        </antcall>
-        <antcall target="undeploy-war-common">
-            <param name="appname" value="jdbc-realm-md5-base64"/>
-        </antcall>
-        <antcall target="undeploy-war-common">
-            <param name="appname" value="jdbc-realm-sha-base64"/>
-        </antcall>
-        <antcall target="undeploy-war-common">
-            <param name="appname" value="jdbc-realm-sha256-base64"/>
-        </antcall>
-        <antcall target="undeploy-war-common">
-            <param name="appname" value="jdbc-realm-sha384-base64"/>
-        </antcall>
-        <antcall target="undeploy-war-common">
-            <param name="appname" value="jdbc-realm-sha512-base64"/>
-        </antcall>
+    <antcall target="undeploy-war-common">
+      <param name="appname" value="jdbc-realm-md2-base64" />
+    </antcall>
+    <antcall target="undeploy-war-common">
+      <param name="appname" value="jdbc-realm-md5-base64" />
+    </antcall>
+    <antcall target="undeploy-war-common">
+      <param name="appname" value="jdbc-realm-sha-base64" />
+    </antcall>
+    <antcall target="undeploy-war-common">
+      <param name="appname" value="jdbc-realm-sha256-base64" />
+    </antcall>
+    <antcall target="undeploy-war-common">
+      <param name="appname" value="jdbc-realm-sha384-base64" />
+    </antcall>
 
-        <antcall target="undeploy-war-common">
-            <param name="appname" value="jdbc-realm-md2-hex"/>
-        </antcall>
-        <antcall target="undeploy-war-common">
-            <param name="appname" value="jdbc-realm-md5-hex"/>
-        </antcall>
-        <antcall target="undeploy-war-common">
-            <param name="appname" value="jdbc-realm-sha-hex"/>
-        </antcall>
-        <antcall target="undeploy-war-common">
-            <param name="appname" value="jdbc-realm-sha256-hex"/>
-        </antcall>
-        <antcall target="undeploy-war-common">
-            <param name="appname" value="jdbc-realm-sha384-hex"/>
-        </antcall>
-        <antcall target="undeploy-war-common">
-            <param name="appname" value="jdbc-realm-sha512-hex"/>
-        </antcall>
+    <antcall target="undeploy-war-common">
+      <param name="appname" value="jdbc-realm-md2-hex" />
+    </antcall>
+    <antcall target="undeploy-war-common">
+      <param name="appname" value="jdbc-realm-md5-hex" />
+    </antcall>
+    <antcall target="undeploy-war-common">
+      <param name="appname" value="jdbc-realm-sha-hex" />
+    </antcall>
+    <antcall target="undeploy-war-common">
+      <param name="appname" value="jdbc-realm-sha256-hex" />
+    </antcall>
+    <antcall target="undeploy-war-common">
+      <param name="appname" value="jdbc-realm-sha384-hex" />
+    </antcall>
+    <antcall target="undeploy-war-common">
+      <param name="appname" value="jdbc-realm-sha512-hex" />
+    </antcall>
 
-    </target>
+  </target>
 
-    <target name="restart">
-      <antcall target="restart-server-instance-common"/>
-    </target>
+  <target name="restart">
+    <antcall target="restart-server-instance-common" />
+  </target>
 
-    <!-- variables needed by custom-build
+  <!-- variables needed by custom-build
          1. jdbc.realm.name
          2. jdbc.realm.user
          3. appname
     -->
-    <target name="custom-build">
-        <echo message="web.xml is defined as ${web.xml}"/>
+  <target name="custom-build">
+    <echo message="web.xml is defined as ${web.xml}" />
 
-              <copy file="web.xml.template" tofile="${web.xml}" overwrite="true" failonerror="false"/>
-               <replace file="${web.xml}" token="REALM_NAME_HERE" value="${jdbc.realm.name}"/>
-              <copy file="sun-web.xml.template" tofile="${sun-web.xml}" overwrite="true" failonerror="false"/>
-               <replace file="${sun-web.xml}" token="USER_ID_HERE" value="${jdbc.realm.user}"/>
+    <copy file="web.xml.template" tofile="${web.xml}" overwrite="true" failonerror="false" />
+    <replace file="${web.xml}" token="REALM_NAME_HERE" value="${jdbc.realm.name}" />
+    <copy file="sun-web.xml.template"
+          tofile="${sun-web.xml}"
+          overwrite="true"
+          failonerror="false"
+    />
+    <replace file="${sun-web.xml}" token="USER_ID_HERE" value="${jdbc.realm.user}" />
 
-        <antcall target="webclient-war-common">
-          <param name="hasWebclient" value="true"/>
-          <param name="appname" value="${appname}"/>
-        </antcall>
+    <antcall target="webclient-war-common">
+      <param name="hasWebclient" value="true" />
+      <param name="appname" value="${appname}" />
+    </antcall>
 
-            <delete file="${web.xml}"/>
-            <delete file="${sun-web.xml}"/>
+    <delete file="${web.xml}" />
+    <delete file="${sun-web.xml}" />
 
-    </target>
+  </target>
 
-    <!-- variables needed by custom-build
+  <!-- variables needed by custom-build
          1. jdbc.realm.pass
          2. jdbc.realm.user
          3. appname
     -->
-    <target name="custom-neg-run" depends="init-common">
+  <target name="custom-neg-run" depends="init-common">
 
-      <echo message="Testing (NEGATIVE TEST) against URL http://${http.host}:${http.port}/${appname}/TestServlet using username/password ${jdbc.realm.user}/${jdbc.realm.pass}"/>
+    <echo message="Testing (NEGATIVE TEST) against URL http://${http.host}:${http.port}/${appname}/TestServlet using username/password ${jdbc.realm.user}/${jdbc.realm.pass}"
+    />
 
-      <java classname="HttpBasicAuthTest" fork="true">
-        <classpath>
-                 <pathelement path="${build.classes.dir}:${s1astest.classpath}"/>
-        </classpath>
-        <arg value="-url"/>
-        <arg value="http://${http.host}:${http.port}/${appname}/TestServlet"/>
-        <arg value="-user"/>
-        <arg value="${jdbc.realm.user}"/>
-        <arg value="-pass"/>
-        <arg value="${jdbc.realm.pass}"/>
-        <arg value="-tc"/>
-        <arg value="10"/>
-        <arg value="-lc"/>
-        <arg value="10"/>
-        <arg value="-negative"/>
-      </java>
-    </target>
+    <java classname="HttpBasicAuthTest" fork="true">
+      <classpath>
+        <pathelement path="${build.classes.dir}:${s1astest.classpath}" />
+      </classpath>
+      <arg value="-url" />
+      <arg value="http://${http.host}:${http.port}/${appname}/TestServlet" />
+      <arg value="-user" />
+      <arg value="${jdbc.realm.user}" />
+      <arg value="-pass" />
+      <arg value="${jdbc.realm.pass}" />
+      <arg value="-tc" />
+      <arg value="10" />
+      <arg value="-lc" />
+      <arg value="10" />
+      <arg value="-negative" />
+    </java>
+  </target>
 
 
-    <target name="custom-run" depends="init-common">
+  <target name="custom-run" depends="init-common">
 
-      <echo message="Testing against URL http://${http.host}:${http.port}/${appname}/TestServlet using username/password ${jdbc.realm.user}/${jdbc.realm.pass}"/>
+    <echo message="Testing against URL http://${http.host}:${http.port}/${appname}/TestServlet using username/password ${jdbc.realm.user}/${jdbc.realm.pass}"
+    />
 
-      <java classname="HttpBasicAuthTest" fork="true">
-        <classpath>
-                 <pathelement path="${build.classes.dir}:${s1astest.classpath}"/>
-        </classpath>
-        <arg value="-url"/>
-        <arg value="http://${http.host}:${http.port}/${appname}/TestServlet"/>
-        <arg value="-user"/>
-        <arg value="${jdbc.realm.user}"/>
-        <arg value="-pass"/>
-        <arg value="${jdbc.realm.pass}"/>
-        <arg value="-tc"/>
-        <arg value="10"/>
-        <arg value="-lc"/>
-        <arg value="10"/>
-      </java>
-    </target>
+    <java classname="HttpBasicAuthTest" fork="true">
+      <classpath>
+        <pathelement path="${build.classes.dir}:${s1astest.classpath}" />
+      </classpath>
+      <arg value="-url" />
+      <arg value="http://${http.host}:${http.port}/${appname}/TestServlet" />
+      <arg value="-user" />
+      <arg value="${jdbc.realm.user}" />
+      <arg value="-pass" />
+      <arg value="${jdbc.realm.pass}" />
+      <arg value="-tc" />
+      <arg value="10" />
+      <arg value="-lc" />
+      <arg value="10" />
+    </java>
+  </target>
 
 
 </project>
diff --git a/appserver/tests/appserv-tests/devtests/security/jdbcrealm/client/HttpBasicAuthTest.java b/appserver/tests/appserv-tests/devtests/security/jdbcrealm/client/HttpBasicAuthTest.java
index 13c43dc..361886a 100644
--- a/appserver/tests/appserv-tests/devtests/security/jdbcrealm/client/HttpBasicAuthTest.java
+++ b/appserver/tests/appserv-tests/devtests/security/jdbcrealm/client/HttpBasicAuthTest.java
@@ -16,6 +16,8 @@
 
 import java.io.*;
 import java.net.*;
+import java.util.Base64;
+
 import sun.misc.*;
 
 import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
@@ -162,8 +164,7 @@
         URLConnection uconn = u.openConnection();
 
         String up = username + ":" + password;
-        BASE64Encoder be = new BASE64Encoder();
-        up = new String(be.encode(up.getBytes()));
+        up = Base64.getEncoder().encodeToString(up.getBytes());
 
         uconn.setRequestProperty("authorization", "Basic " + up);
 
diff --git a/appserver/tests/appserv-tests/devtests/security/jdbcrealm/util/PopulateDB.java b/appserver/tests/appserv-tests/devtests/security/jdbcrealm/util/PopulateDB.java
index 78c16b5..8309d41 100644
--- a/appserver/tests/appserv-tests/devtests/security/jdbcrealm/util/PopulateDB.java
+++ b/appserver/tests/appserv-tests/devtests/security/jdbcrealm/util/PopulateDB.java
@@ -17,10 +17,10 @@
 package com.sun.devtests.security.jdbcrealm;
 
 import java.sql.*;
+import java.util.Base64;
+import java.util.Base64.Encoder;
 import java.security.*;
 
-import sun.misc.BASE64Encoder;
-
 public class PopulateDB {
 
     // username/passwords
@@ -190,10 +190,10 @@
         ps.close();
 
         ps = con.prepareStatement(INSERT_USER_STMT_BASE64);
-        BASE64Encoder base64 = new BASE64Encoder();
+        Encoder base64 = Base64.getEncoder();
         for(int i=0; i<users_BASE64.length; i++) {
             ps.setString(1, users_BASE64[i][0]);
-            ps.setString(2, new String(base64.encode(users_BASE64[i][1].getBytes())));
+            ps.setString(2, new String(base64.encodeToString(users_BASE64[i][1].getBytes())));
             ps.executeUpdate();
         }
         ps.close();
@@ -210,7 +210,7 @@
         MessageDigest md2 = MessageDigest.getInstance("MD2");
         for(int i=0; i<users_MD2_BASE64.length; i++) {
             ps.setString(1, users_MD2_BASE64[i][0]);
-            ps.setString(2, base64.encode(md2.digest(users_MD2_BASE64[i][1].getBytes())));
+            ps.setString(2, base64.encodeToString(md2.digest(users_MD2_BASE64[i][1].getBytes())));
             ps.executeUpdate();
             md2.reset();
         }
@@ -220,7 +220,7 @@
         MessageDigest md5 = MessageDigest.getInstance("MD5");
         for(int i=0; i<users_MD5_BASE64.length; i++) {
             ps.setString(1, users_MD5_BASE64[i][0]);
-            ps.setString(2, base64.encode(md5.digest(users_MD5_BASE64[i][1].getBytes())));
+            ps.setString(2, base64.encodeToString(md5.digest(users_MD5_BASE64[i][1].getBytes())));
             ps.executeUpdate();
             md5.reset();
         }
@@ -230,7 +230,7 @@
         MessageDigest sha = MessageDigest.getInstance("SHA");
         for(int i=0; i<users_SHA_BASE64.length; i++) {
             ps.setString(1, users_SHA_BASE64[i][0]);
-            ps.setString(2, base64.encode(sha.digest(users_SHA_BASE64[i][1].getBytes())));
+            ps.setString(2, base64.encodeToString(sha.digest(users_SHA_BASE64[i][1].getBytes())));
             ps.executeUpdate();
             sha.reset();
         }
@@ -240,7 +240,7 @@
         MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
         for(int i=0; i<users_SHA256_BASE64.length; i++) {
             ps.setString(1, users_SHA256_BASE64[i][0]);
-            ps.setString(2, base64.encode(sha256.digest(users_SHA256_BASE64[i][1].getBytes())));
+            ps.setString(2, base64.encodeToString(sha256.digest(users_SHA256_BASE64[i][1].getBytes())));
             ps.executeUpdate();
             sha256.reset();
         }
@@ -250,7 +250,7 @@
         MessageDigest sha384 = MessageDigest.getInstance("SHA-384");
         for(int i=0; i<users_SHA384_BASE64.length; i++) {
             ps.setString(1, users_SHA384_BASE64[i][0]);
-            ps.setString(2, base64.encode(sha384.digest(users_SHA384_BASE64[i][1].getBytes())));
+            ps.setString(2, base64.encodeToString(sha384.digest(users_SHA384_BASE64[i][1].getBytes())));
             ps.executeUpdate();
             sha384.reset();
         }
@@ -260,7 +260,7 @@
         MessageDigest sha512 = MessageDigest.getInstance("SHA-512");
         for(int i=0; i<users_SHA512_BASE64.length; i++) {
             ps.setString(1, users_SHA512_BASE64[i][0]);
-            ps.setString(2, base64.encode(sha512.digest(users_SHA512_BASE64[i][1].getBytes())));
+            ps.setString(2, base64.encodeToString(sha512.digest(users_SHA512_BASE64[i][1].getBytes())));
             ps.executeUpdate();
             sha512.reset();
         }
diff --git a/appserver/tests/appserv-tests/devtests/security/jmac/build.xml b/appserver/tests/appserv-tests/devtests/security/jmac/build.xml
index f8b6ea9..69d55fe 100644
--- a/appserver/tests/appserv-tests/devtests/security/jmac/build.xml
+++ b/appserver/tests/appserv-tests/devtests/security/jmac/build.xml
@@ -32,10 +32,8 @@
     &commonRun;
 
     <target name="all">
-        <!-- Expected output doesn't match. This test used to pass in 5.0
         <ant dir="httpServlet" target="all"/>
-        -->
-        <ant dir="https" target="all"/>
+<!--        <ant dir="https" target="all"/> FAIL, bug in certificate realm processing? -->
         <ant dir="httpServletChallenge" target="all"/>
         <ant dir="httpServletForm" target="all"/>
 
diff --git a/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/build.properties b/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/build.properties
index 8409f65..cdebc37 100644
--- a/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/build.properties
+++ b/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/build.properties
@@ -22,5 +22,5 @@
 <property name="app.type" value="war"/>
 <property name="assemble" value="${build.classes.dir}/archive"/>
 <property name="web.xml" value="descriptor/web.xml"/>
-<property name="sun-web.xml" value="descriptor/sun-web.xml"/>
+<property name="glassfish-web.xml" value="descriptor/glassfish-web.xml"/>
 
diff --git a/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/descriptor/sun-web.xml b/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/descriptor/glassfish-web.xml
similarity index 76%
rename from appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/descriptor/sun-web.xml
rename to appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/descriptor/glassfish-web.xml
index 7b24d54..a895189 100644
--- a/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/descriptor/sun-web.xml
+++ b/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/descriptor/glassfish-web.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 7.0 Servlet 2.3//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_3-0.dtd'>
+<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
 <!--
 
     Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
@@ -18,10 +18,10 @@
 
 -->
 
-<sun-web-app httpservlet-security-provider="httpServletTestAuthModule">
+<glassfish-web-app httpservlet-security-provider="httpServletTestAuthModule">
   <security-role-mapping>
     <role-name>myrole</role-name>
     <group-name>mygroup</group-name>
   </security-role-mapping>
-</sun-web-app>
+</glassfish-web-app>
 
diff --git a/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/docroot/index.jsp b/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/docroot/index.jsp
index ea8e942..d63057e 100644
--- a/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/docroot/index.jsp
+++ b/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/docroot/index.jsp
@@ -20,8 +20,7 @@
 <hr>
 <%
     try {
-        out.println("Hello, " + request.getUserPrincipal() +
-            " from " + request.getAttribute("MY_NAME"));
+        out.println("Hello, " + request.getUserPrincipal() + " from " + request.getAttribute("MY_NAME"));
         out.println("PC = " + request.getAttribute("PC"));
     } catch(Throwable t) {
         out.println("Something wrong: " + t);
diff --git a/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/goldenfiles/output.html b/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/goldenfiles/output.html
index b5e3587..4a47571 100644
--- a/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/goldenfiles/output.html
+++ b/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/goldenfiles/output.html
@@ -1,8 +1,10 @@
+
+
 Hello World from 196 HttpServlet AuthModule Test!
 <hr>
 Hello, shingwai123 from com.sun.s1asdev.security.jmac.httpservlet.HttpServletTestAuthModule
 PC = security-jmac-httpservlet-web/security-jmac-httpservlet-web
 
-
 <hr>
-Adjusted count: 218
+
+Adjusted count: 220
diff --git a/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/src/HttpServletTestAuthModule.java b/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/src/HttpServletTestAuthModule.java
index 002e18e..5e11ae3 100644
--- a/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/src/HttpServletTestAuthModule.java
+++ b/appserver/tests/appserv-tests/devtests/security/jmac/httpServlet/src/HttpServletTestAuthModule.java
@@ -17,6 +17,7 @@
 package com.sun.s1asdev.security.jmac.httpservlet;
 
 import java.io.PrintWriter;
+import java.util.Base64;
 import java.util.Map;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
@@ -35,8 +36,6 @@
 import jakarta.servlet.http.HttpServletResponse;
 
 
-import sun.misc.BASE64Decoder;
-
 public class HttpServletTestAuthModule implements ServerAuthModule {
     private CallbackHandler handler = null;
     private String pc = null;
@@ -75,8 +74,7 @@
             if (authorization != null &&
                     authorization.toLowerCase().startsWith("basic ")) {
                 authorization = authorization.substring(6).trim();
-                BASE64Decoder decoder = new BASE64Decoder();
-                byte[] bs = decoder.decodeBuffer(authorization);
+                byte[] bs = Base64.getDecoder().decode(authorization);
                 String decodedString = new String(bs);
                 int ind = decodedString.indexOf(':');
                 if (ind > 0) {
@@ -94,10 +92,8 @@
 
             char[] pwd = new char[password.length()];
             password.getChars(0, password.length(), pwd, 0);
-            PasswordValidationCallback pwdCallback =
-                new PasswordValidationCallback(clientSubject, username, pwd);
-            CallerPrincipalCallback cpCallback =
-                new CallerPrincipalCallback(clientSubject, username);
+            PasswordValidationCallback pwdCallback = new PasswordValidationCallback(clientSubject, username, pwd);
+            CallerPrincipalCallback cpCallback = new CallerPrincipalCallback(clientSubject, username);
             System.out.println("Subject before invoking callbacks: " + clientSubject);
             handler.handle(new Callback[] { pwdCallback, cpCallback });
             System.out.println("Subject after invoking callbacks: " + clientSubject);
@@ -128,11 +124,9 @@
 
         try {
             System.out.println("SR is called");
-            HttpServletRequest request =
-                (HttpServletRequest)messageInfo.getRequestMessage();
+            HttpServletRequest request = (HttpServletRequest) messageInfo.getRequestMessage();
             request.setAttribute("SR", "true");
-            MyHttpServletResponseWrapper response =
-                (MyHttpServletResponseWrapper)messageInfo.getResponseMessage();
+            MyHttpServletResponseWrapper response = (MyHttpServletResponseWrapper) messageInfo.getResponseMessage();
             int count = response.getAdjustedCount();
             PrintWriter writer = response.getWriter();
             writer.println("\nAdjusted count: " + count);
diff --git a/appserver/tests/appserv-tests/devtests/security/jmac/httpServletChallenge/src/HttpServletChallengeTestAuthModule.java b/appserver/tests/appserv-tests/devtests/security/jmac/httpServletChallenge/src/HttpServletChallengeTestAuthModule.java
index 43aaf4c..f347a91 100644
--- a/appserver/tests/appserv-tests/devtests/security/jmac/httpServletChallenge/src/HttpServletChallengeTestAuthModule.java
+++ b/appserver/tests/appserv-tests/devtests/security/jmac/httpServletChallenge/src/HttpServletChallengeTestAuthModule.java
@@ -16,6 +16,7 @@
 
 package com.sun.s1asdev.security.jmac.httpservletchallenge;
 
+import java.util.Base64;
 import java.util.Map;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
@@ -35,8 +36,6 @@
 import jakarta.servlet.http.HttpServletResponse;
 
 
-import sun.misc.BASE64Decoder;
-
 public class HttpServletChallengeTestAuthModule implements ServerAuthModule {
     private CallbackHandler handler = null;
 
@@ -67,11 +66,9 @@
             HttpServletRequest request =
                 (HttpServletRequest)messageInfo.getRequestMessage();
             String authorization = request.getHeader("authorization");
-            if (authorization != null &&
-                    authorization.toLowerCase().startsWith("basic ")) {
+            if (authorization != null && authorization.toLowerCase().startsWith("basic ")) {
                 authorization = authorization.substring(6).trim();
-                BASE64Decoder decoder = new BASE64Decoder();
-                byte[] bs = decoder.decodeBuffer(authorization);
+                byte[] bs = Base64.getDecoder().decode(authorization);
                 String decodedString = new String(bs);
                 int ind = decodedString.indexOf(':');
                 if (ind > 0) {
@@ -80,8 +77,7 @@
                 }
             }
 
-            HttpServletResponse response =
-                     (HttpServletResponse)messageInfo.getResponseMessage();
+            HttpServletResponse response = (HttpServletResponse) messageInfo.getResponseMessage();
             if (username == null || password == null) {
                 response.setHeader("WWW-Authenticate", "Basic realm=\"default\"");
                 response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
diff --git a/appserver/tests/appserv-tests/devtests/security/jmac/httpServletForm/src/HttpServletFormTestAuthModule.java b/appserver/tests/appserv-tests/devtests/security/jmac/httpServletForm/src/HttpServletFormTestAuthModule.java
index 0e9764e..b09ea53 100644
--- a/appserver/tests/appserv-tests/devtests/security/jmac/httpServletForm/src/HttpServletFormTestAuthModule.java
+++ b/appserver/tests/appserv-tests/devtests/security/jmac/httpServletForm/src/HttpServletFormTestAuthModule.java
@@ -35,8 +35,6 @@
 import jakarta.servlet.http.HttpServletResponse;
 
 
-import sun.misc.BASE64Decoder;
-
 public class HttpServletFormTestAuthModule implements ServerAuthModule {
     private static final String SAVED_REQUEST = "Saved_Request";
     private static final String SAVED_SUBJECT = "Saved_Subject";
diff --git a/appserver/tests/appserv-tests/devtests/security/jmac/https/build.properties b/appserver/tests/appserv-tests/devtests/security/jmac/https/build.properties
index 8cb4c0a..1b71a54 100644
--- a/appserver/tests/appserv-tests/devtests/security/jmac/https/build.properties
+++ b/appserver/tests/appserv-tests/devtests/security/jmac/https/build.properties
@@ -22,5 +22,5 @@
 <property name="app.type" value="war"/>
 <property name="assemble" value="${build.classes.dir}/archive"/>
 <property name="web.xml" value="descriptor/web.xml"/>
-<property name="sun-web.xml" value="descriptor/sun-web.xml"/>
+<property name="glassfish-web.xml" value="descriptor/glassfish-web.xml"/>
 
diff --git a/appserver/tests/appserv-tests/devtests/security/jmac/https/build.xml b/appserver/tests/appserv-tests/devtests/security/jmac/https/build.xml
index 9a3b3d5..5fa5884 100644
--- a/appserver/tests/appserv-tests/devtests/security/jmac/https/build.xml
+++ b/appserver/tests/appserv-tests/devtests/security/jmac/https/build.xml
@@ -93,7 +93,7 @@
 
     <target name="run" depends="init-common, init-security-util">
         <java classname="com.sun.s1asdev.security.jmac.https.WebSSLClient" fork="true">
-            <!-- jvmarg value="-Djavax.net.debug=ssl,handshake,data,trustmanager"/-->
+            <!--jvmarg value="-Djavax.net.debug=all" -->
             <jvmarg value="-Djavax.net.ssl.keyStore=${mykeystore.db.file}"/>
             <jvmarg value="-Djavax.net.ssl.trustStore=${mytruststore.db.file}"/>
             <jvmarg value="-Djavax.net.ssl.keyStorePassword=${ssl.password}"/>
diff --git a/appserver/tests/appserv-tests/devtests/security/jmac/https/descriptor/sun-web.xml b/appserver/tests/appserv-tests/devtests/security/jmac/https/descriptor/glassfish-web.xml
similarity index 78%
rename from appserver/tests/appserv-tests/devtests/security/jmac/https/descriptor/sun-web.xml
rename to appserver/tests/appserv-tests/devtests/security/jmac/https/descriptor/glassfish-web.xml
index d4e01e4..486eda5 100644
--- a/appserver/tests/appserv-tests/devtests/security/jmac/https/descriptor/sun-web.xml
+++ b/appserver/tests/appserv-tests/devtests/security/jmac/https/descriptor/glassfish-web.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 7.0 Servlet 2.3//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_3-0.dtd'>
+<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
 <!--
 
     Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
@@ -18,10 +18,9 @@
 
 -->
 
-<sun-web-app httpservlet-security-provider="httpsTestAuthModule">
+<glassfish-web-app httpservlet-security-provider="httpsTestAuthModule">
   <security-role-mapping>
     <role-name>myrole</role-name>
     <principal-name>CN=SSLTest, OU=Sun Java System Application Server, O=Sun Microsystems, L=Santa Clara, ST=California, C=US</principal-name>
   </security-role-mapping>
-</sun-web-app>
-
+</glassfish-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/security/jmac/https/docroot/index.jsp b/appserver/tests/appserv-tests/devtests/security/jmac/https/docroot/index.jsp
index be4b2d9..f916027 100644
--- a/appserver/tests/appserv-tests/devtests/security/jmac/https/docroot/index.jsp
+++ b/appserver/tests/appserv-tests/devtests/security/jmac/https/docroot/index.jsp
@@ -20,8 +20,7 @@
 <hr>
 <%
     try {
-        out.println("Hello, " + request.getRemoteUser() +" from "
-            + request.getAttribute("MY_NAME"));
+        out.println("Hello, " + request.getRemoteUser() + " from " + request.getAttribute("MY_NAME"));
     } catch(Exception ex) {
         out.println("Something wrong: " + ex);
         ex.printStackTrace();
diff --git a/appserver/tests/appserv-tests/devtests/security/jmac/https/src/HttpsTestAuthModule.java b/appserver/tests/appserv-tests/devtests/security/jmac/https/src/HttpsTestAuthModule.java
index a583cb8..5e79e2d 100644
--- a/appserver/tests/appserv-tests/devtests/security/jmac/https/src/HttpsTestAuthModule.java
+++ b/appserver/tests/appserv-tests/devtests/security/jmac/https/src/HttpsTestAuthModule.java
@@ -59,15 +59,11 @@
 
         X500Principal x500Principal = null;
         try {
-            HttpServletRequest request =
-                    (HttpServletRequest) messageInfo.getRequestMessage();
-            X509Certificate certs[] =
-                    (X509Certificate[]) request.getAttribute(
-                    "jakarta.servlet.request.X509Certificate");
-            if (certs == null || certs.length < 1) {
-                System.out.println("javax...certs is null or empty");
-                certs = (X509Certificate[]) request.getAttribute(
-                        "org.apache.coyote.request.X509Certificate");
+            HttpServletRequest request = (HttpServletRequest) messageInfo.getRequestMessage();
+            X509Certificate certs[] = (X509Certificate[]) request
+                .getAttribute("jakarta.servlet.request.X509Certificate");
+            if (certs == null || certs.length == 0) {
+                System.out.println("jakarta.servlet.request.X509Certificate attribute is null or empty");
             }
             System.out.println("certs: " + certs);
             if (certs != null && certs.length > 0) {
diff --git a/appserver/tests/appserv-tests/devtests/security/jmac/https/src/WebSSLClient.java b/appserver/tests/appserv-tests/devtests/security/jmac/https/src/WebSSLClient.java
index 6acacaf..64b578a 100644
--- a/appserver/tests/appserv-tests/devtests/security/jmac/https/src/WebSSLClient.java
+++ b/appserver/tests/appserv-tests/devtests/security/jmac/https/src/WebSSLClient.java
@@ -25,7 +25,7 @@
 public class WebSSLClient {
 
     private static final String TEST_NAME = "security-jmac-https";
-    private static final String EXPECTED_RESPONSE_PATTERN = "Hello, CN=.* from com.sun.s1asdev.security.jmac.https.HttpsTestAuthModule";
+    private static final Pattern EXPECTED_RESPONSE_PATTERN = Pattern.compile("Hello, CN=.* from com.sun.s1asdev.security.jmac.https.HttpsTestAuthModule");
     private static SimpleReporterAdapter stat = new SimpleReporterAdapter("appserv-tests");
 
     public static void main(String args[]) throws Exception {
@@ -56,22 +56,16 @@
     private static void parseResponse(HttpsURLConnection connection)
             throws Exception {
 
-        BufferedReader in = null;
-
-        try {
-            in = new BufferedReader(new InputStreamReader(
-                    connection.getInputStream()));
-
+        try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
             String line = null;
             String matched = null;
             try {
-                Pattern p = Pattern.compile(EXPECTED_RESPONSE_PATTERN);
                 while ((line = in.readLine()) != null) {
-                    if (p.matcher(line).matches()) {
+                    System.out.println("XXXPORN: " + line);
+                    if (EXPECTED_RESPONSE_PATTERN.matcher(line).matches()) {
                         stat.addStatus(TEST_NAME, stat.PASS);
                         matched = line;
                     }
-                    System.out.println(line);
                 }
             } catch (Exception ex) {
                 ex.printStackTrace();
@@ -83,21 +77,13 @@
                         + ", received: " + matched);
                 stat.addStatus(TEST_NAME, stat.FAIL);
             }
-        } finally {
-            if (in != null) {
-                in.close();
-            }
         }
     }
 
-    private static HttpsURLConnection connect(String urlAddress,
-            SSLSocketFactory ssf)
-            throws Exception {
 
+    private static HttpsURLConnection connect(String urlAddress, SSLSocketFactory ssf) throws Exception {
         URL url = new URL(urlAddress);
-        HttpsURLConnection.setDefaultSSLSocketFactory(ssf);
         HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
-
         connection.setHostnameVerifier(
                 new HostnameVerifier() {
 
@@ -107,7 +93,6 @@
                 });
 
         connection.setDoOutput(true);
-
         return connection;
     }
 }
diff --git a/appserver/tests/appserv-tests/devtests/security/jmac/soap/build.xml b/appserver/tests/appserv-tests/devtests/security/jmac/soap/build.xml
index 9fd418d..1b9e072 100644
--- a/appserver/tests/appserv-tests/devtests/security/jmac/soap/build.xml
+++ b/appserver/tests/appserv-tests/devtests/security/jmac/soap/build.xml
@@ -137,7 +137,8 @@
             <replacefilter token="@PORT@" value="${http.port}"/>
         </replace>
         <javac srcdir="client" destdir="${build.classes.dir}/client"
-            classpath="${env.APS_HOME}/lib/reporter.jar:${env.S1AS_HOME}/lib/j2ee.jar:${env.S1AS_HOME}/lib/webservices-rt.jar:${env.S1AS_HOME}/lib/webservices-tools.jar:${build.classes.dir}/client" debug="on" failonerror="true"/>
+          classpath="${env.APS_HOME}/lib/reporter.jar:${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/modules/webservices-osgi.jar:${build.classes.dir}/client"
+          debug="on" failonerror="true"/>
     </target>
 
     <target name="build-server" depends="compile-server">
diff --git a/appserver/tests/appserv-tests/devtests/security/jmac/soapDefault/build.xml b/appserver/tests/appserv-tests/devtests/security/jmac/soapDefault/build.xml
index fbe0b6a..87c7378 100644
--- a/appserver/tests/appserv-tests/devtests/security/jmac/soapDefault/build.xml
+++ b/appserver/tests/appserv-tests/devtests/security/jmac/soapDefault/build.xml
@@ -152,7 +152,8 @@
             <replacefilter token="@PORT@" value="${http.port}"/>
         </replace>
         <javac srcdir="client" destdir="${build.classes.dir}/client"
-            classpath="${env.APS_HOME}/lib/reporter.jar:${env.S1AS_HOME}/lib/j2ee.jar:${env.S1AS_HOME}/lib/webservices-rt.jar:${env.S1AS_HOME}/lib/webservices-tools.jar:${env.S1AS_HOME}/lib/appserv-ws.jar:${build.classes.dir}/client" debug="on" failonerror="true"/>
+          classpath="${env.APS_HOME}/lib/reporter.jar:${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/modules/webservices-api-osgi.jar:${env.S1AS_HOME}/modules/webservices-osgi.jar:${build.classes.dir}/client"
+          debug="on" failonerror="true"/>
     </target>
 
     <target name="build-server" depends="compile-server">
diff --git a/appserver/tests/appserv-tests/devtests/security/jmac/soapEmbedded/build.xml b/appserver/tests/appserv-tests/devtests/security/jmac/soapEmbedded/build.xml
index bc912c7..188822f 100644
--- a/appserver/tests/appserv-tests/devtests/security/jmac/soapEmbedded/build.xml
+++ b/appserver/tests/appserv-tests/devtests/security/jmac/soapEmbedded/build.xml
@@ -31,187 +31,204 @@
     &testproperties;
     &commonSecurity;
 
-    <target name="all" depends="clean, build-providers, setup, build-deploy, run, undeploy, unsetup"/>
+    <target name="all"
+            depends="clean, build-providers, setup, build-deploy, run, undeploy, unsetup"
+    />
 
-    <target name="clean" depends="init-common">
-      <antcall target="clean-common"/>
-    </target>
+  <target name="clean" depends="init-common">
+    <antcall target="clean-common" />
+  </target>
 
-    <target name="build-providers" depends="init-common">
-        <antcall target="compile-common">
-            <param name="src" value="authmodule"/>
-            <param name="build.classes.dir" value="${build.classes.dir}/authmodule"/>
-        </antcall>
+  <target name="build-providers" depends="init-common">
+    <antcall target="compile-common">
+      <param name="src" value="authmodule" />
+      <param name="build.classes.dir" value="${build.classes.dir}/authmodule" />
+    </antcall>
 
-        <mkdir dir="${assemble.dir}"/>
-        <jar jarfile="${assemble.dir}/test-${appname}-provider.jar">
-            <fileset dir="${build.classes.dir}/authmodule"/>
-        </jar>
-    </target>
+    <mkdir dir="${assemble.dir}" />
+    <jar jarfile="${assemble.dir}/test-${appname}-provider.jar">
+      <fileset dir="${build.classes.dir}/authmodule" />
+    </jar>
+  </target>
 
-    <target name="setup" depends="init-common">
-        <!-- exports certdb stuff and imports into keystore -->
-        <antcall target="prepare-store-nickname-common">
-            <param name="cert.nickname" value="s1as"/>
-        </antcall>
+  <target name="setup" depends="init-common">
+    <!-- exports certdb stuff and imports into keystore -->
+    <antcall target="prepare-store-nickname-common">
+      <param name="cert.nickname" value="s1as" />
+    </antcall>
 
-        <copy file="${assemble.dir}/test-${appname}-provider.jar"
-            todir="${env.S1AS_HOME}/lib"/>
+    <copy file="${assemble.dir}/test-${appname}-provider.jar" todir="${env.S1AS_HOME}/lib" />
 
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="create-message-security-provider"/>
-            <param name="as.props" value="${as.props} --classname com.sun.s1asdev.security.jmac.soapembedded.SOAPEmbeddedTestServerAuthModule --layer SOAP --providertype server --requestauthsource sender"/>
-            <param name="operand.props" value="SOAPEmbeddedTestServerAuthModule"/>
-        </antcall>
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="create-message-security-provider"/>
-            <param name="as.props" value="${as.props} --classname com.sun.s1asdev.security.jmac.soapembedded.SOAPEmbeddedTestClientAuthModule --layer SOAP --providertype client --requestauthsource sender"/>
-            <param name="operand.props" value="SOAPEmbeddedTestClientAuthModule"/>
-        </antcall>
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="create-message-security-provider" />
+      <param name="as.props"
+             value="${as.props} --classname com.sun.s1asdev.security.jmac.soapembedded.SOAPEmbeddedTestServerAuthModule --layer SOAP --providertype server --requestauthsource sender"
+      />
+      <param name="operand.props" value="SOAPEmbeddedTestServerAuthModule" />
+    </antcall>
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="create-message-security-provider" />
+      <param name="as.props"
+             value="${as.props} --classname com.sun.s1asdev.security.jmac.soapembedded.SOAPEmbeddedTestClientAuthModule --layer SOAP --providertype client --requestauthsource sender"
+      />
+      <param name="operand.props" value="SOAPEmbeddedTestClientAuthModule" />
+    </antcall>
 
-    </target>
+  </target>
 
-    <target name="unsetup" depends="init-common">
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="delete-message-security-provider"/>
-            <param name="as.props" value="${as.props} --layer SOAP"/>
-            <param name="operand.props" value="SOAPEmbeddedTestServerAuthModule"/>
-        </antcall>
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="delete-message-security-provider"/>
-            <param name="as.props" value="${as.props} --layer SOAP"/>
-            <param name="operand.props" value="SOAPEmbeddedTestClientAuthModule"/>
-        </antcall>
+  <target name="unsetup" depends="init-common">
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="delete-message-security-provider" />
+      <param name="as.props" value="${as.props} --layer SOAP" />
+      <param name="operand.props" value="SOAPEmbeddedTestServerAuthModule" />
+    </antcall>
+    <antcall target="asadmin-common">
+      <param name="admin.command" value="delete-message-security-provider" />
+      <param name="as.props" value="${as.props} --layer SOAP" />
+      <param name="operand.props" value="SOAPEmbeddedTestClientAuthModule" />
+    </antcall>
 
-        <!-- may not be able to delete this file in PC environment -->
-        <delete file="${env.S1AS_HOME}/lib/test-${appname}-provider.jar" failonerror="false"/>
-    </target>
+    <!-- may not be able to delete this file in PC environment -->
+    <delete file="${env.S1AS_HOME}/lib/test-${appname}-provider.jar" failonerror="false" />
+  </target>
 
-    <target name="compile-server" depends="clean">
-        <antcall target="compile-common">
-            <param name="src" value="ejbws"/>
-            <param name="build.classes.dir" value="${build.classes.dir}/ejbws"/>
-        </antcall>
-        <antcall target="compile-common">
-            <param name="src" value="servletws"/>
-            <param name="build.classes.dir" value="${build.classes.dir}/servletws/WEB-INF/classes"/>
-        </antcall>
-    </target>
+  <target name="compile-server" depends="clean">
+    <antcall target="compile-common">
+      <param name="src" value="ejbws" />
+      <param name="build.classes.dir" value="${build.classes.dir}/ejbws" />
+    </antcall>
+    <antcall target="compile-common">
+      <param name="src" value="servletws" />
+      <param name="build.classes.dir" value="${build.classes.dir}/servletws/WEB-INF/classes" />
+    </antcall>
+  </target>
 
-    <target name="compile-webclient">
-        <mkdir dir="${build.classes.dir}/webclient"/>
-        <antcall target="wsimport">
-            <param name="wsimport.args"
-                value="-keep -d ${build.classes.dir}/webclient http://${http.host}:${http.port}/JmacSoapEmbeddedEjbService/HelloEjb?WSDL"/>
-        </antcall>
-        <antcall target="wsimport">
-            <param name="wsimport.args"
-                value="-keep -d ${build.classes.dir}/webclient http://${http.host}:${http.port}/security-jmac-soapembedded-web/webservice/JmacSoapEmbeddedServletService/HelloServlet?WSDL"/>
-        </antcall>
+  <target name="compile-webclient">
+    <mkdir dir="${build.classes.dir}/webclient" />
+    <antcall target="wsimport">
+      <param name="wsimport.args"
+             value="-keep -d ${build.classes.dir}/webclient http://${http.host}:${http.port}/JmacSoapEmbeddedEjbService/HelloEjb?WSDL"
+      />
+    </antcall>
+    <antcall target="wsimport">
+      <param name="wsimport.args"
+             value="-keep -d ${build.classes.dir}/webclient http://${http.host}:${http.port}/security-jmac-soapembedded-web/webservice/JmacSoapEmbeddedServletService/HelloServlet?WSDL"
+      />
+    </antcall>
 
-        <delete file="webclient/Servlet.java" failonerror="false"/>
-        <copy file="webclient/Servlet.java.template" tofile="webclient/Servlet.java"/>
-        <replace file="webclient/Servlet.java">
-            <replacefilter token="@HOST@" value="${http.host}"/>
-            <replacefilter token="@PORT@" value="${http.port}"/>
-        </replace>
-        <javac srcdir="webclient" destdir="${build.classes.dir}/webclient"
-            classpath="${env.APS_HOME}/lib/reporter.jar:${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/lib/webservices-rt.jar:${env.S1AS_HOME}/lib/webservices-tools.jar:${build.classes.dir}/webclient:${env.S1AS_HOME}/modules/jakarta.servlet.jar" debug="on" failonerror="true"/>
-    </target>
+    <delete file="webclient/Servlet.java" failonerror="false" />
+    <copy file="webclient/Servlet.java.template" tofile="webclient/Servlet.java" />
+    <replace file="webclient/Servlet.java">
+      <replacefilter token="@HOST@" value="${http.host}" />
+      <replacefilter token="@PORT@" value="${http.port}" />
+    </replace>
+    <javac srcdir="webclient"
+           destdir="${build.classes.dir}/webclient"
+           classpath="${env.APS_HOME}/lib/reporter.jar:${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/modules/webservices-osgi.jar:${build.classes.dir}/webclient"
+           debug="on"
+           failonerror="true"
+    />
+  </target>
 
-    <target name="build-server" depends="compile-server">
-        <mkdir dir="${assemble.dir}"/>
-        <mkdir dir="${build.classes.dir}/META-INF"/>
+  <target name="build-server" depends="compile-server">
+    <mkdir dir="${assemble.dir}" />
+    <mkdir dir="${build.classes.dir}/META-INF" />
 
-        <antcall target="package-ejbjar-common">
-            <param name="ejbjar.files" value="${build.classes.dir}/ejbws"/>
-            <param name="ejb.jar" value="${assemble.dir}/${appname}-ejb.jar"/>
-            <param name="ejbjar.classes" value="com/sun/**/*.class"/>
-        </antcall>
+    <antcall target="package-ejbjar-common">
+      <param name="ejbjar.files" value="${build.classes.dir}/ejbws" />
+      <param name="ejb.jar" value="${assemble.dir}/${appname}-ejb.jar" />
+      <param name="ejbjar.classes" value="com/sun/**/*.class" />
+    </antcall>
 
-        <copy file="${web.xml}" tofile="${build.classes.dir}/servletws/WEB-INF/web.xml" failonerror="true"/>
-        <copy file="${sun-web.xml}" tofile="${build.classes.dir}/servletws/WEB-INF/sun-web.xml" failonerror="true"/>
-        <jar destfile="${assemble.dir}/${appname}-web.war">
-            <fileset dir="${build.classes.dir}/servletws"/>
-        </jar>
+    <copy file="${web.xml}"
+          tofile="${build.classes.dir}/servletws/WEB-INF/web.xml"
+          failonerror="true"
+    />
+    <copy file="${sun-web.xml}"
+          tofile="${build.classes.dir}/servletws/WEB-INF/sun-web.xml"
+          failonerror="true"
+    />
+    <jar destfile="${assemble.dir}/${appname}-web.war">
+      <fileset dir="${build.classes.dir}/servletws" />
+    </jar>
 
-        <copy file="${sun-application.xml}" tofile="${build.classes.dir}/META-INF/sun-application.xml" failonerror="false"/>
-        <jar jarfile="${assemble.dir}/${appname}App.ear">
-            <fileset dir="${assemble.dir}">
-               <include name="*.jar"/>
-               <include name="*.war"/>
-            </fileset>
-            <fileset dir="${build.classes.dir}">
-               <include name="META-INF/sun-application.xml"/>
-            </fileset>
-        </jar>
-    </target>
+    <copy file="${sun-application.xml}"
+          tofile="${build.classes.dir}/META-INF/sun-application.xml"
+          failonerror="false"
+    />
+    <jar jarfile="${assemble.dir}/${appname}App.ear">
+      <fileset dir="${assemble.dir}">
+        <include name="*.jar" />
+        <include name="*.war" />
+      </fileset>
+      <fileset dir="${build.classes.dir}">
+        <include name="META-INF/sun-application.xml" />
+      </fileset>
+    </jar>
+  </target>
 
-    <target name="build-webclient" depends="compile-webclient">
-        <mkdir dir="${assemble.dir}"/>
+  <target name="build-webclient" depends="compile-webclient">
+    <mkdir dir="${assemble.dir}" />
 
-        <antcall target="package-war-common">
-            <param name="web.xml" value="${web2.xml}"/>
-            <param name="sun-web.xml" value="${sun-web2.xml}"/>
-            <param name="war.classes"
-                value="${build.classes.dir}/webclient"/>
-            <param name="war.file"
-                value="${assemble.dir}/${appname}-client-web.war"/>
-        </antcall>
-    </target>
+    <antcall target="package-war-common">
+      <param name="web.xml" value="${web2.xml}" />
+      <param name="sun-web.xml" value="${sun-web2.xml}" />
+      <param name="war.classes" value="${build.classes.dir}/webclient" />
+      <param name="war.file" value="${assemble.dir}/${appname}-client-web.war" />
+    </antcall>
+  </target>
 
-    <target name="build-deploy" depends="init-common">
-        <antcall target="build-server"/>
-        <antcall target="deploy-common-libraries">
-            <param name="as.props" value="${as.props}"/>
-            <param name="libraries" value="${env.S1AS_HOME}/lib/test-${appname}-provider.jar"/>
-        </antcall>
-        <antcall target="build-webclient"/>
-        <antcall target="deploy-war-libraries">
-            <param name="as.props" value="${as.props}"/>
-            <param name="libraries" value="${env.S1AS_HOME}/lib/test-${appname}-provider.jar"/>
-            <param name="appname" value="${appname}-client"/>
-            <param name="contextroot" value="${appname}-client-web"/>
-        </antcall>
-    </target>
+  <target name="build-deploy" depends="init-common">
+    <antcall target="build-server" />
+    <antcall target="deploy-common-libraries">
+      <param name="as.props" value="${as.props}" />
+      <param name="libraries" value="${env.S1AS_HOME}/lib/test-${appname}-provider.jar" />
+    </antcall>
+    <antcall target="build-webclient" />
+    <antcall target="deploy-war-libraries">
+      <param name="as.props" value="${as.props}" />
+      <param name="libraries" value="${env.S1AS_HOME}/lib/test-${appname}-provider.jar" />
+      <param name="appname" value="${appname}-client" />
+      <param name="contextroot" value="${appname}-client-web" />
+    </antcall>
+  </target>
 
-    <target name="run" depends="init-common">
-       <taskdef name="webtest" classname="${webtest.classname}" classpath="${webtest.classpath}" />
-       <webtest request="GET /security-jmac-soapembedded-client-web/webclient/Servlet HTTP/1.0"
-           debug="9"
-           host="${http.host}"
-           port="${http.port}"
-           firstTask="true"
-           lastTest="true"
-           lastCase="true"
-           lastTask="true"
-           resultFileName="${webtest.report.dir}/security-gtest-results.xml"
-           testSession="security-jmac-soapembedded"
-           requestHeaders="Host:${http.host}:${http.port}"
-           goldenFile="${env.APS_HOME}/devtests/security/jmac/soapEmbedded/goldenfiles/output.html"
-           testSuiteId="security-jmac-soapembedded"
-           testSuiteName="security-jmac-soapembedded"
-           testSuiteDescription="Security Test"
-           testId="security-jmac-soapembedded"
-           testName="security-jmac-soapembedded"
-           testDescription="JSR 196 SoapEmbedded test: ${testcaseid}"
-           testCaseId="${testcaseid}"
-           testCaseName="${testcaseid}"
-           testCaseDescription="JSR 196 SoapEmbedded test"
-           testStrategy="JSR 196 SoapEmbedded test"
-       />
+  <target name="run" depends="init-common">
+    <taskdef name="webtest" classname="${webtest.classname}" classpath="${webtest.classpath}" />
+    <webtest request="GET /security-jmac-soapembedded-client-web/webclient/Servlet HTTP/1.0"
+             debug="9"
+             host="${http.host}"
+             port="${http.port}"
+             firstTask="true"
+             lastTest="true"
+             lastCase="true"
+             lastTask="true"
+             resultFileName="${webtest.report.dir}/security-gtest-results.xml"
+             testSession="security-jmac-soapembedded"
+             requestHeaders="Host:${http.host}:${http.port}"
+             goldenFile="${env.APS_HOME}/devtests/security/jmac/soapEmbedded/goldenfiles/output.html"
+             testSuiteId="security-jmac-soapembedded"
+             testSuiteName="security-jmac-soapembedded"
+             testSuiteDescription="Security Test"
+             testId="security-jmac-soapembedded"
+             testName="security-jmac-soapembedded"
+             testDescription="JSR 196 SoapEmbedded test: ${testcaseid}"
+             testCaseId="${testcaseid}"
+             testCaseName="${testcaseid}"
+             testCaseDescription="JSR 196 SoapEmbedded test"
+             testStrategy="JSR 196 SoapEmbedded test"
+    />
 
-    </target>
+  </target>
 
-    <target name="undeploy" depends="init-common">
-        <antcall target="undeploy-common"/>
-        <antcall target="undeploy-war-common">
-            <param name="appname"
-                value="${appname}-client"/>
-        </antcall>
-    </target>
+  <target name="undeploy" depends="init-common">
+    <antcall target="undeploy-common" />
+    <antcall target="undeploy-war-common">
+      <param name="appname" value="${appname}-client" />
+    </antcall>
+  </target>
 
-    <target name="usage">
-        <antcall target="usage-common"/>
-    </target>
+  <target name="usage">
+    <antcall target="usage-common" />
+  </target>
 </project>
diff --git a/appserver/tests/appserv-tests/devtests/security/run_test.sh b/appserver/tests/appserv-tests/devtests/security/run_test.sh
index 886ed34..888f28a 100755
--- a/appserver/tests/appserv-tests/devtests/security/run_test.sh
+++ b/appserver/tests/appserv-tests/devtests/security/run_test.sh
@@ -17,41 +17,41 @@
 
 test_run(){
 
-        #cp -f ${APS_HOME}/devtests/security/ldap/opends/X500Signer.jar ${OPENDS_HOME}/lib
+    #cp -f ${APS_HOME}/devtests/security/ldap/opends/X500Signer.jar ${OPENDS_HOME}/lib
 
-        # Configure and start OpenDS using the default ports
-        ${OPENDS_HOME}/setup \
-    -i \
-    -v \
-    -n \
-    -p 1389 \
-    --adminConnectorPort 4444 \
-    -x 1689 \
-    -w dmanager \
-    -b "dc=sfbay,dc=sun,dc=com" \
-    -Z 1636 \
-    --useJavaKeystore ${S1AS_HOME}/domains/domain1/config/keystore.jks \
-    -W changeit \
-    -N s1as
+    # Configure and start OpenDS using the default ports
+    ${OPENDS_HOME}/setup \
+        -i \
+        -v \
+        -n \
+        -p 1389 \
+        --adminConnectorPort 4444 \
+        -x 1689 \
+        -w dmanager \
+        -b "dc=sfbay,dc=sun,dc=com" \
+        -Z 1636 \
+        --useJavaKeystore ${S1AS_HOME}/domains/domain1/config/keystore.jks \
+        -W changeit \
+        -N s1as
 
-        ${S1AS_HOME}/bin/asadmin start-database
-        ${S1AS_HOME}/bin/asadmin start-domain
-        cd ${APS_HOME}/devtests/security
+    ${S1AS_HOME}/bin/asadmin start-database
+    ${S1AS_HOME}/bin/asadmin start-domain
+    cd ${APS_HOME}/devtests/security
 
-        ant ${TARGET} | tee ${TEST_RUN_LOG}
+    ant ${TARGET} | tee ${TEST_RUN_LOG}
 
-        ${S1AS_HOME}/bin/asadmin stop-domain
-        ${S1AS_HOME}/bin/asadmin stop-database
+    ${S1AS_HOME}/bin/asadmin stop-domain
+    ${S1AS_HOME}/bin/asadmin stop-database
         ${OPENDS_HOME}/bin/stop-ds \
-    -p 4444 \
-    -D "cn=Directory Manager" \
-    -w dmanager \
-    -P ${OPENDS_HOME}/config/admin-truststore \
-    -U ${OPENDS_HOME}/config/admin-keystore.pin
+        -p 4444 \
+        -D "cn=Directory Manager" \
+        -w dmanager \
+        -P ${OPENDS_HOME}/config/admin-truststore \
+        -U ${OPENDS_HOME}/config/admin-keystore.pin
 
-        #egrep 'FAILED= *0' ${TEST_RUN_LOG}
-        #egrep 'DID NOT RUN= *0' ${TEST_RUN_LOG}
-        cd -
+    #egrep 'FAILED= *0' ${TEST_RUN_LOG}
+    #egrep 'DID NOT RUN= *0' ${TEST_RUN_LOG}
+    cd -
 }
 
 get_test_target(){
@@ -69,17 +69,21 @@
 
 run_test_id(){
   # setup opendj (fork of opends)
-  curl -L -k https://github.com/OpenIdentityPlatform/OpenDJ/releases/download/4.1.10/opendj-4.1.10.zip > opendj-4.1.10.zip
-  unzip -o opendj-4.1.10.zip
+  OPENDJ_VERSION='4.4.11'
+  OPENDJ_ZIP="${WORKSPACE}/bundles/opendj-${OPENDJ_VERSION}.zip"
+  if [ ! -f "${OPENDJ_ZIP}" ]; then
+    curl -L -k https://github.com/OpenIdentityPlatform/OpenDJ/releases/download/4.4.11/opendj-4.4.11.zip > "${OPENDJ_ZIP}"
+  fi
+  unzip -o ${OPENDJ_ZIP}
   export OPENDS_HOME=${PWD}/opendj
 
-        unzip_test_resources ${WORKSPACE}/bundles/glassfish.zip
-        cd `dirname ${0}`
-        test_init
-        get_test_target ${1}
-        test_run
-        merge_result_files
-        check_successful_run
+  unzip_test_resources ${WORKSPACE}/bundles/glassfish.zip
+  cd `dirname ${0}`
+  test_init
+  get_test_target ${1}
+  test_run
+  merge_result_files
+  check_successful_run
   generate_junit_report ${1}
   change_junit_report_class_names
 }
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/README.md b/appserver/tests/appserv-tests/devtests/security/soteria/README.md
deleted file mode 100644
index 948191e..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/README.md
+++ /dev/null
@@ -1,25 +0,0 @@
-This is integration devtests for JSR 375 RI(soteria).
-The sample apps are taken from [Soteria](https://github.com/eclipse-ee4j/soteria) repository.
-Follow the below instructions to run the tests.
-1. set APS_HOME to appserv-tests dir.
-2. set M2_HOME to maven Home.
-3. set S1AS_HOME to glassfish installation. The S1AS_HOME should contain glassfish directory.
-4. $S1AS_HOME/bin/asadmin start-domain
-5. Run mvn clean verify
-6. $S1AS_HOME/bin/asadmin stop-domain
-
-Known Issue:
-1.Aruillian gf container: 
-------------
-Jun 05, 2017 3:50:22 PM org.jboss.arquillian.container.glassfish.clientutils.GlassFishClientUtil getResponseMap
-SEVERE: exit_code: FAILURE, message: An error occurred while processing the request. Please see the server logs for details. [status: SERVER_ERROR reason: Service Unavailable]
-[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 6.173 s <<< FAILURE! - in org.glassfish.soteria.test.AppMemBasicIT
-[ERROR] org.glassfish.soteria.test.AppMemBasicIT  Time elapsed: 6.165 s  <<< ERROR!
-com.sun.jersey.api.container.ContainerException: exit_code: FAILURE, message: An error occurred while processing the request. Please see the server logs for details. [status: SERVER_ERROR reason: Service Unavailable]
-
-Jun 05, 2017 3:50:22 PM org.jboss.arquillian.container.glassfish.managed_3_1.GlassFishServerControl$1 run
-WARNING: Forcing container shutdown
-Stopping container using command: [java, -jar, /media/sameerpandit/WLS/javaEE/tt/glassfish6/glassfish/../glassfish/modules/admin-cli.jar, stop-domain, -t]
-------------
-
-Resolve this by running the test with a fresh $S1AS_HOME.
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/README.md b/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/README.md
deleted file mode 100644
index 4e9d394..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-### app-bundled-ham-basic-login-config-form
-
-**If an application bundles its own `HttpAuthenticationMechanism`, then for authentication, the container will rely on the bundled mechanism and will ignore the `login-config` element in deployment descriptor of the application.
-
-In this sample app, the `BASIC` authentication mechanism defined in `HttpAuthenticationMechanism` takes precedencce over `FORM` authentication present in `login-config`.
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/pom.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/pom.xml
deleted file mode 100644
index 1d9efa7..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/pom.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.glassfish.soteria.test</groupId>
-        <artifactId>soteria</artifactId>
-        <version>6.2.6-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>app-bundled-ham-basic-login-config-form</artifactId>
-    <packaging>war</packaging>
-
-    <build>
-        <finalName>app-bundled-ham-basic-login-config-form</finalName>
-    </build>
-
-    <properties>
-        <failOnMissingWebXml>false</failOnMissingWebXml>
-    </properties>
-    <dependencies>
-        <dependency>
-            <groupId>org.glassfish.soteria.test</groupId>
-            <artifactId>common</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/java/org/glassfish/soteria/test/BasicAuthenticationServlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/java/org/glassfish/soteria/test/BasicAuthenticationServlet.java
deleted file mode 100644
index ce5646f..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/java/org/glassfish/soteria/test/BasicAuthenticationServlet.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.io.IOException;
-
-import jakarta.inject.Inject;
-import javax.security.enterprise.SecurityContext;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.HttpConstraint;
-import jakarta.servlet.annotation.ServletSecurity;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-@WebServlet(urlPatterns = "/basicAuthenticationServlet")
-@ServletSecurity(@HttpConstraint(rolesAllowed = "foo"))
-
-public class BasicAuthenticationServlet extends HttpServlet {
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-        response.getWriter().write("Authentication Mechanism:" + response.getHeader("Authentication Mechanism") +"\n");
-
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
deleted file mode 100644
index c612e2d..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import jakarta.enterprise.context.RequestScoped;
-import jakarta.inject.Inject;
-import javax.security.enterprise.AuthenticationException;
-import javax.security.enterprise.AuthenticationStatus;
-import javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism;
-import javax.security.enterprise.authentication.mechanism.http.HttpMessageContext;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStoreHandler;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-import static javax.security.enterprise.identitystore.CredentialValidationResult.Status.VALID;
-
-@RequestScoped
-public class TestAuthenticationMechanism implements HttpAuthenticationMechanism {
-
-    @Inject
-    private IdentityStoreHandler identityStoreHandler;
-
-    @Override
-    public AuthenticationStatus validateRequest(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext) throws AuthenticationException {
-
-            // Get the (caller) name and password from the request
-        // NOTE: This is for the smallest possible example only. In practice
-        // putting the password in a request query parameter is highly
-        // insecure
-        String name = request.getParameter("name");
-        String password = request.getParameter("password");
-
-        if (name != null && password != null) {
-
-            // Delegate the {credentials in -> identity data out} function to
-            // the Identity Store
-            CredentialValidationResult result = identityStoreHandler.validate(
-                new UsernamePasswordCredential(name, password));
-
-            if (result.getStatus() == VALID) {
-                // Communicate the details of the authenticated user to the
-                // container. In many cases the underlying handler will just store the details
-                // and the container will actually handle the login after we return from
-                // this method.
-                response.addHeader("Authentication Mechanism", "TestAuthenticationMechanism");
-                return httpMessageContext.notifyContainerAboutLogin(
-                    result.getCallerPrincipal(), result.getCallerGroups());
-            } else {
-                return httpMessageContext.responseUnauthorized();
-            }
-        }
-
-        return httpMessageContext.doNothing();
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
deleted file mode 100644
index 35b1b7d..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static java.util.Arrays.asList;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT;
-
-import java.util.HashSet;
-
-import jakarta.enterprise.context.RequestScoped;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStore;
-
-@RequestScoped
-public class TestIdentityStore implements IdentityStore {
-
-    public CredentialValidationResult validate(UsernamePasswordCredential usernamePasswordCredential) {
-
-        if (usernamePasswordCredential.compareTo("reza", "secret1")) {
-            return new CredentialValidationResult("reza", new HashSet<>(asList("foo", "bar")));
-        }
-
-        return INVALID_RESULT;
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/webapp/WEB-INF/beans.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/webapp/WEB-INF/beans.xml
deleted file mode 100644
index e69de29..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/webapp/WEB-INF/beans.xml
+++ /dev/null
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/webapp/WEB-INF/web.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 2889bfa..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
-         version="3.1">
-
-    <servlet>
-        <display-name>index</display-name>
-        <servlet-name>index</servlet-name>
-        <jsp-file>/index.jsp</jsp-file>
-    </servlet>
-
-    <security-constraint>
-        <web-resource-collection>
-            <web-resource-name>FORM Based Authentication Servlet</web-resource-name>
-            <url-pattern>/</url-pattern>
-        </web-resource-collection>
-        <auth-constraint>
-            <role-name>foo</role-name>
-        </auth-constraint>
-        <user-data-constraint>
-            <transport-guarantee>NONE</transport-guarantee>
-        </user-data-constraint>
-    </security-constraint>
-
-    <login-config>
-        <auth-method>FORM</auth-method>
-        <realm-name>file</realm-name>
-        <form-login-config>
-            <form-login-page>/loginform.jsp</form-login-page>
-            <form-error-page>/loginerror.jsp</form-error-page>
-        </form-login-config>
-    </login-config>
-</web-app>
-
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/webapp/index.jsp b/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/webapp/index.jsp
deleted file mode 100644
index afdc05b..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,33 +0,0 @@
-<%--
-
-    Copyright (c) 2017, 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
-
---%>
-
-<%@page contentType="text/html" pageEncoding="UTF-8"%>
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-    "http://www.w3.org/TR/html4/loose.dtd">
-
-<html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-        <title>Form-based Security - Success</title>
-    </head>
-    <body>
-        <h1>Form-based Security - Success</h1>
-        
-        If you reached this page that means form-based security credentials are correctly configured.
-    </body>
-</html>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/webapp/loginerror.jsp b/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/webapp/loginerror.jsp
deleted file mode 100644
index 63b43e4..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/webapp/loginerror.jsp
+++ /dev/null
@@ -1,38 +0,0 @@
-<%--
-
-    Copyright (c) 2017, 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
-
---%>
-
-<%@page contentType="text/html" pageEncoding="UTF-8"%>
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-    "http://www.w3.org/TR/html4/loose.dtd">
-
-<html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-        <title>Form-Based Login Error Page</title>
-    </head>
-    <body>
-        <h1>Login Error Page</h1>
-
-        <h2>Invalid user name or password.</h2>
-
-        <p>Please specify a valid user/password combination</p>  
-
-        Click here to <a href="loginform.jsp">Try Again</a></p>
-
-    </body>
-</html>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/webapp/loginform.jsp b/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/webapp/loginform.jsp
deleted file mode 100644
index 71bc4fe..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/main/webapp/loginform.jsp
+++ /dev/null
@@ -1,39 +0,0 @@
-<%--
-
-    Copyright (c) 2017, 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
-
---%>
-
-<%@page contentType="text/html" pageEncoding="UTF-8"%>
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-    "http://www.w3.org/TR/html4/loose.dtd">
-
-<html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-        <title>Form-Based Login Page</title>
-    </head>
-    <body>
-        <h1>Form-Based Login Page</h1>
-
-        <form method="POST" action="j_security_check">
-            Username: <input type="text" name="j_username"> <p/>
-            Password: <input type="password" name="j_password" autocomplete="off"> <p/>
-            <input type="submit" value="Submit" name="submitButton">
-            <input type="reset" value="Reset">
-        </form>
-
-    </body>
-</html>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/test/java/org/glassfish/soteria/test/AppBundledHAMPrecendenceOverLoginConfigInWebXmlIT.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/test/java/org/glassfish/soteria/test/AppBundledHAMPrecendenceOverLoginConfigInWebXmlIT.java
deleted file mode 100644
index a9dd417..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-bundled-ham-basic-login-config-form/src/test/java/org/glassfish/soteria/test/AppBundledHAMPrecendenceOverLoginConfigInWebXmlIT.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static org.glassfish.soteria.test.Assert.*;
-import static org.glassfish.soteria.test.ShrinkWrap.mavenWar;
-
-import org.glassfish.soteria.test.ArquillianBase;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import org.junit.Rule;
-import org.junit.AfterClass;
-import org.junit.rules.TestWatcher;
-
-import com.gargoylesoftware.htmlunit.DefaultCredentialsProvider;
-import com.gargoylesoftware.htmlunit.WebResponse;
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-
-@RunWith(Arquillian.class)
-public class AppBundledHAMPrecendenceOverLoginConfigInWebXmlIT extends ArquillianBase {
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    @Rule
-    public TestWatcher reportWatcher=new ReportWatcher(stat, "Security::soteria::AppBundledHAMPrecendenceOverLoginConfigInWebXml");
-
-    @AfterClass
-    public static void printSummary(){
-      stat.printSummary();
-    }
-
-    @Deployment(testable = false)
-    public static Archive<?> createDeployment() {
-        return mavenWar();
-    }
-
-    @Test
-    public void testHAMPrecedenceOverLoginConfig() {
-
-        assertBundledHAMPrecedenceOverLoginConfig(
-                responseFromServer("/basicAuthenticationServlet?name=reza&password=secret1"));
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/README.md b/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/README.md
deleted file mode 100644
index 0bb7d10..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/README.md
+++ /dev/null
@@ -1,12 +0,0 @@
-
-### app-container-application-principal-getname
-
-**From JSR 375 Specification**
-
-> **1.2.2. Caller Principal Types**
-
-> When both a container caller principal and an application caller principal are present, the value obtained by calling getName() on both principals MUST be the same.
-
-In this test, application provides its own caller principal,
-and hence, subject contains two such principals, one
-representing the container and other one representing the application itself.
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/pom.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/pom.xml
deleted file mode 100644
index f9f3450..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/pom.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.glassfish.soteria.test</groupId>
-        <artifactId>soteria</artifactId>
-        <version>6.2.6-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>app-caller-principal</artifactId>
-    <packaging>war</packaging>
-
-    <build>
-        <finalName>app-caller-principal</finalName>
-    </build>
-
-    <properties>
-        <failOnMissingWebXml>false</failOnMissingWebXml>
-    </properties>
-    <dependencies>
-        <dependency>
-            <groupId>org.glassfish.soteria.test</groupId>
-            <artifactId>common</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/main/java/org/glassfish/soteria/test/AppPrincipal.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/main/java/org/glassfish/soteria/test/AppPrincipal.java
deleted file mode 100644
index f52f925..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/main/java/org/glassfish/soteria/test/AppPrincipal.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.security.Principal;
-
-/**
- * Created by vinay on 7/8/17.
- */
-public class AppPrincipal implements Principal {
-    String name;
-
-    public AppPrincipal(String name){
-        this.name = name;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/main/java/org/glassfish/soteria/test/CallerSubjectServlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/main/java/org/glassfish/soteria/test/CallerSubjectServlet.java
deleted file mode 100644
index fdc7739..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/main/java/org/glassfish/soteria/test/CallerSubjectServlet.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.io.IOException;
-
-import jakarta.inject.Inject;
-import javax.security.enterprise.SecurityContext;
-import javax.security.enterprise.CallerPrincipal;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.HttpConstraint;
-import jakarta.servlet.annotation.ServletSecurity;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import java.security.Principal;
-import java.util.Optional;
-import java.util.Set;
-
-/**
- * The Servlet which validates if for the authenticated user, both
- * container and caller principals are present in the subject
- * representing the caller.
- */
-@WebServlet("/callerSubjectServlet")
-@ServletSecurity(@HttpConstraint(rolesAllowed = "foo"))
-public class CallerSubjectServlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Inject
-    private SecurityContext securityContext;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
-        String containerCallerPrincipalName = null;
-        String appPrincipalName = null;
-        String callerPrincipalFromSecurityContextName = null;
-        boolean isUserInRole = securityContext.isCallerInRole("foo");
-        int callerPrincipalCount = 0;
-
-        Principal containerCallerPrincipal = securityContext.getCallerPrincipal();
-        containerCallerPrincipalName = containerCallerPrincipal.getName();
-
-        Set<Principal> principals = securityContext.getPrincipalsByType(java.security.Principal.class);
-
-        Optional<Principal> appCallerPrincipalOptional = principals.stream().filter((p) -> p.getClass().getName() == AppPrincipal.class.getName())
-                .findAny();
-        Principal appPrincipal = null;
-        if (appCallerPrincipalOptional.isPresent()) {
-            callerPrincipalCount++;
-            appPrincipal = appCallerPrincipalOptional.get();
-            appPrincipalName = appPrincipal.getName();
-        }
-
-        Optional<Principal> containerCallerPrincipalOptional = principals.stream().filter((p) -> p.getClass().getName() == CallerPrincipal
-                .class.getName())
-                .findAny();
-        Principal callerPrincipalFromSecurityContext = null;
-        if (containerCallerPrincipalOptional.isPresent()) {
-            callerPrincipalCount++;
-            callerPrincipalFromSecurityContext = containerCallerPrincipalOptional.get();
-            callerPrincipalFromSecurityContextName = callerPrincipalFromSecurityContext.getName();
-        }
-
-        if (!containerCallerPrincipalName.isEmpty() && !appPrincipalName.isEmpty() && containerCallerPrincipalName.equals
-                (appPrincipalName) && isUserInRole & callerPrincipalCount == 1) {
-            response.getWriter().write(String.format("Container caller principal and application caller principal both are " +
-                    "represented by same principal for user %s and is in role %s", containerCallerPrincipal.getName(), "foo"));
-        } else {
-            response.getWriter().write(String.format("Both %s and %s principal types are available wherein only principal of " +
-                    "type %s was expected for user %s and is in role %s",AppPrincipal.class.getName(), CallerPrincipal.class
-                            .getName(), AppPrincipal.class.getName(), containerCallerPrincipal.getName(),
-                    "foo"));
-        }
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
deleted file mode 100644
index e614c50..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static javax.security.enterprise.identitystore.CredentialValidationResult.Status.VALID;
-
-import jakarta.enterprise.context.RequestScoped;
-import jakarta.inject.Inject;
-import javax.security.enterprise.AuthenticationStatus;
-import javax.security.enterprise.AuthenticationException;
-import javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism;
-import javax.security.enterprise.authentication.mechanism.http.HttpMessageContext;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStoreHandler;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-
-
-
-@RequestScoped
-public class TestAuthenticationMechanism implements HttpAuthenticationMechanism {
-
-    @Inject
-    private IdentityStoreHandler identityStoreHandler;
-
-    @Override
-    public AuthenticationStatus validateRequest(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext) throws AuthenticationException {
-
-            // Get the (caller) name and password from the request
-        // NOTE: This is for the smallest possible example only. In practice
-        // putting the password in a request query parameter is highly
-        // insecure
-        String name = request.getParameter("name");
-        String password = request.getParameter("password");
-
-        if (name != null && password != null) {
-
-            // Delegate the {credentials in -> identity data out} function to
-            // the Identity Store
-            CredentialValidationResult result = identityStoreHandler.validate(
-                new UsernamePasswordCredential(name, password));
-
-            if (result.getStatus() == VALID) {
-                // In this case , application chooses to provide its own caller principal
-                return httpMessageContext.notifyContainerAboutLogin(
-                        new AppPrincipal(name), result.getCallerGroups());
-
-            } else {
-                return httpMessageContext.responseUnauthorized();
-            }
-        }
-
-        return httpMessageContext.doNothing();
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
deleted file mode 100644
index c4556df..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static java.util.Arrays.asList;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT;
-
-import java.util.HashSet;
-
-import jakarta.enterprise.context.RequestScoped;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStore;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-
-@RequestScoped
-public class TestIdentityStore implements IdentityStore {
-
-    public CredentialValidationResult validate(UsernamePasswordCredential usernamePasswordCredential) {
-
-        if (usernamePasswordCredential.compareTo("reza", "secret1")) {
-            return new CredentialValidationResult("reza", new HashSet<>(asList("foo", "bar")));
-        }
-
-        return INVALID_RESULT;
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/main/webapp/WEB-INF/beans.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/main/webapp/WEB-INF/beans.xml
deleted file mode 100644
index e69de29..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/main/webapp/WEB-INF/beans.xml
+++ /dev/null
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/main/webapp/WEB-INF/web.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 48a35fa..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<web-app
-        xmlns="http://xmlns.jcp.org/xml/ns/javaee"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
-        version="3.1"
->
-
-        <!-- Security constraints and roles. -->
-
-        <security-constraint>
-                <web-resource-collection>
-                        <web-resource-name>User pages</web-resource-name>
-                        <url-pattern>/protectedServlet</url-pattern>
-                </web-resource-collection>
-                <auth-constraint>
-                        <role-name>foo</role-name>
-                </auth-constraint>
-        </security-constraint>
-
-
-        <security-role>
-                <role-name>foo</role-name>
-        </security-role>
-
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/test/java/org/glassfish/soteria/test/AppCallerPrincipalIT.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/test/java/org/glassfish/soteria/test/AppCallerPrincipalIT.java
deleted file mode 100644
index a272733..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-caller-principal/src/test/java/org/glassfish/soteria/test/AppCallerPrincipalIT.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static org.glassfish.soteria.test.Assert.*;
-import static org.glassfish.soteria.test.ShrinkWrap.mavenWar;
-
-import org.glassfish.soteria.test.ArquillianBase;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import org.junit.Rule;
-import org.junit.AfterClass;
-import org.junit.rules.TestWatcher;
-
-import com.gargoylesoftware.htmlunit.DefaultCredentialsProvider;
-import com.gargoylesoftware.htmlunit.WebResponse;
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-
-@RunWith(Arquillian.class)
-public class AppCallerPrincipalIT extends ArquillianBase {
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    @Rule
-    public TestWatcher reportWatcher=new ReportWatcher(stat, "Security::soteria::AppCallerPrincipal");
-
-    @AfterClass
-    public static void printSummary(){
-      stat.printSummary();
-    }
-
-    @Deployment(testable = false)
-    public static Archive<?> createDeployment() {
-        return mavenWar();
-    }
-
-    @Test
-    public void testCallerSubjectPrincipals() {
-        assertApplicationPrincipalAndContainerPrincipalName(
-                responseFromServer("/callerSubjectServlet?name=reza&password=secret1"));
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/pom.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/pom.xml
deleted file mode 100644
index 557f179..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/pom.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.glassfish.soteria.test</groupId>
-        <artifactId>soteria</artifactId>
-        <version>6.2.6-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>app-custom-identity-store-handler</artifactId>
-    <packaging>war</packaging>
-
-    <build>
-        <finalName>app-custom-identity-store-handler</finalName>
-    </build>
-
-    <properties>
-        <failOnMissingWebXml>false</failOnMissingWebXml>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.glassfish.soteria.test</groupId>
-            <artifactId>common</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.unboundid</groupId>
-            <artifactId>unboundid-ldapsdk</artifactId>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/BlackListedIdentityStore.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/BlackListedIdentityStore.java
deleted file mode 100644
index 6eb467f..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/BlackListedIdentityStore.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.NOT_VALIDATED_RESULT;
-import static javax.security.enterprise.identitystore.IdentityStore.ValidationType.VALIDATE;
-import static org.glassfish.soteria.Utils.unmodifiableSet;
-
-import java.util.Set;
-
-import jakarta.enterprise.context.ApplicationScoped;
-import javax.security.enterprise.credential.Credential;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStore;
-
-/**
- *
- */
-@ApplicationScoped
-public class BlackListedIdentityStore implements IdentityStore {
-
-    @Override
-    public CredentialValidationResult validate(Credential credential) {
-        CredentialValidationResult result = NOT_VALIDATED_RESULT;
-        if (credential instanceof UsernamePasswordCredential) {
-            UsernamePasswordCredential usernamePassword = (UsernamePasswordCredential) credential;
-
-            if ("rudy".equals(usernamePassword.getCaller())) {
-
-                result = INVALID_RESULT;
-            }
-        }
-        return result;
-    }
-
-    @Override
-    public int priority() {
-        return 1000;
-    }
-
-    @Override
-    public Set<ValidationType> validationTypes() {
-        return unmodifiableSet(VALIDATE);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/ConfigBean.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/ConfigBean.java
deleted file mode 100644
index c8cda52..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/ConfigBean.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import javax.security.enterprise.identitystore.IdentityStore.ValidationType;
-import static javax.security.enterprise.identitystore.IdentityStore.ValidationType.PROVIDE_GROUPS;
-import static javax.security.enterprise.identitystore.IdentityStore.ValidationType.VALIDATE;
-
-import javax.security.enterprise.identitystore.LdapIdentityStoreDefinition.LdapSearchScope;
-import static javax.security.enterprise.identitystore.LdapIdentityStoreDefinition.LdapSearchScope.ONE_LEVEL;
-import static javax.security.enterprise.identitystore.LdapIdentityStoreDefinition.LdapSearchScope.SUBTREE;
-
-import jakarta.enterprise.context.RequestScoped;
-import jakarta.inject.Named;
-
-@RequestScoped
-@Named
-public class ConfigBean {
-  private int priority300=300;
-  private int priority100=100;
-  private ValidationType[] useforBoth = {ValidationType.VALIDATE, ValidationType.PROVIDE_GROUPS};
-  private ValidationType[] useforValidate = {ValidationType.VALIDATE};
-  private ValidationType[] useforProvideGroup = {ValidationType.PROVIDE_GROUPS};
-  private LdapSearchScope searchScopeOneLevel = ONE_LEVEL;
-  private LdapSearchScope searchScopeSubTree = SUBTREE;
-
-  public int getPriority300(){
-    return priority300;
-  }
-
-  public int getPriority100(){
-    return priority100;
-  }
-
-  public ValidationType[] getUseforBoth(){
-    return useforBoth;
-  }
-
-  public ValidationType[] getUseforValidate(){
-    return useforValidate;
-  }
-
-  public ValidationType[] getUseforProvideGroup(){
-    return useforProvideGroup;
-  }
-
-  public LdapSearchScope getSearchScopeOneLevel(){
-    return ONE_LEVEL;
-  }
-
-  public LdapSearchScope getSearchScopeSubTree(){
-    return SUBTREE;
-  }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/CustomIdentityStoreHandler.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/CustomIdentityStoreHandler.java
deleted file mode 100644
index 58b5972..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/CustomIdentityStoreHandler.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import jakarta.annotation.PostConstruct;
-import jakarta.annotation.Priority;
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.enterprise.inject.Alternative;
-import javax.security.enterprise.CallerPrincipal;
-import javax.security.enterprise.credential.Credential;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStore;
-import javax.security.enterprise.identitystore.IdentityStoreHandler;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import static java.util.Comparator.comparing;
-import static java.util.stream.Collectors.toList;
-import static jakarta.interceptor.Interceptor.Priority.APPLICATION;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.Status.VALID;
-import static javax.security.enterprise.identitystore.IdentityStore.ValidationType.PROVIDE_GROUPS;
-import static javax.security.enterprise.identitystore.IdentityStore.ValidationType.VALIDATE;
-import static org.glassfish.soteria.cdi.CdiUtils.getBeanReferencesByType;
-
-/**
- *
- */
-@Alternative
-@Priority(APPLICATION)
-@ApplicationScoped
-public class CustomIdentityStoreHandler implements IdentityStoreHandler {
-
-    private List<IdentityStore> validatingIdentityStores;
-    private List<IdentityStore> groupProvidingIdentityStores;
-
-    @PostConstruct
-    public void init() {
-        List<IdentityStore> identityStores = getBeanReferencesByType(IdentityStore.class, false);
-
-        validatingIdentityStores = identityStores.stream()
-                .filter(i -> i.validationTypes().contains(VALIDATE))
-                .sorted(comparing(IdentityStore::priority))
-                .collect(toList());
-
-        groupProvidingIdentityStores = identityStores.stream()
-                .filter(i -> i.validationTypes().contains(PROVIDE_GROUPS))
-                .sorted(comparing(IdentityStore::priority))
-                .collect(toList());
-    }
-
-    @Override
-    public CredentialValidationResult validate(Credential credential) {
-        CredentialValidationResult validationResult = null;
-        IdentityStore identityStore = null;
-
-        // Check all stores and stop when one marks it as invalid.
-        for (IdentityStore authenticationIdentityStore : validatingIdentityStores) {
-            CredentialValidationResult temp = authenticationIdentityStore.validate(credential);
-            switch (temp.getStatus()) {
-
-                case NOT_VALIDATED:
-                    // Don't do anything
-                    break;
-                case INVALID:
-                    validationResult = temp;
-                    break;
-                case VALID:
-                    validationResult = temp;
-                    identityStore = authenticationIdentityStore;
-                    break;
-                default:
-                    throw new IllegalArgumentException("Value not supported " + temp.getStatus());
-            }
-            if (validationResult != null && validationResult.getStatus() == CredentialValidationResult.Status.INVALID) {
-                break;
-            }
-        }
-
-        if (validationResult == null) {
-            // No authentication store at all
-            return INVALID_RESULT;
-        }
-
-        if (validationResult.getStatus() != VALID) {
-            // No store validated (authenticated), no need to continue
-            return validationResult;
-        }
-
-        CallerPrincipal callerPrincipal = validationResult.getCallerPrincipal();
-
-        Set<String> groups = new HashSet<>();
-        if (identityStore.validationTypes().contains(PROVIDE_GROUPS)) {
-            groups.addAll(validationResult.getCallerGroups());
-        }
-
-        // Ask all stores that were configured for authorization to get the groups for the
-        // authenticated caller
-        for (IdentityStore authorizationIdentityStore : groupProvidingIdentityStores) {
-            groups.addAll(authorizationIdentityStore.getCallerGroups(validationResult));
-        }
-
-        return new CredentialValidationResult(callerPrincipal, groups);
-
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/GroupProviderIdentityStore.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/GroupProviderIdentityStore.java
deleted file mode 100644
index 3670fff..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/GroupProviderIdentityStore.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static java.util.Arrays.asList;
-import static java.util.Collections.emptySet;
-import static javax.security.enterprise.identitystore.IdentityStore.ValidationType.PROVIDE_GROUPS;
-import static org.glassfish.soteria.Utils.unmodifiableSet;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import jakarta.annotation.PostConstruct;
-import jakarta.enterprise.context.ApplicationScoped;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStore;
-import javax.security.enterprise.identitystore.LdapIdentityStoreDefinition;
-import javax.security.enterprise.identitystore.LdapIdentityStoreDefinition.LdapSearchScope;
-import javax.security.enterprise.identitystore.IdentityStore.ValidationType;
-import static javax.security.enterprise.identitystore.LdapIdentityStoreDefinition.LdapSearchScope.SUBTREE;
-import static javax.security.enterprise.identitystore.IdentityStore.ValidationType.VALIDATE;
-
-/**
- *
- */
-@LdapIdentityStoreDefinition(
-        url = "ldap://localhost:33389/",
-        callerBaseDn = "ou=caller,dc=jsr375,dc=net",
-        callerSearchScope = LdapSearchScope.SUBTREE,
-        groupSearchBase = "ou=group,dc=jsr375,dc=net",
-        useForExpression = "#{'VALIDATE'}",
-        groupSearchScopeExpression = "${configBean.searchScopeOneLevel}"
-)
-@ApplicationScoped
-public class GroupProviderIdentityStore implements IdentityStore {
-
-    private Map<String, Set<String>> groupsPerCaller;
-
-    @PostConstruct
-    public void init() {
-        groupsPerCaller = new HashMap<>();
-
-        groupsPerCaller.put("rudy", new HashSet<>(asList("foo", "bar")));
-        groupsPerCaller.put("will", new HashSet<>(asList("foo", "bar", "baz")));
-        groupsPerCaller.put("arjan", new HashSet<>(asList("foo", "baz")));
-        groupsPerCaller.put("reza", new HashSet<>(asList("baz")));
-
-    }
-
-    @Override
-    public Set<String> getCallerGroups(CredentialValidationResult validationResult) {
-        Set<String> result = groupsPerCaller.get(validationResult.getCallerPrincipal().getName());
-        if (result == null) {
-            result = emptySet();
-        }
-
-        return result;
-    }
-
-    @Override
-    public Set<ValidationType> validationTypes() {
-        return unmodifiableSet(PROVIDE_GROUPS);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/LdapSetup.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/LdapSetup.java
deleted file mode 100644
index 2e5e64a..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/LdapSetup.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import com.unboundid.ldap.listener.InMemoryDirectoryServer;
-import com.unboundid.ldap.listener.InMemoryDirectoryServerConfig;
-import com.unboundid.ldap.listener.InMemoryListenerConfig;
-import com.unboundid.ldap.sdk.LDAPException;
-import com.unboundid.ldif.LDIFReader;
-
-import jakarta.annotation.PostConstruct;
-import jakarta.annotation.PreDestroy;
-import jakarta.ejb.Singleton;
-import jakarta.ejb.Startup;
-
-/**
- * Starts up the embedded Unboundid LDAP server on port 33389 and loads a test directory
- * into it containing the same caller- and roles names as the Database and Embedded idenity
- * stores are using.
- *
- * @author Arjan Tijms
- *
- */
-@Startup
-@Singleton
-public class LdapSetup {
-
-    private InMemoryDirectoryServer directoryServer;
-
-    @PostConstruct
-    public void init() {
-        try {
-            InMemoryDirectoryServerConfig config = new InMemoryDirectoryServerConfig("dc=net");
-            config.setListenerConfigs(
-                new InMemoryListenerConfig("myListener", null, 33389, null, null, null));
-
-            directoryServer = new InMemoryDirectoryServer(config);
-
-            directoryServer.importFromLDIF(true,
-                new LDIFReader(this.getClass().getResourceAsStream("/test.ldif")));
-
-            directoryServer.startListening();
-        } catch (LDAPException e) {
-            throw new IllegalStateException(e);
-        }
-    }
-
-    @PreDestroy
-    public void destroy() {
-        directoryServer.shutDown(true);
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/Servlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/Servlet.java
deleted file mode 100644
index a9c2d7c..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/Servlet.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.io.IOException;
-
-import jakarta.annotation.security.DeclareRoles;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-/**
- * Test Servlet that prints out the name of the authenticated caller and whether
- * this caller is in any of the roles {foo, bar, kaz}
- */
-
-@DeclareRoles({"foo", "bar", "baz"})
-@WebServlet("/servlet")
-public class Servlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
-        response.getWriter().write("This is a servlet \n");
-
-        String webName = null;
-        if (request.getUserPrincipal() != null) {
-            webName = request.getUserPrincipal().getName();
-        }
-
-        response.getWriter().write("web username: " + webName + "\n");
-
-        response.getWriter().write("web user has role \"foo\": " + request.isUserInRole("foo") + "\n");
-        response.getWriter().write("web user has role \"bar\": " + request.isUserInRole("bar") + "\n");
-        response.getWriter().write("web user has role \"baz\": " + request.isUserInRole("baz") + "\n");
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
deleted file mode 100644
index 89d5726..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.inject.Inject;
-import javax.security.enterprise.AuthenticationException;
-import javax.security.enterprise.AuthenticationStatus;
-import javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism;
-import javax.security.enterprise.authentication.mechanism.http.HttpMessageContext;
-import javax.security.enterprise.credential.Password;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStoreHandler;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-import static javax.security.enterprise.identitystore.CredentialValidationResult.Status.VALID;
-
-@ApplicationScoped
-public class TestAuthenticationMechanism implements HttpAuthenticationMechanism {
-
-    @Inject
-    private IdentityStoreHandler identityStoreHandler;
-
-    @Override
-    public AuthenticationStatus validateRequest(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext) throws AuthenticationException {
-
-        if (request.getParameter("name") != null && request.getParameter("password") != null) {
-
-            // Get the (caller) name and password from the request
-            // NOTE: This is for the smallest possible example only. In practice
-            // putting the password in a request query parameter is highly
-            // insecure
-            String name = request.getParameter("name");
-            Password password = new Password(request.getParameter("password"));
-
-            // Delegate the {credentials in -> identity data out} function to
-            // the Identity Store
-            CredentialValidationResult result = identityStoreHandler.validate(
-                new UsernamePasswordCredential(name, password));
-
-            if (result.getStatus() == VALID) {
-                // Communicate the details of the authenticated user to the
-                // container. In many cases the underlying handler will just store the details
-                // and the container will actually handle the login after we return from
-                // this method.
-                return httpMessageContext.notifyContainerAboutLogin(
-                    result.getCallerPrincipal(), result.getCallerGroups());
-            }
-
-            return httpMessageContext.responseUnauthorized();
-        }
-
-        return httpMessageContext.doNothing();
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/resources/test.ldif b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/resources/test.ldif
deleted file mode 100644
index a0a630c..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/resources/test.ldif
+++ /dev/null
@@ -1,79 +0,0 @@
-dn: dc=net
-objectclass: top
-objectclass: dcObject
-objectclass: organization
-dc: net
-o: net
-
-dn: dc=jsr375,dc=net
-objectclass: top
-objectclass: dcObject
-objectclass: organization
-dc: jsr375
-o: jsr375
-
-dn: ou=caller,dc=jsr375,dc=net
-objectclass: top
-objectclass: organizationalUnit
-ou: caller
-
-dn: uid=rudy,ou=caller,dc=jsr375,dc=net
-objectclass: top
-objectclass: uidObject
-objectclass: person
-uid: rudy
-cn: Rudy De Busscher
-sn: Rudy
-userPassword: pw
-
-dn: uid=reza,ou=caller,dc=jsr375,dc=net
-objectclass: top
-objectclass: uidObject
-objectclass: person
-uid: reza
-cn: Reza Rahman
-sn: Reza
-userPassword: secret1
-
-dn: uid=alex,ou=caller,dc=jsr375,dc=net
-objectclass: top
-objectclass: uidObject
-objectclass: person
-uid: alex
-cn: Alex Kosowski
-sn: Alex
-userPassword: secret2
-
-dn: uid=arjan,ou=caller,dc=jsr375,dc=net
-objectclass: top
-objectclass: uidObject
-objectclass: person
-uid: arjan
-cn: Arjan Tijms
-sn: Arjan
-userPassword: secret3
-
-dn: ou=group,dc=jsr375,dc=net
-objectclass: top
-objectclass: organizationalUnit
-ou: group
-
-dn: cn=foo,ou=group,dc=jsr375,dc=net
-objectclass: top
-objectclass: groupOfNames
-cn: foo
-member: uid=reza,ou=caller,dc=jsr375,dc=net
-member: uid=arjan,ou=caller,dc=jsr375,dc=net
-
-dn: cn=bar,ou=group,dc=jsr375,dc=net
-objectclass: top
-objectclass: groupOfNames
-cn: bar
-member: uid=reza,ou=caller,dc=jsr375,dc=net
-
-dn: cn=kaz,ou=group,dc=jsr375,dc=net
-objectclass: top
-objectclass: groupOfNames
-cn: kaz
-member: uid=alex,ou=caller,dc=jsr375,dc=net
-
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/webapp/WEB-INF/beans.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/webapp/WEB-INF/beans.xml
deleted file mode 100644
index c7b9713..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/webapp/WEB-INF/beans.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
-       version="1.1" bean-discovery-mode="annotated">
-
-    <alternatives>
-        <class>org.glassfish.soteria.test.CustomIdentityStoreHandler</class>
-    </alternatives>
-</beans>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/webapp/WEB-INF/glassfish-web.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/webapp/WEB-INF/glassfish-web.xml
deleted file mode 100644
index 6cefa70..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/main/webapp/WEB-INF/glassfish-web.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<glassfish-web-app>
-
-    <security-role-mapping>
-        <role-name>foo</role-name>
-        <group-name>foo</group-name>
-    </security-role-mapping>
-
-    <security-role-mapping>
-        <role-name>bar</role-name>
-        <group-name>bar</group-name>
-    </security-role-mapping>
-
-    <security-role-mapping>
-        <role-name>kaz</role-name>
-        <group-name>kaz</group-name>
-    </security-role-mapping>
-
-    <security-role-mapping>
-        <role-name>baz</role-name>
-        <group-name>baz</group-name>
-    </security-role-mapping>
-
-    <security-role-mapping>
-        <role-name>group1</role-name>
-        <group-name>group1</group-name>
-    </security-role-mapping>
-
-     <security-role-mapping>
-        <role-name>group2</role-name>
-        <group-name>group2</group-name>
-    </security-role-mapping>
-
-     <security-role-mapping>
-        <role-name>group3</role-name>
-        <group-name>group3</group-name>
-    </security-role-mapping>
-
-    <parameter-encoding default-charset="UTF-8" />
-
-</glassfish-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/test/java/org/glassfish/soteria/test/AppCustomIdentityStoreHandlerIT.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/test/java/org/glassfish/soteria/test/AppCustomIdentityStoreHandlerIT.java
deleted file mode 100644
index 4982544..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-identity-store-handler/src/test/java/org/glassfish/soteria/test/AppCustomIdentityStoreHandlerIT.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static org.glassfish.soteria.test.Assert.assertAuthenticated;
-import static org.glassfish.soteria.test.Assert.assertDefaultNotAuthenticated;
-import static org.glassfish.soteria.test.Assert.assertNotAuthenticated;
-import static org.glassfish.soteria.test.ShrinkWrap.mavenWar;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-import org.junit.Rule;
-import org.junit.AfterClass;
-import org.junit.rules.TestWatcher;
-
-
-@RunWith(Arquillian.class)
-public class AppCustomIdentityStoreHandlerIT extends ArquillianBase {
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    @Rule
-    public TestWatcher reportWatcher=new ReportWatcher(stat, "Security::soteria::AppCustomIdentityStoreHandler");
-
-    @AfterClass
-    public static void printSummary(){
-        stat.printSummary();
-    }
-
-    @Deployment(testable = false)
-    public static Archive<?> createDeployment() {
-        return mavenWar();
-    }
-
-    @Test
-    public void testAuthenticated() {
-        assertAuthenticated(
-            "web", "reza",
-            readFromServer("/servlet?name=reza&password=secret1"),
-            // Only groups from the
-            "baz");
-    }
-
-    @Test
-    public void testBlacklisted() {
-        assertNotAuthenticated(
-            "web", "rudy",
-            readFromServer("/servlet?name=rudy&password=pw"),
-            "foo", "bar");
-    }
-
-    @Test
-    public void testNotAuthenticated() {
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet"));
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongName() {
-        assertNotAuthenticated(
-            "web", "reza",
-            readFromServer("/servlet?name=romo&password=secret1"),
-            "foo", "bar", "baz");
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongPassword() {
-        assertNotAuthenticated(
-            "web", "reza",
-            readFromServer("/servlet?name=reza&password=wrongpassword"),
-            "foo", "bar", "baz");
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/pom.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/pom.xml
deleted file mode 100644
index ad5f7ba..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/pom.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.glassfish.soteria.test</groupId>
-        <artifactId>soteria</artifactId>
-        <version>6.2.6-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>app-custom-rememberme</artifactId>
-    <packaging>war</packaging>
-
-    <build>
-        <finalName>app-custom-rememberme</finalName>
-    </build>
-
-    <properties>
-        <failOnMissingWebXml>false</failOnMissingWebXml>
-    </properties>
-    <dependencies>
-        <dependency>
-            <groupId>org.glassfish.soteria.test</groupId>
-            <artifactId>common</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/java/org/glassfish/soteria/test/RememberMeConfigBean.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/java/org/glassfish/soteria/test/RememberMeConfigBean.java
deleted file mode 100644
index d7c027b..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/java/org/glassfish/soteria/test/RememberMeConfigBean.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-
-import jakarta.enterprise.context.RequestScoped;
-import jakarta.inject.Named;
-
-@RequestScoped
-@Named
-public class RememberMeConfigBean {
-
-    private int maxAgeSeconds = 500;
-    private String cookieName = "GLASSFISHCOOKIE";
-    private boolean secureOnly = false;
-    private boolean httpOnly = true;
-
-    public int getMaxAgeSeconds() {
-        return maxAgeSeconds;
-    }
-
-    public String getCookieName() {
-        return cookieName;
-    }
-
-    public boolean isSecureOnly() {
-        return secureOnly;
-    }
-
-    public boolean isHttpOnly() {
-        return httpOnly;
-    }
-}
-
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/java/org/glassfish/soteria/test/Servlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/java/org/glassfish/soteria/test/Servlet.java
deleted file mode 100644
index ddbdde0..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/java/org/glassfish/soteria/test/Servlet.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.io.IOException;
-
-import jakarta.annotation.security.DeclareRoles;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-/**
- * Test Servlet that prints out the name of the authenticated caller and whether
- * this caller is in any of the roles {foo, bar, kaz}
- *
- *
- */
-@DeclareRoles({ "foo", "bar", "kaz" })
-@WebServlet("/servlet")
-public class Servlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
-        if (request.getParameter("logout") != null) {
-            request.logout(); // slightly ill-defined, but only for current request
-            request.getSession().invalidate();
-        }
-
-        response.getWriter().write("This is a servlet \n");
-
-        String webName = null;
-        if (request.getUserPrincipal() != null) {
-            webName = request.getUserPrincipal().getName();
-        }
-
-        response.getWriter().write("web username: " + webName + "\n");
-
-        response.getWriter().write("web user has role \"foo\": " + request.isUserInRole("foo") + "\n");
-        response.getWriter().write("web user has role \"bar\": " + request.isUserInRole("bar") + "\n");
-        response.getWriter().write("web user has role \"kaz\": " + request.isUserInRole("kaz") + "\n");
-
-        String mechanismCalled = (String) request.getAttribute("authentication-mechanism-called");
-
-        response.getWriter().write("\nauthentication mechanism called: " + (mechanismCalled != null? mechanismCalled : false) + "\n");
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
deleted file mode 100644
index 859eece..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-
-import jakarta.enterprise.context.RequestScoped;
-import jakarta.inject.Inject;
-import javax.security.enterprise.AuthenticationException;
-import javax.security.enterprise.AuthenticationStatus;
-import javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism;
-import javax.security.enterprise.authentication.mechanism.http.HttpMessageContext;
-import javax.security.enterprise.authentication.mechanism.http.RememberMe;
-import javax.security.enterprise.credential.Password;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStoreHandler;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-import static javax.security.enterprise.identitystore.CredentialValidationResult.Status.VALID;
-
-@RememberMe(
-    cookieName = "#{self.rememberMeConfigBean.getCookieName()}",
-    cookieMaxAgeSecondsExpression = "#{self.rememberMeConfigBean.maxAgeSeconds}",
-    cookieSecureOnlyExpression = "#{self.rememberMeConfigBean.isSecureOnly()}",
-    cookieHttpOnlyExpression = "#{self.rememberMeConfigBean.httpOnly}",
-    isRememberMeExpression ="#{self.isRememberMe(httpMessageContext)}"
-)
-@RequestScoped
-public class TestAuthenticationMechanism implements HttpAuthenticationMechanism {
-
-    public RememberMeConfigBean getRememberMeConfigBean() {
-        return rememberMeConfigBean;
-    }
-
-    @Inject
-    private RememberMeConfigBean rememberMeConfigBean;
-
-    @Inject
-    private IdentityStoreHandler identityStoreHandler;
-
-    @Override
-    public AuthenticationStatus validateRequest(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext) throws AuthenticationException {
-
-        request.setAttribute("authentication-mechanism-called", "true");
-
-        if (request.getParameter("name") != null && request.getParameter("password") != null) {
-
-            // Get the (caller) name and password from the request
-            // NOTE: This is for the smallest possible example only. In practice
-            // putting the password in a request query parameter is highly
-            // insecure
-            String name = request.getParameter("name");
-            Password password = new Password(request.getParameter("password"));
-
-            // Delegate the {credentials in -> identity data out} function to
-            // the Identity Store
-            CredentialValidationResult result = identityStoreHandler.validate(
-                new UsernamePasswordCredential(name, password));
-
-            if (result.getStatus() == VALID) {
-                // Communicate the details of the authenticated user to the
-                // container. In many cases the underlying handler will just store the details
-                // and the container will actually handle the login after we return from
-                // this method.
-                return httpMessageContext.notifyContainerAboutLogin(
-                    result.getCallerPrincipal(), result.getCallerGroups());
-            } else {
-                return httpMessageContext.responseUnauthorized();
-            }
-        }
-
-        return httpMessageContext.doNothing();
-    }
-
-    public Boolean isRememberMe(HttpMessageContext httpMessageContext) {
-        return httpMessageContext.getRequest().getParameter("rememberme") != null;
-    }
-
-    // Workaround for possible CDI bug; at least in Weld 2.3.2 default methods don't seem to be intercepted
-    @Override
-    public void cleanSubject(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext) {
-            HttpAuthenticationMechanism.super.cleanSubject(request, response, httpMessageContext);
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
deleted file mode 100644
index 1a3733a..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static java.util.Arrays.asList;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.NOT_VALIDATED_RESULT;
-
-import java.util.HashSet;
-
-import jakarta.enterprise.context.RequestScoped;
-import javax.security.enterprise.credential.Credential;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStore;
-
-@RequestScoped
-public class TestIdentityStore implements IdentityStore {
-
-    @Override
-    public CredentialValidationResult validate(Credential credential) {
-        if (credential instanceof UsernamePasswordCredential) {
-            return validate((UsernamePasswordCredential) credential);
-        }
-
-        return NOT_VALIDATED_RESULT;
-    }
-
-    public CredentialValidationResult validate(UsernamePasswordCredential usernamePasswordCredential) {
-
-        if (usernamePasswordCredential.getCaller().equals("reza") &&
-                usernamePasswordCredential.getPassword().compareTo("secret1")) {
-
-            return new CredentialValidationResult("reza", new HashSet<>(asList("foo", "bar")));
-        }
-
-        return INVALID_RESULT;
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/java/org/glassfish/soteria/test/TestRememberMeIdentityStore.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/java/org/glassfish/soteria/test/TestRememberMeIdentityStore.java
deleted file mode 100644
index 7a6f650..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/java/org/glassfish/soteria/test/TestRememberMeIdentityStore.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-
-import jakarta.enterprise.context.ApplicationScoped;
-import javax.security.enterprise.CallerPrincipal;
-import javax.security.enterprise.credential.RememberMeCredential;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.RememberMeIdentityStore;
-
-import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT;
-
-@ApplicationScoped
-public class TestRememberMeIdentityStore implements RememberMeIdentityStore {
-
-    private final Map<String, CredentialValidationResult> identities = new ConcurrentHashMap<>();
-
-    @Override
-    public CredentialValidationResult validate(RememberMeCredential credential) {
-        if (identities.containsKey(credential.getToken())) {
-            return identities.get(credential.getToken());
-        }
-
-        return INVALID_RESULT;
-    }
-
-    @Override
-    public String generateLoginToken(CallerPrincipal callerPrincipal, Set<String> groups) {
-        String token = UUID.randomUUID().toString();
-
-        // NOTE: FOR EXAMPLE ONLY. AS TOKENKEY WOULD EFFECTIVELY BECOME THE REPLACEMENT PASSWORD
-        // IT SHOULD NORMALLY NOT BE STORED DIRECTLY BUT EG USING STRONG HASHING
-        identities.put(token, new CredentialValidationResult(callerPrincipal, groups));
-
-        return token;
-    }
-
-    @Override
-    public void removeLoginToken(String token) {
-        identities.remove(token);
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/webapp/WEB-INF/beans.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/webapp/WEB-INF/beans.xml
deleted file mode 100644
index e69de29..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/webapp/WEB-INF/beans.xml
+++ /dev/null
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/webapp/WEB-INF/glassfish-web.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/webapp/WEB-INF/glassfish-web.xml
deleted file mode 100644
index 11d0ee6..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/main/webapp/WEB-INF/glassfish-web.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<glassfish-web-app>
-
-    <security-role-mapping>
-        <role-name>foo</role-name>
-        <group-name>foo</group-name>
-    </security-role-mapping>
-
-    <security-role-mapping>
-        <role-name>bar</role-name>
-        <group-name>bar</group-name>
-    </security-role-mapping>
-
-    <security-role-mapping>
-        <role-name>kaz</role-name>
-        <group-name>kaz</group-name>
-    </security-role-mapping>
-
-    <parameter-encoding default-charset="UTF-8" />
-
-</glassfish-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/test/java/org/glassfish/soteria/test/AppCustomRememberMeIT.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/test/java/org/glassfish/soteria/test/AppCustomRememberMeIT.java
deleted file mode 100644
index b7973e4..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-rememberme/src/test/java/org/glassfish/soteria/test/AppCustomRememberMeIT.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.assertFalse;
-import org.glassfish.soteria.test.ArquillianBase;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-import org.junit.Rule;
-import org.junit.AfterClass;
-import org.junit.rules.TestWatcher;
-
-import com.gargoylesoftware.htmlunit.util.Cookie;
-
-import static org.glassfish.soteria.test.Assert.assertDefaultAuthenticated;
-import static org.glassfish.soteria.test.Assert.assertDefaultNotAuthenticated;
-import static org.glassfish.soteria.test.ShrinkWrap.mavenWar;
-
-@RunWith(Arquillian.class)
-public class AppCustomRememberMeIT extends ArquillianBase {
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    @Rule
-    public TestWatcher reportWatcher=new ReportWatcher(stat, "Security::soteria::AppCustomRememberMe");
-
-    @AfterClass
-    public static void printSummary(){
-      stat.printSummary();
-    }
-
-    @Deployment(testable = false)
-    public static Archive<?> createDeployment() {
-        return mavenWar();
-    }
-
-
-    @Test
-    public void testHttpOnlyIsTrue() {
-        readFromServer("/servlet?name=reza&password=secret1&rememberme=true");
-
-        assertTrue(getWebClient().getCookieManager().getCookie("GLASSFISHCOOKIE").isHttpOnly());
-    }
-
-    @Test
-    public void testSecureOnlyIsFalse() {
-        readFromServer("/servlet?name=reza&password=secret1&rememberme=true");
-
-        assertFalse(getWebClient().getCookieManager().getCookie("GLASSFISHCOOKIE").isSecure());
-    }
-
-    @Test
-    public void testAuthenticated() {
-        assertDefaultAuthenticated(
-            readFromServer("/servlet?name=reza&password=secret1"));
-    }
-
-    @Test
-    public void testNotAuthenticated() {
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet"));
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongName() {
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet?name=romo&password=secret1"));
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongPassword() {
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet?name=reza&password=wrongpassword"));
-    }
-
-    @Test
-    public void testAuthenticatedRememberMe() {
-
-        // 1. Initially request page when we're not authenticated
-
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet"));
-
-
-        // 2. Authenticate without remember me
-
-        String response = readFromServer("/servlet?name=reza&password=secret1");
-
-        assertDefaultAuthenticated(
-            response);
-
-        // For the initial authentication, the mechanism should be called
-
-        assertTrue(
-            "Authentication mechanism should have been called, but wasn't",
-            response.contains("authentication mechanism called: true"));
-
-
-        // 3. Request same page again within same http session, without remember me
-        //    specified should NOT be authenticated
-
-        response = readFromServer("/servlet");
-
-        assertDefaultNotAuthenticated(
-            response);
-
-
-        // 4. Authenticate with remember me
-
-        response = readFromServer("/servlet?name=reza&password=secret1&rememberme=true");
-
-        assertDefaultAuthenticated(
-            response);
-
-        // For the initial authentication, the mechanism should be called again
-
-        assertTrue(
-            "Authentication mechanism should have been called, but wasn't",
-            response.contains("authentication mechanism called: true"));
-
-
-        // 5. Request same page again within same http session, with remember me
-        //    specified should be authenticated
-
-        response = readFromServer("/servlet");
-
-        assertDefaultAuthenticated(
-            response);
-
-        // For the subsequent authentication, the mechanism should not be called again
-        // (the remember me interceptor takes care of this)
-
-        assertTrue(
-            "Authentication mechanism should not have been called, but was",
-            response.contains("authentication mechanism called: false"));
-
-
-        // 6. "Expire" the session by removing all cookies except the
-        //    remember me cookie
-
-        for (Cookie cookie : getWebClient().getCookieManager().getCookies()) {
-            if (!"GLASSFISHCOOKIE".equals(cookie.getName())) {
-                getWebClient().getCookieManager().removeCookie(cookie);
-            }
-        }
-
-        // Request same page again
-
-        response = readFromServer("/servlet");
-
-        // Should still be authenticated
-
-        assertDefaultAuthenticated(
-            response);
-
-        // For the subsequent authentication, the mechanism should not be called again
-        // (the remember me interceptor takes care of this)
-
-        assertTrue(
-            "Authentication mechanism should not have been called, but was",
-            response.contains("authentication mechanism called: false"));
-
-
-        // 7. Logout. Should not be authenticated anymore
-
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet?logout=true"));
-
-
-        // 8. Request same page again, should still not be authenticated
-
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet"));
-
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/pom.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/pom.xml
deleted file mode 100644
index 4ce035c..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/pom.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.glassfish.soteria.test</groupId>
-        <artifactId>soteria</artifactId>
-        <version>6.2.6-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>app-custom-session</artifactId>
-    <packaging>war</packaging>
-
-    <build>
-        <finalName>app-custom-session</finalName>
-    </build>
-
-    <properties>
-        <failOnMissingWebXml>false</failOnMissingWebXml>
-    </properties>
-    <dependencies>
-        <dependency>
-            <groupId>org.glassfish.soteria.test</groupId>
-            <artifactId>common</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/src/main/java/org/glassfish/soteria/test/Servlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/src/main/java/org/glassfish/soteria/test/Servlet.java
deleted file mode 100644
index ddbdde0..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/src/main/java/org/glassfish/soteria/test/Servlet.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.io.IOException;
-
-import jakarta.annotation.security.DeclareRoles;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-/**
- * Test Servlet that prints out the name of the authenticated caller and whether
- * this caller is in any of the roles {foo, bar, kaz}
- *
- *
- */
-@DeclareRoles({ "foo", "bar", "kaz" })
-@WebServlet("/servlet")
-public class Servlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
-        if (request.getParameter("logout") != null) {
-            request.logout(); // slightly ill-defined, but only for current request
-            request.getSession().invalidate();
-        }
-
-        response.getWriter().write("This is a servlet \n");
-
-        String webName = null;
-        if (request.getUserPrincipal() != null) {
-            webName = request.getUserPrincipal().getName();
-        }
-
-        response.getWriter().write("web username: " + webName + "\n");
-
-        response.getWriter().write("web user has role \"foo\": " + request.isUserInRole("foo") + "\n");
-        response.getWriter().write("web user has role \"bar\": " + request.isUserInRole("bar") + "\n");
-        response.getWriter().write("web user has role \"kaz\": " + request.isUserInRole("kaz") + "\n");
-
-        String mechanismCalled = (String) request.getAttribute("authentication-mechanism-called");
-
-        response.getWriter().write("\nauthentication mechanism called: " + (mechanismCalled != null? mechanismCalled : false) + "\n");
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
deleted file mode 100644
index 227ae4a..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-
-import jakarta.enterprise.context.RequestScoped;
-import jakarta.inject.Inject;
-import javax.security.enterprise.AuthenticationException;
-import javax.security.enterprise.AuthenticationStatus;
-import javax.security.enterprise.authentication.mechanism.http.AutoApplySession;
-import javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism;
-import javax.security.enterprise.authentication.mechanism.http.HttpMessageContext;
-import javax.security.enterprise.credential.Password;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStoreHandler;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-import static javax.security.enterprise.identitystore.CredentialValidationResult.Status.VALID;
-
-@RequestScoped
-@AutoApplySession
-public class TestAuthenticationMechanism implements HttpAuthenticationMechanism {
-
-    @Inject
-    private IdentityStoreHandler identityStoreHandler;
-
-    @Override
-    public AuthenticationStatus validateRequest(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext) throws AuthenticationException {
-
-        request.setAttribute("authentication-mechanism-called", "true");
-
-        if (request.getParameter("name") != null && request.getParameter("password") != null) {
-
-            // Get the (caller) name and password from the request
-            // NOTE: This is for the smallest possible example only. In practice
-            // putting the password in a request query parameter is highly
-            // insecure
-            String name = request.getParameter("name");
-            Password password = new Password(request.getParameter("password"));
-
-            // Delegate the {credentials in -> identity data out} function to
-            // the Identity Store
-            CredentialValidationResult result = identityStoreHandler.validate(
-                new UsernamePasswordCredential(name, password));
-
-            if (result.getStatus() == VALID) {
-                // Communicate the details of the authenticated user to the
-                // container. In many cases the underlying handler will just store the details
-                // and the container will actually handle the login after we return from
-                // this method.
-                return httpMessageContext.notifyContainerAboutLogin(
-                    result.getCallerPrincipal(), result.getCallerGroups());
-            } else {
-                return httpMessageContext.responseUnauthorized();
-            }
-        }
-
-        return httpMessageContext.doNothing();
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
deleted file mode 100644
index 403af16..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static java.util.Arrays.asList;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.NOT_VALIDATED_RESULT;
-
-import java.util.HashSet;
-
-import jakarta.enterprise.context.RequestScoped;
-import javax.security.enterprise.credential.Credential;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStore;
-
-@RequestScoped
-public class TestIdentityStore implements IdentityStore {
-
-    @Override
-    public CredentialValidationResult validate(Credential credential) {
-        if (credential instanceof UsernamePasswordCredential) {
-            return validate((UsernamePasswordCredential) credential);
-        }
-
-        return NOT_VALIDATED_RESULT;
-    }
-
-    public CredentialValidationResult validate(UsernamePasswordCredential usernamePasswordCredential) {
-
-        if (usernamePasswordCredential.compareTo("reza", "secret1")) {
-            return new CredentialValidationResult("reza", new HashSet<>(asList("foo", "bar")));
-        }
-
-        return INVALID_RESULT;
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/src/main/webapp/WEB-INF/beans.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/src/main/webapp/WEB-INF/beans.xml
deleted file mode 100644
index e69de29..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/src/main/webapp/WEB-INF/beans.xml
+++ /dev/null
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/src/main/webapp/WEB-INF/glassfish-web.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/src/main/webapp/WEB-INF/glassfish-web.xml
deleted file mode 100644
index 11d0ee6..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/src/main/webapp/WEB-INF/glassfish-web.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<glassfish-web-app>
-
-    <security-role-mapping>
-        <role-name>foo</role-name>
-        <group-name>foo</group-name>
-    </security-role-mapping>
-
-    <security-role-mapping>
-        <role-name>bar</role-name>
-        <group-name>bar</group-name>
-    </security-role-mapping>
-
-    <security-role-mapping>
-        <role-name>kaz</role-name>
-        <group-name>kaz</group-name>
-    </security-role-mapping>
-
-    <parameter-encoding default-charset="UTF-8" />
-
-</glassfish-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/src/test/java/org/glassfish/soteria/test/AppCustomSessionIT.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/src/test/java/org/glassfish/soteria/test/AppCustomSessionIT.java
deleted file mode 100644
index 67c26bc..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom-session/src/test/java/org/glassfish/soteria/test/AppCustomSessionIT.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static org.glassfish.soteria.test.Assert.assertDefaultAuthenticated;
-import static org.glassfish.soteria.test.Assert.assertDefaultNotAuthenticated;
-import static org.glassfish.soteria.test.ShrinkWrap.mavenWar;
-import static org.junit.Assert.assertTrue;
-
-import org.glassfish.soteria.test.ArquillianBase;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import org.junit.Rule;
-import org.junit.AfterClass;
-import org.junit.rules.TestWatcher;
-
-import com.gargoylesoftware.htmlunit.DefaultCredentialsProvider;
-import com.gargoylesoftware.htmlunit.WebResponse;
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-
-@RunWith(Arquillian.class)
-public class AppCustomSessionIT extends ArquillianBase {
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    @Rule
-    public TestWatcher reportWatcher=new ReportWatcher(stat, "Security::soteria::AppCustomSession");
-
-    @AfterClass
-    public static void printSummary(){
-      stat.printSummary();
-    }
-
-    @Deployment(testable = false)
-    public static Archive<?> createDeployment() {
-        return mavenWar();
-    }
-
-    @Test
-    public void testAuthenticated() {
-        assertDefaultAuthenticated(
-            readFromServer("/servlet?name=reza&password=secret1"));
-    }
-
-    @Test
-    public void testNotAuthenticated() {
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet"));
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongName() {
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet?name=romo&password=secret1"));
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongPassword() {
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet?name=reza&password=wrongpassword"));
-    }
-
-    @Test
-    public void testAuthenticatedSession() {
-
-        // 1. Initially request page when we're not authenticated
-
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet"));
-
-
-        // 2. Authenticate
-
-        String response = readFromServer("/servlet?name=reza&password=secret1");
-
-        assertDefaultAuthenticated(
-            response);
-
-        // For the initial authentication, the mechanism should be called
-
-        assertTrue(
-            "Authentication mechanism should have been called, but wasn't",
-            response.contains("authentication mechanism called: true"));
-
-
-        // 3. Request same page again within same http session, should still
-        //    be authenticated
-
-        response = readFromServer("/servlet");
-
-        assertDefaultAuthenticated(
-            response);
-
-        // For the subsequent authentication, the mechanism should NOT be called
-        // (the session interceptor takes care of authentication now)
-
-        assertTrue(
-            "Authentication mechanism should have been called, but wasn't",
-            response.contains("authentication mechanism called: false"));
-
-
-        // 4. Logout. Should not be authenticated anymore
-
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet?logout=true"));
-
-
-        // 5. Request same page again, should still not be authenticated
-
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet"));
-
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/pom.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/pom.xml
deleted file mode 100644
index d85a476..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/pom.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.glassfish.soteria.test</groupId>
-        <artifactId>soteria</artifactId>
-        <version>6.2.6-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>app-custom</artifactId>
-    <packaging>war</packaging>
-
-    <build>
-        <finalName>app-custom</finalName>
-    </build>
-
-    <properties>
-        <failOnMissingWebXml>false</failOnMissingWebXml>
-    </properties>
-    <dependencies>
-        <dependency>
-            <groupId>org.glassfish.soteria.test</groupId>
-            <artifactId>common</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/main/java/org/glassfish/soteria/test/ProtectedServlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/main/java/org/glassfish/soteria/test/ProtectedServlet.java
deleted file mode 100644
index 106324b..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/main/java/org/glassfish/soteria/test/ProtectedServlet.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.io.IOException;
-
-import jakarta.inject.Inject;
-import javax.security.enterprise.SecurityContext;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.HttpConstraint;
-import jakarta.servlet.annotation.ServletSecurity;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-/**
- * Test Servlet that prints out the name of the authenticated caller and whether
- * this caller is in any of the roles {foo, bar, kaz}
- *
- *
- */
-@WebServlet("/protectedServlet")
-@ServletSecurity(@HttpConstraint(rolesAllowed = "foo"))
-public class ProtectedServlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Inject
-    private SecurityContext securityContext;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
-        response.getWriter().write("This is a servlet \n");
-
-        String webName = null;
-        if (request.getUserPrincipal() != null) {
-            webName = request.getUserPrincipal().getName();
-        }
-
-        response.getWriter().write("web username: " + webName + "\n");
-
-        response.getWriter().write("web user has role \"foo\": " + request.isUserInRole("foo") + "\n");
-        response.getWriter().write("web user has role \"bar\": " + request.isUserInRole("bar") + "\n");
-        response.getWriter().write("web user has role \"kaz\": " + request.isUserInRole("kaz") + "\n");
-
-        String contextName = null;
-        if (securityContext.getCallerPrincipal() != null) {
-            contextName = securityContext.getCallerPrincipal().getName();
-        }
-
-        response.getWriter().write("context username: " + contextName + "\n");
-
-        response.getWriter().write("context user has role \"foo\": " + securityContext.isCallerInRole("foo") + "\n");
-        response.getWriter().write("context user has role \"bar\": " + securityContext.isCallerInRole("bar") + "\n");
-        response.getWriter().write("context user has role \"kaz\": " + securityContext.isCallerInRole("kaz") + "\n");
-
-        response.getWriter().write("has access " + securityContext.hasAccessToWebResource("/servlets"));
-
-
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/main/java/org/glassfish/soteria/test/Servlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/main/java/org/glassfish/soteria/test/Servlet.java
deleted file mode 100644
index 51a17e9..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/main/java/org/glassfish/soteria/test/Servlet.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.io.IOException;
-
-import jakarta.annotation.security.DeclareRoles;
-import jakarta.inject.Inject;
-import javax.security.enterprise.SecurityContext;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-import org.glassfish.soteria.SecurityContextImpl;
-
-/**
- * Test Servlet that prints out the name of the authenticated caller and whether
- * this caller is in any of the roles {foo, bar, kaz}
- *
- *
- */
-@DeclareRoles({ "foo", "bar", "kaz" })
-@WebServlet("/servlet")
-public class Servlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Inject
-    private SecurityContext securityContext;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
-        response.getWriter().write("This is a servlet \n");
-
-        String webName = null;
-        if (request.getUserPrincipal() != null) {
-            webName = request.getUserPrincipal().getName();
-        }
-
-        response.getWriter().write("web username: " + webName + "\n");
-
-        response.getWriter().write("web user has role \"foo\": " + request.isUserInRole("foo") + "\n");
-        response.getWriter().write("web user has role \"bar\": " + request.isUserInRole("bar") + "\n");
-        response.getWriter().write("web user has role \"kaz\": " + request.isUserInRole("kaz") + "\n");
-
-        String contextName = null;
-        if (securityContext.getCallerPrincipal() != null) {
-            contextName = securityContext.getCallerPrincipal().getName();
-        }
-
-        response.getWriter().write("context username: " + contextName + "\n");
-
-        response.getWriter().write("context user has role \"foo\": " + securityContext.isCallerInRole("foo") + "\n");
-        response.getWriter().write("context user has role \"bar\": " + securityContext.isCallerInRole("bar") + "\n");
-        response.getWriter().write("context user has role \"kaz\": " + securityContext.isCallerInRole("kaz") + "\n");
-
-        response.getWriter().write("has access " + securityContext.hasAccessToWebResource("/protectedServlet") + "\n");
-
-        response.getWriter().write("All declared roles of user " + ((SecurityContextImpl)securityContext).getAllDeclaredCallerRoles() + "\n");
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
deleted file mode 100644
index 9efb76c..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static javax.security.enterprise.identitystore.CredentialValidationResult.Status.VALID;
-
-import jakarta.enterprise.context.RequestScoped;
-import jakarta.inject.Inject;
-import javax.security.enterprise.AuthenticationStatus;
-import javax.security.enterprise.AuthenticationException;
-import jakarta.security.auth.message.AuthException;
-import javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism;
-import javax.security.enterprise.authentication.mechanism.http.HttpMessageContext;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStoreHandler;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-@RequestScoped
-public class TestAuthenticationMechanism implements HttpAuthenticationMechanism {
-
-    @Inject
-    private IdentityStoreHandler identityStoreHandler;
-
-    @Override
-    public AuthenticationStatus validateRequest(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext) throws AuthenticationException {
-
-            // Get the (caller) name and password from the request
-        // NOTE: This is for the smallest possible example only. In practice
-        // putting the password in a request query parameter is highly
-        // insecure
-        String name = request.getParameter("name");
-        String password = request.getParameter("password");
-
-        if (name != null && password != null) {
-
-            // Delegate the {credentials in -> identity data out} function to
-            // the Identity Store
-            CredentialValidationResult result = identityStoreHandler.validate(
-                new UsernamePasswordCredential(name, password));
-
-            if (result.getStatus() == VALID) {
-                // Communicate the details of the authenticated user to the
-                // container. In many cases the underlying handler will just store the details
-                // and the container will actually handle the login after we return from
-                // this method.
-                return httpMessageContext.notifyContainerAboutLogin(
-                    result.getCallerPrincipal(), result.getCallerGroups());
-            } else {
-                return httpMessageContext.responseUnauthorized();
-            }
-        }
-
-        return httpMessageContext.doNothing();
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
deleted file mode 100644
index c4556df..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static java.util.Arrays.asList;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT;
-
-import java.util.HashSet;
-
-import jakarta.enterprise.context.RequestScoped;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStore;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-
-@RequestScoped
-public class TestIdentityStore implements IdentityStore {
-
-    public CredentialValidationResult validate(UsernamePasswordCredential usernamePasswordCredential) {
-
-        if (usernamePasswordCredential.compareTo("reza", "secret1")) {
-            return new CredentialValidationResult("reza", new HashSet<>(asList("foo", "bar")));
-        }
-
-        return INVALID_RESULT;
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/main/webapp/WEB-INF/beans.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/main/webapp/WEB-INF/beans.xml
deleted file mode 100644
index e69de29..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/main/webapp/WEB-INF/beans.xml
+++ /dev/null
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/main/webapp/WEB-INF/web.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 48a35fa..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<web-app
-        xmlns="http://xmlns.jcp.org/xml/ns/javaee"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
-        version="3.1"
->
-
-        <!-- Security constraints and roles. -->
-
-        <security-constraint>
-                <web-resource-collection>
-                        <web-resource-name>User pages</web-resource-name>
-                        <url-pattern>/protectedServlet</url-pattern>
-                </web-resource-collection>
-                <auth-constraint>
-                        <role-name>foo</role-name>
-                </auth-constraint>
-        </security-constraint>
-
-
-        <security-role>
-                <role-name>foo</role-name>
-        </security-role>
-
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/test/java/org/glassfish/soteria/test/AppCustomIT.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/test/java/org/glassfish/soteria/test/AppCustomIT.java
deleted file mode 100644
index 2a89b80..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-custom/src/test/java/org/glassfish/soteria/test/AppCustomIT.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static org.glassfish.soteria.test.Assert.*;
-import static org.glassfish.soteria.test.ShrinkWrap.mavenWar;
-
-import org.glassfish.soteria.test.ArquillianBase;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import org.junit.Rule;
-import org.junit.AfterClass;
-import org.junit.rules.TestWatcher;
-
-import com.gargoylesoftware.htmlunit.DefaultCredentialsProvider;
-import com.gargoylesoftware.htmlunit.WebResponse;
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-
-@RunWith(Arquillian.class)
-public class AppCustomIT extends ArquillianBase {
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    @Rule
-    public TestWatcher reportWatcher=new ReportWatcher(stat, "Security::soteria::AppCustom");
-
-    @AfterClass
-    public static void printSummary(){
-      stat.printSummary();
-    }
-
-    @Deployment(testable = false)
-    public static Archive<?> createDeployment() {
-        return mavenWar();
-    }
-
-    @Test
-    public void testAuthenticated() {
-        assertDefaultAuthenticated(
-                responseFromServer("/servlet?name=reza&password=secret1"));
-    }
-
-    @Test
-    public void testNotAuthenticated() {
-        assertDefaultNotAuthenticatedUnprotected(
-                responseFromServer("/servlet"));
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongName() {
-        assertDefaultNotAuthenticated(
-                responseFromServer("/servlet?name=romo&password=secret1"));
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongPassword() {
-        assertDefaultNotAuthenticated(
-                responseFromServer("/servlet?name=reza&password=wrongpassword"));
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-db/pom.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-db/pom.xml
deleted file mode 100644
index f10e03b..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-db/pom.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-        <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.glassfish.soteria.test</groupId>
-    <artifactId>soteria</artifactId>
-    <version>6.2.6-SNAPSHOT</version>
-  </parent>
-
-        <artifactId>app-db</artifactId>
-        <packaging>war</packaging>
-
-        <build>
-        <finalName>app-db</finalName>
-        </build>
-
-    <properties>
-        <failOnMissingWebXml>false</failOnMissingWebXml>
-    </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.glassfish.soteria.test</groupId>
-      <artifactId>common</artifactId>
-      <version>6.2.6-SNAPSHOT</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/java/org/glassfish/soteria/test/ApplicationConfig.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/java/org/glassfish/soteria/test/ApplicationConfig.java
deleted file mode 100644
index 0083211..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/java/org/glassfish/soteria/test/ApplicationConfig.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.inject.Named;
-import javax.security.enterprise.identitystore.DatabaseIdentityStoreDefinition;
-
-@DatabaseIdentityStoreDefinition(
-    dataSourceLookup="${'jdbc/__default'}",
-    callerQuery="#{'select password from caller where name = ?'}",
-    groupsQuery="select group_name from caller_groups where caller_name = ?",
-    hashAlgorithm = PlaintextPasswordHash.class,
-    hashAlgorithmParameters = {
-        "foo=bar",
-        "kax=zak",
-        "foox=${'iop'}",
-        "${applicationConfig.dyna}"
-
-    } // just for test / example
-)
-@ApplicationScoped
-@Named
-public class ApplicationConfig {
-
-    public String[] getDyna() {
-        return new String[] {"dyn=1","dyna=2","dynam=3"};
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/java/org/glassfish/soteria/test/DatabaseSetup.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/java/org/glassfish/soteria/test/DatabaseSetup.java
deleted file mode 100644
index 0d4d1c3..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/java/org/glassfish/soteria/test/DatabaseSetup.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-import jakarta.annotation.PostConstruct;
-import jakarta.annotation.PreDestroy;
-import jakarta.annotation.Resource;
-import jakarta.annotation.sql.DataSourceDefinition;
-import jakarta.ejb.Singleton;
-import jakarta.ejb.Startup;
-import javax.sql.DataSource;
-
-@Singleton
-@Startup
-public class DatabaseSetup {
-
-    @Resource(lookup="java:comp/DefaultDataSource")
-    private DataSource dataSource;
-
-    @PostConstruct
-    public void init() {
-
-        executeUpdate(dataSource, "CREATE TABLE caller(name VARCHAR(64) PRIMARY KEY, password VARCHAR(64))");
-        executeUpdate(dataSource, "CREATE TABLE caller_groups(caller_name VARCHAR(64), group_name VARCHAR(64))");
-
-        executeUpdate(dataSource, "INSERT INTO caller VALUES('reza', 'secret1')");
-        executeUpdate(dataSource, "INSERT INTO caller VALUES('alex', 'secret2')");
-        executeUpdate(dataSource, "INSERT INTO caller VALUES('arjan', 'secret2')");
-        executeUpdate(dataSource, "INSERT INTO caller VALUES('werner', 'secret2')");
-
-        executeUpdate(dataSource, "INSERT INTO caller_groups VALUES('reza', 'foo')");
-        executeUpdate(dataSource, "INSERT INTO caller_groups VALUES('reza', 'bar')");
-
-        executeUpdate(dataSource, "INSERT INTO caller_groups VALUES('alex', 'foo')");
-        executeUpdate(dataSource, "INSERT INTO caller_groups VALUES('alex', 'bar')");
-
-        executeUpdate(dataSource, "INSERT INTO caller_groups VALUES('arjan', 'foo')");
-        executeUpdate(dataSource, "INSERT INTO caller_groups VALUES('werner', 'foo')");
-    }
-
-    @PreDestroy
-    public void destroy() {
-            try {
-                    executeUpdate(dataSource, "DROP TABLE caller");
-                    executeUpdate(dataSource, "DROP TABLE caller_groups");
-            } catch (Exception e) {
-                    // silently ignore, concerns in-memory database
-            }
-    }
-
-    private void executeUpdate(DataSource dataSource, String query) {
-        try (Connection connection = dataSource.getConnection()) {
-            try (PreparedStatement statement = connection.prepareStatement(query)) {
-                statement.executeUpdate();
-            }
-        } catch (SQLException e) {
-           throw new IllegalStateException(e);
-        }
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/java/org/glassfish/soteria/test/PlaintextPasswordHash.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/java/org/glassfish/soteria/test/PlaintextPasswordHash.java
deleted file mode 100644
index aa26df2..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/java/org/glassfish/soteria/test/PlaintextPasswordHash.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-import java.util.Map;
-
-import jakarta.enterprise.context.Dependent;
-import javax.security.enterprise.identitystore.PasswordHash;
-
-@Dependent
-public class PlaintextPasswordHash implements PasswordHash {
-
-    @Override
-    public void initialize(Map<String, String> parameters) {
-
-    }
-
-    @Override
-    public String generate(char[] password) {
-        return new String(password);
-    }
-
-    @Override
-    public boolean verify(char[] password, String hashedPassword) {
-         //don't bother with constant time comparison; more portable
-         //this way, and algorithm will be used only for testing.
-        return (password != null && password.length > 0 &&
-                hashedPassword != null && hashedPassword.length() > 0 &&
-                hashedPassword.equals(new String(password)));
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/java/org/glassfish/soteria/test/Servlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/java/org/glassfish/soteria/test/Servlet.java
deleted file mode 100644
index e23a1f8..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/java/org/glassfish/soteria/test/Servlet.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.io.IOException;
-
-import jakarta.annotation.security.DeclareRoles;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-/**
- * Test Servlet that prints out the name of the authenticated caller and whether
- * this caller is in any of the roles {foo, bar, kaz}
- *
- *
- */
-@DeclareRoles({ "foo", "bar", "kaz" })
-@WebServlet("/servlet")
-public class Servlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
-        response.getWriter().write("This is a servlet \n");
-
-        String webName = null;
-        if (request.getUserPrincipal() != null) {
-            webName = request.getUserPrincipal().getName();
-        }
-
-        response.getWriter().write("web username: " + webName + "\n");
-
-        response.getWriter().write("web user has role \"foo\": " + request.isUserInRole("foo") + "\n");
-        response.getWriter().write("web user has role \"bar\": " + request.isUserInRole("bar") + "\n");
-        response.getWriter().write("web user has role \"kaz\": " + request.isUserInRole("kaz") + "\n");
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
deleted file mode 100644
index 45b2208..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-
-import jakarta.enterprise.context.RequestScoped;
-import jakarta.inject.Inject;
-import javax.security.enterprise.AuthenticationException;
-import javax.security.enterprise.AuthenticationStatus;
-import javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism;
-import javax.security.enterprise.authentication.mechanism.http.HttpMessageContext;
-import javax.security.enterprise.credential.Password;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStoreHandler;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-import static javax.security.enterprise.identitystore.CredentialValidationResult.Status.VALID;
-
-@RequestScoped
-public class TestAuthenticationMechanism implements HttpAuthenticationMechanism {
-
-    @Inject
-    private IdentityStoreHandler identityStoreHandler;
-
-    @Override
-    public AuthenticationStatus validateRequest(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext) throws AuthenticationException {
-
-        if (request.getParameter("name") != null && request.getParameter("password") != null) {
-
-            // Get the (caller) name and password from the request
-            // NOTE: This is for the smallest possible example only. In practice
-            // putting the password in a request query parameter is highly
-            // insecure
-            String name = request.getParameter("name");
-            Password password = new Password(request.getParameter("password"));
-
-            // Delegate the {credentials in -> identity data out} function to
-            // the Identity Store
-            CredentialValidationResult result = identityStoreHandler.validate(
-                new UsernamePasswordCredential(name, password));
-
-            if (result.getStatus() == VALID) {
-                // Communicate the details of the authenticated user to the
-                // container. In many cases the underlying handler will just store the details
-                // and the container will actually handle the login after we return from
-                // this method.
-                return httpMessageContext.notifyContainerAboutLogin(
-                    result.getCallerPrincipal(), result.getCallerGroups());
-            } else {
-                return httpMessageContext.responseUnauthorized();
-            }
-        }
-
-        return httpMessageContext.doNothing();
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/webapp/WEB-INF/beans.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/webapp/WEB-INF/beans.xml
deleted file mode 100644
index e69de29..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/webapp/WEB-INF/beans.xml
+++ /dev/null
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/webapp/WEB-INF/glassfish-web.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/webapp/WEB-INF/glassfish-web.xml
deleted file mode 100644
index 11d0ee6..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/main/webapp/WEB-INF/glassfish-web.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<glassfish-web-app>
-
-    <security-role-mapping>
-        <role-name>foo</role-name>
-        <group-name>foo</group-name>
-    </security-role-mapping>
-
-    <security-role-mapping>
-        <role-name>bar</role-name>
-        <group-name>bar</group-name>
-    </security-role-mapping>
-
-    <security-role-mapping>
-        <role-name>kaz</role-name>
-        <group-name>kaz</group-name>
-    </security-role-mapping>
-
-    <parameter-encoding default-charset="UTF-8" />
-
-</glassfish-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/test/java/org/glassfish/soteria/test/AppDBIT.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/test/java/org/glassfish/soteria/test/AppDBIT.java
deleted file mode 100644
index 9bf6a22..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-db/src/test/java/org/glassfish/soteria/test/AppDBIT.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static java.lang.System.getProperty;
-import static org.glassfish.soteria.test.Assert.assertDefaultAuthenticated;
-import static org.glassfish.soteria.test.Assert.assertDefaultNotAuthenticated;
-import static org.glassfish.soteria.test.ShrinkWrap.mavenWar;
-import static org.junit.Assume.assumeFalse;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.WebArchive;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-import org.junit.Rule;
-import org.junit.AfterClass;
-import org.junit.rules.TestWatcher;
-
-
-@RunWith(Arquillian.class)
-public class AppDBIT extends ArquillianBase {
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    @Rule
-    public TestWatcher reportWatcher=new ReportWatcher(stat, "Security::soteria::AppDB");
-
-    @AfterClass
-    public static void printSummary(){
-        stat.printSummary();
-    }
-
-
-    @Deployment(testable = false)
-    public static Archive<?> createDeployment() {
-        return mavenWar();
-    }
-
-    @Test
-    public void testAuthenticated() {
-        assertDefaultAuthenticated(
-            readFromServer("/servlet?name=reza&password=secret1"));
-    }
-
-    @Test
-    public void testNotAuthenticated() {
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet"));
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongName() {
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet?name=romo&password=secret1"));
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongPassword() {
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet?name=reza&password=wrongpassword"));
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/pom.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/pom.xml
deleted file mode 100644
index 6f49151..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/pom.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-        <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.glassfish.soteria.test</groupId>
-    <artifactId>soteria</artifactId>
-    <version>6.2.6-SNAPSHOT</version>
-  </parent>
-
-        <artifactId>app-double-ham</artifactId>
-        <packaging>war</packaging>
-
-        <build>
-        <finalName>app-double-ham</finalName>
-        </build>
-
-    <properties>
-        <failOnMissingWebXml>false</failOnMissingWebXml>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.glassfish.soteria.test</groupId>
-            <artifactId>common</artifactId>
-            <version>6.2.6-SNAPSHOT</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/main/java/org/glassfish/soteria/test/ProtectedServlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/main/java/org/glassfish/soteria/test/ProtectedServlet.java
deleted file mode 100644
index a4bdcdd..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/main/java/org/glassfish/soteria/test/ProtectedServlet.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.io.IOException;
-
-import jakarta.inject.Inject;
-import javax.security.enterprise.SecurityContext;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.HttpConstraint;
-import jakarta.servlet.annotation.ServletSecurity;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import javax.security.enterprise.authentication.mechanism.http.BasicAuthenticationMechanismDefinition;
-
-
-/**
- * Test Servlet that prints out the name of the authenticated caller and whether
- * this caller is in any of the roles {foo, bar, kaz}
- *
- *
- */
-
-@BasicAuthenticationMechanismDefinition(
-        realmName="test realm"
-)
-@WebServlet("/protectedServlet")
-@ServletSecurity(@HttpConstraint(rolesAllowed = "foo"))
-public class ProtectedServlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Inject
-    private SecurityContext securityContext;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
-        response.getWriter().write("This is a servlet \n");
-
-        String webName = null;
-        if (request.getUserPrincipal() != null) {
-            webName = request.getUserPrincipal().getName();
-        }
-
-        response.getWriter().write("web username: " + webName + "\n");
-
-        response.getWriter().write("web user has role \"foo\": " + request.isUserInRole("foo") + "\n");
-        response.getWriter().write("web user has role \"bar\": " + request.isUserInRole("bar") + "\n");
-        response.getWriter().write("web user has role \"kaz\": " + request.isUserInRole("kaz") + "\n");
-
-        String contextName = null;
-        if (securityContext.getCallerPrincipal() != null) {
-            contextName = securityContext.getCallerPrincipal().getName();
-        }
-
-        response.getWriter().write("context username: " + contextName + "\n");
-
-        response.getWriter().write("context user has role \"foo\": " + securityContext.isCallerInRole("foo") + "\n");
-        response.getWriter().write("context user has role \"bar\": " + securityContext.isCallerInRole("bar") + "\n");
-        response.getWriter().write("context user has role \"kaz\": " + securityContext.isCallerInRole("kaz") + "\n");
-
-        response.getWriter().write("has access " + securityContext.hasAccessToWebResource("/servlets"));
-
-
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/main/java/org/glassfish/soteria/test/Servlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/main/java/org/glassfish/soteria/test/Servlet.java
deleted file mode 100644
index d36ea39..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/main/java/org/glassfish/soteria/test/Servlet.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.io.IOException;
-
-import jakarta.annotation.security.DeclareRoles;
-import jakarta.inject.Inject;
-import javax.security.enterprise.SecurityContext;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import javax.security.enterprise.authentication.mechanism.http.BasicAuthenticationMechanismDefinition;
-import org.glassfish.soteria.SecurityContextImpl;
-
-/**
- * Test Servlet that prints out the name of the authenticated caller and whether
- * this caller is in any of the roles {foo, bar, kaz}
- *
- *
- */
-@BasicAuthenticationMechanismDefinition(
-        realmName="test realm"
-)
-@DeclareRoles({ "foo", "bar", "kaz" })
-@WebServlet("/servlet")
-public class Servlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Inject
-    private SecurityContext securityContext;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
-        response.getWriter().write("This is a servlet \n");
-
-        String webName = null;
-        if (request.getUserPrincipal() != null) {
-            webName = request.getUserPrincipal().getName();
-        }
-
-        response.getWriter().write("web username: " + webName + "\n");
-
-        response.getWriter().write("web user has role \"foo\": " + request.isUserInRole("foo") + "\n");
-        response.getWriter().write("web user has role \"bar\": " + request.isUserInRole("bar") + "\n");
-        response.getWriter().write("web user has role \"kaz\": " + request.isUserInRole("kaz") + "\n");
-
-        String contextName = null;
-        if (securityContext.getCallerPrincipal() != null) {
-            contextName = securityContext.getCallerPrincipal().getName();
-        }
-
-        response.getWriter().write("context username: " + contextName + "\n");
-
-        response.getWriter().write("context user has role \"foo\": " + securityContext.isCallerInRole("foo") + "\n");
-        response.getWriter().write("context user has role \"bar\": " + securityContext.isCallerInRole("bar") + "\n");
-        response.getWriter().write("context user has role \"kaz\": " + securityContext.isCallerInRole("kaz") + "\n");
-
-        response.getWriter().write("has access " + securityContext.hasAccessToWebResource("/protectedServlet") + "\n");
-
-        response.getWriter().write("All declared roles of user " + ((SecurityContextImpl)securityContext).getAllDeclaredCallerRoles() + "\n");
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
deleted file mode 100644
index f83eabc..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static javax.security.enterprise.identitystore.CredentialValidationResult.Status.VALID;
-
-import jakarta.enterprise.context.RequestScoped;
-import jakarta.inject.Inject;
-import javax.security.enterprise.AuthenticationStatus;
-import javax.security.enterprise.AuthenticationException;
-import javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism;
-import javax.security.enterprise.authentication.mechanism.http.HttpMessageContext;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStoreHandler;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-@RequestScoped
-public class TestAuthenticationMechanism implements HttpAuthenticationMechanism {
-
-    @Inject
-    private IdentityStoreHandler identityStoreHandler;
-
-    @Override
-    public AuthenticationStatus validateRequest(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext) throws AuthenticationException {
-
-            // Get the (caller) name and password from the request
-        // NOTE: This is for the smallest possible example only. In practice
-        // putting the password in a request query parameter is highly
-        // insecure
-        String name = request.getParameter("name");
-        String password = request.getParameter("password");
-
-        if (name != null && password != null) {
-
-            // Delegate the {credentials in -> identity data out} function to
-            // the Identity Store
-            CredentialValidationResult result = identityStoreHandler.validate(
-                new UsernamePasswordCredential(name, password));
-
-            if (result.getStatus() == VALID) {
-                // Communicate the details of the authenticated user to the
-                // container. In many cases the underlying handler will just store the details
-                // and the container will actually handle the login after we return from
-                // this method.
-                return httpMessageContext.notifyContainerAboutLogin(
-                    result.getCallerPrincipal(), result.getCallerGroups());
-            } else {
-                return httpMessageContext.responseUnauthorized();
-            }
-        }
-
-        return httpMessageContext.doNothing();
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
deleted file mode 100644
index c4556df..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static java.util.Arrays.asList;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT;
-
-import java.util.HashSet;
-
-import jakarta.enterprise.context.RequestScoped;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStore;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-
-@RequestScoped
-public class TestIdentityStore implements IdentityStore {
-
-    public CredentialValidationResult validate(UsernamePasswordCredential usernamePasswordCredential) {
-
-        if (usernamePasswordCredential.compareTo("reza", "secret1")) {
-            return new CredentialValidationResult("reza", new HashSet<>(asList("foo", "bar")));
-        }
-
-        return INVALID_RESULT;
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/main/webapp/WEB-INF/beans.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/main/webapp/WEB-INF/beans.xml
deleted file mode 100644
index e69de29..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/main/webapp/WEB-INF/beans.xml
+++ /dev/null
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/main/webapp/WEB-INF/web.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 48a35fa..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<web-app
-        xmlns="http://xmlns.jcp.org/xml/ns/javaee"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
-        version="3.1"
->
-
-        <!-- Security constraints and roles. -->
-
-        <security-constraint>
-                <web-resource-collection>
-                        <web-resource-name>User pages</web-resource-name>
-                        <url-pattern>/protectedServlet</url-pattern>
-                </web-resource-collection>
-                <auth-constraint>
-                        <role-name>foo</role-name>
-                </auth-constraint>
-        </security-constraint>
-
-
-        <security-role>
-                <role-name>foo</role-name>
-        </security-role>
-
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/test/java/org/glassfish/soteria/test/AppDoubleHAMIT.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/test/java/org/glassfish/soteria/test/AppDoubleHAMIT.java
deleted file mode 100644
index 1b5eb6e..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-double-ham/src/test/java/org/glassfish/soteria/test/AppDoubleHAMIT.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static org.glassfish.soteria.test.Assert.*;
-import static org.glassfish.soteria.test.ShrinkWrap.mavenWar;
-
-import org.glassfish.soteria.test.ArquillianBase;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import org.junit.Rule;
-import org.junit.AfterClass;
-import org.junit.rules.TestWatcher;
-
-import com.gargoylesoftware.htmlunit.DefaultCredentialsProvider;
-import com.gargoylesoftware.htmlunit.WebResponse;
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-
-@RunWith(Arquillian.class)
-public class AppDoubleHAMIT extends ArquillianBase {
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    @Rule
-    public TestWatcher reportWatcher=new ReportWatcher(stat, "Security::soteria::AppDoubleHam");
-
-    @AfterClass
-    public static void printSummary(){
-      stat.printSummary();
-    }
-
-    @Deployment(testable = false)
-    public static Archive<?> createDeployment() {
-        return mavenWar();
-    }
-
-    @Test
-    public void testBasicHAM() {
-
-        DefaultCredentialsProvider credentialsProvider = new DefaultCredentialsProvider();
-        credentialsProvider.addCredentials("reza", "secret1");
-
-        getWebClient().setCredentialsProvider(credentialsProvider);
-
-        assertNotAuthenticatedError(
-                responseFromServer("/servlet"));
-    }
-
-    @Test
-    public void testCustomHam() {
-        assertNotAuthenticatedError(
-                responseFromServer("/servlet?name=reza&password=secret1"));
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/pom.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/pom.xml
deleted file mode 100644
index a344289..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/pom.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-        <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.glassfish.soteria.test</groupId>
-    <artifactId>soteria</artifactId>
-    <version>6.2.6-SNAPSHOT</version>
-  </parent>
-
-        <artifactId>app-ham-ordering</artifactId>
-        <packaging>war</packaging>
-
-        <build>
-        <finalName>app-ham-ordering</finalName>
-        </build>
-
-    <properties>
-        <failOnMissingWebXml>false</failOnMissingWebXml>
-    </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.glassfish.soteria.test</groupId>
-      <artifactId>common</artifactId>
-      <version>6.2.6-SNAPSHOT</version>
-      <scope>test</scope>
-      </dependency>
-  </dependencies>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/src/main/java/org/glassfish/soteria/test/Servlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/src/main/java/org/glassfish/soteria/test/Servlet.java
deleted file mode 100644
index f9e5be7..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/src/main/java/org/glassfish/soteria/test/Servlet.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.io.IOException;
-
-import jakarta.annotation.security.DeclareRoles;
-import jakarta.inject.Inject;
-import javax.security.enterprise.SecurityContext;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-import org.glassfish.soteria.SecurityContextImpl;
-import java.util.stream.*;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Arrays;
-/**
- * Test Servlet that prints out the name of the authenticated caller and whether
- * this caller is in any of the roles {foo, bar, kaz}
- *
- *
- */
-@DeclareRoles({ "foo", "bar", "kaz" })
-@WebServlet("/servlet")
-public class Servlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Inject
-    private SecurityContext securityContext;
-
-    private void tagHttpRequest(HttpServletRequest request,String methodName){
-
-        if(request.getAttribute("methodInvList") == null){
-            List<String> invList= new ArrayList<>();
-            invList.add(methodName);
-            request.setAttribute("methodInvList", invList.stream().collect(Collectors.joining(",")));
-        }else{
-            String invListStr = (String)request.getAttribute("methodInvList");
-            List<String> invList = new ArrayList(Arrays.asList(invListStr.split(",")));
-            invList.add(methodName);
-            request.setAttribute("methodInvList", invList.stream().collect(Collectors.joining(",")));
-        }
-    }
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
-
-        tagHttpRequest(request,"doGet");
-        response.getWriter().write("This is a servlet \n");
-
-        String webName = null;
-        if (request.getUserPrincipal() != null) {
-            webName = request.getUserPrincipal().getName();
-        }
-
-        response.getWriter().write("web username: " + webName + "\n");
-
-        response.getWriter().write("web user has role \"foo\": " + request.isUserInRole("foo") + "\n");
-        response.getWriter().write("web user has role \"bar\": " + request.isUserInRole("bar") + "\n");
-        response.getWriter().write("web user has role \"kaz\": " + request.isUserInRole("kaz") + "\n");
-
-        String contextName = null;
-        if (securityContext.getCallerPrincipal() != null) {
-            contextName = securityContext.getCallerPrincipal().getName();
-        }
-
-        response.getWriter().write("context username: " + contextName + "\n");
-
-
-        response.getWriter().write("context user has role \"foo\": " + securityContext.isCallerInRole("foo") + "\n");
-        response.getWriter().write("context user has role \"bar\": " + securityContext.isCallerInRole("bar") + "\n");
-        response.getWriter().write("context user has role \"kaz\": " + securityContext.isCallerInRole("kaz") + "\n");
-
-        response.getWriter().write("has access " + securityContext.hasAccessToWebResource("/protectedServlet") + "\n");
-
-        response.getWriter().write("All declared roles of user " + ((SecurityContextImpl)securityContext).getAllDeclaredCallerRoles() + "\n");
-        String invListStr = (String)request.getAttribute("methodInvList");
-        response.getWriter().write("OrderingList: " + invListStr);
-        boolean doLogout = Boolean.parseBoolean(request.getParameter("doLogout"));
-        if(doLogout)
-            request.logout();
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
deleted file mode 100644
index bd4c138..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static javax.security.enterprise.identitystore.CredentialValidationResult.Status.VALID;
-import java.io.IOException;
-import jakarta.enterprise.context.RequestScoped;
-import jakarta.inject.Inject;
-import javax.security.enterprise.AuthenticationStatus;
-import javax.security.enterprise.AuthenticationException;
-import javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism;
-import javax.security.enterprise.authentication.mechanism.http.HttpMessageContext;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStoreHandler;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import java.util.stream.*;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Arrays;
-import static javax.security.enterprise.AuthenticationStatus.*;
-
-@RequestScoped
-public class TestAuthenticationMechanism implements HttpAuthenticationMechanism {
-
-    @Inject
-    private IdentityStoreHandler identityStoreHandler;
-
-    @Override
-    public AuthenticationStatus validateRequest(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext) throws AuthenticationException {
-
-        // Get the (caller) name and password from the request
-        // NOTE: This is for the smallest possible example only. In practice
-        // putting the password in a request query parameter is highly
-        // insecure
-        String name = request.getParameter("name");
-        String password = request.getParameter("password");
-        tagHttpRequest(request,"validateRequest");
-        if (name != null && password != null) {
-
-            // Delegate the {credentials in -> identity data out} function to
-            // the Identity Store
-            CredentialValidationResult result = identityStoreHandler.validate(
-                new UsernamePasswordCredential(name, password));
-
-            if (result.getStatus() == VALID) {
-                // Communicate the details of the authenticated user to the
-                // container. In many cases the underlying handler will just store the details
-                // and the container will actually handle the login after we return from
-                // this method.
-                return httpMessageContext.notifyContainerAboutLogin(
-                    result.getCallerPrincipal(), result.getCallerGroups());
-            } else {
-                return httpMessageContext.responseUnauthorized();
-            }
-        }
-
-        return httpMessageContext.doNothing();
-    }
-
-    @Override
-    public AuthenticationStatus secureResponse(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext)  throws AuthenticationException {
-        try {
-            response.getWriter().write(",secureResponse");
-        }catch (IOException e){
-            e.printStackTrace();
-        }
-        tagHttpRequest(request,"secureResponse");
-        return SUCCESS;
-    }
-
-    @Override
-    public void cleanSubject(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext) {
-        try {
-            response.getWriter().write(",cleanSubject");
-        }catch (IOException e){
-            e.printStackTrace();
-        }
-        tagHttpRequest(request,"cleanSubject");
-    }
-
-    private void tagHttpRequest(HttpServletRequest request,String methodName){
-
-        if(request.getAttribute("methodInvList") == null){
-            List<String> invList= new ArrayList<>();
-            invList.add(methodName);
-            request.setAttribute("methodInvList", invList.stream().collect(Collectors.joining(",")));
-        }else{
-            String invListStr = (String)request.getAttribute("methodInvList");
-            List<String> invList = new ArrayList(Arrays.asList(invListStr.split(",")));
-            invList.add(methodName);
-            request.setAttribute("methodInvList", invList.stream().collect(Collectors.joining(",")));
-        }
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
deleted file mode 100644
index c4556df..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static java.util.Arrays.asList;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT;
-
-import java.util.HashSet;
-
-import jakarta.enterprise.context.RequestScoped;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStore;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-
-@RequestScoped
-public class TestIdentityStore implements IdentityStore {
-
-    public CredentialValidationResult validate(UsernamePasswordCredential usernamePasswordCredential) {
-
-        if (usernamePasswordCredential.compareTo("reza", "secret1")) {
-            return new CredentialValidationResult("reza", new HashSet<>(asList("foo", "bar")));
-        }
-
-        return INVALID_RESULT;
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/src/main/webapp/WEB-INF/beans.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/src/main/webapp/WEB-INF/beans.xml
deleted file mode 100644
index e69de29..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/src/main/webapp/WEB-INF/beans.xml
+++ /dev/null
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/src/main/webapp/WEB-INF/web.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 48a35fa..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<web-app
-        xmlns="http://xmlns.jcp.org/xml/ns/javaee"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
-        version="3.1"
->
-
-        <!-- Security constraints and roles. -->
-
-        <security-constraint>
-                <web-resource-collection>
-                        <web-resource-name>User pages</web-resource-name>
-                        <url-pattern>/protectedServlet</url-pattern>
-                </web-resource-collection>
-                <auth-constraint>
-                        <role-name>foo</role-name>
-                </auth-constraint>
-        </security-constraint>
-
-
-        <security-role>
-                <role-name>foo</role-name>
-        </security-role>
-
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/src/test/java/org/glassfish/soteria/test/AppHAMOrderingIT.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/src/test/java/org/glassfish/soteria/test/AppHAMOrderingIT.java
deleted file mode 100644
index caac72d..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-ham-ordering/src/test/java/org/glassfish/soteria/test/AppHAMOrderingIT.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static org.glassfish.soteria.test.Assert.*;
-import static org.glassfish.soteria.test.ShrinkWrap.mavenWar;
-import static org.junit.Assert.assertTrue;
-import org.glassfish.soteria.test.ArquillianBase;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import org.junit.Rule;
-import org.junit.AfterClass;
-import org.junit.rules.TestWatcher;
-
-import com.gargoylesoftware.htmlunit.DefaultCredentialsProvider;
-import com.gargoylesoftware.htmlunit.WebResponse;
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-
-@RunWith(Arquillian.class)
-public class AppHAMOrderingIT extends ArquillianBase {
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    @Rule
-    public TestWatcher reportWatcher=new ReportWatcher(stat, "Security::soteria::AppHamOrdering");
-
-    @AfterClass
-    public static void printSummary(){
-      stat.printSummary();
-    }
-
-    @Deployment(testable = false)
-    public static Archive<?> createDeployment() {
-        return mavenWar();
-    }
-
-    @Test
-    public void testAuthenticatedValidateRequestAndSecureResponse() {
-        WebResponse response = responseFromServer("/servlet?name=reza&password=secret1");
-        assertDefaultAuthenticated(response);
-        assertTrue("Response did not contain correct ordering of validateRequest,secureResponse",
-                response.getContentAsString().contains("OrderingList: validateRequest,doGet,secureResponse"));
-    }
-
-    @Test
-    public void testAuthenticatedcleanSubject() {
-        WebResponse response = responseFromServer("/servlet?name=reza&password=secret1&doLogout=True");
-        assertDefaultAuthenticated(response);
-        assertTrue("Response did not  correct ordering of validateRequest,secureResponse,cleanSubject",
-                response.getContentAsString().contains("OrderingList: validateRequest,doGet,cleanSubject,secureResponse"));
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-basic/pom.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-basic/pom.xml
deleted file mode 100644
index 0245a9f..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-basic/pom.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.glassfish.soteria.test</groupId>
-        <artifactId>soteria</artifactId>
-        <version>6.2.6-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>app-mem-basic</artifactId>
-    <packaging>war</packaging>
-
-    <build>
-        <finalName>app-mem-basic</finalName>
-    </build>
-
-    <properties>
-        <failOnMissingWebXml>false</failOnMissingWebXml>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.glassfish.soteria.test</groupId>
-            <artifactId>common</artifactId>
-            <version>6.2.6-SNAPSHOT</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-basic/src/main/java/test/Servlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-basic/src/main/java/test/Servlet.java
deleted file mode 100644
index 4762328..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-basic/src/main/java/test/Servlet.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package test;
-
-import java.io.IOException;
-
-import jakarta.annotation.security.DeclareRoles;
-import javax.security.enterprise.authentication.mechanism.http.BasicAuthenticationMechanismDefinition;
-import org.glassfish.soteria.identitystores.annotation.Credentials;
-import org.glassfish.soteria.identitystores.annotation.EmbeddedIdentityStoreDefinition;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.HttpConstraint;
-import jakarta.servlet.annotation.ServletSecurity;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-/**
- * Test Servlet that prints out the name of the authenticated caller and whether
- * this caller is in any of the roles {foo, bar, kaz}
- */
-@BasicAuthenticationMechanismDefinition(
-    realmName="test realm"
-)
-
-@EmbeddedIdentityStoreDefinition({
-    @Credentials(callerName = "reza", password = "secret1", groups = { "foo", "bar" }),
-    @Credentials(callerName = "alex", password = "secret2", groups = { "foo", "kaz" }),
-    @Credentials(callerName = "arjan", password = "secret3", groups = { "foo" }) }
-)
-
-@WebServlet("/servlet")
-@DeclareRoles({ "foo", "bar", "kaz" })
-@ServletSecurity(@HttpConstraint(rolesAllowed = "foo"))
-public class Servlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
-        response.getWriter().write("This is a servlet \n");
-
-        String webName = null;
-        if (request.getUserPrincipal() != null) {
-            webName = request.getUserPrincipal().getName();
-        }
-
-        response.getWriter().write("web username: " + webName + "\n");
-
-        response.getWriter().write("web user has role \"foo\": " + request.isUserInRole("foo") + "\n");
-        response.getWriter().write("web user has role \"bar\": " + request.isUserInRole("bar") + "\n");
-        response.getWriter().write("web user has role \"kaz\": " + request.isUserInRole("kaz") + "\n");
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-basic/src/main/webapp/WEB-INF/beans.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-basic/src/main/webapp/WEB-INF/beans.xml
deleted file mode 100644
index e69de29..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-basic/src/main/webapp/WEB-INF/beans.xml
+++ /dev/null
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-basic/src/test/java/org/glassfish/soteria/test/AppMemBasicIT.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-basic/src/test/java/org/glassfish/soteria/test/AppMemBasicIT.java
deleted file mode 100644
index d68bb40..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-basic/src/test/java/org/glassfish/soteria/test/AppMemBasicIT.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static org.glassfish.soteria.test.Assert.assertDefaultAuthenticated;
-import static org.glassfish.soteria.test.Assert.assertDefaultNotAuthenticated;
-import static org.glassfish.soteria.test.ShrinkWrap.mavenWar;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.Rule;
-import org.junit.AfterClass;
-import org.junit.rules.TestWatcher;
-
-import com.gargoylesoftware.htmlunit.DefaultCredentialsProvider;
-import com.gargoylesoftware.htmlunit.WebResponse;
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-
-@RunWith(Arquillian.class)
-public class AppMemBasicIT extends ArquillianBase {
-
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    @Rule
-    public TestWatcher reportWatcher=new ReportWatcher(stat, "Security::soteria::AppMemBasic");
-
-    @AfterClass
-    public static void printSummary(){
-      stat.printSummary();
-    }
-
-    @Deployment(testable = false)
-    public static Archive<?> createDeployment() {
-        return mavenWar();
-    }
-
-    @Test
-    public void testAuthenticated() {
-
-            DefaultCredentialsProvider credentialsProvider = new DefaultCredentialsProvider();
-            credentialsProvider.addCredentials("reza", "secret1");
-
-            getWebClient().setCredentialsProvider(credentialsProvider);
-
-        assertDefaultAuthenticated(
-            readFromServer("/servlet"));
-    }
-
-    @Test
-    public void testNotAuthenticated() {
-
-        WebResponse response = responseFromServer("/servlet");
-
-        assertEquals(401, response.getStatusCode());
-
-        assertTrue(
-            "Response did not contain the \"WWW-Authenticate\" header, but should have",
-            response.getResponseHeaderValue("WWW-Authenticate") != null);
-
-        assertDefaultNotAuthenticated(
-            response.getContentAsString());
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongName() {
-
-            DefaultCredentialsProvider credentialsProvider = new DefaultCredentialsProvider();
-            credentialsProvider.addCredentials("romo", "secret1");
-
-            getWebClient().setCredentialsProvider(credentialsProvider);
-
-            WebResponse response = responseFromServer("/servlet");
-
-            assertEquals(401, response.getStatusCode());
-
-            assertTrue(
-                "Response did not contain the \"WWW-Authenticate\" header, but should have",
-                response.getResponseHeaderValue("WWW-Authenticate") != null);
-
-            assertDefaultNotAuthenticated(
-                response.getContentAsString());
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongPassword() {
-
-              DefaultCredentialsProvider credentialsProvider = new DefaultCredentialsProvider();
-            credentialsProvider.addCredentials("reza", "wrongpassword");
-
-            getWebClient().setCredentialsProvider(credentialsProvider);
-
-        WebResponse response = responseFromServer("/servlet");
-
-        assertEquals(401, response.getStatusCode());
-
-        assertTrue(
-            "Response did not contain the \"WWW-Authenticate\" header, but should have",
-            response.getResponseHeaderValue("WWW-Authenticate") != null);
-
-        assertDefaultNotAuthenticated(
-            response.getContentAsString());
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/pom.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/pom.xml
deleted file mode 100644
index 35321b7..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/pom.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-        <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.glassfish.soteria.test</groupId>
-    <artifactId>soteria</artifactId>
-    <version>6.2.6-SNAPSHOT</version>
-  </parent>
-
-        <artifactId>app-mem-form</artifactId>
-        <packaging>war</packaging>
-
-        <build>
-        <finalName>app-mem-form</finalName>
-        </build>
-
-    <properties>
-        <failOnMissingWebXml>false</failOnMissingWebXml>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.glassfish.soteria.test</groupId>
-            <artifactId>common</artifactId>
-            <version>6.2.6-SNAPSHOT</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/main/java/org/glassfish/soteria/test/ApplicationConfig.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/main/java/org/glassfish/soteria/test/ApplicationConfig.java
deleted file mode 100644
index aa66ff8..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/main/java/org/glassfish/soteria/test/ApplicationConfig.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.inject.Named;
-
-
-@ApplicationScoped
-@Named("appConfig")
-public class ApplicationConfig {
-    public String getLoginPage(){
-        return login_page;
-    }
-    private String login_page = "/login-servlet";
-    private String error_page = "/login-error-servlet";
-
-    public String getErrorPage() {
-        return error_page;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/main/java/org/glassfish/soteria/test/LoginErrorServlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/main/java/org/glassfish/soteria/test/LoginErrorServlet.java
deleted file mode 100644
index f7da2df..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/main/java/org/glassfish/soteria/test/LoginErrorServlet.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.io.IOException;
-
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-/**
- * Servlet that is invoked when the caller did not authenticate correctly
- *
- *
- */
-@WebServlet({"/login-error-servlet"})
-public class LoginErrorServlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-        response.getWriter().write(
-            // Just as example for the mechanism, not likely to be used
-            // in practice like this
-            "<html><body> Login failed! \n" +
-                "<a href=\"login-servlet\">Try again</a>" +
-            "</body></html>");
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/main/java/org/glassfish/soteria/test/LoginServlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/main/java/org/glassfish/soteria/test/LoginServlet.java
deleted file mode 100644
index c703d92..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/main/java/org/glassfish/soteria/test/LoginServlet.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.io.IOException;
-
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-/**
- * Servlet that is invoked when it's determined that the caller needs to authenticate/login.
- *
- */
-@WebServlet({"/login-servlet"})
-public class LoginServlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-        response.getWriter().write(
-            "<html><body> Login to continue \n" +
-                "<form method=\"POST\" action=\"j_security_check\">" +
-                    "<p><strong>Username </strong>" +
-                    "<input type=\"text\" name=\"j_username\">" +
-
-                    "<p><strong>Password </strong>" +
-                    "<input type=\"password\" name=\"j_password\">" +
-                    "<p>" +
-                    "<input type=\"submit\" value=\"Submit\">" +
-                "</form>" +
-            "</body></html>");
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/main/java/org/glassfish/soteria/test/Servlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/main/java/org/glassfish/soteria/test/Servlet.java
deleted file mode 100644
index 88ea4f0..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/main/java/org/glassfish/soteria/test/Servlet.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.io.IOException;
-
-import jakarta.annotation.security.DeclareRoles;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.HttpConstraint;
-import jakarta.servlet.annotation.ServletSecurity;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import javax.security.enterprise.authentication.mechanism.http.*;
-
-/**
- * Test Servlet that prints out the name of the authenticated caller and whether
- * this caller is in any of the roles {foo, bar, kaz}
- */
-
-@FormAuthenticationMechanismDefinition(
-        loginToContinue = @LoginToContinue(
-                loginPage="${appConfig.getLoginPage()}",
-                errorPage="#{appConfig.getErrorPage()}"
-        )
-)
-@WebServlet("/servlet")
-@DeclareRoles({ "foo", "bar", "kaz" })
-@ServletSecurity(@HttpConstraint(rolesAllowed = "foo"))
-public class Servlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
-        String webName = null;
-        if (request.getUserPrincipal() != null) {
-            webName = request.getUserPrincipal().getName();
-        }
-
-        response.getWriter().write(
-                "<html><body> This is a servlet <br><br>\n" +
-
-                    "web username: " + webName + "<br><br>\n" +
-
-                    "web user has role \"foo\": " + request.isUserInRole("foo") + "<br>\n" +
-                    "web user has role \"bar\": " + request.isUserInRole("bar") + "<br>\n" +
-                    "web user has role \"kaz\": " + request.isUserInRole("kaz") + "<br><br>\n" +
-
-
-                    "<form method=\"POST\">" +
-                        "<input type=\"hidden\" name=\"logout\" value=\"true\"  >" +
-                        "<input type=\"submit\" value=\"Logout\">" +
-                    "</form>" +
-                "</body></html>");
-    }
-
-    @Override
-    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-        if ("true".equals(request.getParameter("logout"))) {
-            request.logout();
-            request.getSession().invalidate();
-        }
-
-        doGet(request, response);
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
deleted file mode 100644
index 1ac02f9..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static java.util.Arrays.asList;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT;
-
-import java.util.HashSet;
-
-import jakarta.enterprise.context.ApplicationScoped;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStore;
-
-@ApplicationScoped
-public class TestIdentityStore implements IdentityStore {
-
-    public CredentialValidationResult validate(UsernamePasswordCredential usernamePasswordCredential) {
-
-        if (usernamePasswordCredential.compareTo("reza", "secret1")) {
-            return new CredentialValidationResult("reza", new HashSet<>(asList("foo", "bar")));
-        }
-
-        return INVALID_RESULT;
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/main/webapp/WEB-INF/beans.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/main/webapp/WEB-INF/beans.xml
deleted file mode 100644
index e69de29..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/main/webapp/WEB-INF/beans.xml
+++ /dev/null
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/test/java/org/glassfish/soteria/test/AppMemFormIT.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/test/java/org/glassfish/soteria/test/AppMemFormIT.java
deleted file mode 100644
index 1ac3a80..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-mem-form/src/test/java/org/glassfish/soteria/test/AppMemFormIT.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static org.glassfish.soteria.test.Assert.assertDefaultAuthenticated;
-import static org.glassfish.soteria.test.Assert.assertDefaultNotAuthenticated;
-import static org.glassfish.soteria.test.ShrinkWrap.mavenWar;
-import static org.junit.Assert.assertTrue;
-
-import java.io.IOException;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.gargoylesoftware.htmlunit.html.HtmlForm;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-
-
-@RunWith(Arquillian.class)
-public class AppMemFormIT extends ArquillianBase {
-
-    @Deployment(testable = false)
-    public static Archive<?> createDeployment() {
-        return mavenWar();
-    }
-
-    @Test
-    public void testAuthenticated() throws IOException {
-
-
-        // 1. Initially request protected page when we're not authenticated
-
-        HtmlPage loginPage = pageFromServer("/servlet");
-
-
-        // 2. Server should forward to login page
-
-        assertTrue(
-            "The login page should have been displayed, but was not",
-            loginPage.getWebResponse().getContentAsString().contains("Login to continue")
-        );
-
-
-        // 3. Submit the form on the login page with the correct credentials
-
-        HtmlForm form = loginPage.getForms().get(0);
-
-        form.getInputByName("j_username")
-            .setValueAttribute("reza");
-
-        form.getInputByName("j_password")
-            .setValueAttribute("secret1");
-
-        HtmlPage page = form.getInputByValue("Submit")
-                            .click();
-
-        // Has to be authenticted now
-        assertDefaultAuthenticated(
-            page.getWebResponse()
-                .getContentAsString());
-
-
-        // 4. Request page again. FORM is stateful (http session bound) so
-        // still has to be authenticated.
-
-        page = pageFromServer("/servlet");
-
-        System.out.println("+++++++++++STEP 4 +++++++++++++ (before assertDefaultAuthenticated) \n\n\n\n" + page.getWebResponse()
-        .getContentAsString());
-
-        assertDefaultAuthenticated(
-            page.getWebResponse()
-                .getContentAsString());
-
-
-        // 5. Logout
-
-        System.out.println("*** STEP 5 ***** (before get logout) " + page.asXml());
-
-        page = page.getForms()
-                   .get(0)
-                   .getInputByValue("Logout")
-                   .click();
-
-        // Has to be logged out now (page will still be rendered, but with
-        // web username null and no roles.
-
-        assertDefaultNotAuthenticated(
-            page.getWebResponse()
-                .getContentAsString());
-
-
-
-        // 6. Request page again. Should still be logged out
-        // (and will display login to continue again now)
-
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet"));
-
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongName() throws IOException {
-
-        // 1. Initially request protected page when we're not authenticated
-
-        HtmlPage loginPage = pageFromServer("/servlet");
-
-
-        // 2. Server should forward to login page
-
-        assertTrue(
-            "The login page should have been displayed, but was not",
-            loginPage.getWebResponse().getContentAsString().contains("Login to continue")
-        );
-
-
-        // 3. Submit the form on the login page with the correct credentials
-
-        HtmlForm form = loginPage.getForms().get(0);
-
-        form.getInputByName("j_username")
-            .setValueAttribute("romo");
-
-        form.getInputByName("j_password")
-            .setValueAttribute("secret1");
-
-        HtmlPage page = form.getInputByValue("Submit")
-                            .click();
-
-        assertTrue(
-            "The error page should have been displayed, but was not",
-            page.getWebResponse().getContentAsString().contains("Login failed!")
-        );
-
-        // Should not be authenticted now
-        assertDefaultNotAuthenticated(
-            page.getWebResponse()
-                .getContentAsString());
-
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongPassword() throws IOException {
-
-        // 1. Initially request protected page when we're not authenticated
-
-        HtmlPage loginPage = pageFromServer("/servlet");
-
-
-        // 2. Server should forward to login page
-
-        assertTrue(
-            "The login page should have been displayed, but was not",
-            loginPage.getWebResponse().getContentAsString().contains("Login to continue")
-        );
-
-
-        // 3. Submit the form on the login page with the *wrong* credentials
-
-        HtmlForm form = loginPage.getForms().get(0);
-
-        form.getInputByName("j_username")
-            .setValueAttribute("reza");
-
-        form.getInputByName("j_password")
-            .setValueAttribute("wrongpassword");
-
-        HtmlPage page = form.getInputByValue("Submit")
-                            .click();
-
-        assertTrue(
-            "The error page should have been displayed, but was not",
-            page.getWebResponse().getContentAsString().contains("Login failed!")
-        );
-
-        // Should not be authenticted now
-        assertDefaultNotAuthenticated(
-            page.getWebResponse()
-                .getContentAsString());
-
-    }
-
-    @Test
-    public void testNotAuthenticatedInitiallyWrongNameThenCorrect() throws IOException {
-
-        // 1. Initially request protected page when we're not authenticated
-
-        HtmlPage loginPage = pageFromServer("/servlet");
-
-
-        // 2. Server should forward to login page
-
-        assertTrue(
-            "The login page should have been displayed, but was not",
-            loginPage.getWebResponse().getContentAsString().contains("Login to continue")
-        );
-
-
-        // 3. Submit the form on the login page with the correct credentials
-
-        HtmlForm form = loginPage.getForms().get(0);
-
-        form.getInputByName("j_username")
-            .setValueAttribute("romo");
-
-        form.getInputByName("j_password")
-            .setValueAttribute("secret1");
-
-        HtmlPage errorPage = form.getInputByValue("Submit")
-                            .click();
-
-        // Should not be authenticted now
-        assertDefaultNotAuthenticated(
-            errorPage.getWebResponse()
-                     .getContentAsString());
-
-
-        // 4. Request login page directly, and now submit with the correct credentials
-        // (note that the initial target URL of /servlet should still be remembered)
-
-        loginPage = pageFromServer("/login-servlet");
-
-        form = loginPage.getForms().get(0);
-
-        form.getInputByName("j_username")
-            .setValueAttribute("reza");
-
-        form.getInputByName("j_password")
-            .setValueAttribute("secret1");
-
-        HtmlPage page = form.getInputByValue("Submit")
-                            .click();
-
-        // Has to be authenticted now
-        assertDefaultAuthenticated(
-            page.getWebResponse()
-                .getContentAsString());
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/pom.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/pom.xml
deleted file mode 100644
index 4e77b7b..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/pom.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-        <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.glassfish.soteria.test</groupId>
-    <artifactId>soteria</artifactId>
-    <version>6.2.6-SNAPSHOT</version>
-  </parent>
-
-        <artifactId>app-multiple-store-backup</artifactId>
-        <packaging>war</packaging>
-
-        <build>
-        <finalName>app-multiple-store-backup</finalName>
-        </build>
-
-    <properties>
-        <failOnMissingWebXml>false</failOnMissingWebXml>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.glassfish.soteria.test</groupId>
-            <artifactId>common</artifactId>
-            <version>6.2.6-SNAPSHOT</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/main/java/org/glassfish/soteria/test/Servlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/main/java/org/glassfish/soteria/test/Servlet.java
deleted file mode 100644
index 407a705..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/main/java/org/glassfish/soteria/test/Servlet.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.io.IOException;
-
-import jakarta.annotation.security.DeclareRoles;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-/**
- * Test Servlet that prints out the name of the authenticated caller and whether
- * this caller is in any of the roles {foo, bar, kaz}
- */
-@DeclareRoles({ "foo", "bar", "kaz" })
-@WebServlet("/servlet")
-public class Servlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
-        response.getWriter().write("This is a servlet \n");
-
-        String webName = null;
-        if (request.getUserPrincipal() != null) {
-            webName = request.getUserPrincipal().getName();
-        }
-
-        response.getWriter().write("web username: " + webName + "\n");
-
-        response.getWriter().write("web user has role \"foo\": " + request.isUserInRole("foo") + "\n");
-        response.getWriter().write("web user has role \"bar\": " + request.isUserInRole("bar") + "\n");
-        response.getWriter().write("web user has role \"kaz\": " + request.isUserInRole("kaz") + "\n");
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
deleted file mode 100644
index ce6f324..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static javax.security.enterprise.identitystore.CredentialValidationResult.Status.VALID;
-import static org.glassfish.soteria.Utils.notNull;
-
-import jakarta.enterprise.context.RequestScoped;
-import jakarta.inject.Inject;
-import javax.security.enterprise.AuthenticationException;
-import javax.security.enterprise.AuthenticationStatus;
-import javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism;
-import javax.security.enterprise.authentication.mechanism.http.HttpMessageContext;
-import javax.security.enterprise.credential.Password;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStoreHandler;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-@RequestScoped
-public class TestAuthenticationMechanism implements HttpAuthenticationMechanism {
-
-    @Inject
-    private IdentityStoreHandler identityStoreHandler;
-
-    @Override
-    public AuthenticationStatus validateRequest(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext) throws AuthenticationException {
-
-        if (notNull(request.getParameter("name"), request.getParameter("password"))) {
-
-            // Get the (caller) name and password from the request
-            // NOTE: This is for the smallest possible example only. In practice
-            // putting the password in a request query parameter is highly
-            // insecure
-            String name = request.getParameter("name");
-            Password password = new Password(request.getParameter("password"));
-
-            // Delegate the {credentials in -> identity data out} function to
-            // the Identity Store
-            CredentialValidationResult result = identityStoreHandler.validate(
-                new UsernamePasswordCredential(name, password));
-
-            if (result.getStatus() == VALID) {
-                // Communicate the details of the authenticated user to the
-                // container. In many cases the underlying handler will just store the details
-                // and the container will actually handle the login after we return from
-                // this method.
-                return httpMessageContext.notifyContainerAboutLogin(
-                    result.getCallerPrincipal(), result.getCallerGroups());
-            }
-
-            return httpMessageContext.responseUnauthorized();
-        }
-
-        return httpMessageContext.doNothing();
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/main/java/org/glassfish/soteria/test/TestBackupIdentityStore.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/main/java/org/glassfish/soteria/test/TestBackupIdentityStore.java
deleted file mode 100644
index a468058..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/main/java/org/glassfish/soteria/test/TestBackupIdentityStore.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static java.util.Arrays.asList;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.NOT_VALIDATED_RESULT;
-
-import java.util.HashSet;
-
-import jakarta.enterprise.context.RequestScoped;
-import javax.security.enterprise.credential.Credential;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStore;
-
-@RequestScoped
-public class TestBackupIdentityStore implements IdentityStore {
-
-    @Override
-    public CredentialValidationResult validate(Credential credential) {
-        if (credential instanceof UsernamePasswordCredential) {
-            return validate((UsernamePasswordCredential) credential);
-        }
-
-        return NOT_VALIDATED_RESULT;
-    }
-
-    public CredentialValidationResult validate(UsernamePasswordCredential usernamePasswordCredential) {
-
-        if (usernamePasswordCredential.getCaller().equals("reza") &&
-                usernamePasswordCredential.getPassword().compareTo("secret2")) {
-
-            return new CredentialValidationResult("reza", new HashSet<>(asList("foo", "bar")));
-        }
-
-        if (usernamePasswordCredential.getCaller().equals("alex") &&
-                usernamePasswordCredential.getPassword().compareTo("verysecret")) {
-
-            return new CredentialValidationResult("alex", new HashSet<>(asList("foo", "bar")));
-        }
-
-        return INVALID_RESULT;
-    }
-
-    public int priority() {
-        return 20;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
deleted file mode 100644
index 2cbf9b2..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static java.util.Arrays.asList;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.NOT_VALIDATED_RESULT;
-
-import java.util.HashSet;
-
-import jakarta.enterprise.context.RequestScoped;
-import javax.security.enterprise.credential.Credential;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStore;
-
-@RequestScoped
-public class TestIdentityStore implements IdentityStore {
-
-    @Override
-    public CredentialValidationResult validate(Credential credential) {
-        if (credential instanceof UsernamePasswordCredential) {
-            return validate((UsernamePasswordCredential) credential);
-        }
-
-        return NOT_VALIDATED_RESULT;
-    }
-
-    public CredentialValidationResult validate(UsernamePasswordCredential usernamePasswordCredential) {
-
-        if (usernamePasswordCredential.getCaller().equals("reza") &&
-                usernamePasswordCredential.getPassword().compareTo("secret1")) {
-
-            return new CredentialValidationResult("reza", new HashSet<>(asList("foo", "bar")));
-        }
-
-        return INVALID_RESULT;
-    }
-
-    public int priority() {
-        return 10;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/main/webapp/WEB-INF/beans.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/main/webapp/WEB-INF/beans.xml
deleted file mode 100644
index e69de29..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/main/webapp/WEB-INF/beans.xml
+++ /dev/null
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/main/webapp/WEB-INF/glassfish-web.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/main/webapp/WEB-INF/glassfish-web.xml
deleted file mode 100644
index 11d0ee6..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/main/webapp/WEB-INF/glassfish-web.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<glassfish-web-app>
-
-    <security-role-mapping>
-        <role-name>foo</role-name>
-        <group-name>foo</group-name>
-    </security-role-mapping>
-
-    <security-role-mapping>
-        <role-name>bar</role-name>
-        <group-name>bar</group-name>
-    </security-role-mapping>
-
-    <security-role-mapping>
-        <role-name>kaz</role-name>
-        <group-name>kaz</group-name>
-    </security-role-mapping>
-
-    <parameter-encoding default-charset="UTF-8" />
-
-</glassfish-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/test/java/org/glassfish/soteria/test/AppMultipleStoreBackupIT.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/test/java/org/glassfish/soteria/test/AppMultipleStoreBackupIT.java
deleted file mode 100644
index 46b0ecf..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store-backup/src/test/java/org/glassfish/soteria/test/AppMultipleStoreBackupIT.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static org.glassfish.soteria.test.Assert.assertDefaultAuthenticated;
-import static org.glassfish.soteria.test.Assert.assertDefaultNotAuthenticated;
-import static org.glassfish.soteria.test.ShrinkWrap.mavenWar;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-import org.junit.Rule;
-import org.junit.AfterClass;
-import org.junit.rules.TestWatcher;
-
-@RunWith(Arquillian.class)
-public class AppMultipleStoreBackupIT extends ArquillianBase {
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    @Rule
-    public TestWatcher reportWatcher=new ReportWatcher(stat, "Security::soteria::AppMultipleStoreBackup");
-
-    @AfterClass
-    public static void printSummary(){
-        stat.printSummary();
-    }
-
-    @Deployment(testable = false)
-    public static Archive<?> createDeployment() {
-        return mavenWar();
-    }
-
-    @Test
-    public void testAuthenticated() {
-        assertDefaultAuthenticated(
-            readFromServer("/servlet?name=reza&password=secret1"));
-    }
-
-    @Test
-    public void testAuthenticatedBackupPassword() {
-        // This will first try the initial store which will fail, then
-        // tries the second store, which should succeeded. The user
-        // is present in both stores but with different passwords.
-        assertDefaultAuthenticated(
-            readFromServer("/servlet?name=reza&password=secret2"));
-    }
-
-    @Test
-    public void testAuthenticatedBackupUser() {
-        // This will first try the initial store which will fail, then
-        // tries the second store, which should succeeded. The user
-        // is only present in the second store.
-        Assert.assertAuthenticated(
-            "web", "alex",
-            readFromServer("/servlet?name=alex&password=verysecret"));
-    }
-
-    @Test
-    public void testNotAuthenticated() {
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet"));
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongName() {
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet?name=romo&password=secret1"));
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongPassword() {
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet?name=reza&password=wrongpassword"));
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/pom.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/pom.xml
deleted file mode 100644
index d99d57a..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/pom.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-        <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.glassfish.soteria.test</groupId>
-    <artifactId>soteria</artifactId>
-    <version>6.2.6-SNAPSHOT</version>
-  </parent>
-
-        <artifactId>app-multiple-store</artifactId>
-        <packaging>war</packaging>
-
-        <build>
-        <finalName>app-multiple-store</finalName>
-        </build>
-
-    <properties>
-        <failOnMissingWebXml>false</failOnMissingWebXml>
-    </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.glassfish.soteria.test</groupId>
-      <artifactId>common</artifactId>
-      <version>6.2.6-SNAPSHOT</version>
-      <scope>test</scope>
-      </dependency>
-  </dependencies>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/main/java/org/glassfish/soteria/test/AuthenticationIdentityStore.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/main/java/org/glassfish/soteria/test/AuthenticationIdentityStore.java
deleted file mode 100644
index a434ae8..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/main/java/org/glassfish/soteria/test/AuthenticationIdentityStore.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static java.util.Arrays.asList;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.NOT_VALIDATED_RESULT;
-import static javax.security.enterprise.identitystore.IdentityStore.ValidationType.VALIDATE;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import jakarta.annotation.PostConstruct;
-import jakarta.enterprise.context.RequestScoped;
-import javax.security.enterprise.credential.Credential;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStore;
-
-/**
- *
- */
-@RequestScoped
-public class AuthenticationIdentityStore implements IdentityStore {
-
-    private Map<String, String> callerToPassword;
-
-    @PostConstruct
-    public void init() {
-        callerToPassword = new HashMap<>();
-        callerToPassword.put("reza", "secret1");
-        callerToPassword.put("alex", "secret2");
-        callerToPassword.put("arjan", "secret3");
-    }
-
-    @Override
-    public CredentialValidationResult validate(Credential credential) {
-        CredentialValidationResult result;
-
-        if (credential instanceof UsernamePasswordCredential) {
-            UsernamePasswordCredential usernamePassword = (UsernamePasswordCredential) credential;
-            String expectedPW = callerToPassword.get(usernamePassword.getCaller());
-            // We don't allow empty passwords :)
-            if (expectedPW != null && expectedPW.equals(usernamePassword.getPasswordAsString())) {
-                result = new CredentialValidationResult(usernamePassword.getCaller());
-            } else {
-                result = INVALID_RESULT;
-            }
-        } else {
-            result = NOT_VALIDATED_RESULT;
-        }
-
-        return result;
-    }
-
-    @Override
-    public Set<ValidationType> validationTypes() {
-        return new HashSet<>(asList(VALIDATE));
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/main/java/org/glassfish/soteria/test/AuthorizationIdentityStore.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/main/java/org/glassfish/soteria/test/AuthorizationIdentityStore.java
deleted file mode 100644
index 3a518df..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/main/java/org/glassfish/soteria/test/AuthorizationIdentityStore.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static java.util.Arrays.asList;
-import static javax.security.enterprise.identitystore.IdentityStore.ValidationType.PROVIDE_GROUPS;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import jakarta.annotation.PostConstruct;
-import jakarta.enterprise.context.RequestScoped;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStore;
-
-/**
- *
- */
-@RequestScoped
-public class AuthorizationIdentityStore implements IdentityStore {
-
-    private Map<String, Set<String>> authorization;
-
-    @PostConstruct
-    public void init() {
-        authorization = new HashMap<>();
-
-        authorization.put("reza", new HashSet<>(asList("foo", "bar")));
-        authorization.put("alex", new HashSet<>(asList("foo", "foo", "kaz")));
-        authorization.put("arjan", new HashSet<>(asList("foo", "foo")));
-
-    }
-
-    @Override
-    public Set<String> getCallerGroups(CredentialValidationResult validationResult) {
-        return authorization.get(validationResult.getCallerPrincipal().getName());
-    }
-
-    @Override
-    public Set<ValidationType> validationTypes() {
-        return new HashSet<>(asList(PROVIDE_GROUPS));
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/main/java/org/glassfish/soteria/test/Servlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/main/java/org/glassfish/soteria/test/Servlet.java
deleted file mode 100644
index 407a705..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/main/java/org/glassfish/soteria/test/Servlet.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.io.IOException;
-
-import jakarta.annotation.security.DeclareRoles;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-/**
- * Test Servlet that prints out the name of the authenticated caller and whether
- * this caller is in any of the roles {foo, bar, kaz}
- */
-@DeclareRoles({ "foo", "bar", "kaz" })
-@WebServlet("/servlet")
-public class Servlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
-        response.getWriter().write("This is a servlet \n");
-
-        String webName = null;
-        if (request.getUserPrincipal() != null) {
-            webName = request.getUserPrincipal().getName();
-        }
-
-        response.getWriter().write("web username: " + webName + "\n");
-
-        response.getWriter().write("web user has role \"foo\": " + request.isUserInRole("foo") + "\n");
-        response.getWriter().write("web user has role \"bar\": " + request.isUserInRole("bar") + "\n");
-        response.getWriter().write("web user has role \"kaz\": " + request.isUserInRole("kaz") + "\n");
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
deleted file mode 100644
index 4cd0736..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static javax.security.enterprise.identitystore.CredentialValidationResult.Status.VALID;
-import static org.glassfish.soteria.Utils.notNull;
-
-import jakarta.enterprise.context.RequestScoped;
-import jakarta.inject.Inject;
-import javax.security.enterprise.AuthenticationException;
-import javax.security.enterprise.AuthenticationStatus;
-import javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism;
-import javax.security.enterprise.authentication.mechanism.http.HttpMessageContext;
-import javax.security.enterprise.credential.Password;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStoreHandler;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-@RequestScoped
-public class TestAuthenticationMechanism implements HttpAuthenticationMechanism {
-
-    @Inject
-    private IdentityStoreHandler identityStoreHandler;
-
-    @Override
-    public AuthenticationStatus validateRequest(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext) throws AuthenticationException {
-
-        if (notNull(request.getParameter("name"), request.getParameter("password"))) {
-
-            // Get the (caller) name and password from the request
-            // NOTE: This is for the smallest possible example only. In practice
-            // putting the password in a request query parameter is highly
-            // insecure
-            String name = request.getParameter("name");
-            Password password = new Password(request.getParameter("password"));
-
-            // Delegate the {credentials in -> identity data out} function to
-            // the Identity Store
-            CredentialValidationResult result = identityStoreHandler.validate(
-                new UsernamePasswordCredential(name, password));
-
-            if (result.getStatus() == VALID) {
-                // Communicate the details of the authenticated user to the
-                // container. In many cases the underlying handler will just store the details
-                // and the container will actually handle the login after we return from
-                // this method.
-                return httpMessageContext.notifyContainerAboutLogin(
-                    result.getCallerPrincipal(), result.getCallerGroups());
-            }
-
-            return httpMessageContext.responseUnauthorized();
-
-        }
-
-        return httpMessageContext.doNothing();
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/main/webapp/WEB-INF/beans.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/main/webapp/WEB-INF/beans.xml
deleted file mode 100644
index e69de29..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/main/webapp/WEB-INF/beans.xml
+++ /dev/null
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/main/webapp/WEB-INF/glassfish-web.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/main/webapp/WEB-INF/glassfish-web.xml
deleted file mode 100644
index 11d0ee6..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/main/webapp/WEB-INF/glassfish-web.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<glassfish-web-app>
-
-    <security-role-mapping>
-        <role-name>foo</role-name>
-        <group-name>foo</group-name>
-    </security-role-mapping>
-
-    <security-role-mapping>
-        <role-name>bar</role-name>
-        <group-name>bar</group-name>
-    </security-role-mapping>
-
-    <security-role-mapping>
-        <role-name>kaz</role-name>
-        <group-name>kaz</group-name>
-    </security-role-mapping>
-
-    <parameter-encoding default-charset="UTF-8" />
-
-</glassfish-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/test/java/org/glassfish/soteria/test/AppMultipleStoreIT.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/test/java/org/glassfish/soteria/test/AppMultipleStoreIT.java
deleted file mode 100644
index 7cbba69..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-multiple-store/src/test/java/org/glassfish/soteria/test/AppMultipleStoreIT.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-import org.junit.Rule;
-import org.junit.AfterClass;
-import org.junit.rules.TestWatcher;
-
-import static org.glassfish.soteria.test.Assert.assertDefaultAuthenticated;
-import static org.glassfish.soteria.test.Assert.assertDefaultNotAuthenticated;
-import static org.glassfish.soteria.test.ShrinkWrap.mavenWar;
-
-@RunWith(Arquillian.class)
-public class AppMultipleStoreIT extends ArquillianBase {
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    @Rule
-    public TestWatcher reportWatcher=new ReportWatcher(stat, "Security::soteria::AppMultipleStore");
-
-    @AfterClass
-    public static void printSummary(){
-        stat.printSummary();
-    }
-
-    @Deployment(testable = false)
-    public static Archive<?> createDeployment() {
-        return mavenWar();
-    }
-
-    @Test
-    public void testAuthenticated() {
-        assertDefaultAuthenticated(
-            readFromServer("/servlet?name=reza&password=secret1"));
-    }
-
-    @Test
-    public void testNotAuthenticated() {
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet"));
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongName() {
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet?name=romo&password=secret1"));
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongPassword() {
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet?name=reza&password=wrongpassword"));
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/README.md b/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/README.md
deleted file mode 100644
index fea016a..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-
-### app-no-application-caller-principal
-
-**From JSR 375 Specification**
-
-> **1.2.2. Caller Principal Types**
-
-> When no specific application caller principal is supplied during authentication, the caller’s identity should be represented by a single principal, the container’s caller principal.
-
-In this test, no application caller principal is provided when container gets notified about login inside `TestAuthenticationMechanism`.
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/pom.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/pom.xml
deleted file mode 100644
index abda6da..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/pom.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-        <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.glassfish.soteria.test</groupId>
-    <artifactId>soteria</artifactId>
-    <version>6.2.6-SNAPSHOT</version>
-  </parent>
-
-        <artifactId>app-no-application-caller-principal</artifactId>
-        <packaging>war</packaging>
-
-        <build>
-        <finalName>app-no-application-caller-principal</finalName>
-        </build>
-
-    <properties>
-        <failOnMissingWebXml>false</failOnMissingWebXml>
-    </properties>
-  <dependencies>
-    <dependency>
-      <groupId>org.glassfish.soteria.test</groupId>
-      <artifactId>common</artifactId>
-      <version>6.2.6-SNAPSHOT</version>
-      <scope>test</scope>
-      </dependency>
-  </dependencies>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/main/java/org/glassfish/soteria/test/AppPrincipal.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/main/java/org/glassfish/soteria/test/AppPrincipal.java
deleted file mode 100644
index 8735509..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/main/java/org/glassfish/soteria/test/AppPrincipal.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.security.Principal;
-
-public class AppPrincipal implements Principal {
-    String name;
-
-    public AppPrincipal(String name){
-        this.name = name;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
deleted file mode 100644
index 7e2b663..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static javax.security.enterprise.identitystore.CredentialValidationResult.Status.VALID;
-
-import jakarta.enterprise.context.RequestScoped;
-import jakarta.inject.Inject;
-import javax.security.enterprise.AuthenticationStatus;
-import javax.security.enterprise.AuthenticationException;
-import javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism;
-import javax.security.enterprise.authentication.mechanism.http.HttpMessageContext;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStoreHandler;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-@RequestScoped
-public class TestAuthenticationMechanism implements HttpAuthenticationMechanism {
-
-    @Inject
-    private IdentityStoreHandler identityStoreHandler;
-
-    @Override
-    public AuthenticationStatus validateRequest(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext) throws AuthenticationException {
-
-            // Get the (caller) name and password from the request
-        // NOTE: This is for the smallest possible example only. In practice
-        // putting the password in a request query parameter is highly
-        // insecure
-        String name = request.getParameter("name");
-        String password = request.getParameter("password");
-
-        if (name != null && password != null) {
-
-            // Delegate the {credentials in -> identity data out} function to
-            // the Identity Store
-            CredentialValidationResult result = identityStoreHandler.validate(
-                new UsernamePasswordCredential(name, password));
-
-            if (result.getStatus() == VALID) {
-                return httpMessageContext.notifyContainerAboutLogin(result);
-
-            } else {
-                return httpMessageContext.responseUnauthorized();
-            }
-        }
-
-        return httpMessageContext.doNothing();
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
deleted file mode 100644
index c4556df..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/main/java/org/glassfish/soteria/test/TestIdentityStore.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static java.util.Arrays.asList;
-import static javax.security.enterprise.identitystore.CredentialValidationResult.INVALID_RESULT;
-
-import java.util.HashSet;
-
-import jakarta.enterprise.context.RequestScoped;
-import javax.security.enterprise.identitystore.CredentialValidationResult;
-import javax.security.enterprise.identitystore.IdentityStore;
-import javax.security.enterprise.credential.UsernamePasswordCredential;
-
-@RequestScoped
-public class TestIdentityStore implements IdentityStore {
-
-    public CredentialValidationResult validate(UsernamePasswordCredential usernamePasswordCredential) {
-
-        if (usernamePasswordCredential.compareTo("reza", "secret1")) {
-            return new CredentialValidationResult("reza", new HashSet<>(asList("foo", "bar")));
-        }
-
-        return INVALID_RESULT;
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/main/java/org/glassfish/soteria/test/ValidateAvailablePrincipalServlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/main/java/org/glassfish/soteria/test/ValidateAvailablePrincipalServlet.java
deleted file mode 100644
index d8f65e8..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/main/java/org/glassfish/soteria/test/ValidateAvailablePrincipalServlet.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import java.io.IOException;
-
-import jakarta.inject.Inject;
-import javax.security.enterprise.SecurityContext;
-import javax.security.enterprise.CallerPrincipal;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.HttpConstraint;
-import jakarta.servlet.annotation.ServletSecurity;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import java.security.Principal;
-import java.util.Optional;
-import java.util.Set;
-
-/**
- * The Servlet which validates if for the authenticated user, both
- * container and caller principals are present in the subject
- * representing the caller.
- */
-@WebServlet("/valildateAvailablePrincipalServlet")
-@ServletSecurity(@HttpConstraint(rolesAllowed = "foo"))
-public class ValidateAvailablePrincipalServlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Inject
-    private SecurityContext securityContext;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
-        boolean isUserInRole = securityContext.isCallerInRole("foo");
-        boolean hasContainerCallerPrincipal = false;
-        boolean hasApplicationCallerPrincipal = false;
-
-        Principal containerCallerPrincipal = securityContext.getCallerPrincipal();
-
-        if (containerCallerPrincipal instanceof javax.security.enterprise.CallerPrincipal) {
-            hasContainerCallerPrincipal = true;
-        }
-
-        Set<Principal> principals = securityContext.getPrincipalsByType(java.security.Principal.class);
-
-        Optional<Principal> principalOptional = principals.stream().filter((p) -> p.getClass().getName() == CallerPrincipal.class
-                .getName())
-                .findAny();
-        if (principalOptional.isPresent()) {
-            Principal applicationPrincipal = principalOptional.get();
-            if(applicationPrincipal.equals(containerCallerPrincipal)) {
-                response.getWriter().write("containerPrincipal:" + containerCallerPrincipal + "\n");
-                response.getWriter().write("appPrincipal:" + applicationPrincipal + "\n");
-                hasApplicationCallerPrincipal = true;
-                response.getWriter().write("hasApplicationCallerPrincipal:" + hasApplicationCallerPrincipal + "\n");
-            }
-        }
-        if (!hasApplicationCallerPrincipal && hasContainerCallerPrincipal && isUserInRole) {
-            response.getWriter().write(String.format("Container caller principal and application caller principal must have " +
-                            "been one and the same but are not for user %s in role " +
-                            "%s",
-                    containerCallerPrincipal.getName(), "foo"));
-        } else {
-            response.getWriter().write(String.format("Both container caller principal and application caller principals are one" +
-                            " and the same for user %s in role %s",
-                    containerCallerPrincipal.getName(), "foo"));
-        }
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/main/webapp/WEB-INF/beans.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/main/webapp/WEB-INF/beans.xml
deleted file mode 100644
index e69de29..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/main/webapp/WEB-INF/beans.xml
+++ /dev/null
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/main/webapp/WEB-INF/web.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index ca37ae0..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<web-app
-        xmlns="http://xmlns.jcp.org/xml/ns/javaee"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
-        version="3.1">
-
-        <!-- Security constraints and roles. -->
-
-        <security-constraint>
-                <web-resource-collection>
-                        <web-resource-name>User pages</web-resource-name>
-                        <url-pattern>/protectedServlet</url-pattern>
-                </web-resource-collection>
-                <auth-constraint>
-                        <role-name>foo</role-name>
-                </auth-constraint>
-        </security-constraint>
-
-
-        <security-role>
-                <role-name>foo</role-name>
-        </security-role>
-
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/test/java/org/glassfish/soteria/test/ValidateAvailablePrincipalIT.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/test/java/org/glassfish/soteria/test/ValidateAvailablePrincipalIT.java
deleted file mode 100644
index af9cd34..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-application-caller-principal/src/test/java/org/glassfish/soteria/test/ValidateAvailablePrincipalIT.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static org.glassfish.soteria.test.Assert.*;
-import static org.glassfish.soteria.test.ShrinkWrap.mavenWar;
-
-import org.glassfish.soteria.test.ArquillianBase;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import org.junit.Rule;
-import org.junit.AfterClass;
-import org.junit.rules.TestWatcher;
-
-import com.gargoylesoftware.htmlunit.DefaultCredentialsProvider;
-import com.gargoylesoftware.htmlunit.WebResponse;
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-
-@RunWith(Arquillian.class)
-public class ValidateAvailablePrincipalIT extends ArquillianBase {
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    @Rule
-    public TestWatcher reportWatcher=new ReportWatcher(stat, "Security::soteria::ValidateAvailablePrincipalIT");
-
-    @AfterClass
-    public static void printSummary(){
-      stat.printSummary();
-    }
-
-    @Deployment(testable = false)
-    public static Archive<?> createDeployment() {
-        return mavenWar();
-    }
-
-    @Test
-    public void testCallerSubjectPrincipals() {
-        assertBothContainerAndApplicationPrincipalsAreSame(
-                responseFromServer("/valildateAvailablePrincipalServlet?name=reza&password=secret1"));
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-role-mapping/pom.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-no-role-mapping/pom.xml
deleted file mode 100644
index ccf1c2b..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-role-mapping/pom.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.glassfish.soteria.test</groupId>
-        <artifactId>soteria</artifactId>
-        <version>6.2.6-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>app-no-role-mapping</artifactId>
-    <packaging>war</packaging>
-
-    <build>
-        <finalName>app-no-role-mapping</finalName>
-    </build>
-
-    <properties>
-        <failOnMissingWebXml>false</failOnMissingWebXml>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.glassfish.soteria.test</groupId>
-            <artifactId>common</artifactId>
-            <version>6.2.6-SNAPSHOT</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-role-mapping/src/main/java/test/Servlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-no-role-mapping/src/main/java/test/Servlet.java
deleted file mode 100644
index 67d381b..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-role-mapping/src/main/java/test/Servlet.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package test;
-
-import java.io.IOException;
-
-import jakarta.annotation.security.DeclareRoles;
-import javax.security.enterprise.authentication.mechanism.http.BasicAuthenticationMechanismDefinition;
-import org.glassfish.soteria.identitystores.annotation.Credentials;
-import org.glassfish.soteria.identitystores.annotation.EmbeddedIdentityStoreDefinition;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.HttpConstraint;
-import jakarta.servlet.annotation.ServletSecurity;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-/**
- * Test Servlet that prints out the name of the authenticated caller and whether
- * this caller is in any of the roles {foo, bar, kaz}
- */
-@BasicAuthenticationMechanismDefinition(
-    realmName="test realm"
-)
-
-@EmbeddedIdentityStoreDefinition({
-    @Credentials(callerName = "reza", password = "secret1", groups = { "foo", "bar" }),
-    @Credentials(callerName = "alex", password = "secret2", groups = { "foo", "kaz" }),
-    @Credentials(callerName = "arjan", password = "secret3", groups = { "foo" }) ,
-    @Credentials(callerName = "sameer", password = "pandit", groups = { "bar" })}
-)
-
-@WebServlet("/servlet")
-@DeclareRoles({ "foo", "bar", "kaz" })
-@ServletSecurity(@HttpConstraint(rolesAllowed = "foo"))
-public class Servlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
-        response.getWriter().write("This is a servlet \n");
-
-        String webName = null;
-        if (request.getUserPrincipal() != null) {
-            webName = request.getUserPrincipal().getName();
-        }
-
-        response.getWriter().write("web username: " + webName + "\n");
-
-        response.getWriter().write("web user has role \"foo\": " + request.isUserInRole("foo") + "\n");
-        response.getWriter().write("web user has role \"bar\": " + request.isUserInRole("bar") + "\n");
-        response.getWriter().write("web user has role \"kaz\": " + request.isUserInRole("kaz") + "\n");
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-role-mapping/src/main/webapp/WEB-INF/beans.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-no-role-mapping/src/main/webapp/WEB-INF/beans.xml
deleted file mode 100644
index e69de29..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-role-mapping/src/main/webapp/WEB-INF/beans.xml
+++ /dev/null
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-role-mapping/src/test/java/org/glassfish/soteria/test/AppMemBasicIT.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-no-role-mapping/src/test/java/org/glassfish/soteria/test/AppMemBasicIT.java
deleted file mode 100644
index 3eb6946..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-no-role-mapping/src/test/java/org/glassfish/soteria/test/AppMemBasicIT.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static org.glassfish.soteria.test.Assert.assertDefaultAuthenticated;
-import static org.glassfish.soteria.test.Assert.assertDefaultNotAuthenticated;
-import static org.glassfish.soteria.test.ShrinkWrap.mavenWar;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.Rule;
-import org.junit.AfterClass;
-import org.junit.rules.TestWatcher;
-
-import com.gargoylesoftware.htmlunit.DefaultCredentialsProvider;
-import com.gargoylesoftware.htmlunit.WebResponse;
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-
-@RunWith(Arquillian.class)
-public class AppMemBasicIT extends ArquillianBase {
-
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    @Rule
-    public TestWatcher reportWatcher=new ReportWatcher(stat, "Security::soteria::AppNoRoleMapping");
-
-    @AfterClass
-    public static void printSummary(){
-      stat.printSummary();
-    }
-
-    @Deployment(testable = false)
-    public static Archive<?> createDeployment() {
-        return mavenWar();
-    }
-
-    @Test
-    public void testAuthenticated() {
-
-            DefaultCredentialsProvider credentialsProvider = new DefaultCredentialsProvider();
-            credentialsProvider.addCredentials("reza", "secret1");
-
-            getWebClient().setCredentialsProvider(credentialsProvider);
-
-        assertDefaultAuthenticated(
-            readFromServer("/servlet"));
-    }
-
-    @Test
-    public void testNotAuthenticated() {
-
-        WebResponse response = responseFromServer("/servlet");
-
-        assertEquals(401, response.getStatusCode());
-
-        assertTrue(
-            "Response did not contain the \"WWW-Authenticate\" header, but should have",
-            response.getResponseHeaderValue("WWW-Authenticate") != null);
-
-        assertDefaultNotAuthenticated(
-            response.getContentAsString());
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongName() {
-
-            DefaultCredentialsProvider credentialsProvider = new DefaultCredentialsProvider();
-            credentialsProvider.addCredentials("romo", "secret1");
-
-            getWebClient().setCredentialsProvider(credentialsProvider);
-
-            WebResponse response = responseFromServer("/servlet");
-
-            assertEquals(401, response.getStatusCode());
-
-            assertTrue(
-                "Response did not contain the \"WWW-Authenticate\" header, but should have",
-                response.getResponseHeaderValue("WWW-Authenticate") != null);
-
-            assertDefaultNotAuthenticated(
-                response.getContentAsString());
-    }
-
-    @Test
-    public void testNotAuthenticatedWrongPassword() {
-
-              DefaultCredentialsProvider credentialsProvider = new DefaultCredentialsProvider();
-            credentialsProvider.addCredentials("reza", "wrongpassword");
-
-            getWebClient().setCredentialsProvider(credentialsProvider);
-
-        WebResponse response = responseFromServer("/servlet");
-
-        assertEquals(401, response.getStatusCode());
-
-        assertTrue(
-            "Response did not contain the \"WWW-Authenticate\" header, but should have",
-            response.getResponseHeaderValue("WWW-Authenticate") != null);
-
-        assertDefaultNotAuthenticated(
-            response.getContentAsString());
-    }
-
-    @Test
-    public void testNotAuthenticatedNotAllowedRole() {
-
-        DefaultCredentialsProvider credentialsProvider = new DefaultCredentialsProvider();
-        credentialsProvider.addCredentials("sameer", "pandit");
-
-        getWebClient().setCredentialsProvider(credentialsProvider);
-
-        WebResponse response = responseFromServer("/servlet");
-
-        assertEquals(403, response.getStatusCode());
-
-        assertDefaultNotAuthenticated(
-                response.getContentAsString());
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/pom.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/pom.xml
deleted file mode 100644
index a7518de..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/pom.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-        <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.glassfish.soteria.test</groupId>
-        <artifactId>soteria</artifactId>
-        <version>6.2.6-SNAPSHOT</version>
-    </parent>
-
-        <artifactId>app-securitycontext-auth-ejb</artifactId>
-        <packaging>war</packaging>
-
-        <build>
-        <finalName>app-securitycontext-auth-ejb</finalName>
-        </build>
-
-    <properties>
-        <failOnMissingWebXml>false</failOnMissingWebXml>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.glassfish.soteria.test</groupId>
-            <artifactId>common</artifactId>
-            <version>6.2.6-SNAPSHOT</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/src/main/java/org/glassfish/soteria/test/ProtectedServlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/src/main/java/org/glassfish/soteria/test/ProtectedServlet.java
deleted file mode 100644
index a0f1b02..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/src/main/java/org/glassfish/soteria/test/ProtectedServlet.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import org.glassfish.soteria.SecurityContextImpl;
-import javax.security.enterprise.SecurityContext;
-import jakarta.servlet.annotation.ServletSecurity;
-import jakarta.servlet.annotation.HttpConstraint;
-import jakarta.annotation.security.DeclareRoles;
-import jakarta.inject.Inject;
-import javax.security.enterprise.AuthenticationStatus;
-import javax.security.enterprise.SecurityContext;
-import javax.security.enterprise.credential.CallerOnlyCredential;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.Set;
-
-import static javax.security.enterprise.authentication.mechanism.http.AuthenticationParameters.withParams;
-import static org.glassfish.soteria.Utils.notNull;
-
-/**
- * Test Servlet that prints out the name of the authenticated caller and whether
- * this caller is in any of the roles {foo, bar, kaz}
- */
-@DeclareRoles({"foo", "bar", "kaz"})
-@WebServlet("/protectedServlet")
-@ServletSecurity(@HttpConstraint(rolesAllowed = "foo"))
-public class ProtectedServlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Inject
-    private SecurityContext securityContext;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
-        response.getWriter().write("This is a servlet \n");
-
-        String name = request.getParameter("name");
-
-        if (notNull(name)) {
-
-            AuthenticationStatus status = securityContext.authenticate(
-                    request, response,
-                    withParams()
-                            .credential(
-                                    new CallerOnlyCredential(name)));
-
-            response.getWriter().write("Authenticated with status: " + status.name() + "\n");
-        }
-
-        String webName = null;
-        if (request.getUserPrincipal() != null) {
-            webName = request.getUserPrincipal().getName();
-        }
-
-        response.getWriter().write("web username: " + webName + "\n");
-
-        response.getWriter().write("web user has role \"foo\": " + request.isUserInRole("foo") + "\n");
-        response.getWriter().write("web user has role \"bar\": " + request.isUserInRole("bar") + "\n");
-        response.getWriter().write("web user has role \"kaz\": " + request.isUserInRole("kaz") + "\n");
-
-        String contextName = null;
-        if (securityContext.getCallerPrincipal() != null) {
-            contextName = securityContext.getCallerPrincipal().getName();
-        }
-
-        response.getWriter().write("context username: " + contextName + "\n");
-
-        response.getWriter().write("context user has role \"foo\": " + securityContext.isCallerInRole("foo") + "\n");
-        response.getWriter().write("context user has role \"bar\": " + securityContext.isCallerInRole("bar") + "\n");
-        response.getWriter().write("context user has role \"kaz\": " + securityContext.isCallerInRole("kaz") + "\n");
-
-        response.getWriter().write("has access to /protectedServlet: " + securityContext.hasAccessToWebResource("/protectedServlet") + "\n");
-
-        Set<String> roles = ((SecurityContextImpl) securityContext).getAllDeclaredCallerRoles();
-
-        response.getWriter().write("All declared roles of user " + roles + "\n");
-
-        response.getWriter().write("all roles has role \"foo\": " + roles.contains("foo") + "\n");
-        response.getWriter().write("all roles has role \"bar\": " + roles.contains("bar") + "\n");
-        response.getWriter().write("all roles has role \"kaz\": " + roles.contains("kaz") + "\n");
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/src/main/java/org/glassfish/soteria/test/Servlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/src/main/java/org/glassfish/soteria/test/Servlet.java
deleted file mode 100644
index 4c43cf1..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/src/main/java/org/glassfish/soteria/test/Servlet.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import org.glassfish.soteria.SecurityContextImpl;
-
-import jakarta.annotation.security.DeclareRoles;
-import jakarta.ejb.EJB;
-import javax.security.enterprise.AuthenticationStatus;
-import javax.security.enterprise.SecurityContext;
-import javax.security.enterprise.credential.CallerOnlyCredential;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.Set;
-import jakarta.inject.Inject;
-
-import static javax.security.enterprise.authentication.mechanism.http.AuthenticationParameters.withParams;
-import static org.glassfish.soteria.Utils.notNull;
-
-/**
- * Test Servlet that prints out the name of the authenticated caller and whether
- * this caller is in any of the roles {foo, bar, kaz}
- */
-@DeclareRoles({"foo", "bar", "kaz"})
-@WebServlet("/servlet")
-public class Servlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @EJB
-    private TestEJB bean;
-    @Inject
-    private SecurityContext securityContext;
-
-    /**
-     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
-     * methods.
-     *
-     * @param request servlet request
-     * @param response servlet response
-     * @throws ServletException if a servlet-specific error occurs
-     * @throws IOException if an I/O error occurs
-     */
-    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
-            throws ServletException, IOException {
-        response.setContentType("text/html;charset=UTF-8");
-        response.getWriter().write("This is a servlet \n");
-        String name = request.getParameter("name");
-
-        if (notNull(name)) {
-
-            AuthenticationStatus status = securityContext.authenticate(
-                    request, response,
-                    withParams()
-                            .credential(
-                                    new CallerOnlyCredential(name)));
-
-            response.getWriter().write("Authenticated with status: " + status.name() + "\n");
-        }
-
-        String ejbName = null;
-        if (bean.getUserPrincipalFromEJBContext() != null) {
-            ejbName = bean.getUserPrincipalFromEJBContext().getName();
-        }
-
-        response.getWriter().write("ejb username: " + ejbName + "\n");
-
-        response.getWriter().write("ejb user has role \"foo\": " + bean.isCallerInRoleFromEJBContext("foo") + "\n");
-        response.getWriter().write("ejb user has role \"bar\": " + bean.isCallerInRoleFromEJBContext("bar") + "\n");
-        response.getWriter().write("ejb user has role \"kaz\": " + bean.isCallerInRoleFromEJBContext("kaz") + "\n");
-
-        String contextName = null;
-        if (bean.getUserPrincipalFromSecContext() != null) {
-            contextName = bean.getUserPrincipalFromSecContext().getName();
-        }
-
-        response.getWriter().write("context username: " + contextName + "\n");
-
-        response.getWriter().write("context user has role \"foo\": " + bean.isCallerInRoleFromSecContext("foo") + "\n");
-        response.getWriter().write("context user has role \"bar\": " + bean.isCallerInRoleFromSecContext("bar") + "\n");
-        response.getWriter().write("context user has role \"kaz\": " + bean.isCallerInRoleFromSecContext("kaz") + "\n");
-
-        response.getWriter().write("web user has access to /protectedServlet: " + securityContext.hasAccessToWebResource("/protectedServlet") + "\n");
-
-        Set<String> roles = bean.getAllDeclaredCallerRoles();
-
-        response.getWriter().write("All declared roles of user " + roles + "\n");
-
-        response.getWriter().write("all roles has role \"foo\": " + roles.contains("foo") + "\n");
-        response.getWriter().write("all roles has role \"bar\": " + roles.contains("bar") + "\n");
-        response.getWriter().write("all roles has role \"kaz\": " + roles.contains("kaz") + "\n");
-    }
-
-
-    /**
-     * Handles the HTTP <code>GET</code> method.
-     *
-     * @param request servlet request
-     * @param response servlet response
-     * @throws ServletException if a servlet-specific error occurs
-     * @throws IOException if an I/O error occurs
-     */
-    @Override
-    protected void doGet(HttpServletRequest request, HttpServletResponse response)
-            throws ServletException, IOException {
-        processRequest(request, response);
-    }
-
-    /**
-     * Handles the HTTP <code>POST</code> method.
-     *
-     * @param request servlet request
-     * @param response servlet response
-     * @throws ServletException if a servlet-specific error occurs
-     * @throws IOException if an I/O error occurs
-     */
-    @Override
-    protected void doPost(HttpServletRequest request, HttpServletResponse response)
-            throws ServletException, IOException {
-        processRequest(request, response);
-    }
-
-    /**
-     * Returns a short description of the servlet.
-     *
-     * @return a String containing servlet description
-     */
-    @Override
-    public String getServletInfo() {
-        return "Short description";
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
deleted file mode 100644
index da648d4..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static java.util.Arrays.asList;
-import static javax.security.enterprise.AuthenticationStatus.SEND_FAILURE;
-
-import java.util.HashSet;
-
-import jakarta.enterprise.context.RequestScoped;
-import javax.security.enterprise.AuthenticationStatus;
-import javax.security.enterprise.AuthenticationException;
-import javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism;
-import javax.security.enterprise.authentication.mechanism.http.HttpMessageContext;
-import javax.security.enterprise.credential.CallerOnlyCredential;
-import javax.security.enterprise.credential.Credential;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-@RequestScoped
-public class TestAuthenticationMechanism implements HttpAuthenticationMechanism {
-
-    @Override
-    public AuthenticationStatus validateRequest(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext) throws AuthenticationException {
-
-        if (httpMessageContext.isAuthenticationRequest()) {
-
-            Credential credential = httpMessageContext.getAuthParameters().getCredential();
-            if (!(credential instanceof CallerOnlyCredential)) {
-                throw new IllegalStateException("This authentication mechanism requires a programmatically provided CallerOnlyCredential");
-            }
-
-            CallerOnlyCredential callerOnlyCredential = (CallerOnlyCredential) credential;
-
-            if ("reza".equals(callerOnlyCredential.getCaller())) {
-                return httpMessageContext.notifyContainerAboutLogin("reza", new HashSet<>(asList("foo", "bar")));
-            }
-
-            if ("rezax".equals(callerOnlyCredential.getCaller())) {
-                throw new AuthenticationException();
-            }
-
-            return SEND_FAILURE;
-
-        }
-
-        return httpMessageContext.doNothing();
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/src/main/java/org/glassfish/soteria/test/TestEJB.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/src/main/java/org/glassfish/soteria/test/TestEJB.java
deleted file mode 100644
index 67d10f4..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/src/main/java/org/glassfish/soteria/test/TestEJB.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import jakarta.ejb.Stateless;
-import jakarta.inject.Inject;
-import jakarta.annotation.security.DeclareRoles;
-import jakarta.annotation.security.PermitAll;
-import jakarta.annotation.Resource;
-import jakarta.ejb.EJBContext;
-import jakarta.annotation.security.RolesAllowed;
-import org.glassfish.soteria.SecurityContextImpl;
-import javax.security.enterprise.SecurityContext;
-import java.security.Principal;
-import java.util.Set;
-@Stateless
-@DeclareRoles({ "foo" , "bar", "kaz"})
-public class TestEJB {
-
-    @Inject
-    private SecurityContext securityContext;
-
-    @Resource
-    private EJBContext ejbContext;
-
-    public Principal getUserPrincipalFromEJBContext() {
-        try {
-            return ejbContext.getCallerPrincipal();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
-
-    public boolean isCallerInRoleFromEJBContext(String role) {
-        try {
-            return ejbContext.isCallerInRole(role);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return false;
-    }
-
-
-    public Principal getUserPrincipalFromSecContext() {
-        return securityContext.getCallerPrincipal();
-    }
-
-    public boolean isCallerInRoleFromSecContext(String role) {
-        return securityContext.isCallerInRole(role);
-    }
-
-    public Set<String> getAllDeclaredCallerRoles() {
-        return ((SecurityContextImpl)securityContext).getAllDeclaredCallerRoles();
-    }
-
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/src/main/webapp/WEB-INF/beans.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/src/main/webapp/WEB-INF/beans.xml
deleted file mode 100644
index e69de29..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/src/main/webapp/WEB-INF/beans.xml
+++ /dev/null
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/src/test/java/org/glassfish/soteria/test/AppSecurityContextAuthIT.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/src/test/java/org/glassfish/soteria/test/AppSecurityContextAuthIT.java
deleted file mode 100644
index 8c3dcd3..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth-ejb/src/test/java/org/glassfish/soteria/test/AppSecurityContextAuthIT.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static org.glassfish.soteria.test.Assert.assertDefaultAuthenticated;
-import static org.glassfish.soteria.test.Assert.assertDefaultNotAuthenticated;
-import static org.glassfish.soteria.test.ShrinkWrap.mavenWar;
-import static org.junit.Assert.assertTrue;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-import org.junit.Rule;
-import org.junit.AfterClass;
-import org.junit.rules.TestWatcher;
-
-
-@RunWith(Arquillian.class)
-public class AppSecurityContextAuthIT extends ArquillianBase {
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    @Rule
-    public TestWatcher reportWatcher=new ReportWatcher(stat, "Security::soteria::AppSecurityContextEJB");
-
-    @AfterClass
-    public static void printSummary(){
-        stat.printSummary();
-    }
-
-    @Deployment(testable = false)
-    public static Archive<?> createDeployment() {
-        return mavenWar();
-    }
-
-    @Test
-    public void testAuthenticatedStatus() {
-        assertTrue(
-            readFromServer("/servlet?name=reza")
-                .contains("Authenticated with status: SUCCESS"));
-    }
-
-    /**
-     * The name "rezax" will cause the custom authentication provider
-     * to throw an auth exception, which should ultimately result in
-     * a SEND_FAILURE outcome from SecurityContext.authenticate.
-     */
-    @Test
-    public void testAuthenticatedStatusException() {
-        assertTrue(
-            readFromServer("/servlet?name=rezax")
-                .contains("Authenticated with status: SEND_FAILURE"));
-    }
-
-    /**
-     * The name "unknown" will cause the custom authentication provider
-     * to return SEND_FAILURE, which should ultimately result in
-     * a SEND_FAILURE outcome from SecurityContext.authenticate as well.
-     */
-    @Test
-    public void testAuthenticatedStatusFail() {
-        assertTrue(
-            readFromServer("/servlet?name=unknown")
-                .contains("Authenticated with status: SEND_FAILURE"));
-    }
-
-    @Test
-    public void testAuthenticated() {
-        Assert.assertAuthenticated(
-                "ejb",
-                "reza",
-                readFromServer("/servlet?name=reza"));
-    }
-
-    @Test
-    public void testContextAuthenticated() {
-        Assert.assertAuthenticated(
-            "context",
-            "reza",
-            readFromServer("/servlet?name=reza"));
-    }
-
-    @Test
-    public void testContextIsCallerInRole(){
-        Assert.assertAuthenticated(
-                "context",
-                "reza",
-                readFromServer("/servlet?name=reza"), "foo", "bar");
-    }
-
-    @Test
-    public void testContextAllCallers(){
-        Assert.assertAuthenticatedRoles(
-                "all roles",
-                readFromServer("/servlet?name=reza"), "foo", "bar");
-    }
-
-    @Test
-    public void testContextHasAccessToResource(){
-        Assert.assertHasAccessToResource(
-                "web",
-                "reza",
-                "/protectedServlet",
-                readFromServer("/servlet?name=reza"));
-    }
-
-    @Test
-    public void testNotAuthenticated() {
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet"));
-    }
-
-
-
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth/pom.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth/pom.xml
deleted file mode 100644
index 120a9f0..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth/pom.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-        <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.glassfish.soteria.test</groupId>
-        <artifactId>soteria</artifactId>
-        <version>6.2.6-SNAPSHOT</version>
-    </parent>
-
-        <artifactId>app-securitycontext-auth</artifactId>
-        <packaging>war</packaging>
-
-        <build>
-        <finalName>app-securitycontext-auth</finalName>
-        </build>
-
-    <properties>
-        <failOnMissingWebXml>false</failOnMissingWebXml>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.glassfish.soteria.test</groupId>
-            <artifactId>common</artifactId>
-            <version>6.2.6-SNAPSHOT</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth/src/main/java/org/glassfish/soteria/test/ProtectedServlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth/src/main/java/org/glassfish/soteria/test/ProtectedServlet.java
deleted file mode 100644
index a0f1b02..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth/src/main/java/org/glassfish/soteria/test/ProtectedServlet.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import org.glassfish.soteria.SecurityContextImpl;
-import javax.security.enterprise.SecurityContext;
-import jakarta.servlet.annotation.ServletSecurity;
-import jakarta.servlet.annotation.HttpConstraint;
-import jakarta.annotation.security.DeclareRoles;
-import jakarta.inject.Inject;
-import javax.security.enterprise.AuthenticationStatus;
-import javax.security.enterprise.SecurityContext;
-import javax.security.enterprise.credential.CallerOnlyCredential;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.Set;
-
-import static javax.security.enterprise.authentication.mechanism.http.AuthenticationParameters.withParams;
-import static org.glassfish.soteria.Utils.notNull;
-
-/**
- * Test Servlet that prints out the name of the authenticated caller and whether
- * this caller is in any of the roles {foo, bar, kaz}
- */
-@DeclareRoles({"foo", "bar", "kaz"})
-@WebServlet("/protectedServlet")
-@ServletSecurity(@HttpConstraint(rolesAllowed = "foo"))
-public class ProtectedServlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Inject
-    private SecurityContext securityContext;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
-        response.getWriter().write("This is a servlet \n");
-
-        String name = request.getParameter("name");
-
-        if (notNull(name)) {
-
-            AuthenticationStatus status = securityContext.authenticate(
-                    request, response,
-                    withParams()
-                            .credential(
-                                    new CallerOnlyCredential(name)));
-
-            response.getWriter().write("Authenticated with status: " + status.name() + "\n");
-        }
-
-        String webName = null;
-        if (request.getUserPrincipal() != null) {
-            webName = request.getUserPrincipal().getName();
-        }
-
-        response.getWriter().write("web username: " + webName + "\n");
-
-        response.getWriter().write("web user has role \"foo\": " + request.isUserInRole("foo") + "\n");
-        response.getWriter().write("web user has role \"bar\": " + request.isUserInRole("bar") + "\n");
-        response.getWriter().write("web user has role \"kaz\": " + request.isUserInRole("kaz") + "\n");
-
-        String contextName = null;
-        if (securityContext.getCallerPrincipal() != null) {
-            contextName = securityContext.getCallerPrincipal().getName();
-        }
-
-        response.getWriter().write("context username: " + contextName + "\n");
-
-        response.getWriter().write("context user has role \"foo\": " + securityContext.isCallerInRole("foo") + "\n");
-        response.getWriter().write("context user has role \"bar\": " + securityContext.isCallerInRole("bar") + "\n");
-        response.getWriter().write("context user has role \"kaz\": " + securityContext.isCallerInRole("kaz") + "\n");
-
-        response.getWriter().write("has access to /protectedServlet: " + securityContext.hasAccessToWebResource("/protectedServlet") + "\n");
-
-        Set<String> roles = ((SecurityContextImpl) securityContext).getAllDeclaredCallerRoles();
-
-        response.getWriter().write("All declared roles of user " + roles + "\n");
-
-        response.getWriter().write("all roles has role \"foo\": " + roles.contains("foo") + "\n");
-        response.getWriter().write("all roles has role \"bar\": " + roles.contains("bar") + "\n");
-        response.getWriter().write("all roles has role \"kaz\": " + roles.contains("kaz") + "\n");
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth/src/main/java/org/glassfish/soteria/test/Servlet.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth/src/main/java/org/glassfish/soteria/test/Servlet.java
deleted file mode 100644
index faaecdf..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth/src/main/java/org/glassfish/soteria/test/Servlet.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import org.glassfish.soteria.SecurityContextImpl;
-
-import jakarta.annotation.security.DeclareRoles;
-import jakarta.inject.Inject;
-import javax.security.enterprise.AuthenticationStatus;
-import javax.security.enterprise.SecurityContext;
-import javax.security.enterprise.credential.CallerOnlyCredential;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.annotation.WebServlet;
-import jakarta.servlet.http.HttpServlet;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.Set;
-
-import static javax.security.enterprise.authentication.mechanism.http.AuthenticationParameters.withParams;
-import static org.glassfish.soteria.Utils.notNull;
-
-/**
- * Test Servlet that prints out the name of the authenticated caller and whether
- * this caller is in any of the roles {foo, bar, kaz}
- */
-@DeclareRoles({"foo", "bar", "kaz"})
-@WebServlet("/servlet")
-public class Servlet extends HttpServlet {
-
-    private static final long serialVersionUID = 1L;
-
-    @Inject
-    private SecurityContext securityContext;
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-
-        response.getWriter().write("This is a servlet \n");
-
-        String name = request.getParameter("name");
-
-        if (notNull(name)) {
-
-            AuthenticationStatus status = securityContext.authenticate(
-                    request, response,
-                    withParams()
-                            .credential(
-                                    new CallerOnlyCredential(name)));
-
-            response.getWriter().write("Authenticated with status: " + status.name() + "\n");
-        }
-
-        String webName = null;
-        if (request.getUserPrincipal() != null) {
-            webName = request.getUserPrincipal().getName();
-        }
-
-        response.getWriter().write("web username: " + webName + "\n");
-
-        response.getWriter().write("web user has role \"foo\": " + request.isUserInRole("foo") + "\n");
-        response.getWriter().write("web user has role \"bar\": " + request.isUserInRole("bar") + "\n");
-        response.getWriter().write("web user has role \"kaz\": " + request.isUserInRole("kaz") + "\n");
-
-        String contextName = null;
-        if (securityContext.getCallerPrincipal() != null) {
-            contextName = securityContext.getCallerPrincipal().getName();
-        }
-
-        response.getWriter().write("context username: " + contextName + "\n");
-
-        response.getWriter().write("context user has role \"foo\": " + securityContext.isCallerInRole("foo") + "\n");
-        response.getWriter().write("context user has role \"bar\": " + securityContext.isCallerInRole("bar") + "\n");
-        response.getWriter().write("context user has role \"kaz\": " + securityContext.isCallerInRole("kaz") + "\n");
-
-        response.getWriter().write("web user has access to /protectedServlet: " + securityContext.hasAccessToWebResource("/protectedServlet") + "\n");
-
-        Set<String> roles = ((SecurityContextImpl) securityContext).getAllDeclaredCallerRoles();
-
-        response.getWriter().write("All declared roles of user " + roles + "\n");
-
-        response.getWriter().write("all roles has role \"foo\": " + roles.contains("foo") + "\n");
-        response.getWriter().write("all roles has role \"bar\": " + roles.contains("bar") + "\n");
-        response.getWriter().write("all roles has role \"kaz\": " + roles.contains("kaz") + "\n");
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
deleted file mode 100644
index da648d4..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth/src/main/java/org/glassfish/soteria/test/TestAuthenticationMechanism.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static java.util.Arrays.asList;
-import static javax.security.enterprise.AuthenticationStatus.SEND_FAILURE;
-
-import java.util.HashSet;
-
-import jakarta.enterprise.context.RequestScoped;
-import javax.security.enterprise.AuthenticationStatus;
-import javax.security.enterprise.AuthenticationException;
-import javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism;
-import javax.security.enterprise.authentication.mechanism.http.HttpMessageContext;
-import javax.security.enterprise.credential.CallerOnlyCredential;
-import javax.security.enterprise.credential.Credential;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
-
-@RequestScoped
-public class TestAuthenticationMechanism implements HttpAuthenticationMechanism {
-
-    @Override
-    public AuthenticationStatus validateRequest(HttpServletRequest request, HttpServletResponse response, HttpMessageContext httpMessageContext) throws AuthenticationException {
-
-        if (httpMessageContext.isAuthenticationRequest()) {
-
-            Credential credential = httpMessageContext.getAuthParameters().getCredential();
-            if (!(credential instanceof CallerOnlyCredential)) {
-                throw new IllegalStateException("This authentication mechanism requires a programmatically provided CallerOnlyCredential");
-            }
-
-            CallerOnlyCredential callerOnlyCredential = (CallerOnlyCredential) credential;
-
-            if ("reza".equals(callerOnlyCredential.getCaller())) {
-                return httpMessageContext.notifyContainerAboutLogin("reza", new HashSet<>(asList("foo", "bar")));
-            }
-
-            if ("rezax".equals(callerOnlyCredential.getCaller())) {
-                throw new AuthenticationException();
-            }
-
-            return SEND_FAILURE;
-
-        }
-
-        return httpMessageContext.doNothing();
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth/src/main/webapp/WEB-INF/beans.xml b/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth/src/main/webapp/WEB-INF/beans.xml
deleted file mode 100644
index e69de29..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth/src/main/webapp/WEB-INF/beans.xml
+++ /dev/null
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth/src/test/java/org/glassfish/soteria/test/AppSecurityContextAuthIT.java b/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth/src/test/java/org/glassfish/soteria/test/AppSecurityContextAuthIT.java
deleted file mode 100644
index cfddf88..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/app-securitycontext-auth/src/test/java/org/glassfish/soteria/test/AppSecurityContextAuthIT.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static org.glassfish.soteria.test.Assert.assertDefaultAuthenticated;
-import static org.glassfish.soteria.test.Assert.assertDefaultNotAuthenticated;
-import static org.glassfish.soteria.test.ShrinkWrap.mavenWar;
-import static org.junit.Assert.assertTrue;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-import org.junit.Rule;
-import org.junit.AfterClass;
-import org.junit.rules.TestWatcher;
-
-
-@RunWith(Arquillian.class)
-public class AppSecurityContextAuthIT extends ArquillianBase {
-
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    @Rule
-    public TestWatcher reportWatcher=new ReportWatcher(stat, "Security::soteria::AppSecurityContextServlet");
-
-    @AfterClass
-    public static void printSummary(){
-        stat.printSummary();
-    }
-
-    @Deployment(testable = false)
-    public static Archive<?> createDeployment() {
-        return mavenWar();
-    }
-
-    @Test
-    public void testAuthenticated() {
-        assertDefaultAuthenticated(
-            readFromServer("/servlet?name=reza"));
-    }
-
-    @Test
-    public void testAuthenticatedStatus() {
-        assertTrue(
-            readFromServer("/servlet?name=reza")
-                .contains("Authenticated with status: SUCCESS"));
-    }
-
-    /**
-     * The name "rezax" will cause the custom authentication provider
-     * to throw an auth exception, which should ultimately result in
-     * a SEND_FAILURE outcome from SecurityContext.authenticate.
-     */
-    @Test
-    public void testAuthenticatedStatusException() {
-        assertTrue(
-            readFromServer("/servlet?name=rezax")
-                .contains("Authenticated with status: SEND_FAILURE"));
-    }
-
-    /**
-     * The name "unknown" will cause the custom authentication provider
-     * to return SEND_FAILURE, which should ultimately result in
-     * a SEND_FAILURE outcome from SecurityContext.authenticate as well.
-     */
-    @Test
-    public void testAuthenticatedStatusFail() {
-        assertTrue(
-            readFromServer("/servlet?name=unknown")
-                .contains("Authenticated with status: SEND_FAILURE"));
-    }
-
-    @Test
-    public void testContextAuthenticated() {
-        Assert.assertAuthenticated(
-            "context",
-            "reza",
-            readFromServer("/servlet?name=reza"));
-    }
-
-    @Test
-    public void testContextIsCallerInRole(){
-        Assert.assertAuthenticated(
-                "context",
-                "reza",
-                readFromServer("/servlet?name=reza"), "foo", "bar");
-    }
-
-    @Test
-    public void testContextAllCallers(){
-        Assert.assertAuthenticatedRoles(
-                "all roles",
-                readFromServer("/servlet?name=reza"), "foo", "bar");
-    }
-
-    @Test
-    public void testContextHasAccessToResource(){
-        Assert.assertHasAccessToResource(
-                "web",
-                "reza",
-                "/protectedServlet",
-                readFromServer("/servlet?name=reza"));
-    }
-
-    @Test
-    public void testNotAuthenticated() {
-        assertDefaultNotAuthenticated(
-            readFromServer("/servlet"));
-    }
-
-
-
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/build.properties b/appserver/tests/appserv-tests/devtests/security/soteria/build.properties
deleted file mode 100644
index fabf1d0..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/build.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-
-    Copyright (c) 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
-
--->
-
-
-<property name="module" value="security"/>
-<property name="sub-module" value="${module}-soteria"/>
-<property name="appname" value="${sub-module}"/>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/build.xml b/appserver/tests/appserv-tests/devtests/security/soteria/build.xml
deleted file mode 100644
index 6ad5c9c..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/build.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<!ENTITY commonSetup SYSTEM "./../../../config/properties.xml">
-<!ENTITY commonBuild SYSTEM "./../../../config/common.xml">
-<!ENTITY commonRun SYSTEM "./../../../config/run.xml">
-<!ENTITY testProperties SYSTEM "./build.properties">
-<!ENTITY commonSecurity SYSTEM "./../common.xml">
-]>
-
-
-<project name="jsr375R" basedir="." default="usage" xmlns:artifact="antlib:org.apache.maven.artifact.ant">
-
-   &commonSetup;
-   &commonBuild;
-   &commonRun;
-   &testProperties;
-   &commonSecurity;
-    <property environment="env"/>
-    <get src="https://repo1.maven.org/maven2/org/apache/maven/maven-ant-tasks/2.1.3/maven-ant-tasks-2.1.3.jar" dest="${env.APS_HOME}/lib/maven-ant-tasks-2.1.3.jar"/>
-    <path id="maven-ant-tasks.classpath" path="${env.APS_HOME}/lib/maven-ant-tasks-2.1.3.jar" />
-    <typedef resource="org/apache/maven/artifact/ant/antlib.xml"
-           uri="antlib:org.apache.maven.artifact.ant"
-           classpathref="maven-ant-tasks.classpath" />
-    <target name="all" depends="runMaven"/>
-    <target name="runMaven">
-      <artifact:mvn mavenHome="${env.M2_HOME}" fork="true">
-        <jvmarg value="-Dmaven.multiModuleProjectDirectory"/>
-        <jvmarg value="-Dmaven.javadoc.skip=true" />
-        <arg value="clean"/>
-        <arg value="verify"/>
-      </artifact:mvn>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/common/pom.xml b/appserver/tests/appserv-tests/devtests/security/soteria/common/pom.xml
deleted file mode 100644
index eafc6df..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/common/pom.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-        <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.glassfish.soteria.test</groupId>
-        <artifactId>soteria</artifactId>
-        <version>6.2.6-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>common</artifactId>
-
-    <packaging>jar</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.13.2</version>
-        </dependency>
-        <dependency>
-            <groupId>org.jboss.arquillian.junit</groupId>
-            <artifactId>arquillian-junit-container</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>net.sourceforge.htmlunit</groupId>
-            <artifactId>htmlunit</artifactId>
-            <version>2.29</version>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/common/src/main/java/org/glassfish/soteria/test/ArquillianBase.java b/appserver/tests/appserv-tests/devtests/security/soteria/common/src/main/java/org/glassfish/soteria/test/ArquillianBase.java
deleted file mode 100644
index 25724da..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/common/src/main/java/org/glassfish/soteria/test/ArquillianBase.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static java.util.logging.Level.SEVERE;
-import static org.apache.http.HttpStatus.SC_MULTIPLE_CHOICES;
-import static org.apache.http.HttpStatus.SC_OK;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.logging.Logger;
-
-import org.jboss.arquillian.test.api.ArquillianResource;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.rules.TestWatcher;
-import org.junit.runner.Description;
-
-import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
-import com.gargoylesoftware.htmlunit.Page;
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.WebResponse;
-
-public class ArquillianBase {
-
-    private static final Logger logger = Logger.getLogger(ArquillianBase.class.getName());
-
-    private WebClient webClient;
-    private String response;
-
-        @ArquillianResource
-    private URL base;
-
-    @Rule
-    public TestWatcher ruleExample = new TestWatcher() {
-        @Override
-        protected void failed(Throwable e, Description description) {
-            super.failed(e, description);
-
-            logger.log(SEVERE,
-                "\n\nTest failed: " +
-                description.getClassName() + "." + description.getMethodName() +
-
-                "\nMessage: " + e.getMessage() +
-
-                "\nLast response: " +
-
-                "\n\n"  + response + "\n\n");
-
-        }
-    };
-
-    @Before
-    public void setUp() {
-        response = null;
-        webClient = new WebClient() {
-
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public void printContentIfNecessary(WebResponse webResponse) {
-                int statusCode = webResponse.getStatusCode();
-                if (getOptions().getPrintContentOnFailingStatusCode() && !(statusCode >= SC_OK && statusCode < SC_MULTIPLE_CHOICES)) {
-                    logger.log(SEVERE, webResponse.getWebRequest().getUrl().toExternalForm());
-                }
-                super.printContentIfNecessary(webResponse);
-            }
-        };
-        webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
-    }
-
-    @After
-    public void tearDown() {
-        webClient.getCookieManager().clearCookies();
-        webClient.close();
-    }
-
-    protected String readFromServer(String path) {
-        response = "";
-        WebResponse localResponse = responseFromServer(path);
-        if (localResponse != null) {
-            response = localResponse.getContentAsString();
-        }
-
-            return response;
-    }
-
-    protected WebResponse responseFromServer(String path) {
-
-        WebResponse webResponse = null;
-
-        Page page = pageFromServer(path);
-        if (page != null) {
-            webResponse = page.getWebResponse();
-            if (webResponse != null) {
-                response = webResponse.getContentAsString();
-            }
-        }
-
-        return webResponse;
-    }
-
-    protected <P extends Page> P pageFromServer(String path) {
-
-            if (base.toString().endsWith("/") && path.startsWith("/")) {
-                    path = path.substring(1);
-            }
-
-        try {
-            response = "";
-
-            P page = webClient.getPage(base + path);
-
-            if (page != null) {
-                WebResponse localResponse = page.getWebResponse();
-                if (localResponse != null) {
-                    response = localResponse.getContentAsString();
-                }
-            }
-
-            return page;
-
-        } catch (FailingHttpStatusCodeException | IOException e) {
-            throw new IllegalStateException(e);
-        }
-    }
-
-    protected WebClient getWebClient() {
-                 return webClient;
-         }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/common/src/main/java/org/glassfish/soteria/test/Assert.java b/appserver/tests/appserv-tests/devtests/security/soteria/common/src/main/java/org/glassfish/soteria/test/Assert.java
deleted file mode 100644
index 0cdad6f..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/common/src/main/java/org/glassfish/soteria/test/Assert.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import java.util.ArrayList;
-import java.util.List;
-import com.gargoylesoftware.htmlunit.WebResponse;
-
-public final class Assert {
-
-    public static void assertDefaultAuthenticated(String response) {
-        assertAuthenticated("web", "reza", response, "foo", "bar");
-    }
-
-    public static void assertDefaultAuthenticated(WebResponse response) {
-        assertNotNull(response);
-        assertEquals(200, response.getStatusCode());
-        assertAuthenticated("web", "reza", response.getContentAsString(), "foo", "bar");
-    }
-
-    public static void assertDefaultNotAuthenticated(String response) {
-        assertNotAuthenticated("web", "reza", response, "foo", "bar");
-    }
-
-    public static void assertDefaultNotAuthenticated(WebResponse response) {
-        assertNotNull(response);
-        assertEquals(401, response.getStatusCode());
-        assertNotAuthenticated("web", "reza", response.getContentAsString(), "foo", "bar");
-    }
-
-    public static void assertDefaultNotAuthenticatedUnprotected(WebResponse response) {
-        assertNotNull(response);
-        assertEquals(200, response.getStatusCode());
-        assertNotAuthenticatedUnprotected("web", "null", response.getContentAsString(), new ArrayList<String>());
-    }
-
-    public static void assertNotAuthenticatedError(WebResponse response) {
-        assertNotNull(response);
-        assertEquals(500, response.getStatusCode());
-    }
-
-    public static void assertApplicationPrincipalAndContainerPrincipalName(WebResponse response) {
-        assertNotNull(response);
-        assertEquals(200, response.getStatusCode());
-        assertApplicationPrincipalAndContainerPrincipalSubject("reza", "foo", response
-                .getContentAsString());
-    }
-
-    public static void assertBundledHAMPrecedenceOverLoginConfig(WebResponse response) {
-        assertNotNull(response);
-        assertEquals(200, response.getStatusCode());
-        assertBundledHAMPrecedenceOverLoginConfig("reza", "foo", response
-                .getContentAsString());
-    }
-
-    public static void assertBothContainerAndApplicationPrincipalsAreSame(WebResponse response) {
-        assertNotNull(response);
-        assertEquals(200, response.getStatusCode());
-        assertBothContainerAndApplicationPrincipalsAreSame("reza", "foo", response
-                .getContentAsString());
-    }
-
-    public static void assertAuthenticated(String userType, String name, String response, String... roles) {
-        assertTrue(
-            "Should be authenticated as user " + name + " but was not \n Response: \n" +
-            response + "\n search: " + userType + " username: " + name,
-            response.contains(userType + " username: " + name));
-
-        for (String role : roles) {
-            assertTrue(
-                "Authenticated user should have role \"" + role + "\", but did not \n Response: \n" +
-                response,
-                response.contains(userType + " user has role \"" + role + "\": true"));
-        }
-    }
-
-    public static void assertNotAuthenticated(String userType, String name, String response, String... roles) {
-        assertFalse(
-            "Should not be authenticated as user " + name + " but was \n Response: \n" +
-            response + "\n search: " + userType + " username: " + name,
-            response.contains(userType + " username: " + name));
-
-        for (String role : roles) {
-            assertFalse(
-                "Authenticated user should not have role \"" + role + "\", but did \n Response: \n" +
-                response,
-                response.contains(userType + " user has role \"" + role + "\": true"));
-        }
-     }
-
-    public static void assertAuthenticatedRoles(String userType, String response, String... roles) {
-        for (String role : roles) {
-            assertTrue(
-                    "Authenticated user should have role \"" + role + "\", but did not \n Response: \n" +
-                            response,
-                    response.contains(userType + " has role \"" + role + "\": true"));
-        }
-    }
-
-    public static void assertNotAuthenticatedRoles(String userType, String name, String response, String... roles) {
-
-        for (String role : roles) {
-            assertFalse(
-                    "Authenticated user should not have role \"" + role + "\", but did \n Response: \n" +
-                            response,
-                    response.contains(userType + " has role \"" + role + "\": true"));
-        }
-    }
-    public static void assertNotAuthenticatedUnprotected(String userType, String name, String response, List<String> roles) {
-        assertTrue(
-                "Should not be authenticated as user " + name + " but was \n Response: \n" +
-                        response + "\n search: " + userType + " username: " + name,
-                response.contains(userType + " username: " + name));
-
-        for (String role : roles) {
-            assertFalse(
-                    "Authenticated user should not have role \"" + role + "\", but did \n Response: \n" +
-                            response,
-                    response.contains(userType + " user has role \"" + role + "\": true"));
-        }
-    }
-
-    public static void assertHasAccessToResource(String userType, String name, String resource, String response) {
-        assertTrue(
-                "user " + name + " should have access to resource "+ resource +" but was not \n Response: \n" +
-                        response,
-                response.contains(userType + " user has access to " + resource + ": true"));
-    }
-
-    public static void assertNotHasAccessToResource(String userType, String name, String resource, String response) {
-        assertFalse(
-                "user " + name + " should have access to resource "+ resource +" but was not \n Response: \n" +
-                        response,
-                response.contains(userType + " user has access to " + resource + ": true"));
-    }
-
-    public static void assertBundledHAMPrecedenceOverLoginConfig(String name, String role, String response) {
-        assertTrue(
-                "For " + name + " authentication should have been performed by TestAuthenticationMechanism, but wasn't. \n" +
-                        "+ Response: \n" +
-                        response,
-                response.contains(String.format("Authentication Mechanism:TestAuthenticationMechanism")));
-    }
-
-    public static void assertApplicationPrincipalAndContainerPrincipalSubject(String name, String role, String response) {
-        assertTrue(
-                "Both application principal's and container principal's name should have been same as "
-                        + " but was not. \n Response: \n" +
-                        response,
-                response.contains(String.format("Container caller principal and application caller principal both are " +
-                        "represented by same principal for user %s and is in role %s", name, role)));
-    }
-
-    public static void assertBothContainerAndApplicationPrincipalsAreSame(String name, String role, String response) {
-        assertTrue(
-                "For user " + name + " both container caller principal and application caller principal should have been same, " +
-                        "but " +
-                        "wasn't. \n" +
-                        "+ Response: \n" +
-                        response,
-                response.contains(String.format("Both container caller principal and application caller principals are one and " +
-                                "the same for user %s in role %s",
-                        name, role)));
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/common/src/main/java/org/glassfish/soteria/test/ReportWatcher.java b/appserver/tests/appserv-tests/devtests/security/soteria/common/src/main/java/org/glassfish/soteria/test/ReportWatcher.java
deleted file mode 100644
index 6398064..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/common/src/main/java/org/glassfish/soteria/test/ReportWatcher.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import org.junit.rules.TestWatcher;
-import org.junit.runner.Description;
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-public class ReportWatcher extends TestWatcher{
-
-    private SimpleReporterAdapter stat;
-    private String testId;
-
-    public ReportWatcher(SimpleReporterAdapter stat, String testId) {
-        this.stat=stat;
-        this.testId=testId;
-    }
-
-    @Override
-      protected void starting(Description description){
-        stat.addDescription(testId + " " + description.getMethodName());
-      }
-
-      @Override
-      protected void failed(Throwable e, Description description) {
-          stat.addStatus(testId + " " + description.getMethodName() , stat.FAIL);
-      }
-
-      @Override
-      protected void succeeded(Description description) {
-          stat.addStatus(testId + " " + description.getMethodName() , stat.PASS);
-      }
-
-      protected void printSummary(){
-        stat.printSummary();
-      }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/common/src/main/java/org/glassfish/soteria/test/ShrinkWrap.java b/appserver/tests/appserv-tests/devtests/security/soteria/common/src/main/java/org/glassfish/soteria/test/ShrinkWrap.java
deleted file mode 100644
index 01757f1..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/common/src/main/java/org/glassfish/soteria/test/ShrinkWrap.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package org.glassfish.soteria.test;
-
-import static java.lang.System.getProperty;
-import static org.jboss.shrinkwrap.api.ShrinkWrap.create;
-
-import java.io.File;
-
-import org.jboss.shrinkwrap.api.importer.ZipImporter;
-import org.jboss.shrinkwrap.api.spec.WebArchive;
-
-public class ShrinkWrap {
-
-    public static WebArchive mavenWar() {
-        return
-            create(ZipImporter.class, getProperty("finalName") + ".war")
-                .importFrom(new File("target/" + getProperty("finalName") + ".war"))
-                .as(WebArchive.class);
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/common/src/main/resources/server.xml b/appserver/tests/appserv-tests/devtests/security/soteria/common/src/main/resources/server.xml
deleted file mode 100644
index dad2bcd..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/common/src/main/resources/server.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<server description="new server">
-
-    <featureManager>
-        <feature>javaee-7.0</feature>
-        <feature>localConnector-1.0</feature>
-    </featureManager>
-
-    <httpEndpoint httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint"/>
-
-    <applicationManager autoExpand="true"/>
-
-</server>
diff --git a/appserver/tests/appserv-tests/devtests/security/soteria/pom.xml b/appserver/tests/appserv-tests/devtests/security/soteria/pom.xml
deleted file mode 100644
index 56512ed..0000000
--- a/appserver/tests/appserv-tests/devtests/security/soteria/pom.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <groupId>org.glassfish.soteria.test</groupId>
-    <artifactId>soteria</artifactId>
-    <version>6.2.6-SNAPSHOT</version>
-    <packaging>pom</packaging>
-
-    <name>Soteria ${project.version} Integration tests and examples</name>
-
-    <properties>
-        <glassfish.version>5.0</glassfish.version>
-        <maven.compiler.source>1.8</maven.compiler.source>
-        <maven.compiler.target>1.8</maven.compiler.target>
-    </properties>
-
-    <modules>
-        <module>common</module>
-        <module>app-mem-basic</module>
-        <module>app-custom</module>
-        <module>app-custom-session</module>
-        <module>app-custom-rememberme</module>
-        <module>app-securitycontext-auth</module>
-        <module>app-securitycontext-auth-ejb</module>
-        <module>app-double-ham</module>
-        <module>app-ham-ordering</module>
-<!--        <module>app-db</module> -->
-        <module>app-custom-identity-store-handler</module>
-        <module>app-multiple-store</module>
-        <module>app-multiple-store-backup</module>
-        <module>app-no-role-mapping</module>
-        <module>app-bundled-ham-basic-login-config-form</module>
-        <module>app-caller-principal</module>
-        <module>app-no-application-caller-principal</module>
-    </modules>
-
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>org.jboss.arquillian</groupId>
-                <artifactId>arquillian-bom</artifactId>
-                <version>1.3.0.Final</version>
-                <scope>import</scope>
-                <type>pom</type>
-            </dependency>
-            <dependency>
-            <groupId>com.unboundid</groupId>
-            <artifactId>unboundid-ldapsdk</artifactId>
-            <version>4.0.4</version>
-        </dependency>
-        </dependencies>
-    </dependencyManagement>
-
-    <dependencies>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.13.2</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax</groupId>
-            <artifactId>javaee-api</artifactId>
-            <version>7.0</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.security.enterprise</groupId>
-            <artifactId>javax.security.enterprise-api</artifactId>
-            <version>1.0</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.glassfish.soteria</groupId>
-            <artifactId>javax.security.enterprise</artifactId>
-            <version>1.0</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.jboss.arquillian.container</groupId>
-            <artifactId>arquillian-glassfish-remote-3.1</artifactId>
-            <version>1.0.2</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.sun.ejte.ccl.reporter</groupId>
-            <artifactId>SimpleReporterAdapter</artifactId>
-            <version>1.0</version>
-            <scope>system</scope>
-            <systemPath>${APS_HOME}/lib/reporter.jar</systemPath>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-           <plugin>
-              <artifactId>maven-failsafe-plugin</artifactId>
-              <version>2.20</version>
-              <executions>
-                <execution>
-                  <goals>
-                    <goal>integration-test</goal>
-                    <goal>verify</goal>
-                  </goals>
-                </execution>
-              </executions>
-              <configuration>
-                <systemPropertyVariables>
-                  <finalName>${project.build.finalName}</finalName>
-                </systemPropertyVariables>
-                <environmentVariables>
-                  <GLASSFISH_HOME>${env.S1AS_HOME}/..</GLASSFISH_HOME>
-                </environmentVariables>
-              </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/uncovered-http-methods/client/Client.java b/appserver/tests/appserv-tests/devtests/security/uncovered-http-methods/client/Client.java
index 75dd7ae..fa33889 100644
--- a/appserver/tests/appserv-tests/devtests/security/uncovered-http-methods/client/Client.java
+++ b/appserver/tests/appserv-tests/devtests/security/uncovered-http-methods/client/Client.java
@@ -18,6 +18,7 @@
 
 import java.net.*;
 import java.io.*;
+import java.util.Base64;
 import java.util.Enumeration;
 import java.util.Hashtable;
 
@@ -404,7 +405,7 @@
                 if ((user != null) && (user.length() > 0)) {
                         // Add BASIC header for authentication
                         String auth =  user + ":" + password;
-                        String authEncoded = new sun.misc.BASE64Encoder().encode(auth.getBytes());
+                        String authEncoded = Base64.getEncoder().encodeToString(auth.getBytes());
                         c1.setRequestProperty("Authorization", "Basic " + authEncoded);
                 }
                 c1.setUseCaches(false);
diff --git a/appserver/tests/appserv-tests/devtests/security/weblogic-dd/client/TestRoleAssignments.java b/appserver/tests/appserv-tests/devtests/security/weblogic-dd/client/TestRoleAssignments.java
index 48a0c30..92d5c56 100644
--- a/appserver/tests/appserv-tests/devtests/security/weblogic-dd/client/TestRoleAssignments.java
+++ b/appserver/tests/appserv-tests/devtests/security/weblogic-dd/client/TestRoleAssignments.java
@@ -19,7 +19,9 @@
 import java.io.InputStreamReader;
 import java.net.URL;
 import java.net.URLConnection;
-import sun.misc.BASE64Encoder;
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
+import java.util.Base64.Encoder;
 
 class TestRoleAssignment {
 
@@ -45,14 +47,12 @@
             URL u = new URL(url);
             URLConnection uconn = u.openConnection();
 
-            String up = username + ":" + password;
-            BASE64Encoder be = new BASE64Encoder();
-            up = be.encode(up.getBytes());
+            up = Base64.getEncoder().encodeToString((username + ":" + password).getBytes(StandardCharsets.UTF_8));
             uconn.setRequestProperty("authorization", "Basic " + up);
 
-            BufferedReader reader = new BufferedReader(new InputStreamReader(
-                    uconn.getInputStream()));
-            while (reader.readLine() != null) {
+            try (BufferedReader reader = new BufferedReader(new InputStreamReader(uconn.getInputStream()))) {
+                while (reader.readLine() != null) {
+                }
             }
         } catch (Exception e) {
             e.printStackTrace();
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/build.xml b/appserver/tests/appserv-tests/devtests/security/wss/build.xml
index 0c37194..50458b1 100644
--- a/appserver/tests/appserv-tests/devtests/security/wss/build.xml
+++ b/appserver/tests/appserv-tests/devtests/security/wss/build.xml
@@ -33,17 +33,7 @@
 
     <target name="all">
         <record name="security-wss.output" action="start" />
-
-        <ant dir="encThenSign-default-conf" target="all"/>
-        <ant dir="permethod" target="all"/>
-
-        <!-- JWS 2.0 -->
         <ant dir="gartner" target="all"/>
-<!--        <ant dir="roles" target="all"/> --> <!-- AppClient environment: not authorized for invocation -->
-<!--        <ant dir="roles2" target="all"/> -->
-<!--        <ant dir="ssl" target="all"/>-->
-<!--        <ant dir="sslclientcert" target="all"/>-->
-
         <record name="security-wss.output" action="stop" />
     </target>
 </project>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/README b/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/README
deleted file mode 100644
index 068303a..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/README
+++ /dev/null
@@ -1,35 +0,0 @@
-A Simple WSS test. It is a simple servlet based webservice. Runs on j2sdk1.4.2
-It performs the following:
-1. Signs then Encrypts the message. (aka before-content)
-2. It is setup manually for now. To set up do the following:
-	Domain.xml
-	    <provider-config class-name="com.sun.xml.wss.provider.ClientSecurityAuthModule" provider-id="ClientProvider" provider-type="client">
-            <request-policy auth-recipient="before-content" auth-source="content"/>
-            <response-policy auth-recipient="after-content" auth-source="content"/>
-            <property name="security.config" value="${com.sun.aas.instanceRoot}/config/wss-server-config.xml"/>
-            </provider-config>
-            <provider-config class-name="com.sun.xml.wss.provider.ServerSecurityAuthModule" provider-id="ServerProvider" provider-type="server">
-            <request-policy auth-recipient="before-content" auth-source="content"/>
-            <response-policy auth-recipient="after-content" auth-source="content"/>
-            <property name="security.config" value="${com.sun.aas.instanceRoot}/config/wss-server-config.xml"/>
-           </provider-config>
-
-	sun-acc.xml
-
-	  <message-security-config auth-layer="SOAP" default-client-provider="ClientProvider">
-	  <provider-config class-name="com.sun.xml.wss.provider.ClientSecurityAuthModule" provider-id="ClientProvider" provider-type="client">
-          <request-policy auth-source="content" auth-recipient="before-content"/>
-          <response-policy auth-source="content" auth-recipient="after-content"/>
-          <property name="security.config" value="/export/local/hsingh/SUNWappserver.ssl/lib/appclient/wss-client-config.xml"/>
-          </provider-config>
-
-3. setup bouncy-castle provider
-	Copy bouncy castle to jre/lib/ext directory
-	java.security
-		security.provider.1=sun.security.provider.Sun
-		security.provider.2=org.bouncycastle.jce.provider.BouncyCastleProvider
-		security.provider.3=com.sun.net.ssl.internal.ssl.Provider
-		security.provider.4=com.sun.rsajca.Provider
-		security.provider.5=com.sun.crypto.provider.SunJCE
-		security.provider.6=sun.security.jgss.SunProvider
-
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/build.xml b/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/build.xml
deleted file mode 100644
index ae138e8..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/build.xml
+++ /dev/null
@@ -1,188 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<!ENTITY commonSetup SYSTEM "file:../../../../config/properties.xml">
-<!ENTITY commonBuild SYSTEM "file:../../../../config/common.xml">
-<!ENTITY commonRun SYSTEM "file:../../../../config/run.xml">
-<!ENTITY commonSecurity SYSTEM "file:../../common.xml">
-]>
-
-
-<project name="wss-encryptThenSign-default" default="usage" basedir=".">
-    &commonSetup;
-    &commonBuild;
-    &commonSecurity;
-    &commonRun;
-
-    <property name="ws-target" value="all"/>
-
-<!-- ======== Targets by execution granularity ========== -->
-    <target name="all">
-        <antcall target="setup"/>
-        <antcall target="runwstargets">
-            <param name="ws-target" value="all"/>
-        </antcall>
-        <antcall target="unsetup"/>
-    </target>
-
-    <target name="run-test">
-        <antcall target="runwstargets">
-            <param name="ws-target" value="run-test"/>
-        </antcall>
-    </target>
-
-    <target name="clean">
-        <antcall target="runwstargets">
-            <param name="ws-target" value="clean"/>
-        </antcall>
-    </target>
-
-    <target name="build">
-        <antcall target="runwstargets">
-            <param name="ws-target" value="build"/>
-        </antcall>
-    </target>
-
-    <target name="deploy">
-        <antcall target="runwstargets">
-            <param name="ws-target" value="deploy"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy">
-        <antcall target="runwstargets">
-            <param name="ws-target" value="undeploy"/>
-        </antcall>
-    </target>
-
-    <target name="run">
-        <antcall target="runwstargets">
-            <param name="ws-target" value="run"/>
-        </antcall>
-    </target>
-
-    <target name="setup" depends="init-common">
-        <!-- exports certdb stuff and imports into keystore -->
-        <antcall target="prepare-store-nickname-common">
-            <param name="cert.nickname" value="s1as"/>
-        </antcall>
-        <antcall target="enable-wss-message-security-provider">
-            <param name="wss.server.provider.name" value="ServerProvider"/>
-            <param name="wss.client.provider.name" value="ClientProvider"/>
-        </antcall>
-
-        <antcall target="set-wss-provider-request-auth-recipient">
-            <param name="wss.provider.name" value="ServerProvider"/>
-            <param name="request.auth.recipient" value="before-content"/>
-        </antcall>
-        <antcall target="set-wss-provider-response-auth-recipient">
-            <param name="wss.provider.name" value="ServerProvider"/>
-            <param name="response.auth.recipient" value="after-content"/>
-        </antcall>
-        <antcall target="set-wss-provider-request-auth-recipient">
-            <param name="wss.provider.name" value="ClientProvider"/>
-            <param name="request.auth.recipient" value="before-content"/>
-        </antcall>
-        <antcall target="set-wss-provider-response-auth-recipient">
-            <param name="wss.provider.name" value="ClientProvider"/>
-            <param name="response.auth.recipient" value="after-content"/>
-        </antcall>
-
-        <antcall target="backup-glassfish-acc.xml"/>
-        <antcall target="enable-wss-appclient-message-security-provider">
-            <param name="wss.client.provider.name" value="ClientProvider"/>
-        </antcall>
-        <antcall target="set-wss-appclient-request-recipient">
-            <param name="request.auth.recipient" value="before-content"/>
-        </antcall>
-        <antcall target="set-wss-appclient-response-recipient">
-            <param name="response.auth.recipient" value="after-content"/>
-        </antcall>
-        <antcall target="restart-server-instance-common" />
-    </target>
-
-    <target name="unsetup" depends="init-common" >
-        <antcall target="set-wss-provider-request-auth-recipient">
-            <param name="wss.provider.name" value="ServerProvider"/>
-            <param name="request.auth.recipient" value=""/>
-        </antcall>
-        <antcall target="set-wss-provider-response-auth-recipient">
-            <param name="wss.provider.name" value="ServerProvider"/>
-            <param name="response.auth.recipient" value=""/>
-        </antcall>
-        <antcall target="set-wss-provider-request-auth-recipient">
-            <param name="wss.provider.name" value="ClientProvider"/>
-            <param name="request.auth.recipient" value=""/>
-        </antcall>
-        <antcall target="set-wss-provider-response-auth-recipient">
-            <param name="wss.provider.name" value="ClientProvider"/>
-            <param name="response.auth.recipient" value=""/>
-        </antcall>
-        <antcall target="disable-wss-message-security-provider"/>
-        <antcall target="disable-wss-appclient-message-security-provider">
-            <param name="wss.client.provider.name" value="ClientProvider"/>
-        </antcall>
-        <antcall target="unset-wss-appclient-request-recipient">
-            <param name="request.auth.recipient" value="before-content"/>
-        </antcall>
-        <antcall target="unset-wss-appclient-response-recipient">
-            <param name="response.auth.recipient" value="after-content"/>
-        </antcall>
-        <antcall target="restart-server-instance-common" />
-    </target>
-
-
-    <target name="runwstargets">
-        <antcall target="servletws"/>
-    </target>
-
-<!-- ======== Targets by technology ========== -->
-
-    <target name="servletws">
-        <record name="security-wss.output" action="start" />
-            <ant dir="servletws" target="${ws-target}"/>
-        <record name="security-wss.output" action="stop" />
-    </target>
-    <target name="usage">
-        <echo> Usage:
-    ======== Targets by execution granularity =========
-
-    ant clean (Cleans all ws tests)
-    ant build (builds all ws tests)
-    ant setup (setup all required resources)
-    ant deploy (deploy all test apps)
-    ant run (Executes all tests)
-    ant undeploy (undeploy all test apps)
-    ant unsetup (remove all set resources)
-
-    ======== Targets by technology =========
-
-    ant servletws (Executes the servletws tests)
-    ant all (Executes all the ws tests)
-
-    ===== Targets by technoloy and execution granularity ======
-    Note: Run the command of the following type:
-
-            % ant servletws -Dws-target=clean
-
-    to run the 'clean' target for 'servletws' tests
-        </echo>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/README b/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/README
deleted file mode 100644
index 07dbc73..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/README
+++ /dev/null
@@ -1,2 +0,0 @@
-Run ant all from the above directory.
-
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/build.properties b/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/build.properties
deleted file mode 100644
index 082c99c..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/build.properties
+++ /dev/null
@@ -1,42 +0,0 @@
-<!--
-
-    Copyright (c) 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
-
--->
-
-
-<property name="module" value="ws"/>
-<property name="appname" value="${module}-taxcal"/>
-<property name="assemble" value="${build.classes.dir}/archive"/>
-<property name="test.client" value="com.sun.s1asdev.security.wss.defprovider.servlet.taxcal.client.TaxCalClient"/>
-<property name="application.xml" value="descriptor/application.xml"/>
-<property name="application-client.xml" value="descriptor/application-client.xml"/>
-<property name="sun-application-client.xml" value="descriptor/sun-application-client.xml"/>
-<property name="appclientjar.files" value="${build.classes.dir}"/>
-<property name="appclient.jar" value="${assemble.dir}/${appname}-client.jar"/>
-<property name="app.type" value="application"/>
-<property name="wsdl-file" value="wsdl/TaxCalServletService.wsdl"/>
-<property name="client-mapping.xml" value="TaxCalClientMapping.xml"/>
-<property name="wsdlfile.location" value="wsdl"/>
-
-<!--- servlet based endpoint params -->
-<!--property name="mappingfile.location" value=""/-->
-<property name="web-mapping.xml" value="TaxCalServletMapping.xml"/>
-<property name="sun-web.xml" value="descriptor/sun-web.xml"/>
-<property name="web.xml" value="descriptor/web.xml"/>
-<property name="web-webservices.xml" value="descriptor/webservices.xml"/>
-<property name="wsdlfile.name" value="TaxCalServletService.wsdl"/>
-<property name="wsdlfile.location" value="wsdl"/>
-
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/build.xml b/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/build.xml
deleted file mode 100644
index 7d699c6..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/build.xml
+++ /dev/null
@@ -1,204 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<!ENTITY commonSetup SYSTEM "file:./../../../../../config/properties.xml">
-<!ENTITY commonBuild SYSTEM "file:./../../../../../config/common.xml">
-<!ENTITY commonSecurity SYSTEM "file:../../../common.xml">
-<!ENTITY testproperties SYSTEM "file:./build.properties">
-]>
-
-<project name="SbMdbApp" default="usage" basedir=".">
-
-    &commonSetup;
-    &commonBuild;
-    &testproperties;
-    &commonSecurity;
-
-    <target name="all"
-    depends="clean, build, setup, deploy, run, undeploy, unsetup"/>
-
-    <target name="run-test"
-    depends="clean, build, deploy, run, undeploy"/>
-
-    <target name="clean" depends="init-common">
-      <antcall target="clean-common"/>
-    </target>
-
-    <target name="setup"/>
-
-    <target name="unsetup"/>
-
-    <target name="compile" depends="init-common,clean-common, generate-artifacts">
-        <antcall target="compile-common">
-            <param name="src" value="client"/>
-        </antcall>
-        <antcall target="compile-common">
-            <param name="src" value="web"/>
-        </antcall>
-    </target>
-
-    <target name="generate-artifacts">
-        <echo message=" Client Mapping file : ${client-mapping.xml}"/>
-        <antcall target="import-wsdl">
-            <param name="mapping.file"
-            value="${client-mapping.xml}"/>
-            <param name="config-wsdl.file"
-            value="config/config-client.xml"/>
-        </antcall>
-        <echo message="Web Mapping File : ${web-mapping.xml}"/>
-        <antcall target="import-wsdl">
-            <param name="mapping.file"
-            value="${web-mapping.xml}"/>
-            <param name="config-wsdl.file"
-            value="config/config-web.xml"/>
-        </antcall>
-    </target>
-    <target name="ws-package-appclientjar-common">
-        <mkdir dir="${assemble.dir}"/>
-        <delete file="${appclient.jar}" failonerror="false"/>
-        <mkdir dir="${build.classes.dir}/META-INF"/>
-        <copy file="${application-client.xml}"
-                tofile="${build.classes.dir}/META-INF/application-client.xml"/>
-        <copy file="${wsdl-file}"
-                tofile="${build.classes.dir}/META-INF/${wsdl-file}"/>
-        <jar jarfile="${appclient.jar}" basedir="${appclientjar.files}"
-                update="true" includes="${appclientjar.classes}"
-                manifest="./client/MANIFEST.MF">
-
-                <fileset dir="${build.classes.dir}" includes="${client-mapping.xml}"/>
-                <metainf dir="${build.classes.dir}/META-INF">
-                        <include name="application-client.xml"/>
-                        <include name="${wsdl-file}"/>
-                </metainf>
-        </jar>
-        <delete dir="${build.classes.dir}/META-INF" failonerror="false"/>
-    </target>
-    <target name="ws-package-war-common">
-        <echo message="my build classes dir is:${build.classes.dir}"/>
-        <delete file="${war.file}"/>
-        <mkdir dir="${build.classes.dir}/tmp"/>
-        <mkdir dir="${build.classes.dir}/tmp/WEB-INF"/>
-        <mkdir dir="${build.classes.dir}/tmp/WEB-INF/classes"/>
-        <copy file="${webservices.xml}"
-           tofile="${build.classes.dir}/tmp/WEB-INF/webservices.xml"
-           failonerror="false"/>
-        <copy file="${mappingfile.location}/${mappingfile.name}"
-           tofile="${build.classes.dir}/tmp/${mappingfile.name}"
-           failonerror="false"/>
-        <copy file="${wsdlfile.location}/${wsdlfile.name}"
-           tofile="${build.classes.dir}/tmp/WEB-INF/wsdl/${wsdlfile.name}"
-           failonerror="false"/>
-        <copy file="${web.xml}"
-           tofile="${build.classes.dir}/tmp/WEB-INF/web.xml"/>
-        <copy todir="${build.classes.dir}/tmp/WEB-INF/classes">
-           <fileset dir="${build.classes.dir}">
-               <include name="${war.classes}"/>
-           </fileset>
-        </copy>
-        <echo message="Creating war file ${war.file}"/>
-        <jar jarfile="${war.file}" update="true">
-           <fileset dir="${build.classes.dir}/tmp" casesensitive="yes">
-               <include name="**/*class*"/>
-           </fileset>
-           <fileset dir="${basedir}/web" casesensitive="yes">
-               <include name="**/*.html"/>
-               <include name="**/*.jsp"/>
-               <include name="**/*.gif"/>
-               <include name="**/*.do"/>
-               <exclude name="**/*.java,**/*.xml,**/*.properties"/>
-           </fileset>
-           <fileset dir="${build.classes.dir}/tmp/" casesensitive="true">
-               <include name="WEB-INF/web.xml"/>
-               <include name="WEB-INF/webservices.xml"/>
-               <include name="WEB-INF/wsdl/${wsdlfile.name}"/>
-               <include name="${mappingfile.name}"/>
-           </fileset>
-        </jar>
-        <echo message="created war file ${war.file}"/>
-        <delete dir="${build.classes.dir}/tmp/WEB-INF" failonerror="false"/>
-        <echo message="my webclient war classes are:${webclient.war.classes}"/>
-     </target>
-
-    <target name="build" depends="init-common,compile">
-        <antcall target="ws-package-appclientjar-common">
-            <param name="appclientjar.classes"
-              value="com/sun/s1asdev/security/wss/defprovider/servlet/taxcal/client/*.class" />
-            <param name="appclientjar.files"
-              value="${build.classes.dir}"/>
-            <param name="appclient.jar"
-              value="${assemble.dir}/${appname}-client.jar"/>
-        </antcall>
-        <!--antcall target="ws-war-common"-->
-        <antcall target="ws-package-war-common">
-            <param name="war.file" value="${assemble.dir}/${appname}-web.war"/>
-            <param name="war.classes"
-              value="com/sun/s1asdev/security/wss/defprovider/servlet/taxcal/*.class" />
-            <param name="mappingfile.name"
-              value="${web-mapping.xml}" />
-            <param name="mappingfile.location"
-              value="${build.classes.dir}"/>
-            <param name="webservices.xml"
-              value="${web-webservices.xml}" />
-        </antcall>
-        <antcall target="ear-common"/>
-    </target>
-
-    <target name="deploy"
-            depends="init-common">
-        <antcall target="deploy-common"/>
-    </target>
-
-    <target name="run" depends="init-common">
-        <property name="VMARGS" value="-Djavax.net.ssl.keyStore=${mykeystore.db.file} -Djavax.net.ssl.trustStore=${mytruststore.db.file} -Djavax.net.ssl.keyStorePassword=${ssl.password} -Djavax.net.ssl.trustStorePassword=${ssl.password}"/>
-        <property name="statetax-endpoint-url"
-            value="http://${http.host}:${http.port}/TaxCalWSServlet/statetaxservlet"/>
-        <echo message="State Tax Endpoint URL = ${statetax-endpoint-url}"/>
-        <property name="fedtax-endpoint-url"
-            value="http://${http.host}:${http.port}/TaxCalWSServlet/fedtaxservlet"/>
-        <echo message="Fed Tax Endpoint URL = ${fedtax-endpoint-url}"/>
-        <echo message="VMARGS= ${VMARGS}"/>
-           <exec executable="${APPCLIENT}">
-                      <env key="VMARGS" value="${VMARGS}"/>
-                <arg value="-client" />
-                <arg value="${assemble.dir}/${appname}AppClient.jar"/>
-                <arg value="-textauth"/>
-                <arg value="-user"/>
-                <arg value="j2ee"/>
-                       <arg value="-password"/>
-                <arg value="j2ee"/>
-                <arg line="-xml ${admin.domain.dir}/${admin.domain}/config/glassfish-acc.xml"/>
-                <arg line="${statetax-endpoint-url} ${fedtax-endpoint-url}"/>
-      </exec>
-   </target>
-
-    <target name="undeploy" depends="init-common">
-        <antcall target="undeploy-common"/>
-    </target>
-
-    <target name="usage">
-        <antcall target="usage-common"/>
-    </target>
-
-  <!--
-  =======================================================
-  User Defined specific targets
-  =======================================================
-  -->
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/client/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/client/MANIFEST.MF
deleted file mode 100644
index 8edeacc..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/client/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Main-Class: com.sun.s1asdev.security.wss.defprovider.servlet.taxcal.client.TaxCalClient
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/client/TaxCalClient.java b/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/client/TaxCalClient.java
deleted file mode 100644
index b9e1712..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/client/TaxCalClient.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (c) 2003, 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
- */
-
-package com.sun.s1asdev.security.wss.defprovider.servlet.taxcal.client;
-
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-
-import javax.naming.*;
-import javax.xml.rpc.Stub;
-
-
-public class TaxCalClient {
-
-        private static SimpleReporterAdapter stat = new SimpleReporterAdapter("appserv-tests");
-        private static String stateTaxEndpoint = null;
-        private static String fedTaxEndpoint = null;
-        private static String testSuite = "Sec::Servlet_Based_WSS_test Encrypt then Sign";
-        private static String testCase = null;
-        private static TaxCalServletService taxCalService = null;
-
-        public static void main (String[] args) {
-
-                if(args[0] == null || args[1] == null){
-                        System.out.println("TaxCal client: Argument missing. Please provide target" +
-                                 "endpoint address as argument");
-                        System.exit(1);
-                } else {
-                        stateTaxEndpoint = args[0];
-                        fedTaxEndpoint = args[1];
-                }
-
-                stat.addDescription(testSuite);
-                try {
-                        TaxCalClient client = new TaxCalClient();
-                        Context ic = new InitialContext();
-                        taxCalService = (TaxCalServletService)
-                                ic.lookup("java:comp/env/service/TaxCalServletService");
-
-                        client.callStateTaxService();
-                        client.callFedTaxService();
-                        stat.addStatus(testSuite, stat.PASS);
-                }catch(Exception e){
-                        stat.addStatus(testSuite, stat.FAIL);
-                        e.printStackTrace();
-                }
-
-                stat.printSummary(testSuite);
-    }
-
-        public void callStateTaxService() {
-                double income = 85000.00;
-                double deductions = 5000.00;
-
-                //String targetEndpointAddress =
-                //        "http://localhost:1024/taxcalculator";
-
-                try {
-
-                        StateTaxIF taxCalIFPort = taxCalService.getStateTaxIFPort();
-
-                        ((Stub)taxCalIFPort)._setProperty (Stub.ENDPOINT_ADDRESS_PROPERTY,
-                                stateTaxEndpoint);
-
-                        double stateTax = taxCalIFPort.getStateTax(income, deductions);
-                        System.out.println("State tax from servlet based TaxCalService :" + stateTax);
-
-                        if(stateTax == 24000.00)
-                                stat.addStatus(testSuite + " StateTaxPort", stat.PASS);
-                        else
-                                stat.addStatus(testSuite + " StateTaxPort", stat.FAIL);
-
-                } catch (Exception ex) {
-                        System.out.println("TaxCalEjbWebservice client failed");
-                        stat.addStatus(testSuite + " StateTaxPort", stat.FAIL);
-                        ex.printStackTrace();
-                }
-        }
-
-        public void callFedTaxService() {
-                double income = 97000.00;
-                double deductions = 7000.00;
-                try {
-                        //String targetEndpointAddress =
-                        //"http://localhost:1024/FindInterestServlet/FindInterest";
-
-                        FedTaxIF taxCalIFPort = taxCalService.getFedTaxIFPort();
-                        ((Stub)taxCalIFPort)._setProperty (Stub.ENDPOINT_ADDRESS_PROPERTY,
-                                fedTaxEndpoint);
-
-                        double fedTax = taxCalIFPort.getFedTax(income, deductions);
-                        System.out.println("Fed tax from Servlet based TaxCalService :" + fedTax);
-
-                        if(fedTax == 18000.00)
-                                stat.addStatus(testSuite + " FedTaxPort", stat.PASS);
-                        else
-                                stat.addStatus(testSuite + " FedTaxPort", stat.FAIL);
-
-                } catch (Exception ex) {
-                        System.out.println("TaxCalServletWebService client failed");
-                        stat.addStatus(testSuite + " FedTaxPort", stat.FAIL);
-                        ex.printStackTrace();
-                }
-        }
-}
-
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/config/config-client.xml b/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/config/config-client.xml
deleted file mode 100644
index e998508..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/config/config-client.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<configuration
-  xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
-  <wsdl
-      location="wsdl/TaxCalServletService.wsdl"
-      packageName="com.sun.s1asdev.security.wss.defprovider.servlet.taxcal.client"/>
-</configuration>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/config/config-sei.xml b/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/config/config-sei.xml
deleted file mode 100644
index 7f875d3..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/config/config-sei.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<configuration
-        xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
-        <service name="TaxCalServletService"
-                targetNamespace="http://tax.org/wsdl"
-                typeNamespace="http://tax.org/types"
-                packageName="com.sun.s1asdev.security.wss.defprovider.servlet.taxcal">
-                <interface name="com.sun.s1asdev.security.wss.defprovider.servlet.taxcal.FedTaxIF"
-                        servantName="com.sun.s1asdev.security.wss.defprovider.servlet.taxcal.FedTaxServlet"/>
-                <interface name="com.sun.s1asdev.security.wss.defprovider.servlet.taxcal.StateTaxIF"
-                        servantName="com.sun.s1asdev.security.wss.defprovider.servlet.taxcal.StateTaxServlet">
-                </interface>
-        </service>
-</configuration>
-
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/config/config-web.xml b/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/config/config-web.xml
deleted file mode 100644
index 4b01e8b..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/config/config-web.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<configuration
-  xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
-  <wsdl
-      location="wsdl/TaxCalServletService.wsdl"
-      packageName="com.sun.s1asdev.security.wss.defprovider.servlet.taxcal"/>
-</configuration>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/descriptor/application-client.xml b/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/descriptor/application-client.xml
deleted file mode 100644
index 5a6949f..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/descriptor/application-client.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<application-client version="1.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application-client_1_4.xsd">
-  <description>app client dd for taxcalculator</description>
-  <display-name>ws-taxcalClient</display-name>
-  <service-ref>
-     <description>taxcal service ref</description>
-     <service-ref-name>service/TaxCalServletService</service-ref-name>
-     <service-interface>com.sun.s1asdev.security.wss.defprovider.servlet.taxcal.client.TaxCalServletService</service-interface>
-     <wsdl-file>META-INF/wsdl/TaxCalServletService.wsdl</wsdl-file>
-     <jaxrpc-mapping-file>TaxCalClientMapping.xml</jaxrpc-mapping-file>
-  </service-ref>
-</application-client>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/descriptor/application.xml b/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/descriptor/application.xml
deleted file mode 100644
index c12a697..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/descriptor/application.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" "http://java.sun.com/dtd/application_1_3.dtd">
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<application>
-  <display-name>TaxCalculatorApp</display-name>
-  <module>
-    <web>
-      <web-uri>ws-taxcal-web.war</web-uri>
-      <context-root>TaxCalWSServlet</context-root>
-    </web>
-  </module>
-  <module>
-    <java>ws-taxcal-client.jar</java>
-  </module>
-</application>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/descriptor/web.xml b/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/descriptor/web.xml
deleted file mode 100644
index fd88537..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/descriptor/web.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-  <display-name>TaxCal ServletWS</display-name>
-  <servlet>
-    <servlet-name>StateTaxServlet</servlet-name>
-    <servlet-class>com.sun.s1asdev.security.wss.defprovider.servlet.taxcal.StateTaxServlet</servlet-class>
-    <load-on-startup>0</load-on-startup>
-  </servlet>
-  <servlet>
-    <servlet-name>FedTaxServlet</servlet-name>
-    <servlet-class>com.sun.s1asdev.security.wss.defprovider.servlet.taxcal.FedTaxServlet</servlet-class>
-    <load-on-startup>0</load-on-startup>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>StateTaxServlet</servlet-name>
-    <url-pattern>/statetaxservlet</url-pattern>
-  </servlet-mapping>
-  <servlet-mapping>
-    <servlet-name>FedTaxServlet</servlet-name>
-    <url-pattern>/fedtaxservlet</url-pattern>
-  </servlet-mapping>
-  <session-config>
-    <session-timeout>54</session-timeout>
-  </session-config>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/descriptor/webservices.xml b/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/descriptor/webservices.xml
deleted file mode 100644
index 1ed4f08..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/descriptor/webservices.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<webservices xmlns="http://java.sun.com/xml/ns/j2ee"
-      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
-        http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd"
-      version="1.1">
-  <description>desc</description>
-  <webservice-description>
-    <webservice-description-name>TaxCalculator Servlet</webservice-description-name>
-    <wsdl-file>WEB-INF/wsdl/TaxCalServletService.wsdl</wsdl-file>
-    <jaxrpc-mapping-file>TaxCalServletMapping.xml</jaxrpc-mapping-file>
-    <port-component>
-      <description>port component description</description>
-      <port-component-name>StateTaxIFPort</port-component-name>
-      <wsdl-port xmlns:taxns="http://tax.org/wsdl">taxns:StateTaxIFPort
-      </wsdl-port>
-      <service-endpoint-interface>com.sun.s1asdev.security.wss.defprovider.servlet.taxcal.StateTaxIF
-      </service-endpoint-interface>
-      <service-impl-bean>
-        <servlet-link>StateTaxServlet</servlet-link>
-      </service-impl-bean>
-    </port-component>
-    <port-component>
-      <description>port component description</description>
-      <port-component-name>FedTaxIFPort</port-component-name>
-      <wsdl-port xmlns:taxns="http://tax.org/wsdl">taxns:FedTaxIFPort
-      </wsdl-port>
-      <service-endpoint-interface>com.sun.s1asdev.security.wss.defprovider.servlet.taxcal.FedTaxIF
-      </service-endpoint-interface>
-      <service-impl-bean>
-        <servlet-link>FedTaxServlet</servlet-link>
-      </service-impl-bean>
-    </port-component>
-  </webservice-description>
-</webservices>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/web/FedTaxIF.java b/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/web/FedTaxIF.java
deleted file mode 100644
index 282d888..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/web/FedTaxIF.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package com.sun.s1asdev.security.wss.defprovider.servlet.taxcal;
-
-import java.rmi.RemoteException;
-import java.rmi.Remote;
-
-
-public interface FedTaxIF extends Remote{
-
-        public double getFedTax(double income, double deductions) throws RemoteException;
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/web/FedTaxServlet.java b/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/web/FedTaxServlet.java
deleted file mode 100644
index 1a7d117..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/web/FedTaxServlet.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2002, 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
- */
-
-package com.sun.s1asdev.security.wss.defprovider.servlet.taxcal;
-
-import java.util.Iterator;
-import java.net.URL;
-import javax.xml.namespace.QName;
-import javax.xml.rpc.Call;
-import java.io.Serializable;
-import java.rmi.RemoteException;
-import javax.naming.*;
-import javax.xml.rpc.Service;
-import javax.xml.rpc.server.ServiceLifecycle;
-import javax.xml.namespace.QName;
-import jakarta.servlet.SingleThreadModel;
-
-public class FedTaxServlet implements
-                        SingleThreadModel, ServiceLifecycle {
-
-    public FedTaxServlet() {
-        System.out.println("FedTaxServlet() instantiated");
-    }
-
-    public void init(Object context) {
-        System.out.println("Got ServiceLifecycle::init call " + context);
-    }
-
-    public void destroy() {
-        System.out.println("Got ServiceLifecycle::destroy call");
-    }
-
-    public double getFedTax(double income, double deductions) {
-        System.out.println("getStateTax invoked from servlet endpoint");
-         return ((income -  deductions) * 0.2);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/web/StateTaxIF.java b/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/web/StateTaxIF.java
deleted file mode 100644
index 5207a81..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/web/StateTaxIF.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package com.sun.s1asdev.security.wss.defprovider.servlet.taxcal;
-
-import java.rmi.RemoteException;
-import java.rmi.Remote;
-
-
-public interface StateTaxIF extends Remote{
-
-        public double getStateTax(double income, double deductions) throws RemoteException;
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/web/StateTaxServlet.java b/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/web/StateTaxServlet.java
deleted file mode 100644
index d216b8b..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/web/StateTaxServlet.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2002, 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
- */
-
-package com.sun.s1asdev.security.wss.defprovider.servlet.taxcal;
-
-import java.util.Iterator;
-import java.net.URL;
-import javax.xml.namespace.QName;
-import javax.xml.rpc.Call;
-import java.io.Serializable;
-import java.rmi.RemoteException;
-import javax.naming.*;
-import javax.xml.rpc.Service;
-import javax.xml.rpc.server.ServiceLifecycle;
-import javax.xml.namespace.QName;
-import jakarta.servlet.SingleThreadModel;
-
-public class StateTaxServlet implements
-                        SingleThreadModel, ServiceLifecycle {
-
-    public StateTaxServlet() {
-        System.out.println("StateTaxServlet() instantiated");
-    }
-
-    public void init(Object context) {
-        System.out.println("Got ServiceLifecycle::init call " + context);
-    }
-
-    public void destroy() {
-        System.out.println("Got ServiceLifecycle::destroy call");
-    }
-
-    public double getStateTax(double income, double deductions) {
-        System.out.println("getStateTax invoked from servlet endpoint");
-         return ((income -  deductions) * 0.3);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/wsdl/TaxCalServletService.wsdl b/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/wsdl/TaxCalServletService.wsdl
deleted file mode 100644
index 866c9d6..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/encThenSign-default-conf/servletws/wsdl/TaxCalServletService.wsdl
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<definitions name="TaxCalServletService" targetNamespace="http://tax.org/wsdl" xmlns:tns="http://tax.org/wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
-  <types/>
-  <message name="FedTaxIF_getFedTax">
-    <part name="double_1" type="xsd:double"/>
-    <part name="double_2" type="xsd:double"/></message>
-  <message name="FedTaxIF_getFedTaxResponse">
-    <part name="result" type="xsd:double"/></message>
-  <message name="StateTaxIF_getStateTax">
-    <part name="double_1" type="xsd:double"/>
-    <part name="double_2" type="xsd:double"/></message>
-  <message name="StateTaxIF_getStateTaxResponse">
-    <part name="result" type="xsd:double"/></message>
-  <portType name="FedTaxIF">
-    <operation name="getFedTax" parameterOrder="double_1 double_2">
-      <input message="tns:FedTaxIF_getFedTax"/>
-      <output message="tns:FedTaxIF_getFedTaxResponse"/></operation></portType>
-  <portType name="StateTaxIF">
-    <operation name="getStateTax" parameterOrder="double_1 double_2">
-      <input message="tns:StateTaxIF_getStateTax"/>
-      <output message="tns:StateTaxIF_getStateTaxResponse"/></operation></portType>
-  <binding name="FedTaxIFBinding" type="tns:FedTaxIF">
-    <operation name="getFedTax">
-      <input>
-        <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://tax.org/wsdl"/></input>
-      <output>
-        <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://tax.org/wsdl"/></output>
-      <soap:operation soapAction=""/></operation>
-    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/></binding>
-  <binding name="StateTaxIFBinding" type="tns:StateTaxIF">
-    <operation name="getStateTax">
-      <input>
-        <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://tax.org/wsdl"/></input>
-      <output>
-        <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://tax.org/wsdl"/></output>
-      <soap:operation soapAction=""/></operation>
-    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/></binding>
-  <service name="TaxCalServletService">
-    <port name="FedTaxIFPort" binding="tns:FedTaxIFBinding">
-      <soap:address location="REPLACE_WITH_ACTUAL_URL"/></port>
-    <port name="StateTaxIFPort" binding="tns:StateTaxIFBinding">
-      <soap:address location="REPLACE_WITH_ACTUAL_URL"/></port></service></definitions>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/gartner/build.xml b/appserver/tests/appserv-tests/devtests/security/wss/gartner/build.xml
index aecdd5f..3ae27ac 100644
--- a/appserver/tests/appserv-tests/devtests/security/wss/gartner/build.xml
+++ b/appserver/tests/appserv-tests/devtests/security/wss/gartner/build.xml
@@ -89,7 +89,8 @@
         </antcall>
 
         <javac srcdir="client" destdir="${build.classes.dir}/client"
-            classpath="${env.APS_HOME}/lib/reporter.jar:${env.S1AS_HOME}/lib/j2ee.jar:${env.S1AS_HOME}/lib/webservices-rt.jar:${env.S1AS_HOME}/lib/webservices-tools.jar:${build.classes.dir}/ejbws:${build.classes.dir}/servletws/WEB-INF/classes:${build.classes.dir}/client" debug="on" failonerror="true"/>
+          classpath="${env.APS_HOME}/lib/reporter.jar:${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/modules/webservices-osgi.jar:${build.classes.dir}/ejbws:${build.classes.dir}/servletws/WEB-INF/classes:${build.classes.dir}/client"
+          debug="on" failonerror="true"/>
     </target>
 
     <target name="build" depends="compile">
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/gartner/descriptor/sun-application-client.xml b/appserver/tests/appserv-tests/devtests/security/wss/gartner/descriptor/sun-application-client.xml
index 7d16e8e..21251cc 100644
--- a/appserver/tests/appserv-tests/devtests/security/wss/gartner/descriptor/sun-application-client.xml
+++ b/appserver/tests/appserv-tests/devtests/security/wss/gartner/descriptor/sun-application-client.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-application-client PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE
+<!DOCTYPE sun-application-client PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Application Client 1.4//EN'
+ 'http://www.sun.com/software/sunone/appserver/dtds/sun-application-client_1_4-0.dtd'>
 <!--
 
     Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
@@ -18,8 +19,6 @@
 
 -->
 
-Application Server 8.0 Application Client 1.4//EN' 'http://www.sun.com/software/
-sunone/appserver/dtds/sun-application-client_1_4-0.dtd'>
 
 <sun-application-client>
     <service-ref>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/permethod/build.xml b/appserver/tests/appserv-tests/devtests/security/wss/permethod/build.xml
deleted file mode 100644
index 6a479b7..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/permethod/build.xml
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<!ENTITY commonSetup SYSTEM "file:../../../../config/properties.xml">
-<!ENTITY commonBuild SYSTEM "file:../../../../config/common.xml">
-<!ENTITY commonRun SYSTEM "file:../../../../config/run.xml">
-<!ENTITY commonSecurity SYSTEM "file:../../common.xml">
-]>
-
-
-<project name="wss-permethod" default="usage" basedir=".">
-    &commonSetup;
-    &commonBuild;
-    &commonSecurity;
-    &commonRun;
-
-    <property name="ws-target" value="all"/>
-
-<!-- ======== Targets by execution granularity ========== -->
-    <target name="all">
-        <antcall target="setup"/>
-        <antcall target="runwstargets">
-            <param name="ws-target" value="all"/>
-        </antcall>
-        <antcall target="unsetup"/>
-    </target>
-
-    <target name="run-test">
-        <antcall target="runwstargets">
-            <param name="ws-target" value="run-test"/>
-        </antcall>
-    </target>
-
-    <target name="clean">
-        <antcall target="runwstargets">
-            <param name="ws-target" value="clean"/>
-        </antcall>
-    </target>
-
-    <target name="build">
-        <antcall target="runwstargets">
-            <param name="ws-target" value="build"/>
-        </antcall>
-    </target>
-
-    <target name="deploy">
-        <antcall target="runwstargets">
-            <param name="ws-target" value="deploy"/>
-        </antcall>
-    </target>
-
-    <target name="undeploy">
-        <antcall target="runwstargets">
-            <param name="ws-target" value="undeploy"/>
-        </antcall>
-    </target>
-
-    <target name="run">
-        <antcall target="runwstargets">
-            <param name="ws-target" value="run"/>
-        </antcall>
-    </target>
-
-    <target name="setup" depends="init-common">
-        <!-- exports certdb stuff and imports into keystore -->
-        <antcall target="prepare-store-nickname-common">
-            <param name="cert.nickname" value="s1as"/>
-        </antcall>
-    </target>
-
-    <target name="unsetup" depends="init-common" >
-    </target>
-
-
-    <target name="runwstargets">
-        <antcall target="servletws"/>
-    </target>
-
-<!-- ======== Targets by technology ========== -->
-
-    <target name="servletws">
-        <record name="security-wss.output" action="start" />
-            <ant dir="servletws" target="${ws-target}"/>
-        <record name="security-wss.output" action="stop" />
-    </target>
-    <target name="usage">
-        <echo> Usage:
-    ======== Targets by execution granularity =========
-
-    ant clean (Cleans all ws tests)
-    ant build (builds all ws tests)
-    ant setup (setup all required resources)
-    ant deploy (deploy all test apps)
-    ant run (Executes all tests)
-    ant undeploy (undeploy all test apps)
-    ant unsetup (remove all set resources)
-
-    ======== Targets by technology =========
-
-    ant servletws (Executes the servletws tests)
-    ant all (Executes all the ws tests)
-
-    ===== Targets by technoloy and execution granularity ======
-    Note: Run the command of the following type:
-
-            % ant servletws -Dws-target=clean
-
-    to run the 'clean' target for 'servletws' tests
-        </echo>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/build.properties b/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/build.properties
deleted file mode 100644
index 79f306a..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/build.properties
+++ /dev/null
@@ -1,42 +0,0 @@
-<!--
-
-    Copyright (c) 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
-
--->
-
-
-<property name="module" value="security-wss-permethod-servlet"/>
-<property name="appname" value="${module}"/>
-<property name="assemble" value="${build.classes.dir}/archive"/>
-<property name="test.client" value="com.sun.s1asdev.security.wss.permethod.servlet.client.Client"/>
-<property name="application.xml" value="descriptor/application.xml"/>
-<property name="application-client.xml" value="descriptor/application-client.xml"/>
-<property name="sun-application-client.xml" value="descriptor/sun-application-client.xml"/>
-<property name="appclientjar.files" value="${build.classes.dir}"/>
-<property name="appclient.jar" value="${assemble.dir}/${appname}-client.jar"/>
-<property name="app.type" value="application"/>
-<property name="wsdl-file" value="wsdl/HelloServletService.wsdl"/>
-<property name="client-mapping.xml" value="HelloClientMapping.xml"/>
-<property name="wsdlfile.location" value="wsdl"/>
-
-<!--- servlet based endpoint params -->
-<!--property name="mappingfile.location" value=""/-->
-<property name="web-mapping.xml" value="HelloServletMapping.xml"/>
-<property name="sun-web.xml" value="descriptor/sun-web.xml"/>
-<property name="web.xml" value="descriptor/web.xml"/>
-<property name="web-webservices.xml" value="descriptor/webservices.xml"/>
-<property name="wsdlfile.name" value="HelloServletService.wsdl"/>
-<property name="wsdlfile.location" value="wsdl"/>
-
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/build.xml b/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/build.xml
deleted file mode 100644
index e182731..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/build.xml
+++ /dev/null
@@ -1,216 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<!ENTITY commonSetup SYSTEM "file:./../../../../../config/properties.xml">
-<!ENTITY commonBuild SYSTEM "file:./../../../../../config/common.xml">
-<!ENTITY commonSecurity SYSTEM "file:../../../common.xml">
-<!ENTITY testproperties SYSTEM "file:./build.properties">
-]>
-
-<project name="wss-permethod" default="usage" basedir=".">
-
-    &commonSetup;
-    &commonBuild;
-    &testproperties;
-    &commonSecurity;
-
-    <target name="all"
-    depends="clean, build, setup, deploy, run, undeploy, unsetup"/>
-
-    <target name="run-test"
-    depends="clean, build, deploy, run, undeploy"/>
-
-    <target name="clean" depends="init-common">
-      <antcall target="clean-common"/>
-    </target>
-
-    <target name="setup">
-        <antcall target="create-user-common">
-            <param name="user" value="j2ee"/>
-            <param name="password" value="j2ee"/>
-            <param name="groups" value="j2ee"/>
-        </antcall>
-    </target>
-
-    <target name="unsetup">
-        <antcall target="delete-user-common">
-            <param name="user" value="j2ee"/>
-        </antcall>
-    </target>
-
-    <target name="compile" depends="init-common,clean-common, generate-artifacts">
-        <antcall target="compile-common">
-            <param name="src" value="client"/>
-        </antcall>
-        <antcall target="compile-common">
-            <param name="src" value="web"/>
-        </antcall>
-    </target>
-
-    <target name="generate-artifacts">
-        <echo message=" Client Mapping file : ${client-mapping.xml}"/>
-        <antcall target="import-wsdl">
-            <param name="mapping.file"
-            value="${client-mapping.xml}"/>
-            <param name="config-wsdl.file"
-            value="config/config-client.xml"/>
-        </antcall>
-        <echo message="Web Mapping File : ${web-mapping.xml}"/>
-        <antcall target="import-wsdl">
-            <param name="mapping.file"
-            value="${web-mapping.xml}"/>
-            <param name="config-wsdl.file"
-            value="config/config-web.xml"/>
-        </antcall>
-    </target>
-    <target name="ws-package-appclientjar-common">
-        <mkdir dir="${assemble.dir}"/>
-        <delete file="${appclient.jar}" failonerror="false"/>
-        <mkdir dir="${build.classes.dir}/META-INF"/>
-        <copy file="${application-client.xml}"
-                tofile="${build.classes.dir}/META-INF/application-client.xml"/>
-        <copy file="${sun-application-client.xml}"
-                tofile="${build.classes.dir}/META-INF/sun-application-client.xml"/>
-        <copy file="${wsdl-file}"
-                tofile="${build.classes.dir}/META-INF/${wsdl-file}"/>
-        <jar jarfile="${appclient.jar}" basedir="${appclientjar.files}"
-                update="true" includes="${appclientjar.classes}"
-                manifest="./client/MANIFEST.MF">
-
-                <fileset dir="${build.classes.dir}" includes="${client-mapping.xml}"/>
-                <metainf dir="${build.classes.dir}/META-INF">
-                        <include name="application-client.xml"/>
-                        <include name="sun-application-client.xml"/>
-                        <include name="${wsdl-file}"/>
-                </metainf>
-        </jar>
-        <delete dir="${build.classes.dir}/META-INF" failonerror="false"/>
-    </target>
-    <target name="ws-package-war-common">
-        <echo message="my build classes dir is:${build.classes.dir}"/>
-        <delete file="${war.file}"/>
-        <mkdir dir="${build.classes.dir}/tmp"/>
-        <mkdir dir="${build.classes.dir}/tmp/WEB-INF"/>
-        <mkdir dir="${build.classes.dir}/tmp/WEB-INF/classes"/>
-        <copy file="${sun-web.xml}"
-           tofile="${build.classes.dir}/tmp/WEB-INF/sun-web.xml" failonerror="false"/>
-        <copy file="${webservices.xml}"
-           tofile="${build.classes.dir}/tmp/WEB-INF/webservices.xml"
-           failonerror="false"/>
-        <copy file="${mappingfile.location}/${mappingfile.name}"
-           tofile="${build.classes.dir}/tmp/${mappingfile.name}"
-           failonerror="false"/>
-        <copy file="${wsdlfile.location}/${wsdlfile.name}"
-           tofile="${build.classes.dir}/tmp/WEB-INF/wsdl/${wsdlfile.name}"
-           failonerror="false"/>
-        <copy file="${web.xml}"
-           tofile="${build.classes.dir}/tmp/WEB-INF/web.xml"/>
-        <copy todir="${build.classes.dir}/tmp/WEB-INF/classes">
-           <fileset dir="${build.classes.dir}">
-               <include name="${war.classes}"/>
-           </fileset>
-        </copy>
-        <echo message="Creating war file ${war.file}"/>
-        <jar jarfile="${war.file}" update="true">
-           <fileset dir="${build.classes.dir}/tmp" casesensitive="yes">
-               <include name="**/*class*"/>
-           </fileset>
-           <fileset dir="${basedir}/web" casesensitive="yes">
-               <include name="**/*.html"/>
-               <include name="**/*.jsp"/>
-               <include name="**/*.gif"/>
-               <include name="**/*.do"/>
-               <exclude name="**/*.java,**/*.xml,**/*.properties"/>
-           </fileset>
-           <fileset dir="${build.classes.dir}/tmp/" casesensitive="true">
-               <include name="WEB-INF/web.xml"/>
-               <include name="WEB-INF/sun-web.xml"/>
-               <include name="WEB-INF/webservices.xml"/>
-               <include name="WEB-INF/wsdl/${wsdlfile.name}"/>
-               <include name="${mappingfile.name}"/>
-           </fileset>
-        </jar>
-        <echo message="created war file ${war.file}"/>
-        <delete dir="${build.classes.dir}/tmp/WEB-INF" failonerror="false"/>
-        <echo message="my webclient war classes are:${webclient.war.classes}"/>
-     </target>
-
-    <target name="build" depends="init-common,compile">
-        <antcall target="ws-package-appclientjar-common">
-            <param name="appclientjar.classes"
-              value="com/sun/s1asdev/security/wss/permethod/servlet/client/*.class" />
-            <param name="appclientjar.files"
-              value="${build.classes.dir}"/>
-            <param name="appclient.jar"
-              value="${assemble.dir}/${appname}-client.jar"/>
-        </antcall>
-        <!--antcall target="ws-war-common"-->
-        <antcall target="ws-package-war-common">
-            <param name="war.file" value="${assemble.dir}/${appname}-web.war"/>
-            <param name="war.classes"
-              value="com/sun/s1asdev/security/wss/permethod/servlet/*.class" />
-            <param name="mappingfile.name"
-              value="${web-mapping.xml}" />
-            <param name="mappingfile.location"
-              value="${build.classes.dir}"/>
-            <param name="webservices.xml"
-              value="${web-webservices.xml}" />
-        </antcall>
-        <antcall target="ear-common"/>
-    </target>
-
-    <target name="deploy"
-            depends="init-common">
-        <antcall target="deploy-common"/>
-    </target>
-
-    <target name="run" depends="init-common">
-        <property name="VMARGS" value="-Djavax.net.ssl.keyStore=${mykeystore.db.file} -Djavax.net.ssl.trustStore=${mytruststore.db.file} -Djavax.net.ssl.keyStorePassword=${ssl.password} -Djavax.net.ssl.trustStorePassword=${ssl.password}"/>
-        <property name="hello-endpoint-url"
-            value="http://${http.host}:${http.port}/${appname}/helloservlet"/>
-        <echo message="VMARGS= ${VMARGS}"/>
-           <exec executable="${APPCLIENT}">
-                      <env key="VMARGS" value="${VMARGS}"/>
-                <arg value="-client" />
-                <arg value="${assemble.dir}/${appname}AppClient.jar"/>
-                <arg value="-textauth"/>
-                <arg value="-user"/>
-                <arg value="j2ee"/>
-                       <arg value="-password"/>
-                <arg value="j2ee"/>
-                <arg line="-xml ${admin.domain.dir}/${admin.domain}/config/glassfish-acc.xml"/>
-                <arg line="${hello-endpoint-url}"/>
-      </exec>
-   </target>
-
-    <target name="undeploy" depends="init-common">
-        <antcall target="undeploy-common"/>
-    </target>
-
-    <target name="usage">
-        <antcall target="usage-common"/>
-    </target>
-
-  <!--
-  =======================================================
-  User Defined specific targets
-  =======================================================
-  -->
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/client/Client.java b/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/client/Client.java
deleted file mode 100644
index 4592276..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/client/Client.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2003, 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
- */
-
-package com.sun.s1asdev.security.wss.permethod.servlet.client;
-
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.xml.rpc.Stub;
-
-public class Client {
-
-    private static SimpleReporterAdapter stat = new SimpleReporterAdapter("appserv-tests");
-    private static String testSuite = "Sec:Servlet Per method WSS test ";
-
-    public static void main (String[] args) {
-        String helloEndpoint = null;
-        if (args[0] == null){
-            System.out.println("WSS Permethod client: Argument missing. Please provide target endpoint address as argument");
-            System.exit(1);
-        } else {
-            helloEndpoint = args[0];
-        }
-
-        stat.addDescription(testSuite);
-
-        HelloIF helloIFPort = null;
-        try {
-            Context ic = new InitialContext();
-            HelloServletService helloService = (HelloServletService)
-                ic.lookup("java:comp/env/service/HelloServletService");
-            helloIFPort = helloService.getHelloIFPort();
-            ((Stub)helloIFPort)._setProperty(
-                    Stub.ENDPOINT_ADDRESS_PROPERTY, helloEndpoint);
-            System.out.println("Calling sayHello");
-            String reply = helloIFPort.sayHello("Hello World");
-            System.out.println("Reply sayHello: " + reply);
-            stat.addStatus(testSuite + " sayHello", stat.PASS);
-        } catch(Exception e){
-            stat.addStatus(testSuite + " sayHello", stat.FAIL);
-            e.printStackTrace();
-        }
-
-        try {
-            System.out.println("Calling sendSecret");
-            int code = helloIFPort.sendSecret("It is a secret");
-            System.out.println("Reply sendSecret: " + code);
-            stat.addStatus(testSuite + " sendSecret", stat.PASS);
-        } catch(Exception e){
-            stat.addStatus(testSuite + "sendSecret", stat.FAIL);
-            e.printStackTrace();
-        }
-
-        try {
-            System.out.println("Calling getSecret");
-            String secret = helloIFPort.getSecret(100.0);
-            System.out.println("Reply getSecret: " + secret);
-            stat.addStatus(testSuite + " getSecret", stat.PASS);
-        } catch(Exception e){
-            stat.addStatus(testSuite + " getSecret", stat.FAIL);
-            e.printStackTrace();
-        }
-
-        stat.printSummary(testSuite);
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/client/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/client/MANIFEST.MF
deleted file mode 100644
index 32c6d74..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/client/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Main-Class: com.sun.s1asdev.security.wss.permethod.servlet.client.Client
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/config/config-client.xml b/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/config/config-client.xml
deleted file mode 100644
index 7118cee..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/config/config-client.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<configuration
-  xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
-  <wsdl
-      location="wsdl/HelloServletService.wsdl"
-      packageName="com.sun.s1asdev.security.wss.permethod.servlet.client"/>
-</configuration>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/config/config-sei.xml b/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/config/config-sei.xml
deleted file mode 100644
index e4ccf47..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/config/config-sei.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<configuration
-        xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
-        <service name="HelloServletService"
-                targetNamespace="http://hello.org/wsdl"
-                typeNamespace="http://hello.org/types"
-                packageName="com.sun.s1asdev.security.wss.permethod.servlet">
-                <interface name="com.sun.s1asdev.security.wss.permethod.servlet.HelloIF"
-                        servantName="com.sun.s1asdev.security.wss.permethod.servlet.HelloServlet"/>
-                </interface>
-        </service>
-</configuration>
-
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/config/config-web.xml b/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/config/config-web.xml
deleted file mode 100644
index d8a751d..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/config/config-web.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<configuration
-  xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
-  <wsdl
-      location="wsdl/HelloServletService.wsdl"
-      packageName="com.sun.s1asdev.security.wss.permethod.servlet"/>
-</configuration>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/descriptor/application-client.xml b/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/descriptor/application-client.xml
deleted file mode 100644
index ce75975..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/descriptor/application-client.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<application-client version="1.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application-client_1_4.xsd">
-  <description>app client dd for hello</description>
-  <display-name>ws-permethod-hello</display-name>
-  <service-ref>
-     <description>hello service ref</description>
-     <service-ref-name>service/HelloServletService</service-ref-name>
-     <service-interface>com.sun.s1asdev.security.wss.permethod.servlet.client.HelloServletService</service-interface>
-     <wsdl-file>META-INF/wsdl/HelloServletService.wsdl</wsdl-file>
-     <jaxrpc-mapping-file>HelloClientMapping.xml</jaxrpc-mapping-file>
-  </service-ref>
-</application-client>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/descriptor/application.xml b/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/descriptor/application.xml
deleted file mode 100644
index d266f7c..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/descriptor/application.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" "http://java.sun.com/dtd/application_1_3.dtd">
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<application>
-  <display-name>WSSServletHelloApp</display-name>
-  <module>
-    <web>
-      <web-uri>security-wss-permethod-servlet-web.war</web-uri>
-      <context-root>security-wss-permethod-servlet</context-root>
-    </web>
-  </module>
-  <module>
-    <java>security-wss-permethod-servlet-client.jar</java>
-  </module>
-</application>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/descriptor/sun-application-client.xml b/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/descriptor/sun-application-client.xml
deleted file mode 100644
index b551342..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/descriptor/sun-application-client.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-application-client PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Application Client 1.4//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-application-client_1_4-0.dtd'>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<sun-application-client>
-    <service-ref>
-      <service-ref-name>service/HelloServletService</service-ref-name>
-      <port-info>
-        <wsdl-port>
-          <namespaceURI>http://hello.org/wsdl</namespaceURI>
-          <localpart>HelloIFPort</localpart>
-        </wsdl-port>
-        <message-security-binding auth-layer="SOAP"
-          provider-id="ClientProvider">
-          <message-security>
-            <message>
-              <operation-name>sayHello</operation-name>
-            </message>
-            <request-protection/>
-            <response-protection/>
-          </message-security>
-          <message-security>
-            <message>
-              <operation-name>sendSecret</operation-name>
-            </message>
-            <request-protection
-              auth-source="content"/>
-            <response-protection
-              auth-source="content"/>
-          </message-security>
-          <message-security>
-            <message>
-              <operation-name>getSecret</operation-name>
-            </message>
-            <request-protection
-              auth-source="sender"/>
-            <response-protection
-              auth-source="content"/>
-          </message-security>
-        </message-security-binding>
-      </port-info>
-    </service-ref>
-</sun-application-client>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/descriptor/sun-web.xml b/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/descriptor/sun-web.xml
deleted file mode 100644
index e811ba3..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/descriptor/sun-web.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Servlet 2.4//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_4-0.dtd'>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<sun-web-app>
-    <servlet>
-      <servlet-name>HelloServlet</servlet-name>
-      <webservice-endpoint>
-        <port-component-name>HelloIFPort</port-component-name>
-        <endpoint-address-uri>helloservlet</endpoint-address-uri>
-        <message-security-binding auth-layer="SOAP"
-          provider-id="ServerProvider">
-          <message-security>
-            <message>
-              <operation-name>sendSecret</operation-name>
-            </message>
-            <request-protection
-              auth-source="content"/>
-            <response-protection
-              auth-source="content"/>
-          </message-security>
-          <message-security>
-            <message>
-              <operation-name>getSecret</operation-name>
-            </message>
-            <request-protection
-              auth-source="sender"/>
-            <response-protection
-              auth-source="content"/>
-          </message-security>
-        </message-security-binding>
-      </webservice-endpoint>
-    </servlet>
-</sun-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/descriptor/web.xml b/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/descriptor/web.xml
deleted file mode 100644
index 3bdd4e9..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/descriptor/web.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-  <display-name>Hello ServletWS</display-name>
-  <servlet>
-    <servlet-name>HelloServlet</servlet-name>
-    <servlet-class>com.sun.s1asdev.security.wss.permethod.servlet.HelloServlet</servlet-class>
-    <load-on-startup>0</load-on-startup>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>HelloServlet</servlet-name>
-    <url-pattern>/helloservlet</url-pattern>
-  </servlet-mapping>
-  <session-config>
-    <session-timeout>54</session-timeout>
-  </session-config>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/descriptor/webservices.xml b/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/descriptor/webservices.xml
deleted file mode 100644
index 0ca2051..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/descriptor/webservices.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<webservices xmlns="http://java.sun.com/xml/ns/j2ee"
-      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
-        http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd"
-      version="1.1">
-  <description>desc</description>
-  <webservice-description>
-    <webservice-description-name>Hello Servlet</webservice-description-name>
-    <wsdl-file>WEB-INF/wsdl/HelloServletService.wsdl</wsdl-file>
-    <jaxrpc-mapping-file>HelloServletMapping.xml</jaxrpc-mapping-file>
-    <port-component>
-      <description>port component description</description>
-      <port-component-name>HelloIFPort</port-component-name>
-      <wsdl-port xmlns:hellons="http://hello.org/wsdl">hellons:HelloIFPort
-      </wsdl-port>
-      <service-endpoint-interface>com.sun.s1asdev.security.wss.permethod.servlet.HelloIF
-      </service-endpoint-interface>
-      <service-impl-bean>
-        <servlet-link>HelloServlet</servlet-link>
-      </service-impl-bean>
-    </port-component>
-  </webservice-description>
-</webservices>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/web/HelloIF.java b/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/web/HelloIF.java
deleted file mode 100644
index 6a3bd1d..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/web/HelloIF.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2017, 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
- */
-
-package com.sun.s1asdev.security.wss.permethod.servlet;
-
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-
-public interface HelloIF extends Remote {
-    public String sayHello(String message) throws RemoteException;
-    public int sendSecret(String message) throws RemoteException;
-    public String getSecret(double key) throws RemoteException;
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/web/HelloServlet.java b/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/web/HelloServlet.java
deleted file mode 100644
index d28184c..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/web/HelloServlet.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2002, 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
- */
-
-package com.sun.s1asdev.security.wss.permethod.servlet;
-
-import jakarta.servlet.SingleThreadModel;
-import javax.xml.rpc.server.ServiceLifecycle;
-
-public class HelloServlet implements
-                        SingleThreadModel, ServiceLifecycle {
-
-    public HelloServlet() {
-        System.out.println("HelloServlet() instantiated");
-    }
-
-    public void init(Object context) {
-        System.out.println("Got ServiceLifecycle::init call " + context);
-    }
-
-    public void destroy() {
-        System.out.println("Got ServiceLifecycle::destroy call");
-    }
-
-    public String sayHello(String message) {
-        System.out.println("sayHello invoked from servlet endpoint");
-        return "reply from " + message;
-    }
-
-    public int sendSecret(String message) {
-        System.out.println("sendSecret invoked from servlet endpoint");
-        return message.hashCode();
-    }
-
-    public String getSecret(double key) {
-        System.out.println("getSecret invoked from servlet endpoint");
-        return "Secret-" + key;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/wsdl/HelloServletService.wsdl b/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/wsdl/HelloServletService.wsdl
deleted file mode 100644
index af7cfc0..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/permethod/servletws/wsdl/HelloServletService.wsdl
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<definitions name="HelloServletService" targetNamespace="http://hello.org/wsdl" xmlns:tns="http://hello.org/wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
-  <types/>
-  <message name="HelloIF_sayHello">
-    <part name="string" type="xsd:string"/>
-  </message>
-  <message name="HelloIF_sayHelloResponse">
-    <part name="result" type="xsd:string"/>
-  </message>
-  <message name="HelloIF_sendSecret">
-    <part name="string" type="xsd:string"/>
-  </message>
-  <message name="HelloIF_sendSecretResponse">
-    <part name="result" type="xsd:int"/>
-  </message>
-  <message name="HelloIF_getSecret">
-    <part name="string" type="xsd:double"/>
-  </message>
-  <message name="HelloIF_getSecretResponse">
-    <part name="result" type="xsd:string"/>
-  </message>
-  <portType name="HelloIF">
-    <operation name="sayHello">
-      <input message="tns:HelloIF_sayHello"/>
-      <output message="tns:HelloIF_sayHelloResponse"/>
-    </operation>
-    <operation name="sendSecret">
-      <input message="tns:HelloIF_sendSecret"/>
-      <output message="tns:HelloIF_sendSecretResponse"/>
-    </operation>
-    <operation name="getSecret">
-      <input message="tns:HelloIF_getSecret"/>
-      <output message="tns:HelloIF_getSecretResponse"/>
-    </operation>
-  </portType>
-  <binding name="HelloIFBinding" type="tns:HelloIF">
-    <operation name="sayHello">
-      <input>
-        <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://hello.org/wsdl"/></input>
-      <output>
-        <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://hello.org/wsdl"/></output>
-      <soap:operation soapAction=""/>
-    </operation>
-    <operation name="sendSecret">
-      <input>
-        <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://hello.org/wsdl"/></input>
-      <output>
-        <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://hello.org/wsdl"/></output>
-      <soap:operation soapAction=""/>
-    </operation>
-    <operation name="getSecret">
-      <input>
-        <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://hello.org/wsdl"/></input>
-      <output>
-        <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="http://hello.org/wsdl"/></output>
-      <soap:operation soapAction=""/>
-    </operation>
-    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>  </binding>
-  <service name="HelloServletService">
-    <port name="HelloIFPort" binding="tns:HelloIFBinding">
-      <soap:address location="REPLACE_WITH_ACTUAL_URL"/>
-    </port>
-  </service>
-</definitions>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles/build.properties b/appserver/tests/appserv-tests/devtests/security/wss/roles/build.properties
deleted file mode 100644
index 331310a..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles/build.properties
+++ /dev/null
@@ -1,37 +0,0 @@
-<!--
-
-    Copyright (c) 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
-
--->
-
-
-<property name="module" value="security-wss-roles"/>
-<property name="appname" value="${module}"/>
-<property name="assemble" value="${build.classes.dir}/archive"/>
-<property name="test.client"
-        value="com.sun.s1asdev.security.wss.roles.client.Client"/>
-<property name="application.xml" value="descriptor/application.xml"/>
-<property name="sun-application.xml" value="descriptor/sun-application.xml"/>
-<property name="ejb-jar.xml" value="descriptor/ejb-jar.xml"/>
-<property name="sun-ejb-jar.xml" value="descriptor/sun-ejb-jar.xml"/>
-<property name="sun-ejb-jar2.xml" value="descriptor/sun-ejb-jar2.xml"/>
-<property name="web.xml" value="descriptor/web.xml"/>
-<property name="application-client.xml"
-        value="descriptor/application-client.xml"/>
-<property name="sun-application-client.xml"
-        value="descriptor/sun-application-client.xml"/>
-<property name="appclientjar.files" value="${build.classes.dir}"/>
-<property name="appclient.jar" value="${assemble.dir}/${appname}-client.jar"/>
-<property name="app.type" value="application"/>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles/build.xml b/appserver/tests/appserv-tests/devtests/security/wss/roles/build.xml
deleted file mode 100644
index 1941a54..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles/build.xml
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<!ENTITY commonSetup SYSTEM "file:./../../../../config/properties.xml">
-<!ENTITY commonBuild SYSTEM "file:./../../../../config/common.xml">
-<!ENTITY commonSecurity SYSTEM "file:../../common.xml">
-<!ENTITY testproperties SYSTEM "file:./build.properties">
-]>
-
-<project name="security-wss-roles" default="usage" basedir=".">
-
-    &commonSetup;
-    &commonBuild;
-    &testproperties;
-    &commonSecurity;
-
-    <target name="all" depends="clean, setup, build-deploy, run, undeploy, unsetup"/>
-
-    <target name="clean" depends="init-common">
-      <antcall target="clean-common"/>
-    </target>
-
-    <target name="setup" depends="init-common">
-        <antcall target="create-auth-filerealm">
-            <param name="file.realm.name" value="file2"/>
-            <param name="keyfile.path" value="${admin.domain.dir}/${admin.domain}/config/keyfile2"/>
-        </antcall>
-      <!--  <antcall target="reconfig-common"/>-->
-
-        <antcall target="create-user-common">
-            <param name="user" value="javaee"/>
-            <param name="password" value="javaee"/>
-            <param name="groups" value="javaee"/>
-            <param name="authrealmname" value="file2"/>
-        </antcall>
-    </target>
-
-    <target name="unsetup" depends="init-common">
-        <antcall target="delete-user-common">
-            <param name="user" value="javaee"/>
-            <param name="authrealmname" value="file2"/>
-        </antcall>
-        <antcall target="asadmin-common">
-            <param name="admin.command" value="delete-auth-realm" />
-            <param name="operand.props" value="file2"/>
-        </antcall>
-    </target>
-
-    <target name="compile-server" depends="clean">
-        <antcall target="compile-common">
-            <param name="src" value="ejbws"/>
-            <param name="build.classes.dir" value="${build.classes.dir}/ejbws"/>
-        </antcall>
-        <antcall target="compile-common">
-            <param name="src" value="ejbws2"/>
-            <param name="build.classes.dir" value="${build.classes.dir}/ejbws2"/>
-        </antcall>
-        <antcall target="compile-common">
-            <param name="src" value="servletws"/>
-            <param name="build.classes.dir" value="${build.classes.dir}/servletws"/>
-        </antcall>
-    </target>
-
-    <target name="compile-client">
-        <mkdir dir="${build.classes.dir}/client"/>
-        <antcall target="wsimport">
-            <param name="wsimport.args"
-                value="-keep -d ${build.classes.dir}/client http://${http.host}:${http.port}/WssRolesEjbService/HelloEjb?WSDL"/>
-        </antcall>
-        <antcall target="wsimport">
-            <param name="wsimport.args"
-                value="-keep -d ${build.classes.dir}/client http://${http.host}:${http.port}/WssRolesEjb2Service/HelloEjb2?WSDL"/>
-        </antcall>
-        <antcall target="wsimport">
-            <param name="wsimport.args"
-                value="-keep -d ${build.classes.dir}/client http://${http.host}:${http.port}/security-wss-roles-web/webservice/WssRolesServletService/HelloServlet?WSDL"/>
-        </antcall>
-
-        <delete file="client/Client.java" failonerror="false"/>
-        <copy file="client/Client.java.template" tofile="client/Client.java"/>
-        <replace file="client/Client.java">
-            <replacefilter token="@HOST@" value="${http.host}"/>
-            <replacefilter token="@PORT@" value="${http.port}"/>
-        </replace>
-        <javac srcdir="client" destdir="${build.classes.dir}/client"
-            classpath="${env.APS_HOME}/lib/reporter.jar:${env.S1AS_HOME}/lib/j2ee.jar:${env.S1AS_HOME}/lib/webservices-rt.jar:${env.S1AS_HOME}/lib/webservices-tools.jar:${build.classes.dir}/client" debug="on" failonerror="true"/>
-    </target>
-
-    <target name="build-server" depends="compile-server">
-        <mkdir dir="${assemble.dir}"/>
-        <mkdir dir="${build.classes.dir}/META-INF"/>
-
-        <antcall target="package-ejbjar-common">
-            <param name="ejbjar.files" value="${build.classes.dir}/ejbws"/>
-            <param name="ejb.jar" value="${assemble.dir}/${appname}-ejb.jar"/>
-            <param name="ejbjar.classes" value="com/sun/**/*.class"/>
-        </antcall>
-        <antcall target="package-ejbjar-common">
-            <param name="ejbjar.files" value="${build.classes.dir}/ejbws2"/>
-            <param name="ejb.jar" value="${assemble.dir}/${appname}-ejb2.jar"/>
-            <param name="ejbjar.classes" value="com/sun/**/*.class"/>
-            <param name="sun-ejb-jar.xml" value="${sun-ejb-jar2.xml}"/>
-        </antcall>
-        <war destfile="${assemble.dir}/${appname}-web.war" webxml="${web.xml}">
-            <classes dir="${build.classes.dir}/servletws"/>
-        </war>
-
-        <copy file="${sun-application.xml}" tofile="${build.classes.dir}/META-INF/sun-application.xml" failonerror="false"/>
-        <jar jarfile="${assemble.dir}/${appname}App.ear">
-            <fileset dir="${assemble.dir}">
-               <include name="*.jar"/>
-               <include name="*.war"/>
-            </fileset>
-            <fileset dir="${build.classes.dir}">
-               <include name="META-INF/sun-application.xml"/>
-            </fileset>
-        </jar>
-    </target>
-
-    <target name="build-client" depends="compile-client">
-        <mkdir dir="${assemble.dir}"/>
-
-        <unjar src="${env.APS_HOME}/lib/reporter.jar" dest="${build.classes.dir}/client"/>
-        <antcall target="package-appclientjar-common">
-            <param name="appclientjar.files"
-                value="${build.classes.dir}/client"/>
-            <param name="appclient.jar"
-                value="${assemble.dir}/${appname}-client.jar"/>
-            <param name="appclientjar.classes"
-                value="com/sun/**/*.class"/>
-        </antcall>
-    </target>
-
-    <target name="build-deploy" depends="init-common">
-        <antcall target="build-server"/>
-        <antcall target="deploy-common"/>
-        <antcall target="build-client"/>
-        <antcall target="deploy-client-common"/>
-    </target>
-
-    <target name="run" depends="init-common">
-        <antcall target="runclient1"/>
-        <antcall target="runclient2"/>
-    </target>
-
-    <target name="runclient1" depends="init-common">
-        <exec executable="${APPCLIENT}">
-            <arg line="-client" />
-            <arg line="${assemble.dir}/${appname}-clientClient.jar"/>
-            <arg line="-textauth"/>
-            <arg line="-user" />
-            <arg line="javaee" />
-            <arg line="-password" />
-            <arg line="javaee" />
-        </exec>
-    </target>
-
-    <target name="runclient2" depends="init-common">
-        <exec executable="${APPCLIENT}">
-            <arg line="-client" />
-            <arg line="${assemble.dir}/${appname}-clientClient.jar"/>
-            <arg line="authprop" />
-        </exec>
-    </target>
-
-    <target name="undeploy" depends="init-common">
-        <antcall target="undeploy-common"/>
-        <antcall target="undeploy-client-common"/>
-    </target>
-
-    <target name="usage">
-        <antcall target="usage-common"/>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles/client/Client.java.template b/appserver/tests/appserv-tests/devtests/security/wss/roles/client/Client.java.template
deleted file mode 100644
index 1f0df6b..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles/client/Client.java.template
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (c) 2005, 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
- */
-
-package com.sun.s1asdev.security.wss.roles.client;
-
-import java.util.Map;
-
-import jakarta.xml.ws.BindingProvider;
-import jakarta.xml.ws.WebServiceRef;
-
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-
-import com.sun.s1asdev.security.wss.roles.ejbws.HelloEjb;
-import com.sun.s1asdev.security.wss.roles.ejbws.WssRolesEjbService;
-import com.sun.s1asdev.security.wss.roles.ejbws2.HelloEjb2;
-import com.sun.s1asdev.security.wss.roles.ejbws2.WssRolesEjb2Service;
-import com.sun.s1asdev.security.wss.roles.servletws.HelloServlet;
-import com.sun.s1asdev.security.wss.roles.servletws.WssRolesServletService;
-
-public class Client {
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    private static String testSuite = "Sec:WSS Roles test ";
-
-    @WebServiceRef(wsdlLocation="http://@HOST@:@PORT@/WssRolesEjbService/HelloEjb?WSDL")
-    private static WssRolesEjbService service;
-
-    @WebServiceRef(wsdlLocation="http://@HOST@:@PORT@/WssRolesEjb2Service/HelloEjb2?WSDL")
-    private static WssRolesEjb2Service service2;
-
-    @WebServiceRef(wsdlLocation="http://@HOST@:@PORT@/security-wss-roles-web/webservice/WssRolesServletService/HelloServlet?WSDL")
-    private static WssRolesServletService service3;
-
-    public static void main(String[] args) {
-        boolean authprop =
-            (args != null && args.length > 0 && "authprop".equals(args[0]));
-
-        if (authprop) {
-            System.out.println("Authenticate through BindingProvider property");
-            stat.addDescription("security-wss-roles: authprop");
-        } else {
-            stat.addDescription("security-wss-roles");
-        }
-
-        String description = null;
-        try {
-            // first ejb ws
-            HelloEjb port = service.getHelloEjbPort();
-
-            if (authprop) {
-                authenticate((BindingProvider)port);
-            }
-
-            description = testSuite + " ejbws1: hello";
-            port.hello("Sun");
-            stat.addStatus(description, stat.PASS);  
-
-            description = testSuite + " ejbws1: rolesAllowed1";
-            port.rolesAllowed1("Sun");
-            stat.addStatus(description, stat.PASS);  
-
-            try {
-                description = testSuite + " ejbws1: rolesAllowed2";
-                port.rolesAllowed2("Sun");
-                stat.addStatus(description, stat.FAIL);  
-            } catch(Exception e) {
-                System.out.println("Expected failure: " + e);
-                stat.addStatus(description, stat.PASS);  
-            }
-
-            description = testSuite + " ejbws1: permitAll";
-            port.permitAll("Sun");
-            stat.addStatus(description, stat.PASS);  
-
-            try {
-                description = testSuite + " ejbws1: denyAll";
-                port.denyAll("Sun");
-                stat.addStatus(description, stat.FAIL);  
-            } catch(Exception e) {
-                System.out.println("Expected failure: " + e);
-                stat.addStatus(description, stat.PASS);  
-            }
-
-            try {
-                description = testSuite + " ejbws1: runAs1";
-                port.runAs1();
-                stat.addStatus(description, stat.FAIL);
-            } catch(Exception e) {
-                System.out.println("Expected failure: " + e);
-                stat.addStatus(description, stat.PASS);
-            }
-
-            description = testSuite + " ejbws1: runAs2";
-            port.runAs2();
-            stat.addStatus(description, stat.PASS);
-
-            // second ejb ws
-            HelloEjb2 port2 = service2.getHelloEjb2Port();
-
-            if (authprop) {
-                authenticate((BindingProvider)port2);
-            }
-
-            description = testSuite + " ejbws2: rolesAllowed1";
-            port2.rolesAllowed1("Sun");
-            stat.addStatus(description, stat.PASS);  
-
-            try {
-                description = testSuite + " ejbws2: rolesAllowed2";
-                port2.rolesAllowed2("Sun");
-                stat.addStatus(description, stat.FAIL);  
-            } catch(Exception e) {
-                System.out.println("Expected failure: " + e);
-                stat.addStatus(description, stat.PASS);  
-            }
-
-            // first servlet ws
-            HelloServlet port3 = service3.getHelloServletPort();
-            if (authprop) {
-                authenticate((BindingProvider)port3);
-            }
-            description = testSuite + " serlvet: hello";
-            String msg = port3.hello("Sun");
-            if (msg != null && msg.startsWith("javaee")) {
-                stat.addStatus(description, stat.PASS);  
-            } else {
-                stat.addStatus(description, stat.FAIL);  
-            }
-
-        } catch(Exception ex) {
-            ex.printStackTrace();
-            stat.addStatus(description, stat.FAIL);
-        }
-
-        if (authprop) {
-            stat.printSummary("security-wss-roles: authprop");
-        } else {
-            stat.printSummary("security-wss-roles");
-        }
-    }
-
-    private static void authenticate(BindingProvider bd) {
-        System.out.println("authenticate through BindingProvider property");
-        Map<String, Object> requestContext = bd.getRequestContext();
-        requestContext.put(BindingProvider.USERNAME_PROPERTY, "javaee");
-        requestContext.put(BindingProvider.PASSWORD_PROPERTY, "javaee");
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles/client/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/security/wss/roles/client/MANIFEST.MF
deleted file mode 100644
index 6e24fb0..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles/client/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Main-Class: com.sun.s1asdev.security.wss.roles.client.Client
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles/descriptor/sun-application.xml b/appserver/tests/appserv-tests/devtests/security/wss/roles/descriptor/sun-application.xml
deleted file mode 100644
index 5b3df2c..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles/descriptor/sun-application.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-application PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 J2EE Application 1.4//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-application_1_4-0.dtd">
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<sun-application>
-  <unique-id>0</unique-id>
-  <security-role-mapping>
-    <role-name>javaee</role-name>
-    <principal-name>javaee</principal-name>
-  </security-role-mapping>
-  <security-role-mapping>
-    <role-name>ejbuser</role-name>
-    <principal-name>ejbuser</principal-name>
-  </security-role-mapping>
-  <realm>file2</realm>
-</sun-application>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles/descriptor/sun-ejb-jar.xml b/appserver/tests/appserv-tests/devtests/security/wss/roles/descriptor/sun-ejb-jar.xml
deleted file mode 100644
index 3a6754d..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles/descriptor/sun-ejb-jar.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 EJB 2.1//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-ejb-jar_2_1-0.dtd'>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<sun-ejb-jar>
-  <enterprise-beans>
-    <ejb>
-      <ejb-name>HelloEjb</ejb-name>
-      <webservice-endpoint>
-        <port-component-name>HelloEjb</port-component-name>
-        <login-config>
-          <auth-method>BASIC</auth-method>
-          <realm>file2</realm>
-        </login-config>
-      </webservice-endpoint>
-    </ejb>
-   </enterprise-beans>
-</sun-ejb-jar>
-
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles/descriptor/sun-ejb-jar2.xml b/appserver/tests/appserv-tests/devtests/security/wss/roles/descriptor/sun-ejb-jar2.xml
deleted file mode 100644
index 7b2352a..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles/descriptor/sun-ejb-jar2.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 EJB 2.1//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-ejb-jar_2_1-0.dtd'>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<sun-ejb-jar>
-  <enterprise-beans>
-    <ejb>
-      <ejb-name>HelloEjb2</ejb-name>
-      <webservice-endpoint>
-        <port-component-name>HelloEjb2</port-component-name>
-        <login-config>
-          <auth-method>BASIC</auth-method>
-        </login-config>
-      </webservice-endpoint>
-    </ejb>
-   </enterprise-beans>
-</sun-ejb-jar>
-
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles/descriptor/web.xml b/appserver/tests/appserv-tests/devtests/security/wss/roles/descriptor/web.xml
deleted file mode 100644
index a008245..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles/descriptor/web.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-  xmlns:j2ee="http://java.sun.com/xml/ns/javaee"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
-  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
-      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-
-  <servlet>
-    <servlet-name>HelloServlet</servlet-name>
-    <servlet-class>com.sun.s1asdev.security.wss.roles.servletws.HelloServlet</servlet-class>
-    <load-on-startup>0</load-on-startup>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>HelloServlet</servlet-name>
-    <url-pattern>/webservice/WssRolesServletService/HelloServlet</url-pattern>
-  </servlet-mapping>
-
-  <security-constraint>
-    <web-resource-collection>
-      <web-resource-name>Secure Area</web-resource-name>
-      <url-pattern>/webservice/WssRolesServletService/HelloServlet</url-pattern>
-      <http-method>POST</http-method>
-    </web-resource-collection>
-    <auth-constraint>
-      <role-name>javaee</role-name>
-    </auth-constraint>
-  </security-constraint>
-  <login-config>
-    <auth-method>BASIC</auth-method>
-    <realm-name>file2</realm-name>
-  </login-config>
-  <security-role>
-    <role-name>javaee</role-name>
-  </security-role>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles/ejbws/HelloEjb.java b/appserver/tests/appserv-tests/devtests/security/wss/roles/ejbws/HelloEjb.java
deleted file mode 100644
index 5564a6c..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles/ejbws/HelloEjb.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2005, 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
- */
-
-package com.sun.s1asdev.security.wss.roles.ejbws;
-
-import jakarta.annotation.Resource;
-import jakarta.annotation.security.DeclareRoles;
-import jakarta.annotation.security.DenyAll;
-import jakarta.annotation.security.PermitAll;
-import jakarta.annotation.security.RolesAllowed;
-import jakarta.annotation.security.RunAs;
-import jakarta.ejb.EJB;
-import jakarta.ejb.Stateless;
-import jakarta.ejb.SessionContext;
-import jakarta.jws.WebService;
-import jakarta.xml.ws.WebServiceContext;
-
-import com.sun.s1asdev.security.wss.roles.ejb.SfulLocal;
-
-@Stateless
-@WebService(targetNamespace="http://ejbws.roles.wss.security.s1asdev.sun.com", serviceName="WssRolesEjbService")
-@DeclareRoles({"javaee", "webuser", "ejbuser"})
-@RunAs("ejbuser")
-public class HelloEjb {
-    @EJB private SfulLocal sful;
-    @Resource private SessionContext sc;
-    @Resource WebServiceContext wsContext;
-
-    public String hello(String who) {
-        if (!sc.isCallerInRole("javaee") || sc.isCallerInRole("ejbuser")) {
-            throw new RuntimeException("sc not of role javaee or of role ejbuser");
-        }
-
-        if (!wsContext.isUserInRole("javaee") || wsContext.isUserInRole("ejbuser")) {
-            throw new RuntimeException("wsc not of role javaee or of role ejbuser");
-        }
-
-        return "Hello, " + who;
-    }
-
-    @RolesAllowed(value={"javaee"})
-    public String rolesAllowed1(String who) {
-        return "Hello, " + who;
-    }
-
-    @RolesAllowed(value={"webuser"})
-    public String rolesAllowed2(String who) {
-        return "Hello, " + who;
-    }
-
-    @DenyAll
-    public String denyAll(String who) {
-        return "Hello, " + who;
-    }
-
-    @PermitAll
-    public String permitAll(String who) {
-        return "Hello, " + who;
-    }
-
-    public String runAs1() {
-        return sful.hello();
-    }
-
-    public String runAs2() {
-        return sful.goodBye();
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles/ejbws/SfulEJB.java b/appserver/tests/appserv-tests/devtests/security/wss/roles/ejbws/SfulEJB.java
deleted file mode 100644
index 1c98945..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles/ejbws/SfulEJB.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2006, 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
- */
-
-package com.sun.s1asdev.security.wss.roles.ejb;
-
-import jakarta.annotation.security.RolesAllowed;
-import jakarta.ejb.Local;
-import jakarta.ejb.Stateful;
-
-@Stateful
-@Local({SfulLocal.class})
-public class SfulEJB implements SfulLocal {
-    @RolesAllowed(value={"javaee"})
-    public String hello() {
-        return "hello from Sful";
-    }
-
-    @RolesAllowed(value={"ejbuser"})
-    public String goodBye() {
-        return "goodBye from Sful";
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles/ejbws/SfulLocal.java b/appserver/tests/appserv-tests/devtests/security/wss/roles/ejbws/SfulLocal.java
deleted file mode 100644
index e73d0da..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles/ejbws/SfulLocal.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2006, 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
- */
-
-package com.sun.s1asdev.security.wss.roles.ejb;
-
-public interface SfulLocal {
-    public String hello();
-
-    public String goodBye();
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles/ejbws2/HelloEjb2.java b/appserver/tests/appserv-tests/devtests/security/wss/roles/ejbws2/HelloEjb2.java
deleted file mode 100644
index d722d7d..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles/ejbws2/HelloEjb2.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2005, 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
- */
-
-package com.sun.s1asdev.security.wss.roles.ejbws2;
-
-import jakarta.annotation.security.RolesAllowed;
-import jakarta.ejb.Stateless;
-import jakarta.jws.WebService;
-
-@Stateless
-@WebService(targetNamespace="http://ejbws2.roles.wss.security.s1asdev.sun.com", serviceName="WssRolesEjb2Service")
-public class HelloEjb2 {
-    @RolesAllowed(value={"javaee"})
-    public String rolesAllowed1(String who) {
-        return "Hello, " + who;
-    }
-
-    @RolesAllowed(value={"webuser"})
-    public String rolesAllowed2(String who) {
-        return "Hello, " + who;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles/servletws/HelloServlet.java b/appserver/tests/appserv-tests/devtests/security/wss/roles/servletws/HelloServlet.java
deleted file mode 100644
index ed684cc..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles/servletws/HelloServlet.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2005, 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
- */
-
-package com.sun.s1asdev.security.wss.roles.servletws;
-
-import jakarta.annotation.Resource;
-import jakarta.jws.WebService;
-import jakarta.xml.ws.WebServiceContext;
-
-@WebService(targetNamespace="http://servletws.roles.wss.security.s1asdev.sun.com", serviceName="WssRolesServletService")
-public class HelloServlet {
-    @Resource WebServiceContext wsContext;
-
-    public String hello(String who) {
-        if (!wsContext.isUserInRole("javaee") ||
-                wsContext.isUserInRole("ejbuser")) {
-            throw new RuntimeException("not of role javaee or of role ejbuser");
-        }
-
-        return wsContext.getUserPrincipal() + "Hello, " + who;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles2/build.properties b/appserver/tests/appserv-tests/devtests/security/wss/roles2/build.properties
deleted file mode 100644
index 7097c0c..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles2/build.properties
+++ /dev/null
@@ -1,35 +0,0 @@
-<!--
-
-    Copyright (c) 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
-
--->
-
-
-<property name="module" value="security-wss-roles2"/>
-<property name="appname" value="${module}"/>
-<property name="assemble" value="${build.classes.dir}/archive"/>
-<property name="test.client"
-        value="com.sun.s1asdev.security.wss.roles2.client.Client"/>
-<property name="application.xml" value="descriptor/application.xml"/>
-<property name="sun-application.xml" value="descriptor/sun-application.xml"/>
-<property name="ejb-jar.xml" value="descriptor/ejb-jar.xml"/>
-<property name="sun-ejb-jar.xml" value="descriptor/sun-ejb-jar.xml"/>
-<property name="application-client.xml"
-        value="descriptor/application-client.xml"/>
-<property name="sun-application-client.xml"
-        value="descriptor/sun-application-client.xml"/>
-<property name="appclientjar.files" value="${build.classes.dir}"/>
-<property name="appclient.jar" value="${assemble.dir}/${appname}-client.jar"/>
-<property name="app.type" value="application"/>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles2/build.xml b/appserver/tests/appserv-tests/devtests/security/wss/roles2/build.xml
deleted file mode 100644
index 04a70cb..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles2/build.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<!ENTITY commonSetup SYSTEM "file:./../../../../config/properties.xml">
-<!ENTITY commonBuild SYSTEM "file:./../../../../config/common.xml">
-<!ENTITY commonSecurity SYSTEM "file:../../common.xml">
-<!ENTITY testproperties SYSTEM "file:./build.properties">
-]>
-
-<project name="security-wss-roles2" default="usage" basedir=".">
-
-    &commonSetup;
-    &commonBuild;
-    &testproperties;
-    &commonSecurity;
-
-    <target name="all" depends="clean, setup, build-deploy, run, undeploy, unsetup"/>
-
-    <target name="clean" depends="init-common">
-      <antcall target="clean-common"/>
-    </target>
-
-    <target name="setup" depends="init-common">
-        <antcall target="create-user-common">
-            <param name="user" value="javaee"/>
-            <param name="password" value="javaee"/>
-            <param name="groups" value="javaee"/>
-        </antcall>
-        <!-- exports certdb stuff and imports into keystore -->
-        <antcall target="prepare-store-nickname-common">
-            <param name="cert.nickname" value="s1as"/>
-        </antcall>
-    </target>
-
-    <target name="unsetup" depends="init-common">
-        <antcall target="delete-user-common">
-            <param name="user" value="javaee"/>
-        </antcall>
-    </target>
-
-    <target name="compile-server" depends="clean">
-        <antcall target="compile-common">
-            <param name="src" value="ejbws"/>
-            <param name="build.classes.dir" value="${build.classes.dir}/ejbws"/>
-        </antcall>
-    </target>
-
-    <target name="compile-client">
-        <mkdir dir="${build.classes.dir}/client"/>
-        <antcall target="wsimport">
-            <param name="wsimport.args"
-                value="-keep -d ${build.classes.dir}/client http://${http.host}:${http.port}/WssRoles2EjbService/HelloEjb?WSDL"/>
-        </antcall>
-
-        <delete file="client/Client.java" failonerror="false"/>
-        <copy file="client/Client.java.template" tofile="client/Client.java"/>
-        <replace file="client/Client.java">
-            <replacefilter token="@HOST@" value="${http.host}"/>
-            <replacefilter token="@PORT@" value="${http.port}"/>
-        </replace>
-        <javac srcdir="client" destdir="${build.classes.dir}/client"
-            classpath="${env.APS_HOME}/lib/reporter.jar:${env.S1AS_HOME}/lib/j2ee.jar:${env.S1AS_HOME}/lib/webservices-rt.jar:${env.S1AS_HOME}/lib/webservices-tools.jar:${build.classes.dir}/client" debug="on" failonerror="true"/>
-    </target>
-
-    <target name="build-server" depends="compile-server">
-        <mkdir dir="${assemble.dir}"/>
-        <mkdir dir="${build.classes.dir}/META-INF"/>
-
-        <antcall target="package-ejbjar-common">
-            <param name="ejbjar.files" value="${build.classes.dir}/ejbws"/>
-            <param name="ejb.jar" value="${assemble.dir}/${appname}-ejb.jar"/>
-            <param name="ejbjar.classes" value="com/sun/**/*.class"/>
-        </antcall>
-    </target>
-
-    <target name="build-client" depends="compile-client">
-        <mkdir dir="${assemble.dir}"/>
-
-        <unjar src="${env.APS_HOME}/lib/reporter.jar" dest="${build.classes.dir}/client"/>
-        <antcall target="package-appclientjar-common">
-            <param name="appclientjar.files"
-                value="${build.classes.dir}/client"/>
-            <param name="appclient.jar"
-                value="${assemble.dir}/${appname}-client.jar"/>
-            <param name="appclientjar.classes"
-                value="com/sun/**/*.class"/>
-        </antcall>
-    </target>
-
-    <target name="build-deploy" depends="init-common">
-        <antcall target="build-server"/>
-        <antcall target="deploy-jar-common"/>
-        <antcall target="build-client"/>
-        <antcall target="deploy-client-common"/>
-    </target>
-
-    <target name="run" depends="init-common">
-        <exec executable="${APPCLIENT}">
-            <env key="VMARGS" value="-Djavax.net.ssl.keyStore=${mykeystore.db.file} -Djavax.net.ssl.trustStore=${mytruststore.db.file} -Djavax.net.ssl.keyStorePassword=${ssl.password} -Djavax.net.ssl.trustStorePassword=${ssl.password}"/>
-            <arg line="-xml ${env.S1AS_HOME}/domains/domain1/config/glassfish-acc.xml" />
-            <arg line="-client" />
-            <arg line="${assemble.dir}/${appname}-clientClient.jar"/>
-            <arg line="-texauth"/>
-            <arg line="-user" />
-            <arg line="javaee" />
-            <arg line="-password" />
-            <arg line="javaee" />
-        </exec>
-    </target>
-
-    <target name="undeploy" depends="init-common">
-        <antcall target="undeploy-jar-common"/>
-        <antcall target="undeploy-client-common"/>
-    </target>
-
-    <target name="usage">
-        <antcall target="usage-common"/>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles2/client/Client.java.template b/appserver/tests/appserv-tests/devtests/security/wss/roles2/client/Client.java.template
deleted file mode 100644
index c3b1161..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles2/client/Client.java.template
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (c) 2005, 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
- */
-
-package com.sun.s1asdev.security.wss.roles2.client;
-
-import java.util.Map;
-
-import jakarta.xml.ws.BindingProvider;
-import jakarta.xml.ws.WebServiceRef;
-
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-
-import com.sun.s1asdev.security.wss.roles2.ejbws.HelloEjb;
-import com.sun.s1asdev.security.wss.roles2.ejbws.WssRoles2EjbService;
-
-public class Client {
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    private static String testSuite = "Sec:WSS Roles2 test ";
-
-    @WebServiceRef(wsdlLocation="http://@HOST@:@PORT@/WssRoles2EjbService/HelloEjb?WSDL")
-    private static WssRoles2EjbService service;
-
-    public static void main(String[] args) {
-        stat.addDescription("security-wss-roles2");
-        String description = null;
-        try {
-            HelloEjb port = service.getHelloEjbPort();
-
-            description = testSuite + " ejbws: hello";
-            port.hello("Sun");
-            stat.addStatus(description, stat.PASS);  
-
-            description = testSuite + " ejbws: rolesAllowed1";
-            port.rolesAllowed1("Sun");
-            stat.addStatus(description, stat.PASS);  
-
-            try {
-                description = testSuite + " ejbws: rolesAllowed2";
-                port.rolesAllowed2("Sun");
-                stat.addStatus(description, stat.FAIL);  
-            } catch(Exception e) {
-                System.out.println("Expected failure: " + e);
-                stat.addStatus(description, stat.PASS);  
-            }
-
-            description = testSuite + " ejbws: permitAll";
-            port.permitAll("Sun");
-            stat.addStatus(description, stat.PASS);  
-
-            try {
-                description = testSuite + " ejbws: denyAll";
-                port.denyAll("Sun");
-                stat.addStatus(description, stat.FAIL);  
-            } catch(Exception e) {
-                System.out.println("Expected failure: " + e);
-                stat.addStatus(description, stat.PASS);  
-            }
-
-            try {
-                description = testSuite + " ejbws: runAs1";
-                port.runAs1();
-                stat.addStatus(description, stat.FAIL);
-            } catch(Exception e) {
-                System.out.println("Expected failure: " + e);
-                stat.addStatus(description, stat.PASS);
-            }
-
-            description = testSuite + " ejbws: runAs2";
-            port.runAs2();
-            stat.addStatus(description, stat.PASS);
-
-            description = testSuite + " ejbws: runAsRunAs1";
-            port.runAsRunAs1();
-            stat.addStatus(description, stat.PASS);
-
-            try {
-                description = testSuite + " ejbws: runAsRunAs2";
-                port.runAsRunAs2();
-                stat.addStatus(description, stat.FAIL);
-            } catch(Exception e) {
-                System.out.println("Expected failure: " + e);
-                stat.addStatus(description, stat.PASS);
-            }
-
-        } catch(Exception ex) {
-            ex.printStackTrace();
-            stat.addStatus(description, stat.FAIL);
-        }
-
-        stat.printSummary("security-wss-roles2");
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles2/client/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/security/wss/roles2/client/MANIFEST.MF
deleted file mode 100644
index f9a55a7..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles2/client/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Main-Class: com.sun.s1asdev.security.wss.roles2.client.Client
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles2/descriptor/sun-application-client.xml b/appserver/tests/appserv-tests/devtests/security/wss/roles2/descriptor/sun-application-client.xml
deleted file mode 100644
index 7fef3f0..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles2/descriptor/sun-application-client.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-application-client PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Application Client 1.4//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-application-client_1_4-0.dtd'>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<sun-application-client>
-    <service-ref>
-      <service-ref-name>com.sun.s1asdev.security.wss.roles2.client.Client/service</service-ref-name>
-      <port-info>
-        <wsdl-port>
-          <namespaceURI>http://ejbws.roles2.wss.security.s1asdev.sun.com</namespaceURI>
-          <localpart>HelloEjbPort</localpart>
-        </wsdl-port>
-        <message-security-binding auth-layer="SOAP"
-          provider-id="XWS_ClientProvider">
-          <message-security>
-            <message/>
-            <request-protection auth-source="sender"/>
-            <response-protection auth-source="content"/>
-          </message-security>
-        </message-security-binding>
-      </port-info>
-    </service-ref>
-</sun-application-client>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles2/descriptor/sun-ejb-jar.xml b/appserver/tests/appserv-tests/devtests/security/wss/roles2/descriptor/sun-ejb-jar.xml
deleted file mode 100644
index 81ea10e..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles2/descriptor/sun-ejb-jar.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 EJB 2.1//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-ejb-jar_2_1-0.dtd'>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<sun-ejb-jar>
-  <security-role-mapping>
-    <role-name>javaee</role-name>
-    <principal-name>javaee</principal-name>
-  </security-role-mapping>
-  <security-role-mapping>
-    <role-name>javaeegp</role-name>
-    <group-name>javaee</group-name>
-  </security-role-mapping>
-  <security-role-mapping>
-    <role-name>ejbuser</role-name>
-    <principal-name>ejbuser</principal-name>
-  </security-role-mapping>
-  <security-role-mapping>
-    <role-name>j2ee</role-name>
-    <principal-name>j2ee</principal-name>
-  </security-role-mapping>
-
-  <enterprise-beans>
-    <ejb>
-      <ejb-name>HelloEjb</ejb-name>
-      <webservice-endpoint>
-        <port-component-name>HelloEjb</port-component-name>
-        <endpoint-address-uri>/WssRoles2EjbService/HelloEjb</endpoint-address-uri>
-        <message-security-binding auth-layer="SOAP"
-          provider-id="XWS_ServerProvider">
-          <message-security>
-            <message/>
-            <request-protection auth-source="sender"/>
-            <response-protection auth-source="content"/>
-          </message-security>
-        </message-security-binding>
-      </webservice-endpoint>
-    </ejb>
-   </enterprise-beans>
-</sun-ejb-jar>
-
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles2/ejbws/HelloEjb.java b/appserver/tests/appserv-tests/devtests/security/wss/roles2/ejbws/HelloEjb.java
deleted file mode 100644
index 467f0fa..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles2/ejbws/HelloEjb.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2005, 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
- */
-
-package com.sun.s1asdev.security.wss.roles2.ejbws;
-
-import jakarta.annotation.Resource;
-import jakarta.annotation.security.DeclareRoles;
-import jakarta.annotation.security.DenyAll;
-import jakarta.annotation.security.PermitAll;
-import jakarta.annotation.security.RolesAllowed;
-import jakarta.annotation.security.RunAs;
-import jakarta.ejb.EJB;
-import jakarta.ejb.Stateless;
-import jakarta.ejb.SessionContext;
-import jakarta.jws.WebService;
-
-import com.sun.s1asdev.security.wss.roles2.ejb.SfulLocal;
-
-@Stateless
-@WebService(targetNamespace="http://ejbws.roles2.wss.security.s1asdev.sun.com", serviceName="WssRoles2EjbService")
-@DeclareRoles({"javaee", "webuser", "ejbuser"})
-@RunAs("ejbuser")
-public class HelloEjb {
-    @EJB private SfulLocal sful;
-    @Resource private SessionContext sc;
-
-    public String hello(String who) {
-        if (!sc.isCallerInRole("javaee")) {
-            throw new RuntimeException("not of role javaee");
-        }
-        if (sc.isCallerInRole("ejbuser")) {
-            throw new RuntimeException("of role ejbuser");
-        }
-        return "Hello, " + who;
-    }
-
-    @RolesAllowed(value={"javaee"})
-    public String rolesAllowed1(String who) {
-        return "Hello, " + who;
-    }
-
-    @RolesAllowed(value={"webuser"})
-    public String rolesAllowed2(String who) {
-        return "Hello, " + who;
-    }
-
-    @DenyAll
-    public String denyAll(String who) {
-        return "Hello, " + who;
-    }
-
-    @PermitAll
-    public String permitAll(String who) {
-        return "Hello, " + who;
-    }
-
-    public String runAs1() {
-        return sful.hello();
-    }
-
-    public String runAs2() {
-        return sful.goodBye();
-    }
-
-    @RolesAllowed(value={"javaeegp"})
-    public String runAsRunAs1() {
-        return sful.slessHello();
-    }
-
-    public String runAsRunAs2() {
-        return sful.slessGoodBye();
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles2/ejbws/SfulEJB.java b/appserver/tests/appserv-tests/devtests/security/wss/roles2/ejbws/SfulEJB.java
deleted file mode 100644
index 4f1faf8..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles2/ejbws/SfulEJB.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2006, 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
- */
-
-package com.sun.s1asdev.security.wss.roles2.ejb;
-
-import jakarta.annotation.security.RolesAllowed;
-import jakarta.annotation.security.RunAs;
-import jakarta.ejb.EJB;
-import jakarta.ejb.Local;
-import jakarta.ejb.Stateful;
-
-@Stateful
-@Local({SfulLocal.class})
-@RunAs("j2ee")
-public class SfulEJB implements SfulLocal {
-    @EJB private SlessLocal sless;
-
-    @RolesAllowed(value={"javaee"})
-    public String hello() {
-        return "hello from Sful";
-    }
-
-    @RolesAllowed(value={"ejbuser"})
-    public String goodBye() {
-        return "goodBye from Sful";
-    }
-
-    public String slessHello() {
-        return sless.hello();
-    }
-
-    public String slessGoodBye() {
-        return sless.goodBye();
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles2/ejbws/SfulLocal.java b/appserver/tests/appserv-tests/devtests/security/wss/roles2/ejbws/SfulLocal.java
deleted file mode 100644
index 02a8411..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles2/ejbws/SfulLocal.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2006, 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
- */
-
-package com.sun.s1asdev.security.wss.roles2.ejb;
-
-public interface SfulLocal {
-    public String hello();
-
-    public String goodBye();
-
-    public String slessHello();
-
-    public String slessGoodBye();
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles2/ejbws/SlessEJB.java b/appserver/tests/appserv-tests/devtests/security/wss/roles2/ejbws/SlessEJB.java
deleted file mode 100644
index debfd65..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles2/ejbws/SlessEJB.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2006, 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
- */
-
-package com.sun.s1asdev.security.wss.roles2.ejb;
-
-import jakarta.annotation.security.RolesAllowed;
-import jakarta.ejb.Local;
-import jakarta.ejb.Stateless;
-
-@Stateless
-@Local({SlessLocal.class})
-public class SlessEJB implements SlessLocal {
-    @RolesAllowed(value={"j2ee"})
-    public String hello() {
-        return "hello from Sless";
-    }
-
-    @RolesAllowed(value={"javaee"})
-    public String goodBye() {
-        return "goodBye from Sless";
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/roles2/ejbws/SlessLocal.java b/appserver/tests/appserv-tests/devtests/security/wss/roles2/ejbws/SlessLocal.java
deleted file mode 100644
index ae59099..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/roles2/ejbws/SlessLocal.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2006, 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
- */
-
-package com.sun.s1asdev.security.wss.roles2.ejb;
-
-public interface SlessLocal {
-    public String hello();
-
-    public String goodBye();
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/ssl/build.properties b/appserver/tests/appserv-tests/devtests/security/wss/ssl/build.properties
deleted file mode 100644
index e91a248..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/ssl/build.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--
-
-    Copyright (c) 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
-
--->
-
-
-<property name="module" value="security-wss-ssl"/>
-<property name="appname" value="${module}"/>
-<property name="assemble" value="${build.classes.dir}/archive"/>
-<property name="test.client"
-        value="com.sun.s1asdev.security.wss.ssl.client.Client"/>
-<property name="application.xml" value="descriptor/application.xml"/>
-<property name="sun-application.xml" value="descriptor/sun-application.xml"/>
-<property name="ejb-jar.xml" value="descriptor/ejb-jar.xml"/>
-<property name="sun-ejb-jar.xml" value="descriptor/sun-ejb-jar.xml"/>
-<property name="web.xml" value="descriptor/web.xml"/>
-<property name="application-client.xml"
-        value="descriptor/application-client.xml"/>
-<property name="sun-application-client.xml"
-        value="descriptor/sun-application-client.xml"/>
-<property name="appclientjar.files" value="${build.classes.dir}"/>
-<property name="appclient.jar" value="${assemble.dir}/${appname}-client.jar"/>
-<property name="app.type" value="application"/>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/ssl/build.xml b/appserver/tests/appserv-tests/devtests/security/wss/ssl/build.xml
deleted file mode 100644
index d7df978..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/ssl/build.xml
+++ /dev/null
@@ -1,150 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<!ENTITY commonSetup SYSTEM "file:./../../../../config/properties.xml">
-<!ENTITY commonBuild SYSTEM "file:./../../../../config/common.xml">
-<!ENTITY commonSecurity SYSTEM "file:../../common.xml">
-<!ENTITY testproperties SYSTEM "file:./build.properties">
-]>
-
-<project name="security-wss-ssl" default="usage" basedir=".">
-
-    &commonSetup;
-    &commonBuild;
-    &testproperties;
-    &commonSecurity;
-
-    <target name="all" depends="clean, setup, build-deploy, run, undeploy, unsetup"/>
-
-    <target name="clean" depends="init-common">
-      <antcall target="clean-common"/>
-    </target>
-
-    <target name="setup" depends="init-common">
-    </target>
-
-    <target name="unsetup" depends="init-common">
-    </target>
-
-    <target name="compile-server" depends="clean">
-        <antcall target="compile-common">
-            <param name="src" value="ejbws"/>
-            <param name="build.classes.dir" value="${build.classes.dir}/ejbws"/>
-        </antcall>
-        <antcall target="compile-common">
-            <param name="src" value="servletws"/>
-            <param name="build.classes.dir" value="${build.classes.dir}/servletws"/>
-        </antcall>
-    </target>
-
-    <target name="compile-client" depends="prepare-truststore-common, init-security-util">
-        <mkdir dir="${build.classes.dir}/client"/>
-        <antcall target="wsimport">
-                <!--value="-keep -d ${build.classes.dir}/client https://${s1asCN}:${https.port}/WssSslEjbService/HelloEjb?WSDL"/>-->
-            <param name="wsimport.VMARGS" value=" -Djavax.net.ssl.trustStore=${build.base.dir}/cacerts.jks -Djavax.net.ssl.trustStorePassword=${ssl.password}"/>
-            <param name="wsimport.args"
-                value="-keep -d ${build.classes.dir}/client https://${s1asCN}:${https.port}/WssSslEjbService/HelloEjb?WSDL"/>
-        </antcall>
-        <antcall target="wsimport">
-            <param name="wsimport.VMARGS" value=" -Djavax.net.ssl.trustStore=${build.base.dir}/cacerts.jks -Djavax.net.ssl.trustStorePassword=${ssl.password}"/>
-            <param name="wsimport.args"
-                value="-keep -d ${build.classes.dir}/client https://${s1asCN}:${https.port}/security-wss-ssl/webservice/WssSslServletService/HelloServlet?WSDL"/>
-        </antcall>
-
-        <delete file="client/Client.java" failonerror="false"/>
-        <copy file="client/Client.java.template" tofile="client/Client.java"/>
-        <replace file="client/Client.java">
-            <replacefilter token="@HOST@" value="${s1asCN}"/>
-            <replacefilter token="@PORT@" value="${https.port}"/>
-        </replace>
-        <javac srcdir="client" destdir="${build.classes.dir}/client"
-            classpath="${env.APS_HOME}/lib/reporter.jar:${env.S1AS_HOME}/lib/j2ee.jar:${env.S1AS_HOME}/lib/webservices-rt.jar:${env.S1AS_HOME}/lib/webservices-tools.jar:${build.classes.dir}/client" debug="on" failonerror="true"/>
-    </target>
-
-    <target name="build-server" depends="compile-server">
-        <mkdir dir="${assemble.dir}"/>
-        <mkdir dir="${build.classes.dir}/META-INF"/>
-
-        <antcall target="package-ejbjar-common">
-            <param name="ejbjar.files" value="${build.classes.dir}/ejbws"/>
-            <param name="ejb.jar" value="${assemble.dir}/${appname}-ejb.jar"/>
-            <param name="ejbjar.classes" value="com/sun/**/*.class"/>
-        </antcall>
-
-        <antcall target="package-war-common">
-            <param name="war.classes" value="${build.classes.dir}/servletws"/>
-            <param name="war.file" value="${assemble.dir}/${appname}-web.war"/>
-        </antcall>
-
-        <copy file="${application.xml}" tofile="${build.classes.dir}/META-INF/application.xml" failonerror="false"/>
-        <jar jarfile="${assemble.dir}/${appname}App.ear">
-            <fileset dir="${assemble.dir}">
-               <include name="*.jar"/>
-               <include name="*.war"/>
-            </fileset>
-            <fileset dir="${build.classes.dir}">
-               <include name="META-INF/application.xml"/>
-            </fileset>
-        </jar>
-    </target>
-
-    <target name="build-client" depends="compile-client">
-        <mkdir dir="${assemble.dir}"/>
-
-        <unjar src="${env.APS_HOME}/lib/reporter.jar" dest="${build.classes.dir}/client"/>
-        <antcall target="package-appclientjar-common">
-            <param name="appclientjar.files"
-                value="${build.classes.dir}/client"/>
-            <param name="appclient.jar"
-                value="${assemble.dir}/${appname}-client.jar"/>
-            <param name="appclientjar.classes"
-                value="com/sun/**/*.class"/>
-        </antcall>
-    </target>
-
-    <target name="build-deploy" depends="init-common">
-        <antcall target="build-server"/>
-        <antcall target="deploy-common"/>
-        <antcall target="build-client"/>
-        <antcall target="deploy-client-common"/>
-    </target>
-
-    <target name="run" depends="prepare-truststore-common">
-        <exec executable="${APPCLIENT}">
-        <env key="VMARGS" value=" -Djavax.net.ssl.trustStore=${build.base.dir}/cacerts.jks -Djavax.net.ssl.trustStorePassword=${ssl.password}"/>
-            <arg line="-client" />
-            <arg line="${assemble.dir}/${appname}-clientClient.jar"/>
-            <arg line="-texauth"/>
-            <arg line="-user" />
-            <arg line="dummy" />
-            <arg line="-password" />
-            <arg line="dummy" />
-        </exec>
-    </target>
-
-    <target name="undeploy" depends="init-common">
-        <antcall target="undeploy-common"/>
-        <antcall target="undeploy-client-common"/>
-    </target>
-
-    <target name="usage">
-        <antcall target="usage-common"/>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/ssl/client/Client.java.template b/appserver/tests/appserv-tests/devtests/security/wss/ssl/client/Client.java.template
deleted file mode 100644
index 3a16825..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/ssl/client/Client.java.template
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2006, 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
- */
-
-package com.sun.s1asdev.security.wss.ssl.client;
-
-import jakarta.xml.ws.WebServiceRef;
-
-import com.sun.s1asdev.security.wss.ssl.ejbws.HelloEjb;
-import com.sun.s1asdev.security.wss.ssl.ejbws.WssSslEjbService;
-import com.sun.s1asdev.security.wss.ssl.servletws.HelloServlet;
-import com.sun.s1asdev.security.wss.ssl.servletws.WssSslServletService;
-
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-
-public class Client {
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    private static String testSuite = "Sec:WSS SSL test ";
-
-    @WebServiceRef(wsdlLocation="https://@HOST@:@PORT@/WssSslEjbService/HelloEjb?WSDL")
-    private static WssSslEjbService ejbService;
-    @WebServiceRef(wsdlLocation="https://@HOST@:@PORT@/security-wss-ssl/webservice/WssSslServletService/HelloServlet?WSDL")
-    private static WssSslServletService servletService;
-
-    public static void main(String[] args) {
-        stat.addDescription("security-wss-ssl");
-        String description = null;
-        try {
-            // ejb ws
-            HelloEjb ejbPort = ejbService.getHelloEjbPort();
-            description = testSuite + " ssl: ejb hello";
-            ejbPort.hello("Sun Ejb");
-            stat.addStatus(description, stat.PASS);  
-        } catch(Exception ex) {
-            ex.printStackTrace();
-            stat.addStatus(description, stat.FAIL);
-        }
-
-        try {
-            // servlet ws
-            HelloServlet servletPort = servletService.getHelloServletPort();
-            description = testSuite + " ssl: servlet hello";
-            servletPort.hello("Sun Servlet");
-            stat.addStatus(description, stat.PASS);  
-        } catch(Exception ex) {
-            ex.printStackTrace();
-            stat.addStatus(description, stat.FAIL);
-        }
-
-        stat.printSummary("security-wss-ssl");
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/ssl/client/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/security/wss/ssl/client/MANIFEST.MF
deleted file mode 100644
index 4a95741..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/ssl/client/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Main-Class: com.sun.s1asdev.security.wss.ssl.client.Client
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/ssl/descriptor/application.xml b/appserver/tests/appserv-tests/devtests/security/wss/ssl/descriptor/application.xml
deleted file mode 100644
index cd0b2e9..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/ssl/descriptor/application.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" "http://java.sun.com/dtd/application_1_3.dtd">
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<application>
-  <display-name>security-wss-sslApp</display-name>
-  <module>
-    <ejb>security-wss-ssl-ejb.jar</ejb>
-  </module>
-  <module>
-    <web>
-      <web-uri>security-wss-ssl-web.war</web-uri>
-      <context-root>security-wss-ssl</context-root>
-    </web>
-  </module>
-</application>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/ssl/descriptor/sun-ejb-jar.xml b/appserver/tests/appserv-tests/devtests/security/wss/ssl/descriptor/sun-ejb-jar.xml
deleted file mode 100644
index 5cf6228..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/ssl/descriptor/sun-ejb-jar.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 EJB 2.1//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-ejb-jar_2_1-0.dtd'>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<sun-ejb-jar>
-  <enterprise-beans>
-    <ejb>
-      <ejb-name>HelloEjb</ejb-name>
-      <webservice-endpoint>
-        <port-component-name>HelloEjb</port-component-name>
-        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
-      </webservice-endpoint>
-    </ejb>
-   </enterprise-beans>
-</sun-ejb-jar>
-
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/ssl/descriptor/web.xml b/appserver/tests/appserv-tests/devtests/security/wss/ssl/descriptor/web.xml
deleted file mode 100644
index 9ede38c..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/ssl/descriptor/web.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-  xmlns:j2ee="http://java.sun.com/xml/ns/javaee"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
-  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
-      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-
-  <description>SSL WebTier for the Hello Service</description>
-  <display-name>HelloWAR</display-name>
-  <servlet>
-    <description>Endpoint for Hello Web Service</description>
-    <display-name>HelloWebService</display-name>
-    <servlet-name>HelloServlet</servlet-name>
-    <servlet-class>com.sun.s1asdev.security.wss.ssl.servletws.HelloServlet</servlet-class>
-    <load-on-startup>0</load-on-startup>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>HelloServlet</servlet-name>
-    <url-pattern>/webservice/WssSslServletService/HelloServlet</url-pattern>
-  </servlet-mapping>
-  <session-config>
-    <session-timeout>54</session-timeout>
-  </session-config>
-  <security-constraint>
-    <web-resource-collection>
-      <web-resource-name>Protected Area</web-resource-name>
-      <url-pattern>/webservice/WssSslServletService/HelloServlet</url-pattern>
-      <http-method>GET</http-method>
-      <http-method>POST</http-method>
-    </web-resource-collection>
-    <user-data-constraint>
-      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
-    </user-data-constraint>
-  </security-constraint>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/ssl/ejbws/HelloEjb.java b/appserver/tests/appserv-tests/devtests/security/wss/ssl/ejbws/HelloEjb.java
deleted file mode 100644
index 8d14ac3..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/ssl/ejbws/HelloEjb.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2006, 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
- */
-
-package com.sun.s1asdev.security.wss.ssl.ejbws;
-
-import jakarta.ejb.Stateless;
-import jakarta.jws.WebService;
-
-@Stateless
-@WebService(targetNamespace="http://ejbws.ssl.wss.security.s1asdev.sun.com", serviceName="WssSslEjbService")
-public class HelloEjb {
-    public String hello(String who) {
-        return "Hello, SSL " + who;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/ssl/servletws/HelloServlet.java b/appserver/tests/appserv-tests/devtests/security/wss/ssl/servletws/HelloServlet.java
deleted file mode 100644
index 57db6b6..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/ssl/servletws/HelloServlet.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2006, 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
- */
-
-package com.sun.s1asdev.security.wss.ssl.servletws;
-
-import jakarta.jws.WebService;
-
-@WebService(targetNamespace="http://servletws.ssl.wss.security.s1asdev.sun.com", serviceName="WssSslServletService")
-public class HelloServlet {
-    public String hello(String who) {
-        return "Hello, SSL " + who;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/build.properties b/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/build.properties
deleted file mode 100644
index 050c8b5..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/build.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--
-
-    Copyright (c) 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
-
--->
-
-
-<property name="module" value="security-wss-sslclientcert"/>
-<property name="appname" value="${module}"/>
-<property name="assemble" value="${build.classes.dir}/archive"/>
-<property name="test.client"
-        value="com.sun.s1asdev.security.wss.sslclientcert.client.Client"/>
-<property name="application.xml" value="descriptor/application.xml"/>
-<property name="sun-application.xml" value="descriptor/sun-application.xml"/>
-<property name="ejb-jar.xml" value="descriptor/ejb-jar.xml"/>
-<property name="sun-ejb-jar.xml" value="descriptor/sun-ejb-jar.xml"/>
-<property name="web.xml" value="descriptor/web.xml"/>
-<property name="application-client.xml"
-        value="descriptor/application-client.xml"/>
-<property name="sun-application-client.xml"
-        value="descriptor/sun-application-client.xml"/>
-<property name="appclientjar.files" value="${build.classes.dir}"/>
-<property name="appclient.jar" value="${assemble.dir}/${appname}-client.jar"/>
-<property name="app.type" value="application"/>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/build.xml b/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/build.xml
deleted file mode 100644
index 2a8260e..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/build.xml
+++ /dev/null
@@ -1,158 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE project [
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<!ENTITY commonSetup SYSTEM "file:./../../../../config/properties.xml">
-<!ENTITY commonBuild SYSTEM "file:./../../../../config/common.xml">
-<!ENTITY commonSecurity SYSTEM "file:../../common.xml">
-<!ENTITY testproperties SYSTEM "file:./build.properties">
-]>
-
-<project name="security-wss-sslclientcert" default="usage" basedir=".">
-
-    &commonSetup;
-    &commonBuild;
-    &testproperties;
-    &commonSecurity;
-
-    <target name="all" depends="clean, setup, build-deploy, run, undeploy, unsetup"/>
-
-    <target name="clean" depends="init-common">
-      <antcall target="clean-common"/>
-    </target>
-
-    <target name="setup" depends="init-common">
-        <!-- exports certdb stuff and imports into keystore -->
-        <antcall target="prepare-store-nickname-common">
-            <param name="cert.nickname" value="s1as"/>
-        </antcall>
-    </target>
-
-    <target name="unsetup" depends="init-common">
-    </target>
-
-    <target name="compile-server" depends="clean">
-        <antcall target="compile-common">
-            <param name="src" value="ejbws"/>
-            <param name="build.classes.dir" value="${build.classes.dir}/ejbws"/>
-        </antcall>
-        <antcall target="compile-common">
-            <param name="src" value="servletws"/>
-            <param name="build.classes.dir" value="${build.classes.dir}/servletws"/>
-        </antcall>
-    </target>
-
-    <target name="compile-client" depends="init-common, init-security-util">
-        <mkdir dir="${build.classes.dir}/client"/>
-        <antcall target="wsimport">
-            <param name="wsimport.VMARGS" value=" -Djavax.net.ssl.trustStore=${mytruststore.db.file} -Djavax.net.ssl.trustStorePassword=${ssl.password}"/>
-            <param name="wsimport.args"
-                value="-keep -d ${build.classes.dir}/client https://${s1asCN}:${https.port}/WssSslClientCertEjbService/HelloEjb?WSDL"/>
-        </antcall>
-        <antcall target="wsimport">
-            <param name="wsimport.VMARGS" value=" -Djavax.net.ssl.trustStore=${mytruststore.db.file} -Djavax.net.ssl.trustStorePassword=${ssl.password}"/>
-            <param name="wsimport.args"
-                value="-keep -d ${build.classes.dir}/client https://${s1asCN}:${https.port}/security-wss-sslclientcert/webservice/WssSslClientCertServletService/HelloServlet?WSDL"/>
-        </antcall>
-
-        <delete file="client/Client.java" failonerror="false"/>
-        <copy file="client/Client.java.template" tofile="client/Client.java"/>
-        <replace file="client/Client.java">
-            <replacefilter token="@HOST@" value="${s1asCN}"/>
-            <replacefilter token="@PORT@" value="${https.port}"/>
-        </replace>
-        <javac srcdir="client" destdir="${build.classes.dir}/client"
-            classpath="${env.APS_HOME}/lib/reporter.jar:${env.S1AS_HOME}/lib/j2ee.jar:${env.S1AS_HOME}/lib/webservices-rt.jar:${env.S1AS_HOME}/lib/webservices-tools.jar:${build.classes.dir}/client" debug="on" failonerror="true"/>
-    </target>
-
-    <target name="build-server" depends="compile-server, init-security-util">
-        <mkdir dir="${assemble.dir}"/>
-        <mkdir dir="${build.classes.dir}/META-INF"/>
-
-        <antcall target="package-ejbjar-common">
-            <param name="ejbjar.files" value="${build.classes.dir}/ejbws"/>
-            <param name="ejb.jar" value="${assemble.dir}/${appname}-ejb.jar"/>
-            <param name="ejbjar.classes" value="com/sun/**/*.class"/>
-        </antcall>
-
-        <antcall target="package-war-common">
-            <param name="war.classes" value="${build.classes.dir}/servletws"/>
-            <param name="war.file" value="${assemble.dir}/${appname}-web.war"/>
-        </antcall>
-
-        <copy file="descriptor/sun-application.xml.template" tofile="${build.classes.dir}/META-INF/sun-application.xml"/>
-        <replace file="${build.classes.dir}/META-INF/sun-application.xml">
-            <replacefilter token="@HOST@" value="${s1asCN}"/>
-        </replace>
-        <copy file="${application.xml}" tofile="${build.classes.dir}/META-INF/application.xml" failonerror="false"/>
-        <jar jarfile="${assemble.dir}/${appname}App.ear">
-            <fileset dir="${assemble.dir}">
-               <include name="*.jar"/>
-               <include name="*.war"/>
-            </fileset>
-            <fileset dir="${build.classes.dir}">
-               <include name="META-INF/application.xml"/>
-               <include name="META-INF/sun-application.xml"/>
-            </fileset>
-        </jar>
-    </target>
-
-    <target name="build-client" depends="compile-client">
-        <mkdir dir="${assemble.dir}"/>
-
-        <unjar src="${env.APS_HOME}/lib/reporter.jar" dest="${build.classes.dir}/client"/>
-        <antcall target="package-appclientjar-common">
-            <param name="appclientjar.files"
-                value="${build.classes.dir}/client"/>
-            <param name="appclient.jar"
-                value="${assemble.dir}/${appname}-client.jar"/>
-            <param name="appclientjar.classes"
-                value="com/sun/**/*.class"/>
-        </antcall>
-    </target>
-
-    <target name="build-deploy" depends="init-common">
-        <antcall target="build-server"/>
-        <antcall target="deploy-common"/>
-        <antcall target="build-client"/>
-        <antcall target="deploy-client-common"/>
-    </target>
-
-    <target name="run" depends="init-common">
-        <exec executable="${APPCLIENT}">
-        <env key="VMARGS" value=" -Djavax.net.ssl.trustStore=${mytruststore.db.file} -Djavax.net.ssl.trustStorePassword=${ssl.password} -Djavax.net.ssl.keyStore=${mykeystore.db.file} -Djavax.net.ssl.keyStorePassword=${ssl.password}"/>
-            <arg line="-client" />
-            <arg line="${assemble.dir}/${appname}-clientClient.jar"/>
-            <arg line="-texauth"/>
-            <arg line="-user" />
-            <arg line="dummy" />
-            <arg line="-password" />
-            <arg line="dummy" />
-        </exec>
-    </target>
-
-    <target name="undeploy" depends="init-common">
-        <antcall target="undeploy-common"/>
-        <antcall target="undeploy-client-common"/>
-    </target>
-
-    <target name="usage">
-        <antcall target="usage-common"/>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/client/Client.java.template b/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/client/Client.java.template
deleted file mode 100644
index 873fe6a..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/client/Client.java.template
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2006, 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
- */
-
-package com.sun.s1asdev.security.wss.sslclientcert.client;
-
-import jakarta.xml.ws.WebServiceRef;
-
-import com.sun.s1asdev.security.wss.sslclientcert.ejbws.HelloEjb;
-import com.sun.s1asdev.security.wss.sslclientcert.ejbws.WssSslClientCertEjbService;
-import com.sun.s1asdev.security.wss.sslclientcert.servletws.HelloServlet;
-import com.sun.s1asdev.security.wss.sslclientcert.servletws.WssSslClientCertServletService;
-
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-
-public class Client {
-    private static SimpleReporterAdapter stat =
-            new SimpleReporterAdapter("appserv-tests");
-    private static String testSuite = "Sec:WSS SSL Client Cert test ";
-
-    @WebServiceRef(wsdlLocation="https://@HOST@:@PORT@/WssSslClientCertEjbService/HelloEjb?WSDL")
-    private static WssSslClientCertEjbService ejbService;
-    @WebServiceRef(wsdlLocation="https://@HOST@:@PORT@/security-wss-sslclientcert/webservice/WssSslClientCertServletService/HelloServlet?WSDL")
-    private static WssSslClientCertServletService servletService;
-
-    public static void main(String[] args) {
-        stat.addDescription("security-wss-sslclientcert");
-        String description = null;
-        try {
-            // ejb ws
-            HelloEjb ejbPort = ejbService.getHelloEjbPort();
-            description = testSuite + " sslclientcert: ejb hello";
-            String ejbMsg = ejbPort.hello("Sun Ejb");
-            System.out.println(ejbMsg);
-            if (ejbMsg != null && ejbMsg.startsWith("Hello Ejb, CN=@HOST@")) {
-                stat.addStatus(description, stat.PASS);  
-            } else {
-                stat.addStatus(description, stat.FAIL);  
-            }
-
-            description = testSuite + " sslclientcert: ejb hello2";
-            String ejbMsg2 = ejbPort.hello2("Sun Ejb - 2");
-            System.out.println(ejbMsg2);
-            if (ejbMsg2 != null && ejbMsg2.startsWith("Hello Ejb 2, CN=@HOST@")) {
-                stat.addStatus(description, stat.PASS);  
-            } else {
-                stat.addStatus(description, stat.FAIL);  
-            }
-        } catch(Exception ex) {
-            ex.printStackTrace();
-            stat.addStatus(description, stat.FAIL);
-        }
-
-        try {
-            // servlet ws
-            HelloServlet servletPort = servletService.getHelloServletPort();
-            description = testSuite + " sslclientcert: servlet hello";
-            String servletMsg = servletPort.hello("Sun Servlet");
-            System.out.println(servletMsg);
-            if (servletMsg != null && servletMsg.startsWith("Hello Servlet, CN=@HOST@")) {
-                stat.addStatus(description, stat.PASS);  
-            } else {
-                stat.addStatus(description, stat.FAIL);  
-            }
-        } catch(Exception ex) {
-            ex.printStackTrace();
-            stat.addStatus(description, stat.FAIL);
-        }
-
-        stat.printSummary("security-wss-sslclientcert");
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/client/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/client/MANIFEST.MF
deleted file mode 100644
index 2f0095f..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/client/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Main-Class: com.sun.s1asdev.security.wss.sslclientcert.client.Client
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/descriptor/application.xml b/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/descriptor/application.xml
deleted file mode 100644
index 92757d8..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/descriptor/application.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" "http://java.sun.com/dtd/application_1_3.dtd">
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<application>
-  <display-name>security-wss-sslclientcertApp</display-name>
-  <module>
-    <ejb>security-wss-sslclientcert-ejb.jar</ejb>
-  </module>
-  <module>
-    <web>
-      <web-uri>security-wss-sslclientcert-web.war</web-uri>
-      <context-root>security-wss-sslclientcert</context-root>
-    </web>
-  </module>
-</application>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/descriptor/sun-application.xml.template b/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/descriptor/sun-application.xml.template
deleted file mode 100644
index 64a3d8c..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/descriptor/sun-application.xml.template
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<sun-application>
-  <security-role-mapping>
-    <role-name>SECUSER</role-name>
-    <principal-name>CN=@HOST@, OU=GlassFish, O=Sun Microsystems, L=Santa Clara, ST=California, C=US</principal-name>
-  </security-role-mapping>
-</sun-application>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/descriptor/sun-ejb-jar.xml b/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/descriptor/sun-ejb-jar.xml
deleted file mode 100644
index 4d7852d..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/descriptor/sun-ejb-jar.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 EJB 2.1//EN' 'http://www.sun.com/software/sunone/appserver/dtds/sun-ejb-jar_2_1-0.dtd'>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<sun-ejb-jar>
-  <enterprise-beans>
-    <ejb>
-      <ejb-name>HelloEjb</ejb-name>
-      <webservice-endpoint>
-        <port-component-name>HelloEjb</port-component-name>
-        <login-config>
-          <auth-method>CLIENT-CERT</auth-method>
-        </login-config>
-        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
-      </webservice-endpoint>
-    </ejb>
-   </enterprise-beans>
-</sun-ejb-jar>
-
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/descriptor/web.xml b/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/descriptor/web.xml
deleted file mode 100644
index fc44e33..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/descriptor/web.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Copyright (c) 2017, 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
-
--->
-
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-  xmlns:j2ee="http://java.sun.com/xml/ns/javaee"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
-  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
-      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-
-  <description>SSL WebTier for the Hello Service</description>
-  <display-name>HelloWAR</display-name>
-  <servlet>
-    <description>Endpoint for Hello Web Service</description>
-    <display-name>HelloWebService</display-name>
-    <servlet-name>HelloServlet</servlet-name>
-    <servlet-class>com.sun.s1asdev.security.wss.sslclientcert.servletws.HelloServlet</servlet-class>
-    <load-on-startup>0</load-on-startup>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>HelloServlet</servlet-name>
-    <url-pattern>/webservice/WssSslClientCertServletService/HelloServlet</url-pattern>
-  </servlet-mapping>
-  <session-config>
-    <session-timeout>54</session-timeout>
-  </session-config>
-  <security-constraint>
-    <web-resource-collection>
-      <web-resource-name>Protected Area</web-resource-name>
-      <url-pattern>/webservice/WssSslClientCertServletService/HelloServlet</url-pattern>
-      <http-method>POST</http-method>
-    </web-resource-collection>
-    <auth-constraint>
-      <role-name>SECUSER</role-name>
-    </auth-constraint>
-    <user-data-constraint>
-      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
-    </user-data-constraint>
-  </security-constraint>
-  <login-config>
-    <auth-method>CLIENT-CERT</auth-method>
-  </login-config>
-  <security-role>
-    <role-name>SECUSER</role-name>
-  </security-role>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/ejbws/HelloEjb.java b/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/ejbws/HelloEjb.java
deleted file mode 100644
index 838e372..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/ejbws/HelloEjb.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2006, 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
- */
-
-package com.sun.s1asdev.security.wss.sslclientcert.ejbws;
-
-import jakarta.annotation.Resource;
-import jakarta.ejb.SessionContext;
-import jakarta.ejb.Stateless;
-import jakarta.jws.WebService;
-import jakarta.xml.ws.WebServiceContext;
-
-@Stateless
-@WebService(targetNamespace="http://ejbws.sslclientcert.wss.security.s1asdev.sun.com", serviceName="WssSslClientCertEjbService")
-public class HelloEjb {
-    @Resource private SessionContext sc;
-    @Resource WebServiceContext wsc;
-
-    public String hello(String msg) {
-        return "Hello Ejb, " + sc.getCallerPrincipal() + ": " + msg ;
-    }
-
-    public String hello2(String msg) {
-        return "Hello Ejb 2, " + wsc.getUserPrincipal() + ": " + msg ;
-    }
-}
diff --git a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/servletws/HelloServlet.java b/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/servletws/HelloServlet.java
deleted file mode 100644
index c5ab01a..0000000
--- a/appserver/tests/appserv-tests/devtests/security/wss/sslclientcert/servletws/HelloServlet.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2006, 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
- */
-
-package com.sun.s1asdev.security.wss.sslclientcert.servletws;
-
-import jakarta.annotation.Resource;
-import jakarta.jws.WebService;
-import jakarta.xml.ws.WebServiceContext;
-
-@WebService(targetNamespace="http://servletws.sslclientcert.wss.security.s1asdev.sun.com", serviceName="WssSslClientCertServletService")
-public class HelloServlet {
-    @Resource WebServiceContext wsc;
-
-    public String hello(String msg) {
-        return "Hello Servlet, " + wsc.getUserPrincipal() + ": " + msg;
-    }
-}
