diff --git a/appserver/tests/appserv-tests/devtests/ejb/run_test.sh b/appserver/tests/appserv-tests/devtests/ejb/run_test.sh
index af86eeb..07dc1a4 100755
--- a/appserver/tests/appserv-tests/devtests/ejb/run_test.sh
+++ b/appserver/tests/appserv-tests/devtests/ejb/run_test.sh
@@ -98,19 +98,19 @@
         rm -rf $S1AS_HOME/domains/domain1
 
         export ADMIN_PORT=45707 \
-                                 JMS_PORT=45708 \
-                                 JMX_PORT=45709 \
-                                 ORB_PORT=45710 \
-                                 SSL_PORT=45711 \
-                                 INSTANCE_PORT=45712 \
-                                 INSTANCE_HTTPS_PORT=45718 \
-                                 INSTANCE_PORT_2=45719 \
-                                 INSTANCE_PORT_3=45720 \
-                                 ALTERNATE_PORT=45713 \
-                                 ORB_SSL_PORT=45714 \
-                                 ORB_SSL_MUTUALAUTH_PORT=45715 \
-                                 DB_PORT=45716 \
-                                 DB_PORT_2=45717
+               JMS_PORT=45708 \
+               JMX_PORT=45709 \
+               ORB_PORT=45710 \
+               SSL_PORT=45711 \
+               INSTANCE_PORT=45712 \
+               INSTANCE_HTTPS_PORT=45718 \
+               INSTANCE_PORT_2=45719 \
+               INSTANCE_PORT_3=45720 \
+               ALTERNATE_PORT=45713 \
+               ORB_SSL_PORT=45714 \
+               ORB_SSL_MUTUALAUTH_PORT=45715 \
+               DB_PORT=45716 \
+               DB_PORT_2=45717
         env
 
         cd ${APS_HOME}
@@ -182,20 +182,20 @@
         rm -rf ${S1AS_HOME}/domains/domain1
 
         export ADMIN_PORT=45707 \
-                                 JMS_PORT=45708 \
-                                 JMX_PORT=45709 \
-                                 ORB_PORT=45710 \
-                                 SSL_PORT=45711 \
-                                 INSTANCE_PORT=45712 \
-                                 INSTANCE_HTTP_PORT=45721 \
-                                 INSTANCE_HTTPS_PORT=45718 \
-                                 INSTANCE_PORT_2=45719 \
-                                 INSTANCE_PORT_3=45720 \
-                                 ALTERNATE_PORT=45713 \
-                                 ORB_SSL_PORT=45714 \
-                                 ORB_SSL_MUTUALAUTH_PORT=45715 \
-                                 DB_PORT=45716 \
-                                 DB_PORT_2=45717
+               JMS_PORT=45708 \
+               JMX_PORT=45709 \
+               ORB_PORT=45710 \
+               SSL_PORT=45711 \
+               INSTANCE_PORT=45712 \
+               INSTANCE_HTTP_PORT=45721 \
+               INSTANCE_HTTPS_PORT=45718 \
+               INSTANCE_PORT_2=45719 \
+               INSTANCE_PORT_3=45720 \
+               ALTERNATE_PORT=45713 \
+               ORB_SSL_PORT=45714 \
+               ORB_SSL_MUTUALAUTH_PORT=45715 \
+               DB_PORT=45716 \
+               DB_PORT_2=45717
         env
 
         cd ${APS_HOME}
@@ -278,32 +278,32 @@
 
 
 run_test_id(){
-        if [[ ${1} = "ejb_web_all" ]]; then
-                unzip_test_resources ${WORKSPACE}/bundles/web.zip
-        else
-                unzip_test_resources ${WORKSPACE}/bundles/glassfish.zip
-        fi
-        dname=`pwd`
-        cd `dirname ${0}`
-        test_init
-        get_test_target ${1}
-        if [[ ${1} = "ejb_all" || ${1} = "ejb_group"* ]]; then
-                test_run_ejb
-        elif [[ ${1} = "ejb_timer_cluster_all" ]]; then
-                test_run_ejb_timer_cluster
-        elif [[ ${1} = "ejb_web_all" ]]; then
-                test_run_ejb_web
-        else
-                echo "Invalid Test ID"
-                exit 1
-        fi
-        check_successful_run
+  if [[ ${1} = "ejb_web_all" ]]; then
+          unzip_test_resources ${WORKSPACE}/bundles/web.zip
+  else
+          unzip_test_resources ${WORKSPACE}/bundles/glassfish.zip
+  fi
+  dname=`pwd`
+  cd `dirname ${0}`
+  test_init
+  get_test_target ${1}
+  if [[ ${1} = "ejb_all" || ${1} = "ejb_group"* ]]; then
+          test_run_ejb
+  elif [[ ${1} = "ejb_timer_cluster_all" ]]; then
+          test_run_ejb_timer_cluster
+  elif [[ ${1} = "ejb_web_all" ]]; then
+          test_run_ejb_web
+  else
+          echo "Invalid Test ID"
+          exit 1
+  fi
+  check_successful_run
   generate_junit_report ${1}
   change_junit_report_class_names
 }
 
 list_test_ids(){
-        echo ejb_all ejb_timer_cluster_all ejb_web_all ejb_group_1 ejb_group_2 ejb_group_3 ejb_group_embedded
+  echo ejb_all ejb_timer_cluster_all ejb_web_all ejb_group_1 ejb_group_2 ejb_group_3 ejb_group_embedded
 }
 
 OPT=${1}
diff --git a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/build.xml b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/build.xml
index cede30f..49fc0c0 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/build.xml
+++ b/appserver/tests/appserv-tests/devtests/ejb/sfsb/stress/build.xml
@@ -91,7 +91,7 @@
 
     <target name="runloadgenerator">
        <java  fork="true" failonerror="true"
-              classpath="${env.S1AS_HOME}/lib/j2ee.jar:${env.S1AS_HOME}/lib/appserv-rt.jar:${build.classes.dir}:${assemble.dir}/ejb-sfsb-stressAppClient.jar:${env.APS_HOME}/lib/reporter.jar"
+              classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/lib/appserv-rt.jar:${build.classes.dir}:${assemble.dir}/ejb-sfsb-stressAppClient.jar:${env.APS_HOME}/lib/reporter.jar"
            classname="${loadgenerator.client}">
            <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${orb.port}"/>
            <arg value="ejb/ejb_sfsb_stress_StressSFSBHome"/>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/stubs/standaloneclient/build.xml b/appserver/tests/appserv-tests/devtests/ejb/stubs/standaloneclient/build.xml
index 0da9b7b..cbdcbc9 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/stubs/standaloneclient/build.xml
+++ b/appserver/tests/appserv-tests/devtests/ejb/stubs/standaloneclient/build.xml
@@ -48,7 +48,7 @@
     <target name="runclient_nooverride" depends="init-common">
        <java  fork="on"
               failonerror="true"
-              classpath="${env.S1AS_HOME}/lib/j2ee.jar:${env.S1AS_HOME}/lib/gf-client.jar:${build.classes.dir}:${assemble.dir}/ejb-stubs-ejbappAppClient/ejb-stubs-ejbapp-clientClient.jar:${env.APS_HOME}/lib/reporter.jar"
+              classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/lib/gf-client.jar:${build.classes.dir}:${assemble.dir}/ejb-stubs-ejbappAppClient/ejb-stubs-ejbapp-clientClient.jar:${env.APS_HOME}/lib/reporter.jar"
            classname="${simple.client}">
            <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${orb.port}"/>
            <jvmarg value="-Dorg.glassfish.gmbal.no.multipleUpperBoundsException=true" />
@@ -65,7 +65,7 @@
     <target name="runclient_setnothing" depends="init-common">
        <java  fork="on"
               failonerror="true"
-              classpath="${env.S1AS_HOME}/lib/j2ee.jar:${env.S1AS_HOME}/lib/gf-client.jar:${build.classes.dir}:${assemble.dir}/ejb-stubs-ejbappAppClient.jar:${env.APS_HOME}/lib/reporter.jar"
+              classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/lib/gf-client.jar:${build.classes.dir}:${assemble.dir}/ejb-stubs-ejbappAppClient.jar:${env.APS_HOME}/lib/reporter.jar"
               classname="${simple.client}">
            <arg value="ejb/ejb_stubs_ejbapp_HelloBean"/>
         </java>
@@ -96,7 +96,7 @@
     <target name="runclient_withoverride" depends="init-common">
        <java  fork="on"
               failonerror="true"
-              classpath="${env.S1AS_HOME}/lib/j2ee.jar:${env.S1AS_HOME}/lib/gf-client.jar:${build.classes.dir}:${assemble.dir}/ejb-stubs-ejbappAppClient.jar:${env.APS_HOME}/lib/reporter.jar"
+              classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/lib/gf-client.jar:${build.classes.dir}:${assemble.dir}/ejb-stubs-ejbappAppClient.jar:${env.APS_HOME}/lib/reporter.jar"
            classname="${simple.client}">
             <jvmarg value="-Dorg.omg.CORBA.ORBInitialPort=${orb.port}"/>
              <jvmarg
diff --git a/appserver/tests/appserv-tests/devtests/ejb/stubs/webclient/descriptor/sun-web.xml b/appserver/tests/appserv-tests/devtests/ejb/stubs/webclient/descriptor/sun-web.xml
index 1b48633..c066213 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/stubs/webclient/descriptor/sun-web.xml
+++ b/appserver/tests/appserv-tests/devtests/ejb/stubs/webclient/descriptor/sun-web.xml
@@ -26,12 +26,6 @@
      <ejb-ref-name>ejb/hello</ejb-ref-name>
      <jndi-name>ejb/ejb_stubs_ejbapp_HelloBean</jndi-name>
   </ejb-ref>
-<!--
-  <ejb-ref>
-     <ejb-ref-name>ejb/dummymejb</ejb-ref-name>
-     <jndi-name>ejb/ejb_stubs_ejbapp_DummyMEJBBean</jndi-name>
-  </ejb-ref>
--->
   <class-loader delegate="true"/>
   <jsp-config/>
 </sun-web-app>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/stubs/webclient/servlet/Servlet.java b/appserver/tests/appserv-tests/devtests/ejb/stubs/webclient/servlet/Servlet.java
index ce6e779..9059386 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/stubs/webclient/servlet/Servlet.java
+++ b/appserver/tests/appserv-tests/devtests/ejb/stubs/webclient/servlet/Servlet.java
@@ -43,22 +43,7 @@
 
             InitialContext ic = new InitialContext();
 
-            System.out.println("Skipping mejb test for now.  NEED TO REENABLE");
-            //            System.out.println("Calling DummyMEJBBean");
-
-            /* TODO reenable once javax.management classes are available
-            Object objref = ic.lookup("java:comp/env/ejb/dummymejb");
-            ManagementHome mHome = (ManagementHome)
-                PortableRemoteObject.narrow(objref, ManagementHome.class);
-            Management dummyMejb = mHome.create();
-
-            System.out.println("Invoking dummy mejb to force context class loader test.");
-            dummyMejb.getMBeanCount();
-            System.out.println("dummy mejb test successful");
-
-            */
-
-           System.out.println("Looking up ejb ref ");
+            System.out.println("Looking up ejb ref ");
             // create EJB using factory from container
             Object objref2 = ic.lookup("java:comp/env/ejb/hello");
             System.out.println("objref = " + objref2);
diff --git a/appserver/tests/appserv-tests/devtests/ejb/util/methodmap/build.xml b/appserver/tests/appserv-tests/devtests/ejb/util/methodmap/build.xml
index c426b9f..aab0dc2 100644
--- a/appserver/tests/appserv-tests/devtests/ejb/util/methodmap/build.xml
+++ b/appserver/tests/appserv-tests/devtests/ejb/util/methodmap/build.xml
@@ -48,7 +48,7 @@
   <target name="runclient" depends="init-common">
     <java  fork="on"
           failonerror="true"
-          classpath="${env.S1AS_HOME}/lib/j2ee.jar:${env.S1AS_HOME}/lib/appserv-rt.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar"
+          classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/lib/appserv-rt.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar"
           classname="${simple.client}">
     </java>
   </target>
@@ -57,7 +57,7 @@
   <target name="perf" depends="init-common">
     <java  fork="on"
           failonerror="true"
-          classpath="${env.S1AS_HOME}/lib/j2ee.jar:${env.S1AS_HOME}/lib/appserv-rt.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar"
+          classpath="${env.S1AS_HOME}/lib/javaee.jar:${env.S1AS_HOME}/lib/appserv-rt.jar:${build.classes.dir}:${env.APS_HOME}/lib/reporter.jar"
           classname="${perf.client}">
       <arg value="javax.xml.rpc.Service"/>
       <arg value="100000"/>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/build.properties b/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/build.properties
deleted file mode 100644
index d590a1d..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/build.properties
+++ /dev/null
@@ -1,31 +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="ejb-webservice-commit"/>
-<property name="client_pkgname" value="com.sun.s1asdev.ejb.webservice.commit.client"/>
-<property name="appname" value="${module}"/>
-<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/ejb/webservice/commit/build.xml b/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/build.xml
deleted file mode 100644
index 7b4f97a..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/build.xml
+++ /dev/null
@@ -1,115 +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 "../../../../config/properties.xml">
-<!ENTITY commonBuild SYSTEM "../../../../config/common.xml">
-<!ENTITY testproperties SYSTEM "build.properties">
-<!ENTITY run SYSTEM "../../../../config/run.xml">
-]>
-
-<project name="mix" default="usage" basedir=".">
-
-    &commonSetup;
-    &commonBuild;
-    &testproperties;
-    &run;
-
-    <target name="all" depends="build,create_table,deploy,run,undeploy,delete_table"/>
-
-
-    <target name="clean" depends="init-common">
-      <antcall  target="clean-common"/>
-    </target>
-
-    <target name="compile" depends="clean">
-      <antcall target="compile-common">
-        <param name="src" value="ejb"/>
-      </antcall>
-    </target>
-
-    <target name="build" depends="compile">
-      <antcall target="ejb-jar-common">
-        <param name="ejbjar.classes"
-          value="**/Commit*.class" />
-      </antcall>
-    </target>
-
-    <target name="create_table" depends="init-common">
-      <antcall target="execute-ejb-sql-common">
-        <param name="sql.file" value="sql/create_pointbase.sql"/>
-      </antcall>
-    </target>
-
-    <target name="deploy" depends="init-common">
-      <antcall target="deploy-jar-common"/>
-      <antcall target="wsdl-import"/>
-      <antcall target="compile-common">
-        <param name="src" value="client"/>
-      </antcall>
-      <antcall target="appclient-jar-common">
-         <param name="appclientjar.classes"
-              value="com/sun/s1asdev/ejb/webservice/commit/client/*.class"/>
-      </antcall>
-      <jar jarfile="${assemble.dir}/${appname}-client.jar" update="yes">
-            <zipfileset src="${env.APS_HOME}/lib/reporter.jar"
-                        excludes="META-INF/**"/>
-        </jar>
-      <antcall target="deploy-client-common"/>
-    </target>
-
-
-    <target name="wsdl-import">
-      <antcall target="configurable-wsdl-import">
-        <param name="host-name" value="${http.host}"/>
-        <param name="host-port" value="${http.port}"/>
-        <param name="protocol" value="http"/>
-      </antcall>
-    </target>
-
-    <target name="configurable-wsdl-import">
-      <echo message="wsimporting ${protocol}://${host-name}:${host-port}/${server}
-       Service/${port}?WSDL; special args are ${wsimport-special-args}"/>
-      <exec executable="${env.S1AS_HOME}/bin/wsimport">
-        <arg line="-keep -p ${client_pkgname} -d ${env.APS_HOME}/build/module/classes ${protocol}://${host-name}:${host-port}/CommitBeanService/CommitBean?WSDL"/>
-      </exec>
-    </target>
-
-   <target name="run" depends="init-common">
-     <exec executable="${env.S1AS_HOME}/bin/appclient" dir="${env.APS_HOME}/build/module/archive">
-        <arg line="-client ${module}-clientClient.jar"/>
-      </exec>
-    </target>
-
-    <target name="undeploy" depends="init-common">
-      <antcall target="undeploy-jar-common"/>
-      <antcall target="undeploy-client-common"/>
-    </target>
-
-    <target name="delete_table" depends="init-common">
-      <antcall target="execute-ejb-sql-common">
-        <param name="sql.file" value="sql/drop_pointbase.sql"/>
-      </antcall>
-    </target>
-
-    <target name="usage">
-        <antcall target="usage-common"/>
-    </target>
-
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/client/Client.java b/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/client/Client.java
deleted file mode 100644
index e841e97..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/client/Client.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 com.sun.s1asdev.ejb.webservice.commit.client;
-
-import jakarta.xml.ws.WebServiceRef;
-
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-
-public class Client {
-
-    private static SimpleReporterAdapter stat =
-        new SimpleReporterAdapter("appserv-tests");
-    private static final String TEST_ID = "ejb-webservices-commit";
-
-    @WebServiceRef(wsdlLocation="http://localhost:8080/CommitBeanService/CommitBean?WSDL")
-    private static CommitBeanService service;
-
-    public static void main(String[] args) {
-        stat.addDescription(TEST_ID);
-        Client client = new Client();
-        client.doTest(args);
-        stat.printSummary(TEST_ID);
-    }
-
-    public void doTest(String[] args) {
-        try {
-            CommitBean port = service.getCommitBeanPort();
-
-            try {
-                // now do another create that should fail at commit
-                // time and return an error.
-                port.updateCustomer();
-                System.out.println("call to updateCustomer() should" +
-                                   " have failed.");
-                stat.addStatus(TEST_ID, stat.FAIL);
-            } catch(FinderException_Exception e) {
-                System.out.println("incorrectly received Application exception"
-                                   + " instead of system exception");
-                stat.addStatus(TEST_ID, stat.FAIL);
-            } catch(Throwable e) {
-                System.out.println("Successfully received " + e +
-                                   "for commit failure");
-                stat.addStatus(TEST_ID, stat.PASS);
-            }
-
-        } catch(Exception e) {
-            e.printStackTrace();
-            stat.addStatus(TEST_ID, stat.FAIL);
-        }
-    }
-}
-
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/client/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/client/MANIFEST.MF
deleted file mode 100644
index 81485c3..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/client/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Main-Class: com.sun.s1asdev.ejb.webservice.commit.client.Client
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/ejb/CommitBean.java b/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/ejb/CommitBean.java
deleted file mode 100644
index ef6ecae..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/ejb/CommitBean.java
+++ /dev/null
@@ -1,103 +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.ejb.webservice.commit;
-
-import jakarta.ejb.*;
-import jakarta.annotation.Resource;
-import jakarta.jws.WebService;
-import javax.sql.*;
-import java.util.*;
-import java.sql.*;
-
-@Stateless
-@WebService
-@EJB(name="csb", beanInterface=CommitStatefulLocal.class)
-public class CommitBean {
-
-    @Resource(mappedName="jdbc/__default")
-    private DataSource ds;
-
-    @Resource
-    private SessionContext sessionCtx;
-
-    public int findCustomer(int i) throws FinderException {
-        Connection c = null;
-             PreparedStatement ps = null;
-        int returnValue = -1;
-        try {
-            c = ds.getConnection();
-                 ps = c.prepareStatement(
-                "SELECT c_id from O_customer where c_id = ?");
-            ps.setInt(1, i);
-            ResultSet rs = ps.executeQuery();
-            if (!rs.next())
-               throw new FinderException("No cust for " + i);
-            returnValue = rs.getInt(1);
-            System.out.println("findCustomer = " + returnValue);
-        } catch (SQLException e)  {
-            e.printStackTrace();
-            throw new FinderException("SQL exception " + e);
-        } finally {
-            try {
-                if (ps != null)
-                    ps.close();
-                if (c != null)
-                    c.close();
-            } catch (Exception e) {}
-        }
-
-        return returnValue;
-    }
-
-    public void updateCustomer() throws FinderException {
-
-        System.out.println( "In updateCustomer caller" );
-
-        Connection c = null;
-             PreparedStatement ps = null;
-        try {
-            c = ds.getConnection();
-                 ps = c.prepareStatement(
-                "UPDATE O_customer SET c_phone = ? WHERE c_id = 2 AND c_phone = 'foo'");
-            ps.setString(1, "webservice");
-            int result = ps.executeUpdate();
-            System.out.println("execute update returned " + result);
-        } catch (SQLException e)  {
-            e.printStackTrace();
-            throw new FinderException("SQL exception " + e);
-        } finally {
-            try {
-                if (ps != null)
-                    ps.close();
-                if (c != null)
-                    c.close();
-            } catch (Exception e) {}
-        }
-
-        System.out.println("Adding CommitStatefulBean with SessionSynch " +
-                           " to transaction");
-
-
-        CommitStatefulLocal csb = (CommitStatefulLocal)
-            sessionCtx.lookup("csb");
-        csb.foo();
-
-        return;
-
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/ejb/CommitStatefulBean.java b/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/ejb/CommitStatefulBean.java
deleted file mode 100644
index ae72c11..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/ejb/CommitStatefulBean.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 com.sun.s1asdev.ejb.webservice.commit;
-
-import jakarta.ejb.*;
-import jakarta.annotation.Resource;
-
-@Stateful
-public class CommitStatefulBean
-    implements CommitStatefulLocal, SessionSynchronization {
-
-
-    @Resource SessionContext sessionCtx;
-
-    public void foo() {
-        System.out.println("In CommitStatefulBean::foo");
-    }
-
-     public void afterBegin() {
-        System.out.println("In CommitStatefulBean::afterBegin()");
-    }
-
-    public void beforeCompletion() {
-        System.out.println("In CommitStatefulBean::beforeCompletion() " +
-                           "marking tx for rollback");
-        sessionCtx.setRollbackOnly();
-    }
-
-    public void afterCompletion(boolean committed) {
-        System.out.println("In CommitStatefulBean::afterCompletion()");
-    }
-
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/ejb/CommitStatefulLocal.java b/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/ejb/CommitStatefulLocal.java
deleted file mode 100644
index b132f74..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/ejb/CommitStatefulLocal.java
+++ /dev/null
@@ -1,23 +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.ejb.webservice.commit;
-
-public interface CommitStatefulLocal {
-
-    public void foo();
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/sql/create_pointbase.sql b/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/sql/create_pointbase.sql
deleted file mode 100644
index b0a3497..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/sql/create_pointbase.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-Drop table O_Customer;
-
-CREATE TABLE O_Customer (
-    c_id            integer NOT NULL PRIMARY KEY,
-    c_phone         char(32)
-);
-
-INSERT INTO O_Customer values (2, 'foo');
\ No newline at end of file
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/sql/drop_pointbase.sql b/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/sql/drop_pointbase.sql
deleted file mode 100644
index d854b95..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/commit/sql/drop_pointbase.sql
+++ /dev/null
@@ -1 +0,0 @@
-Drop table O_Customer;
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/GoogleSearch.wsdl b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/GoogleSearch.wsdl
deleted file mode 100644
index b618634..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/GoogleSearch.wsdl
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.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
-
--->
-
-<!-- WSDL description of the Google Web APIs.
-     The Google Web APIs are in beta release. All interfaces are subject to
-     change as we refine and extend our APIs. Please see the terms of use
-     for more information. -->
-
-<definitions name="urn:GoogleSearch"
-             targetNamespace="urn:GoogleSearch"
-             xmlns:typens="urn:GoogleSearch"
-             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-             xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
-             xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
-             xmlns="http://schemas.xmlsoap.org/wsdl/">
-
-  <!-- Types for search - result elements, directory categories -->
-  <import namespace="urn:GoogleSearch" location="GoogleSearch_types.wsdl"/>
-
-  <!-- Binding for Google Web APIs - RPC, SOAP over HTTP -->
-
-  <binding name="GoogleSearchBinding" type="typens:GoogleSearchPort">
-    <soap:binding style="rpc"
-                  transport="http://schemas.xmlsoap.org/soap/http"/>
-
-    <operation name="doGetCachedPage">
-      <soap:operation soapAction="urn:GoogleSearchAction"/>
-      <input>
-        <soap:body use="encoded"
-                   namespace="urn:GoogleSearch"
-                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
-      </input>
-      <output>
-        <soap:body use="encoded"
-                   namespace="urn:GoogleSearch"
-                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
-      </output>
-    </operation>
-
-    <operation name="doSpellingSuggestion">
-      <soap:operation soapAction="urn:GoogleSearchAction"/>
-      <input>
-        <soap:body use="encoded"
-                   namespace="urn:GoogleSearch"
-                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
-      </input>
-      <output>
-        <soap:body use="encoded"
-                   namespace="urn:GoogleSearch"
-                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
-      </output>
-    </operation>
-
-    <operation name="doGoogleSearch">
-      <soap:operation soapAction="urn:GoogleSearchAction"/>
-      <input>
-        <soap:body use="encoded"
-                   namespace="urn:GoogleSearch"
-                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
-      </input>
-      <output>
-        <soap:body use="encoded"
-                   namespace="urn:GoogleSearch"
-                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
-      </output>
-    </operation>
-
-    <operation name="helloOneWay">
-      <soap:operation soapAction="urn:GoogleSearchAction"/>
-      <input>
-        <soap:body use="encoded"
-                   namespace="urn:GoogleSearch"
-                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
-      </input>
-      
-    </operation>
-
-  </binding>
-
-  <!-- Endpoint for Google Web APIs -->
-  <service name="GoogleSearchService">
-    <port name="GoogleSearchPort" binding="typens:GoogleSearchBinding">
-      <soap:address location="http://api.google.com/search/beta2"/>
-    </port>
-  </service>
-
-</definitions>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/GoogleSearch_partial.wsdl b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/GoogleSearch_partial.wsdl
deleted file mode 100644
index 845af9e..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/GoogleSearch_partial.wsdl
+++ /dev/null
@@ -1,223 +0,0 @@
-<?xml version="1.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
-
--->
-
-<!-- WSDL description of the Google Web APIs.
-     The Google Web APIs are in beta release. All interfaces are subject to
-     change as we refine and extend our APIs. Please see the terms of use
-     for more information. -->
-
-<definitions name="urn:GoogleSearch"
-             targetNamespace="urn:GoogleSearch"
-             xmlns:typens="urn:GoogleSearch"
-             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-             xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
-             xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
-             xmlns="http://schemas.xmlsoap.org/wsdl/">
-
-  <!-- Types for search - result elements, directory categories -->
-
-  <types>
-    <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" 
-                targetNamespace="urn:GoogleSearch">
-            
-      <xsd:complexType name="GoogleSearchResult">
-        <xsd:all>
-          <xsd:element name="documentFiltering"           type="xsd:boolean"/>
-          <xsd:element name="searchComments"              type="xsd:string"/>
-          <xsd:element name="estimatedTotalResultsCount"  type="xsd:int"/>
-          <xsd:element name="estimateIsExact"             type="xsd:boolean"/>
-          <xsd:element name="resultElements"              type="typens:ResultElementArray"/>
-          <xsd:element name="searchQuery"                 type="xsd:string"/>
-          <xsd:element name="startIndex"                  type="xsd:int"/>
-          <xsd:element name="endIndex"                    type="xsd:int"/>
-          <xsd:element name="searchTips"                  type="xsd:string"/>
-          <xsd:element name="directoryCategories"         type="typens:DirectoryCategoryArray"/>
-          <xsd:element name="searchTime"                  type="xsd:double"/>
-        </xsd:all>
-      </xsd:complexType>
-
-      <xsd:complexType name="ResultElement">
-        <xsd:all>
-          <xsd:element name="summary" type="xsd:string"/>
-          <xsd:element name="URL" type="xsd:string"/>
-          <xsd:element name="snippet" type="xsd:string"/>
-          <xsd:element name="title" type="xsd:string"/>
-          <xsd:element name="cachedSize" type="xsd:string"/>
-          <xsd:element name="relatedInformationPresent" type="xsd:boolean"/>
-          <xsd:element name="hostName" type="xsd:string"/>
-          <xsd:element name="directoryCategory" type="typens:DirectoryCategory"/>
-          <xsd:element name="directoryTitle" type="xsd:string"/>
-        </xsd:all>
-      </xsd:complexType>
-  
-      <xsd:complexType name="ResultElementArray">
-        <xsd:complexContent>
-          <xsd:restriction base="soapenc:Array">
-             <xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="typens:ResultElement[]"/>
-          </xsd:restriction>
-        </xsd:complexContent>
-      </xsd:complexType>
-
-      <xsd:complexType name="DirectoryCategoryArray">
-        <xsd:complexContent>
-          <xsd:restriction base="soapenc:Array">
-             <xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="typens:DirectoryCategory[]"/>
-          </xsd:restriction>
-        </xsd:complexContent>
-      </xsd:complexType>
-
-      <xsd:complexType name="DirectoryCategory">
-        <xsd:all>
-          <xsd:element name="fullViewableName" type="xsd:string"/>
-          <xsd:element name="specialEncoding" type="xsd:string"/>
-        </xsd:all>
-      </xsd:complexType>
-
-    </xsd:schema>
-  </types> 
-
-  <!-- Messages for Google Web APIs - cached page, search, spelling. -->
-             
-  <message name="doGetCachedPage">
-    <part name="key"            type="xsd:string"/>
-    <part name="url"            type="xsd:string"/>
-  </message>
-
-  <message name="doGetCachedPageResponse">
-    <part name="return"         type="xsd:base64Binary"/>
-  </message>
-
-  <message name="doSpellingSuggestion">
-    <part name="key"            type="xsd:string"/>
-    <part name="phrase"         type="xsd:string"/>
-  </message>
-
-  <message name="doSpellingSuggestionResponse">
-    <part name="return"         type="xsd:string"/>
-  </message>
-
-  <message name="doGoogleSearch">
-    <part name="key"            type="xsd:string"/>
-    <part name="q"              type="xsd:string"/>
-    <part name="start"          type="xsd:int"/>
-    <part name="maxResults"     type="xsd:int"/>
-    <part name="filter"         type="xsd:boolean"/>
-    <part name="restrict"       type="xsd:string"/>
-    <part name="safeSearch"     type="xsd:boolean"/>
-    <part name="lr"             type="xsd:string"/>
-    <part name="ie"             type="xsd:string"/>
-    <part name="oe"             type="xsd:string"/>
-  </message>
-
-  <message name="doGoogleSearchResponse">
-    <part name="return"         type="typens:GoogleSearchResult"/>           
-  </message>
-
-  <message name="helloOneWay">
-    <part name="string" type="xsd:string"/>
-  </message>
-  <message name="helloOneWayResponse"/>
-
-  <!-- Port for Google Web APIs, "GoogleSearch" -->
-
-  <portType name="GoogleSearchPort">
-
-    <operation name="doGetCachedPage">
-      <input message="typens:doGetCachedPage"/>
-      <output message="typens:doGetCachedPageResponse"/>
-    </operation>
-
-    <operation name="doSpellingSuggestion">
-      <input message="typens:doSpellingSuggestion"/>
-      <output message="typens:doSpellingSuggestionResponse"/>
-    </operation>
-
-    <operation name="doGoogleSearch">
-      <input message="typens:doGoogleSearch"/>
-      <output message="typens:doGoogleSearchResponse"/>
-    </operation>
-
-    <operation name="helloOneWay">
-      <input message="typens:helloOneWay"/>
-    </operation>
-
-  </portType>
-
-
-  <!-- Binding for Google Web APIs - RPC, SOAP over HTTP -->
-
-  <binding name="GoogleSearchBinding" type="typens:GoogleSearchPort">
-    <soap:binding style="rpc"
-                  transport="http://schemas.xmlsoap.org/soap/http"/>
-
-    <operation name="doGetCachedPage">
-      <soap:operation soapAction="urn:GoogleSearchAction"/>
-      <input>
-        <soap:body use="encoded"
-                   namespace="urn:GoogleSearch"
-                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
-      </input>
-      <output>
-        <soap:body use="encoded"
-                   namespace="urn:GoogleSearch"
-                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
-      </output>
-    </operation>
-
-    <operation name="doSpellingSuggestion">
-      <soap:operation soapAction="urn:GoogleSearchAction"/>
-      <input>
-        <soap:body use="encoded"
-                   namespace="urn:GoogleSearch"
-                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
-      </input>
-      <output>
-        <soap:body use="encoded"
-                   namespace="urn:GoogleSearch"
-                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
-      </output>
-    </operation>
-
-    <operation name="doGoogleSearch">
-      <soap:operation soapAction="urn:GoogleSearchAction"/>
-      <input>
-        <soap:body use="encoded"
-                   namespace="urn:GoogleSearch"
-                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
-      </input>
-      <output>
-        <soap:body use="encoded"
-                   namespace="urn:GoogleSearch"
-                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
-      </output>
-    </operation>
-
-    <operation name="helloOneWay">
-      <soap:operation soapAction="urn:GoogleSearchAction"/>
-      <input>
-        <soap:body use="encoded"
-                   namespace="urn:GoogleSearch"
-                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
-      </input>      
-    </operation>
-
-  </binding>
-
-</definitions>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/GoogleSearch_types.wsdl b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/GoogleSearch_types.wsdl
deleted file mode 100644
index 8bd2839..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/GoogleSearch_types.wsdl
+++ /dev/null
@@ -1,161 +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
-
--->
-
-<!-- WSDL description of the Google Web APIs.
-     The Google Web APIs are in beta release. All interfaces are subject to
-     change as we refine and extend our APIs. Please see the terms of use
-     for more information. -->
-
-<definitions name="urn:GoogleSearch"
-             targetNamespace="urn:GoogleSearch"
-             xmlns:typens="urn:GoogleSearch"
-             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
-             xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
-             xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
-             xmlns="http://schemas.xmlsoap.org/wsdl/">
-  <!-- Types for search - result elements, directory categories -->
-
-  <types>
-    <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" 
-                targetNamespace="urn:GoogleSearch">
-            
-      <xsd:complexType name="GoogleSearchResult">
-        <xsd:all>
-          <xsd:element name="documentFiltering"           type="xsd:boolean"/>
-          <xsd:element name="searchComments"              type="xsd:string"/>
-          <xsd:element name="estimatedTotalResultsCount"  type="xsd:int"/>
-          <xsd:element name="estimateIsExact"             type="xsd:boolean"/>
-          <xsd:element name="resultElements"              type="typens:ResultElementArray"/>
-          <xsd:element name="searchQuery"                 type="xsd:string"/>
-          <xsd:element name="startIndex"                  type="xsd:int"/>
-          <xsd:element name="endIndex"                    type="xsd:int"/>
-          <xsd:element name="searchTips"                  type="xsd:string"/>
-          <xsd:element name="directoryCategories"         type="typens:DirectoryCategoryArray"/>
-          <xsd:element name="searchTime"                  type="xsd:double"/>
-        </xsd:all>
-      </xsd:complexType>
-
-      <xsd:complexType name="ResultElement">
-        <xsd:all>
-          <xsd:element name="summary" type="xsd:string"/>
-          <xsd:element name="URL" type="xsd:string"/>
-          <xsd:element name="snippet" type="xsd:string"/>
-          <xsd:element name="title" type="xsd:string"/>
-          <xsd:element name="cachedSize" type="xsd:string"/>
-          <xsd:element name="relatedInformationPresent" type="xsd:boolean"/>
-          <xsd:element name="hostName" type="xsd:string"/>
-          <xsd:element name="directoryCategory" type="typens:DirectoryCategory"/>
-          <xsd:element name="directoryTitle" type="xsd:string"/>
-        </xsd:all>
-      </xsd:complexType>
-  
-      <xsd:complexType name="ResultElementArray">
-        <xsd:complexContent>
-          <xsd:restriction base="soapenc:Array">
-             <xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="typens:ResultElement[]"/>
-          </xsd:restriction>
-        </xsd:complexContent>
-      </xsd:complexType>
-
-      <xsd:complexType name="DirectoryCategoryArray">
-        <xsd:complexContent>
-          <xsd:restriction base="soapenc:Array">
-             <xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="typens:DirectoryCategory[]"/>
-          </xsd:restriction>
-        </xsd:complexContent>
-      </xsd:complexType>
-
-      <xsd:complexType name="DirectoryCategory">
-        <xsd:all>
-          <xsd:element name="fullViewableName" type="xsd:string"/>
-          <xsd:element name="specialEncoding" type="xsd:string"/>
-        </xsd:all>
-      </xsd:complexType>
-
-    </xsd:schema>
-  </types> 
-
-  <!-- Messages for Google Web APIs - cached page, search, spelling. -->
-             
-  <message name="doGetCachedPage">
-    <part name="key"            type="xsd:string"/>
-    <part name="url"            type="xsd:string"/>
-  </message>
-
-  <message name="doGetCachedPageResponse">
-    <part name="return"         type="xsd:base64Binary"/>
-  </message>
-
-  <message name="doSpellingSuggestion">
-    <part name="key"            type="xsd:string"/>
-    <part name="phrase"         type="xsd:string"/>
-  </message>
-
-  <message name="doSpellingSuggestionResponse">
-    <part name="return"         type="xsd:string"/>
-  </message>
-
-  <message name="doGoogleSearch">
-    <part name="key"            type="xsd:string"/>
-    <part name="q"              type="xsd:string"/>
-    <part name="start"          type="xsd:int"/>
-    <part name="maxResults"     type="xsd:int"/>
-    <part name="filter"         type="xsd:boolean"/>
-    <part name="restrict"       type="xsd:string"/>
-    <part name="safeSearch"     type="xsd:boolean"/>
-    <part name="lr"             type="xsd:string"/>
-    <part name="ie"             type="xsd:string"/>
-    <part name="oe"             type="xsd:string"/>
-  </message>
-
-  <message name="doGoogleSearchResponse">
-    <part name="return"         type="typens:GoogleSearchResult"/>           
-  </message>
-
-  <message name="helloOneWay">
-    <part name="string" type="xsd:string"/>
-  </message>
-  <message name="helloOneWayResponse"/>
-
-  <!-- Port for Google Web APIs, "GoogleSearch" -->
-
-  <portType name="GoogleSearchPort">
-
-    <operation name="doGetCachedPage">
-      <input message="typens:doGetCachedPage"/>
-      <output message="typens:doGetCachedPageResponse"/>
-    </operation>
-
-    <operation name="doSpellingSuggestion">
-      <input message="typens:doSpellingSuggestion"/>
-      <output message="typens:doSpellingSuggestionResponse"/>
-    </operation>
-
-    <operation name="doGoogleSearch">
-      <input message="typens:doGoogleSearch"/>
-      <output message="typens:doGoogleSearchResponse"/>
-    </operation>
-
-    <operation name="helloOneWay">
-      <input message="typens:helloOneWay"/>
-    </operation>
-
-  </portType>
-</definitions>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/build.properties b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/build.properties
deleted file mode 100644
index a602c92..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/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="ksink"/>
-<property name="appname" value="${module}"/>
-<property name="assemble" value="${build.classes.dir}/archive"/>
-<property name="test.client" value="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="webservices.xml" value="descriptor/webservices.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="web.xml" value="descriptor/war/web.xml"/>
-<property name="sun-web.xml" value="descriptor/war/sun-web.xml"/>
-<property name="sun-webservices.xml" value="descriptor/war/webservices.xml"/>
-<property name="war.file" value="${assemble}/${appname}-web.war"/>
-<property name="app.type" value="application"/>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/build.xml b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/build.xml
deleted file mode 100644
index 4352160..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/build.xml
+++ /dev/null
@@ -1,311 +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
-
--->
-
-<!DOCTYPE project [
-<!ENTITY commonSetup SYSTEM "../../../../config/properties.xml">
-<!ENTITY commonBuild SYSTEM "../../../../config/common.xml">
-<!ENTITY commonRun SYSTEM "../../../../config/run.xml">
-<!ENTITY testproperties SYSTEM "build.properties">
-]>
-
-<project name="google test" default="all" basedir=".">
-
-  <!-- include common.xml and testcommon.xml -->
-    &commonSetup;
-    &commonBuild;
-    &commonRun;
-    &testproperties;
-
-  <target name="all" depends="clean,build,deploy,run,undeploy"/>
-
-  <target name="run.wscompile">
-        <exec executable="${WSCOMPILE}" failonerror="true" >
-        <arg line="${wscompile.command}" />
-        </exec>
-  </target>
-
-  <target name="compile" depends="">
-    <antcall target="compile-common">
-      <param name="src" value="client"/>
-    </antcall>
-    <antcall target="compile-common">
-      <param name="src" value="ejb"/>
-    </antcall>
-    <antcall target="compile-common">
-      <param name="src" value="web"/>
-    </antcall>
-  </target>
-
-  <target name="build" depends="init-common, clean">
-    <antcall target="gen-mapping-appclient"/>
-    <antcall target="gen-mapping-ejb"/>
-    <antcall target="gen-mapping-web"/>
-    <antcall target="wscompile-appclient"/>
-    <antcall target="wscompile-ejb"/>
-    <antcall target="wscompile-web"/>
-    <antcall target="assemble"/>
-    <antcall target="build-appclient-file"/>
-  </target>
-
-  <target name="wscompile-appclient" depends="init-common">
-    <mkdir dir="output"/>
-    <antcall target="run.wscompile">
-      <param name="wscompile.command"
-       value="-import -f:norpcstructures -keep -d output -s output -classpath . -model googleclient.model wscompile_config_appclient.xml"/>
-    </antcall>
-    <copy todir="${build.classes.dir}/com/sun/s1asdev/ejb/webservice/ksink/googleclient">
-       <fileset dir="output//com/sun/s1asdev/ejb/webservice/ksink/googleclient"
-        includes="DirectoryCategory.class, GoogleSearchResult.class, GoogleSearchService.class, GoogleSearchPort.class, ResultElement.class"/>
-    </copy>
-    <!-- <delete dir="output"/> -->
-  </target>
-
-  <target name="wscompile-ejb" depends="init-common">
-    <mkdir dir="output"/>
-    <antcall target="run.wscompile">
-      <param name="wscompile.command"
-       value="-import -f:norpcstructures -keep -d output -s output -classpath . wscompile_config_ejb.xml"/>
-    </antcall>
-    <copy todir="${build.classes.dir}/com/sun/s1asdev/ejb/webservice/ksink/googleserver">
-       <fileset dir="output/com/sun/s1asdev/ejb/webservice/ksink/googleserver"
-        includes="DirectoryCategory.class, GoogleSearchResult.class, GoogleSearchPort.class, ResultElement.class"/>
-    </copy>
-    <delete dir="output"/>
-  </target>
-
-  <target name="wscompile-web" depends="init-common">
-    <mkdir dir="output"/>
-    <antcall target="run.wscompile">
-      <param name="wscompile.command"
-            value="-import -f:norpcstructures -keep -d output -s output -model googleweb.model -classpath . wscompile_config_web.xml"/>
-    </antcall>
-    <copy todir="${build.classes.dir}/com/sun/s1asdev/ejb/webservice/ksink/googleserverweb">
-       <fileset dir="output/com/sun/s1asdev/ejb/webservice/ksink/googleserverweb"
-        includes="DirectoryCategory.class, GoogleSearchResult.class, GoogleSearchPort.class, ResultElement.class"/>
-    </copy>
-    <delete dir="output"/>
-  </target>
-
-  <target name="assemble" depends="init-common, compile">
-    <!--
-        EJB module creation
-    -->
-    <copy todir="${build.classes.dir}/META-INF/wsdl"
-      file="GoogleSearch.wsdl"/>
-    <copy todir="${build.classes.dir}/META-INF/wsdl"
-      file="GoogleSearch_types.wsdl"/>
-    <copy todir="${build.classes.dir}"
-         file="GoogleMapping_ejb.xml"/>
-    <antcall target="ejb-jar-common">
-      <param name="ejbjar.classes"
-             value="GoogleMapping_ejb.xml,META-INF/wsdl/**,**/*.class" />
-
-    </antcall>
-    <!--
-        War module creation
-    -->
-    <antcall target="build-war-file"/>
-    <!--
-        AppClient module creation
-    -->
-    <copy todir="${build.classes.dir}/META-INF/wsdl"
-      file="GoogleSearch.wsdl"/>
-    <copy todir="${build.classes.dir}/META-INF/wsdl"
-      file="GoogleSearch_types.wsdl"/>
-    <copy todir="${build.classes.dir}/META-INF/wsdl"
-      file="GoogleSearch_partial.wsdl"/>
-    <copy todir="${build.classes.dir}"
-         file="GoogleMapping_appclient.xml"/>
-    <copy todir="${build.classes.dir}"
-         file="googleclient.model"/>
-    <antcall target="appclient-jar-common">
-      <param name="appclientjar.classes"
-             value="googleclient.model,GoogleMapping_appclient.xml,META-INF/wsdl/**,**/*.class" />
-
-    </antcall>
-    <!--
-        EAR file creation
-    -->
-    <antcall target="ear-common" />
-    <copy todir="${build.classes.dir}/META-INF"
-      file="${sun-application.xml}"/>
-    <jar destfile = "${assemble.dir}/${appname}App.ear"
-        update="true">
-      <fileset dir="${build.classes.dir}">
-        <include name="META-INF/sun-application.xml"/>
-      </fileset>
-    </jar>
-
-  </target>
-
-  <target name="build-appclient-file" depends="init-common">
-  </target>
-
-  <target name="build-war-file" depends="init-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"/>
-    <copy todir="${build.classes.dir}/tmp/WEB-INF"
-      file="${web.xml}"/>
-    <copy todir="${build.classes.dir}/tmp/WEB-INF"
-      file="${sun-web.xml}"/>
-    <copy todir="${build.classes.dir}/tmp/WEB-INF"
-      file="${sun-webservices.xml}"/>
-    <mkdir dir="${build.classes.dir}/tmp/WEB-INF/classes"/>
-    <copy todir="${build.classes.dir}/tmp/WEB-INF/wsdl"
-      file="GoogleSearch.wsdl"/>
-    <copy todir="${build.classes.dir}/tmp/WEB-INF/wsdl"
-      file="GoogleSearch_types.wsdl"/>
-    <copy todir="${build.classes.dir}/tmp"
-         file="GoogleMapping_web.xml"/>
-    <copy todir="${build.classes.dir}/tmp"
-         file="googleweb.model"/>
-    <copy todir="${build.classes.dir}/tmp/WEB-INF/classes/com/sun/s1asdev/ejb/webservice/ksink/googleserverweb">
-        <fileset dir="${build.classes.dir}/com/sun/s1asdev/ejb/webservice/ksink/googleserverweb">
-            <include name="**/*.class"/>
-        </fileset>
-    </copy>
-    <jar jarfile="${assemble.dir}/${appname}-web.war" update="true">
-      <fileset dir="${build.classes.dir}/tmp" casesensitive="yes">
-          <include name="**/**"/>
-      </fileset>
-    </jar>
-    <delete dir="${build.classes.dir}/tmp"/>
-  </target>
-
-
-    <target name="deploy"
-            depends="init-common">
-        <antcall target="deploy-common"/>
-    </target>
-
-    <target name="clean" depends="init-common">
-      <antcall target="clean-common"/>
-      <delete dir="output"/>
-      <delete dir="googleclient"/>
-      <delete dir="googleserver"/>
-      <delete dir="googleserverweb"/>
-      <delete>
-        <fileset dir="." includes="*.model"/>
-      </delete>
-      <delete file="GoogleMapping_ejb.xml"/>
-      <delete file="GoogleMapping_appclient.xml"/>
-      <delete file="GoogleMapping_web.xml"/>
-    </target>
-
-    <target name="run" depends="init-common">
-        <antcall target="runclient-common">
-          <param name="appclient.application.args" value="forwardejb http://${http.host}:${http.port}/ejb_webservice_ksink_GoogleServlet/GoogleSearch"/>
-        </antcall>
-        <antcall target="runclient-common">
-          <param name="appclient.application.args" value="forwardweb http://${http.host}:${http.port}/ejb_webservice_ksink_GoogleEJB/GoogleSearch"/>
-        </antcall>
-        <antcall target="run-standalone"/>
-    </target>
-
-   <target name="build-standalone" depends="init-common">
-      <antcall target="run.wscompile">
-        <param name="wscompile.command"
-         value="-gen:client -keep -d ${build.classes.dir} -s ${build.classes.dir} -classpath . wscompile_config_standalone.xml"/>
-      </antcall>
-      <antcall target="compile-common">
-        <param name="src" value="standalone"/>
-      </antcall>
-   </target>
-
-   <target name="run-standalone" depends="init-common">
-     <antcall target="build-standalone"/>
-     <java fork="true" classname="com.sun.s1asdev.ejb.webservice.ksink.standalone.StandAloneClient"
-          failonerror="true">
-      <arg line="spellng http://${http.host}:${http.port}/ejb_webservice_ksink_GoogleServlet/GoogleSearch"/>
-      <classpath>
-        <pathelement location="${env.S1AS_HOME}/lib/j2ee.jar"/>
-        <pathelement location="${env.S1AS_HOME}/lib/appserv-cmp.jar"/>
-        <pathelement location="${env.S1AS_HOME}/lib/appserv-ext.jar"/>
-        <pathelement location="${env.S1AS_HOME}/lib/appserv-rt.jar"/>
-        <pathelement location="${env.S1AS_HOME}/lib/webservices-rt.jar"/>
-        <pathelement location="${env.S1AS_HOME}/lib/webservices-tools.jar"/>
-            <pathelement location="${env.APS_HOME}/lib/reporter.jar"/>
-        <pathelement location="${build.classes.dir}"/>
-      </classpath>
-
-      <sysproperty key="http.proxyHost" value="scaweb2.sfbay"/>
-      <sysproperty key="http.proxyPort" value="8080"/>
-    </java>
-   </target>
-
-    <target name="undeploy" depends="init-common">
-        <antcall target="undeploy-common"/>
-    </target>
-
-  <target name="contactgoogle">
-    <antcall target="runclient-common">
-      <param name="appclient.application.args" value="spellng"/>
-    </antcall>
-  </target>
-
-  <target name="gen-mapping-appclient" depends="init-common">
-    <antcall target="run.wscompile">
-      <param name="wscompile.command"
-       value="-gen -cp . -mapping GoogleMapping_appclient.xml wscompile_config_appclient.xml"/>
-    </antcall>
-  </target>
-
-  <target name="gen-mapping-ejb" depends="init-common">
-    <antcall target="run.wscompile">
-      <param name="wscompile.command"
-       value="-gen -cp . -mapping GoogleMapping_ejb.xml wscompile_config_ejb.xml"/>
-    </antcall>
-  </target>
-
-  <target name="gen-mapping-web" depends="init-common">
-    <antcall target="run.wscompile">
-      <param name="wscompile.command"
-       value="-gen -cp . -mapping GoogleMapping_web.xml wscompile_config_web.xml"/>
-    </antcall>
-  </target>
-
-    <target name="create-user">
-        <antcall target="create-user-common">
-            <param name="user" value="j2ee"/>
-            <param name="password" value="j2ee"/>
-            <param name="groups" value="staff"/>
-       </antcall>
-      <antcall target="reconfig-common"/>
-    </target>
-
-    <target name="delete-user">
-      <!-- remove test users, just cleanup. -->
-      <antcall target="delete-user-common">
-        <param name="user" value="j2ee"/>
-      </antcall>
-    </target>
-
-    <target name="restart">
-      <antcall target="restart-server-instance-common"/>
-    </target>
-
-    <target name="usage">
-        <echo>
-                Usage:
-                        ant all (Executes the WebServices test)
-                        ant contactgoogle (Executes the appclient contacting the Google.com WebServices)
-        </echo>
-    </target>
-</project>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/client/Client.java b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/client/Client.java
deleted file mode 100644
index f3e96b6..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/client/Client.java
+++ /dev/null
@@ -1,312 +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.ejb.webservice.ksink.googleclient;
-
-import java.io.*;
-import java.util.*;
-import java.net.URL;
-import javax.naming.*;
-import javax.xml.namespace.QName;
-import javax.xml.rpc.Stub;
-import javax.xml.rpc.Call;
-import javax.xml.rpc.Service;
-import java.rmi.Remote;
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-import java.lang.reflect.Method;
-
-public class Client {
-
-    private static SimpleReporterAdapter stat =
-        new SimpleReporterAdapter("appserv-tests");
-
-    private static final QName PORT_QNAME =
-        new QName("urn:GoogleSearch", "GoogleSearchPort");
-    private static final QName OPERATION_QNAME =
-        new QName("urn:GoogleSearch", "doSpellingSuggestion");
-
-    private String word;
-    private String targetEndpointAddress;
-    private String testName;
-
-    public static void main (String[] args) {
-
-        stat.addDescription("googleserver appclient");
-        Client client = new Client(args);
-        client.doTest();
-        stat.printSummary("googleserver-applientID");
-    }
-
-    public Client(String[] args) {
-        word = (args.length > 0) ? args[0] : "spellng";
-        targetEndpointAddress = (args.length > 1) ? args[1] : null;
-        testName = (args.length > 1) ? args[1] : "ksink_standalone";
-    }
-
-    public void doTest() {
-
-
-            try {
-            Context ic = new InitialContext();
-            String googleKey = (String)
-                ic.lookup("java:comp/env/googlekey");
-            GoogleSearchService googleSearchService = (GoogleSearchService)
-                    ic.lookup("java:comp/env/service/GoogleSearch");
-
-            Class fooHomeClazz = Class.forName("com.sun.s1asdev.ejb.webservice.ksink.googleserver.FooHome");
-            Object obj = ic.lookup("java:comp/env/ejb/googleserverejb");
-            Object fooHome = javax.rmi.PortableRemoteObject.narrow
-                (obj, fooHomeClazz);
-            Method createMethod = fooHomeClazz.getMethod("create",
-                                                         new Class[0]);
-            Object foo = createMethod.invoke(fooHome, new Object[0]);
-            Method helloOneWay = foo.getClass().getMethod("helloOneWay",
-                                                          new Class[] { java.lang.String.class });
-            helloOneWay.invoke(foo, new Object[] { "1000" } );
-
-            try {
-                googleSearchService.getHandlerRegistry();
-            } catch(java.lang.UnsupportedOperationException uoe) {
-                System.out.println
-                    ("Successfully caught unsupported operation exception " +
-                     "for Service.getHandlerRegistry()");
-            }
-
-            try {
-                googleSearchService.getTypeMappingRegistry();
-            } catch(java.lang.UnsupportedOperationException uoe) {
-                System.out.println
-                    ("Successfully caught unsupported operation exception " +
-                     "for Service.getTypeMappingRegistry()");
-            }
-
-            doDynamicProxyTest(googleSearchService, googleKey);
-
-            GoogleSearchPort googleSearchPort =
-                googleSearchService.getGoogleSearchPort();
-            doSpellingSuggestion(googleSearchPort, googleKey,
-                                 targetEndpointAddress);
-
-            System.out.println("Using dynamic proxy to invoke endpoint");
-            Service genericServiceWithWsdl = (Service)
-                ic.lookup("java:comp/env/service/GoogleSearchProxy");
-
-            doDynamicProxyTest(genericServiceWithWsdl, googleKey);
-
-            googleSearchPort = (GoogleSearchPort)
-                genericServiceWithWsdl.getPort(GoogleSearchPort.class);
-            doSpellingSuggestion(googleSearchPort, googleKey,
-                                 targetEndpointAddress);
-
-            doDIINoWSDLTest(ic, googleKey, targetEndpointAddress);
-
-            System.out.println("Doing wsdl override tests");
-
-            Service partialWsdlServiceGeneric = (Service)
-                ic.lookup("java:comp/env/service/partialGeneric");
-            GoogleSearchPort googleSearch = (GoogleSearchPort)
-                partialWsdlServiceGeneric.getPort(GoogleSearchPort.class);
-            googleSearch.doSpellingSuggestion(googleKey, word);
-
-/**            GoogleSearchService partialWsdlServiceGenerated =
-                (GoogleSearchService)
-                ic.lookup("java:comp/env/service/partialGenerated");
-            googleSearch = partialWsdlServiceGenerated.getGoogleSearchPort();
-            googleSearch.doSpellingSuggestion(googleKey, word);
-**/
-            stat.addStatus("appclient " + testName, stat.PASS);
-
-
-            } catch (Exception ex) {
-            System.out.println("google client test failed");
-            ex.printStackTrace();
-            stat.addStatus("appclient " + testName, stat.FAIL);
-        }
-
-    }
-
-    private void doSpellingSuggestion(GoogleSearchPort googleSearchPort,
-                                      String googleKey,
-                                      String endpointAddress)
-        throws Exception {
-
-        if( endpointAddress != null ) {
-            ((Stub)googleSearchPort)._setProperty
-                (Stub.ENDPOINT_ADDRESS_PROPERTY, targetEndpointAddress);
-            System.out.println("Setting target endpoint address to " +
-                               endpointAddress);
-        } else {
-            // if not set, use default
-            endpointAddress = (String)
-                ((Stub)googleSearchPort)._getProperty
-                (Stub.ENDPOINT_ADDRESS_PROPERTY);
-        }
-
-        System.out.println("Contacting google for spelling " +
-                           "suggestion at " + endpointAddress);
-
-        String spellingSuggestion =
-            googleSearchPort.doSpellingSuggestion(googleKey, word);
-        System.out.println("Gave google the word '" + word + "' ... " +
-                           " and the suggested spelling is '" +
-                           spellingSuggestion + "'");
-    }
-
-    private void doDynamicProxyTest(Service service, String googleKey) throws Exception {
-
-        Call c1 = service.createCall();
-        Call c2 = service.createCall(PORT_QNAME);
-        Call c3 = service.createCall(PORT_QNAME, OPERATION_QNAME);
-        Call c4 = service.createCall(PORT_QNAME,
-                                     OPERATION_QNAME.getLocalPart());
-        Call[] calls = service.getCalls(PORT_QNAME);
-
-        if( targetEndpointAddress != null ) {
-            c3.setTargetEndpointAddress(targetEndpointAddress);
-        }
-        Object params[] = new Object[] {googleKey, "hello" };
-        String response = (String) c3.invoke(params);
-        System.out.println("Response = " + response);
-
-        // container-managed port selection
-        GoogleSearchPort sei = (GoogleSearchPort)
-            service.getPort(GoogleSearchPort.class);
-        sei = (GoogleSearchPort)
-            service.getPort(PORT_QNAME, GoogleSearchPort.class);
-
-        QName serviceName = service.getServiceName();
-        URL wsdlLocation = service.getWSDLDocumentLocation();
-        if( wsdlLocation != null ) {
-            System.out.println("wsdlLocation = " + wsdlLocation);
-        }
-        Iterator ports = service.getPorts();
-
-        System.out.println("Calling oneway operation");
-        Call oneway = service.createCall(PORT_QNAME, "helloOneWay");
-        if( targetEndpointAddress != null ) {
-            oneway.setTargetEndpointAddress(targetEndpointAddress);
-        }
-
-        long oneWayMethodWaitTimeInMillis = 4000;
-
-        Date before = new Date();
-        oneway.invokeOneWay(new Object[]
-               { oneWayMethodWaitTimeInMillis + "" });
-        Date after = new Date();
-        long elapsedTime = after.getTime() - before.getTime();
-        System.out.println("one way operation began at " + before +
-                           " and returned at " + after +
-                           " and took " +  elapsedTime + " milli-seconds");
-        if( elapsedTime > oneWayMethodWaitTimeInMillis ) {
-            throw new Exception("one way operation blocked for too long ");
-        }
-
-        // now wait for the remainder of the time.  this is to
-        // avoid race conditions where we finish the test and begin
-        // to undeploy, but the endpoint is still executing its
-        // oneway operation.
-        long sleepTime = (oneWayMethodWaitTimeInMillis - elapsedTime);
-
-        System.out.println("now sleeping for " + sleepTime + " milli secs");
-        Thread.sleep(sleepTime);
-        System.out.println("returning from doDynamicProxyTest");
-    }
-
-    private void doDIINoWSDLTest(Context ic, String googleKey,
-                                 String endpointAddress) throws Exception {
-
-        System.out.println("Doing DII without WSDL tests");
-
-        Service service =(Service) ic.lookup("java:comp/env/service/DIINoWSDL");
-
-        try {
-            Call call = service.createCall(PORT_QNAME);
-        } catch(java.lang.UnsupportedOperationException uoe) {
-            System.out.println("Successfully caught unsupported operation " +
-                               "for Service.createCall(QName port)");
-        }
-
-        try {
-            Call call = service.createCall(PORT_QNAME, OPERATION_QNAME);
-        } catch(java.lang.UnsupportedOperationException uoe) {
-            System.out.println("Successfully caught unsupported operation " +
-                               "for Service.getCall(QName, QName)");
-        }
-
-
-        try {
-            Call call = service.createCall(PORT_QNAME, "doSpellingSuggestion");
-        } catch(java.lang.UnsupportedOperationException uoe) {
-            System.out.println("Successfully caught unsupported operation " +
-                               "for Service.getCall(QName, String)");
-        }
-
-        try {
-            Call[] calls = service.getCalls(PORT_QNAME);
-        } catch(java.lang.UnsupportedOperationException uoe) {
-            System.out.println("Successfully caught unsupported operation " +
-                               "for Service.getCalls()");
-        }
-
-        try {
-            service.getHandlerRegistry();
-        } catch(java.lang.UnsupportedOperationException uoe) {
-            System.out.println
-                ("Successfully caught unsupported operation exception " +
-                 "for Service.getHandlerRegistry()");
-        }
-
-        try {
-            Remote remote = service.getPort(GoogleSearchPort.class);
-        } catch(java.lang.UnsupportedOperationException uoe) {
-            System.out.println("Successfully caught unsupported operation " +
-                               "for Service.getPort(SEI)");
-        }
-
-        try {
-            Remote remote = service.getPort(PORT_QNAME, GoogleSearchPort.class);
-        } catch(java.lang.UnsupportedOperationException uoe) {
-            System.out.println("Successfully caught unsupported operation " +
-                               "for Service.getPort(QName, SEI)");
-        }
-
-        try {
-            Iterator ports = service.getPorts();
-        } catch(java.lang.UnsupportedOperationException uoe) {
-            System.out.println("Successfully caught unsupported operation " +
-                               "for Service.getPorts()");
-        }
-
-        try {
-            QName serviceName = service.getServiceName();
-        } catch(java.lang.UnsupportedOperationException uoe) {
-            System.out.println("Successfully caught unsupported operation " +
-                               "for Service.getName()");
-        }
-
-        try {
-            service.getTypeMappingRegistry();
-        } catch(java.lang.UnsupportedOperationException uoe) {
-            System.out.println
-                ("Successfully caught unsupported operation exception " +
-                 "for Service.getTypeMappingRegistry()");
-        }
-
-        Call untypedCall = service.createCall();
-
-    }
-}
-
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/client/ClientHandler.java b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/client/ClientHandler.java
deleted file mode 100644
index 9b21cd4..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/client/ClientHandler.java
+++ /dev/null
@@ -1,68 +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.ejb.webservice.ksink.googleclient;
-
-import java.util.Map;
-
-import javax.xml.rpc.handler.Handler;
-import javax.xml.rpc.handler.GenericHandler;
-import javax.xml.rpc.handler.HandlerInfo;
-import javax.xml.rpc.handler.MessageContext;
-import javax.xml.namespace.QName;
-
-import javax.naming.InitialContext;
-
-public class ClientHandler extends GenericHandler {
-
-    public void destroy() {
-        System.out.println("In ClientHandler::destroy()");
-    }
-
-    public QName[] getHeaders() {
-        return new QName[0];
-    }
-
-    public boolean handleFault(MessageContext context) {
-        System.out.println("In ClientHandler::handleFault()");
-        return true;
-    }
-
-    public boolean handleRequest(MessageContext context) {
-        System.out.println("In ClientHandler::handleRequest()");
-        return true;
-    }
-
-    public boolean handleResponse(MessageContext context) {
-        System.out.println("In ClientHandler::handleResponse()");
-        return true;
-    }
-
-    public void init(HandlerInfo config) {
-        System.out.println("In ClientHandler::init()");
-        try {
-            InitialContext ic = new InitialContext();
-            String googleKey = (String) ic.lookup("java:comp/env/googlekey");
-            System.out.println("google key = " + googleKey);
-        } catch(Exception e) {
-            e.printStackTrace();
-        }
-
-        System.out.println("Handler init params = " +
-                           config.getHandlerConfig());
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/client/MANIFEST.MF b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/client/MANIFEST.MF
deleted file mode 100644
index 5e8bd3e..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/client/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Main-Class: com.sun.s1asdev.ejb.webservice.ksink.googleclient.Client
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/application-client.xml b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/application-client.xml
deleted file mode 100644
index 03192a3..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/application-client.xml
+++ /dev/null
@@ -1,109 +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>This is my google app client</description>
-  <display-name>ksinkClient</display-name>
-  <env-entry>
-    <env-entry-name>googlekey</env-entry-name>
-    <env-entry-type>java.lang.String</env-entry-type>
-    <env-entry-value>vCkqMIpV1WMKIRpNa7gBiYQZxDUYOYOj</env-entry-value>
-  </env-entry>
-  <ejb-ref>
-    <ejb-ref-name>ejb/googleserverejb</ejb-ref-name>
-    <ejb-ref-type>Session</ejb-ref-type>
-    <home>com.sun.s1asdev.ejb.webservice.ksink.googleserver.FooHome</home>
-    <remote>com.sun.s1asdev.ejb.webservice.ksink.googleserver.FooRemote</remote>
-    <ejb-link>GoogleEjb</ejb-link>
-  </ejb-ref>
-  <service-ref>
-    <description>google service ref</description>
-    <display-name>MY GOOGLE SERVICE REF DISPLAY name</display-name>
-    <service-ref-name>service/GoogleSearch</service-ref-name>
-    <service-interface>com.sun.s1asdev.ejb.webservice.ksink.googleclient.GoogleSearchService</service-interface>
-    <wsdl-file>META-INF/wsdl/GoogleSearch.wsdl</wsdl-file>
-    <jaxrpc-mapping-file>GoogleMapping_appclient.xml</jaxrpc-mapping-file>
-    <port-component-ref>
-      <service-endpoint-interface>com.sun.s1asdev.ejb.webservice.ksink.googleclient.GoogleSearchPort
-      </service-endpoint-interface>
-      <port-component-link>GoogleSearchEjbPort</port-component-link>
-    </port-component-ref>
-    <handler>
-      <description>handler 1</description>
-      <handler-name>handler1</handler-name>
-      <handler-class>com.sun.s1asdev.ejb.webservice.ksink.googleclient.ClientHandler</handler-class>
-      <init-param>
-        <description>param1 description</description>
-        <param-name>a</param-name>
-        <param-value>b</param-value>
-      </init-param>
-      <soap-header xmlns:googlens="urn:GoogleSearch">googlens:DirectoryCategory
-      </soap-header>
-      <soap-role>Role1</soap-role>
-      <soap-role>Role2</soap-role>
-      <port-name>GoogleSearchPort</port-name>
-    </handler>
-  </service-ref>
-  <service-ref>
-    <description>dynamic proxy google service ref</description>
-    <service-ref-name>service/GoogleSearchProxy</service-ref-name>
-    <service-interface>javax.xml.rpc.Service</service-interface>
-    <wsdl-file>META-INF/wsdl/GoogleSearch.wsdl</wsdl-file>
-    <jaxrpc-mapping-file>googleclient.model</jaxrpc-mapping-file>
-    <port-component-ref>
-      <service-endpoint-interface>com.sun.s1asdev.ejb.webservice.ksink.googleclient.GoogleSearchPort
-      </service-endpoint-interface>
-    </port-component-ref>
-    <handler>
-      <description>handler 1</description>
-      <handler-name>handler1</handler-name>
-      <handler-class>com.sun.s1asdev.ejb.webservice.ksink.googleclient.ClientHandler</handler-class>
-      <init-param>
-        <description>param description</description>
-        <param-name>c</param-name>
-        <param-value>d</param-value>
-      </init-param>
-    </handler>
-  </service-ref>
-  <service-ref>
-    <description>dii google service ref</description>
-    <service-ref-name>service/DIINoWSDL</service-ref-name>
-    <service-interface>javax.xml.rpc.Service</service-interface>
-  </service-ref>
-  <service-ref>
-    <description>partial wsdl test google service ref</description>
-    <service-ref-name>service/partialGeneric</service-ref-name>
-    <service-interface>javax.xml.rpc.Service</service-interface>
-    <wsdl-file>META-INF/wsdl/GoogleSearch_partial.wsdl</wsdl-file>
-    <jaxrpc-mapping-file>GoogleMapping_appclient.xml</jaxrpc-mapping-file>
-    <port-component-ref>
-      <service-endpoint-interface>com.sun.s1asdev.ejb.webservice.ksink.googleclient.GoogleSearchPort
-      </service-endpoint-interface>
-      <port-component-link>ksink-web.war#GoogleSearchPort</port-component-link>
-    </port-component-ref>
-  </service-ref>
-<!--  <service-ref>
-    <description>partial wsdl test google service ref</description>
-    <service-ref-name>service/partialGenerated</service-ref-name>
-    <service-interface>googleclient.GoogleSearchService</service-interface>
-    <wsdl-file>META-INF/wsdl/GoogleSearch_partial.wsdl</wsdl-file>
-    <jaxrpc-mapping-file>GoogleMapping_appclient.xml</jaxrpc-mapping-file>
-  </service-ref>
--->
-</application-client>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/application.xml b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/application.xml
deleted file mode 100644
index 55ef227..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/application.xml
+++ /dev/null
@@ -1,35 +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 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_1_4.xsd">
-  <description>Application description</description>
-  <display-name>GoogleServerApp</display-name>
-  <module>
-    <web>
-      <web-uri>ksink-web.war</web-uri>
-      <context-root/>
-    </web>
-  </module>
-  <module>
-    <java>ksink-client.jar</java>
-  </module>
-  <module>
-    <ejb>ksink-ejb.jar</ejb>
-  </module>
-</application>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/ejb-jar.xml b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/ejb-jar.xml
deleted file mode 100644
index 00f3f3f..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/ejb-jar.xml
+++ /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
-
--->
-
-<ejb-jar version="2.1" 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/ejb-jar_2_1.xsd">
-  <display-name>Ejb1</display-name>
-  <enterprise-beans>
-    <session>
-      <ejb-name>GoogleEjb</ejb-name>
-      <home>com.sun.s1asdev.ejb.webservice.ksink.googleserver.FooHome</home>
-      <remote>com.sun.s1asdev.ejb.webservice.ksink.googleserver.FooRemote</remote>
-      <service-endpoint>com.sun.s1asdev.ejb.webservice.ksink.googleserver.GoogleSearchPort</service-endpoint>
-      <ejb-class>com.sun.s1asdev.ejb.webservice.ksink.googleserver.GoogleEJB</ejb-class>
-      <session-type>Stateless</session-type>
-      <transaction-type>Container</transaction-type>
-      <env-entry>
-        <env-entry-name>entry1</env-entry-name>
-        <env-entry-type>java.lang.String</env-entry-type>
-        <env-entry-value>Blah</env-entry-value>
-      </env-entry>
-      <service-ref>
-        <description>service ref for web endpoint</description>
-        <service-ref-name>service/WebDIIReference</service-ref-name>
-        <service-interface>javax.xml.rpc.Service</service-interface>
-        <wsdl-file>META-INF/wsdl/GoogleSearch.wsdl</wsdl-file>
-        <jaxrpc-mapping-file>GoogleMapping_ejb.xml</jaxrpc-mapping-file>
-        <port-component-ref>
-          <service-endpoint-interface>com.sun.s1asdev.ejb.webservice.ksink.googleserver.GoogleSearchPort
-          </service-endpoint-interface>
-          <port-component-link>ksink-web.war#GoogleSearchPort</port-component-link>
-        </port-component-ref>
-      </service-ref>
-      <security-identity>
-        <use-caller-identity/>
-      </security-identity>
-    </session>
-  </enterprise-beans>
-  <assembly-descriptor>
-    <container-transaction>
-      <method>
-        <ejb-name>GoogleEjb</ejb-name>
-        <method-intf>ServiceEndpoint</method-intf>
-        <method-name>*</method-name>
-      </method>
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <method>
-        <ejb-name>GoogleEjb</ejb-name>
-        <method-intf>ServiceEndpoint</method-intf>
-        <method-name>helloOneWay</method-name>
-        <method-params>
-          <method-param>java.lang.String</method-param>
-        </method-params>
-      </method>
-      <trans-attribute>NotSupported</trans-attribute>
-    </container-transaction>
-    <container-transaction>
-      <method>
-        <ejb-name>GoogleEjb</ejb-name>
-        <method-intf>Remote</method-intf>
-        <method-name>*</method-name>
-      </method>
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-  </assembly-descriptor>
-</ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/sun-application-client.xml b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/sun-application-client.xml
deleted file mode 100644
index 7a3aa87..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/sun-application-client.xml
+++ /dev/null
@@ -1,89 +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/GoogleSearch</service-ref-name>
-      <port-info>
-        <service-endpoint-interface>googleclient.GoogleSearchPort
-        </service-endpoint-interface>
-        <wsdl-port>
-          <namespaceURI>urn:GoogleSearch</namespaceURI>
-          <localpart>GoogleSearchPort</localpart>
-        </wsdl-port>
-        <stub-property>
-           <name>javax.xml.rpc.security.auth.username</name>
-           <value>j2ee</value>
-        </stub-property>
-        <stub-property>
-           <name>javax.xml.rpc.security.auth.password</name>
-           <value>j2ee</value>
-        </stub-property>
-        <call-property>
-          <name>javax.xml.rpc.security.auth.username</name>
-          <value>j2ee</value>
-        </call-property>
-        <call-property>
-          <name>javax.xml.rpc.security.auth.password</name>
-          <value>j2ee</value>
-        </call-property>
-      </port-info>
-    </service-ref>
-    <service-ref>
-      <service-ref-name>service/GoogleSearchProxy</service-ref-name>
-      <port-info>
-        <service-endpoint-interface>googleclient.GoogleSearchPort
-        </service-endpoint-interface>
-        <wsdl-port>
-          <namespaceURI>urn:GoogleSearch</namespaceURI>
-          <localpart>GoogleSearchPort</localpart>
-        </wsdl-port>
-        <stub-property>
-          <name>javax.xml.rpc.service.endpoint.address</name>
-          <value>http://localhost:8000/google/GoogleSearch</value>
-        </stub-property>
-        <stub-property>
-           <name>javax.xml.rpc.security.auth.username</name>
-           <value>j2ee</value>
-        </stub-property>
-        <stub-property>
-           <name>javax.xml.rpc.security.auth.password</name>
-           <value>j2ee</value>
-        </stub-property>
-        <call-property>
-          <name>javax.xml.rpc.security.auth.username</name>
-          <value>j2ee</value>
-        </call-property>
-        <call-property>
-          <name>javax.xml.rpc.security.auth.password</name>
-          <value>j2ee</value>
-        </call-property>
-      </port-info>
-    </service-ref>
-    <service-ref>
-      <service-ref-name>service/partialGeneric</service-ref-name>
-      <wsdl-override>file:GoogleSearch_final.wsdl</wsdl-override>
-    </service-ref>
-<!--    <service-ref>
-      <service-ref-name>service/partialGenerated</service-ref-name>
-      <wsdl-override>file:GoogleSearch_final.wsdl</wsdl-override>
-    </service-ref>
--->
-</sun-application-client>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/sun-application.xml b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/sun-application.xml
deleted file mode 100644
index 16ce779..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/sun-application.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE sun-application PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 7.0 J2EE Application 1.3//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-application_1_3-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>
-  <web>
-     <web-uri>ksink-web.war</web-uri>
-    <context-root>ejb_webservice_ksink_GoogleServlet</context-root>
-  </web>
-</sun-application>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/sun-ejb-jar.xml b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/sun-ejb-jar.xml
deleted file mode 100644
index 3ab2d75..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/sun-ejb-jar.xml
+++ /dev/null
@@ -1,37 +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>GoogleEjb</ejb-name>
-      <jndi-name>com_sun_s1asdev_ejb_webservice_ksink_GoogleEjb</jndi-name>
-      <webservice-endpoint>
-        <port-component-name>GoogleSearchEjbPort</port-component-name>
-        <endpoint-address-uri>ejb_webservice_ksink_GoogleEJB/GoogleSearch</endpoint-address-uri>
-      </webservice-endpoint>
-    </ejb>
-    <webservice-description>
-      <webservice-description-name>GoogleServiceEjb
-      </webservice-description-name>
-      <wsdl-publish-location>file:publish</wsdl-publish-location>
-    </webservice-description>
-  </enterprise-beans>
-</sun-ejb-jar>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/war/sun-web.xml b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/war/sun-web.xml
deleted file mode 100644
index 26fc5e2..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/war/sun-web.xml
+++ /dev/null
@@ -1,42 +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>
-    <service-ref>
-      <service-ref-name>service/EjbDIIReference</service-ref-name>
-      <port-info>
-        <service-endpoint-interface>com.sun.s1asdev.ejb.webservice.ksink.googleserverweb.GoogleSearchPort
-        </service-endpoint-interface>
-        <wsdl-port>
-          <namespaceURI>urn:GoogleSearch</namespaceURI>
-          <localpart>GoogleSearchPort</localpart>
-        </wsdl-port>
-        <stub-property>
-          <name>javax.xml.rpc.security.auth.username</name>
-          <value>j2ee</value>
-        </stub-property>
-        <stub-property>
-          <name>javax.xml.rpc.security.auth.password</name>
-          <value>j2ee</value>
-        </stub-property>
-      </port-info>
-    </service-ref>
-</sun-web-app>
-
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/war/web.xml b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/war/web.xml
deleted file mode 100644
index c44ecde..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/war/web.xml
+++ /dev/null
@@ -1,52 +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>GoogleWebApp</display-name>
-  <servlet>
-    <servlet-name>GoogleServlet</servlet-name>
-    <servlet-class>com.sun.s1asdev.ejb.webservice.ksink.googleserverweb.GoogleServletImpl</servlet-class>
-    <load-on-startup>0</load-on-startup>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>GoogleServlet</servlet-name>
-    <url-pattern>/GoogleSearch</url-pattern>
-  </servlet-mapping>
-  <session-config>
-    <session-timeout>54</session-timeout>
-  </session-config>
-  <env-entry>
-    <env-entry-name>entry1</env-entry-name>
-    <env-entry-type>java.lang.String</env-entry-type>
-    <env-entry-value>Blah</env-entry-value>
-  </env-entry>
-  <service-ref>
-    <description>service ref for ejb endpoint</description>
-    <service-ref-name>service/EjbDIIReference</service-ref-name>
-    <service-interface>javax.xml.rpc.Service</service-interface>
-    <wsdl-file>WEB-INF/wsdl/GoogleSearch.wsdl</wsdl-file>
-    <jaxrpc-mapping-file>googleweb.model</jaxrpc-mapping-file>
-    <service-qname xmlns:googlens="urn:GoogleSearch">googlens:GoogleSearchService</service-qname>
-    <port-component-ref>
-      <service-endpoint-interface>com.sun.s1asdev.ejb.webservice.ksink.googleserverweb.GoogleSearchPort
-      </service-endpoint-interface>
-      <port-component-link>ksink-ejb.jar#GoogleSearchEjbPort</port-component-link>
-    </port-component-ref>
-   </service-ref>
-</web-app>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/war/webservices.xml b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/war/webservices.xml
deleted file mode 100644
index a5f6d6f..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/war/webservices.xml
+++ /dev/null
@@ -1,54 +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 xmlns:googlens="urn:GoogleSearch">
-    <webservice-description-name>GoogleServiceServlet</webservice-description-name>
-    <wsdl-file>WEB-INF/wsdl/GoogleSearch.wsdl</wsdl-file>
-    <jaxrpc-mapping-file>googleweb.model</jaxrpc-mapping-file>
-    <port-component>
-      <description>port component description</description>
-      <port-component-name>GoogleSearchPort</port-component-name>
-      <wsdl-port>googlens:GoogleSearchPort</wsdl-port>
-      <service-endpoint-interface>com.sun.s1asdev.ejb.webservice.ksink.googleserverweb.GoogleSearchPort
-      </service-endpoint-interface>
-      <service-impl-bean>
-        <servlet-link>GoogleServlet</servlet-link>
-      </service-impl-bean>
-      <handler>
-        <description>handler 1</description>
-        <handler-name>handler1</handler-name>
-        <handler-class>com.sun.s1asdev.ejb.webservice.ksink.googleserverweb.FooHandler</handler-class>
-        <init-param>
-          <description>param1 description</description>
-          <param-name>a</param-name>
-          <param-value>b</param-value>
-        </init-param>
-        <soap-header>googlens:DirectoryCategory</soap-header>
-        <soap-role>Role1</soap-role>
-        <soap-role>Role2</soap-role>
-      </handler>
-    </port-component>
-  </webservice-description>
-</webservices>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/webservices.xml b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/webservices.xml
deleted file mode 100644
index 76f5cc4..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/descriptor/webservices.xml
+++ /dev/null
@@ -1,54 +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 xmlns:googlens="urn:GoogleSearch">
-    <webservice-description-name>GoogleServiceEjb</webservice-description-name>
-    <wsdl-file>META-INF/wsdl/GoogleSearch.wsdl</wsdl-file>
-    <jaxrpc-mapping-file>GoogleMapping_ejb.xml</jaxrpc-mapping-file>
-    <port-component>
-      <description>port component description</description>
-      <port-component-name>GoogleSearchEjbPort</port-component-name>
-      <wsdl-port>googlens:GoogleSearchPort</wsdl-port>
-      <service-endpoint-interface>com.sun.s1asdev.ejb.webservice.ksink.googleserver.GoogleSearchPort
-      </service-endpoint-interface>
-      <service-impl-bean>
-        <ejb-link>GoogleEjb</ejb-link>
-      </service-impl-bean>
-      <handler>
-        <description>handler 1</description>
-        <handler-name>handler1</handler-name>
-        <handler-class>com.sun.s1asdev.ejb.webservice.ksink.googleserver.FooHandler</handler-class>
-        <init-param>
-          <description>param1 description</description>
-          <param-name>a</param-name>
-          <param-value>b</param-value>
-        </init-param>
-        <soap-header>googlens:DirectoryCategory</soap-header>
-        <soap-role>Role1</soap-role>
-        <soap-role>Role2</soap-role>
-      </handler>
-    </port-component>
-  </webservice-description>
-</webservices>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/ejb/FooHandler.java b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/ejb/FooHandler.java
deleted file mode 100644
index 00390b9..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/ejb/FooHandler.java
+++ /dev/null
@@ -1,68 +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.ejb.webservice.ksink.googleserver;
-
-import java.util.Map;
-
-import javax.xml.rpc.handler.Handler;
-import javax.xml.rpc.handler.GenericHandler;
-import javax.xml.rpc.handler.HandlerInfo;
-import javax.xml.rpc.handler.MessageContext;
-import javax.xml.namespace.QName;
-
-import javax.naming.InitialContext;
-
-public class FooHandler extends GenericHandler {
-
-    public void destroy() {
-        System.out.println("In FooHandler::destroy()");
-    }
-
-    public QName[] getHeaders() {
-        return new QName[0];
-    }
-
-    public boolean handleFault(MessageContext context) {
-        System.out.println("In FooHandler::handleFault()");
-        return true;
-    }
-
-    public boolean handleRequest(MessageContext context) {
-        System.out.println("In FooHandler::handleRequest()");
-        return true;
-    }
-
-    public boolean handleResponse(MessageContext context) {
-        System.out.println("In FooHandler::handleResponse()");
-        return true;
-    }
-
-    public void init(HandlerInfo config) {
-        System.out.println("In FooHandler::init()");
-        try {
-            InitialContext ic = new InitialContext();
-            String envEntry = (String) ic.lookup("java:comp/env/entry1");
-            System.out.println("env-entry = " + envEntry);
-        } catch(Exception e) {
-            e.printStackTrace();
-        }
-
-        System.out.println("Handler init params = " +
-                           config.getHandlerConfig());
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/ejb/FooHome.java b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/ejb/FooHome.java
deleted file mode 100644
index 678759a..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/ejb/FooHome.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.ejb.webservice.ksink.googleserver;
-
-import jakarta.ejb.EJBHome;
-import java.rmi.RemoteException;
-
-public interface FooHome extends EJBHome {
-
-    FooRemote create() throws RemoteException;
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/ejb/FooRemote.java b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/ejb/FooRemote.java
deleted file mode 100644
index d3483f4..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/ejb/FooRemote.java
+++ /dev/null
@@ -1,25 +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.ejb.webservice.ksink.googleserver;
-
-import jakarta.ejb.EJBObject;
-import java.rmi.RemoteException;
-
-public interface FooRemote extends EJBObject, GoogleSearchPort {
-
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/ejb/GoogleEJB.java b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/ejb/GoogleEJB.java
deleted file mode 100644
index 7f46ae9..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/ejb/GoogleEJB.java
+++ /dev/null
@@ -1,217 +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.ejb.webservice.ksink.googleserver;
-
-import java.util.Iterator;
-import java.util.Date;
-import java.net.URL;
-import javax.xml.namespace.QName;
-import javax.xml.rpc.handler.MessageContext;
-import javax.xml.rpc.Service;
-import javax.xml.rpc.Call;
-import java.io.Serializable;
-import java.rmi.RemoteException;
-import jakarta.ejb.SessionBean;
-import jakarta.ejb.SessionContext;
-import jakarta.ejb.EJBException;
-import javax.naming.*;
-
-public class GoogleEJB implements SessionBean {
-    private SessionContext sc;
-
-    private static final QName PORT_QNAME =
-        new QName("urn:GoogleSearch", "GoogleSearchPort");
-    private static final QName OPERATION_QNAME =
-        new QName("urn:GoogleSearch", "doSpellingSuggestion");
-
-    public GoogleEJB(){}
-
-    public void ejbCreate() throws RemoteException {
-        System.out.println("In GoogleEJB::ejbCreate !!");
-    }
-
-    public byte[] doGetCachedPage(java.lang.String key, java.lang.String url)
-    {
-        return null;
-    }
-
-    public String doSpellingSuggestion(java.lang.String key,
-                                       java.lang.String phrase)
-       {
-
-        try {
-            InitialContext ic = new InitialContext();
-            String entry1 = (String) ic.lookup("java:comp/env/entry1");
-            System.out.println("java:comp/env/entry1 = " + entry1);
-        } catch(Exception e) {
-            e.printStackTrace();
-            throw new EJBException(e.getMessage(), e);
-        }
-
-        MessageContext msgContext = sc.getMessageContext();
-
-        System.out.println("GoogleEJB.doSpellingSuggestion() called with " +
-                           phrase);
-
-        try {
-            java.security.Principal principal = sc.getCallerPrincipal();
-            System.out.println("GoogleEJB.doSpellingSuggestion():getCallerPrincipal() = " + principal);
-            if(principal == null) {
-                throw new EJBException("GoogleEJB.doSpellingSuggestion():getCallerPrincipal() cannot return NULL");
-            }
-        } catch (Exception ex) {
-            ex.printStackTrace();
-            throw new EJBException("GoogleEJB.doSpellingSuggestion():Unexpected exception caught - ", ex);
-        }
-
-        /*
-        try {
-
-            boolean result = sc.isCallerInRole("foo");
-            System.out.println(
-                "GoogleEJB.doSpellingSuggestion():isCallerInRole(foo) returned - " + result);
-            if(!result) {
-                throw new EJBException("GoogleEJB.doSpellingSuggestion():isCallerInRole(foo) should not have returned false");
-            }
-        } catch (Exception ex) {
-            ex.printStackTrace();
-            throw new EJBException("GoogleEJB.doSpellingSuggestion():Unexpected exception caught in isCallerInRole(foo) call ", ex);
-        }
-        */
-
-        String returnValue = "spelling suggestion from ejb";
-        if( phrase.equals("forwardweb") ) {
-            System.out.println("Forwarding spelling suggestion to webendpoint");
-            Service genericServiceWithWSDL = null;
-            try {
-                InitialContext ic = new InitialContext();
-                Service service = (Service)
-                    ic.lookup("java:comp/env/service/WebDIIReference");
-                doDynamicProxyTest(service);
-                GoogleSearchPort webPort = (GoogleSearchPort)
-                    service.getPort(GoogleSearchPort.class);
-                returnValue = webPort.doSpellingSuggestion(key, phrase);
-            } catch(Exception e) {
-                e.printStackTrace();
-                throw new EJBException(e.getMessage(), e);
-            }
-        }
-
-        System.out.println("GoogleEJB returning " + returnValue);
-        return returnValue;
-    }
-
-    public void helloOneWay(String s1) {
-
-        jakarta.transaction.TransactionManager tm =
-            com.sun.enterprise.Switch.getSwitch().getTransactionManager();
-        int txStatus = -1;
-        try {
-            txStatus = tm.getStatus();
-        } catch(Exception e) {
-            throw new EJBException(e);
-        }
-
-        // The following tests make sure tx attributes are processed
-        // correctly when the same method is defined on both the remote
-        // and webservice interface.   Descriptor is set up to have
-        // no tx for the webservice case and a TX_REQUIRED for the
-        // Remote case.
-        try {
-
-            sc.getMessageContext();
-
-            // we were invoked through a webserivce invocation.  there
-            // shouldn't be a transaction.
-            if( txStatus == jakarta.transaction.Status.STATUS_NO_TRANSACTION) {
-                System.out.println("Correctly found no tx for helloOneWay " +
-                                   " invoked through a webservice");
-            } else {
-                throw new EJBException("Got wrong tx status = " + txStatus +
-                                       " for helloOneWay invoked through a " +
-                                       "web service");
-            }
-        } catch(Exception e) {
-            // since there's no WEB service message context, we were
-            // invoked through a remote invocation.
-
-            if( txStatus == jakarta.transaction.Status.STATUS_ACTIVE) {
-                System.out.println("Correctly found an active tx for " +
-                   "helloOneWay invoked through a Remote interface");
-            } else {
-                throw new EJBException("Got wrong tx status = " + txStatus +
-                                       " for helloOneWay invoked through a " +
-                                       "remote interface");
-            }
-        }
-
-        System.out.println("In GoogleEJB::helloOneWay. param = " +
-                           s1);
-        System.out.println("Sleeping for " + s1 + " milliseconds starting "
-                           + " at " + new Date());
-
-        try {
-            Thread.sleep((new Integer(s1)).intValue());
-        } catch(Exception e) {
-            e.printStackTrace();
-        }
-        System.out.println("Exiting GoogleEJB:helloOneWay at " +
-                           new Date());
-    }
-
-    public GoogleSearchResult doGoogleSearch(java.lang.String key, java.lang.String q, int start, int maxResults, boolean filter, java.lang.String restrict, boolean safeSearch, java.lang.String lr, java.lang.String ie, java.lang.String oe) {
-        return null;
-    }
-
-    public void setSessionContext(SessionContext sc) {
-
-        this.sc = sc;
-    }
-
-    public void ejbRemove() throws RemoteException {}
-
-    public void ejbActivate() {}
-
-    public void ejbPassivate() {}
-
-    private void doDynamicProxyTest(Service service) throws Exception {
-
-        Call c1 = service.createCall();
-        Call c2 = service.createCall(PORT_QNAME);
-        Call c3 = service.createCall(PORT_QNAME, OPERATION_QNAME);
-        Call c4 = service.createCall(PORT_QNAME,
-                                     OPERATION_QNAME.getLocalPart());
-        Call[] calls = service.getCalls(PORT_QNAME);
-
-        // container-managed port selection
-        GoogleSearchPort sei = (GoogleSearchPort)
-            service.getPort(GoogleSearchPort.class);
-        sei = (GoogleSearchPort)
-            service.getPort(PORT_QNAME, GoogleSearchPort.class);
-
-        QName serviceName = service.getServiceName();
-        URL wsdlLocation = service.getWSDLDocumentLocation();
-        if( wsdlLocation != null ) {
-            System.out.println("wsdlLocation = " + wsdlLocation);
-        }
-        Iterator ports = service.getPorts();
-
-    }
-
-
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/standalone/StandAloneClient.java b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/standalone/StandAloneClient.java
deleted file mode 100644
index 2b36e52..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/standalone/StandAloneClient.java
+++ /dev/null
@@ -1,86 +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.ejb.webservice.ksink.standalone;
-
-import java.io.*;
-import java.util.*;
-import javax.naming.*;
-import javax.xml.rpc.Stub;
-import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
-
-public class StandAloneClient {
-
-    private static SimpleReporterAdapter stat =
-        new SimpleReporterAdapter("appserv-tests");
-
-    private String word;
-    private String targetEndpointAddress;
-    private String googleKey;
-
-    public static void main (String[] args) {
-        stat.addDescription("googleserver standalone");
-        StandAloneClient client = new StandAloneClient(args);
-        client.doTest();
-        stat.printSummary("googleserver-standaloneID");
-    }
-
-    public StandAloneClient(String[] args) {
-        word = (args.length > 0) ? "spellng" : args[0];
-        targetEndpointAddress = (args.length > 1) ?
-            args[1] : "http://api.google.com/search/beta2";
-        googleKey = (args.length > 2) ?
-            args[2] : "vCkqMIpV1WMKIRpNa7gBiYQZxDUYOYOj";
-    }
-
-    public void doTest() {
-            try {
-            GoogleSearchService googleSearchService =
-                new GoogleSearchService_Impl();
-
-            GoogleSearchPort googleSearchPort =
-                googleSearchService.getGoogleSearchPort();
-
-            ((Stub)googleSearchPort)._setProperty
-                (Stub.ENDPOINT_ADDRESS_PROPERTY,
-                 targetEndpointAddress);
-
-             ((Stub)googleSearchPort)._setProperty
-                 (Stub.USERNAME_PROPERTY, "j2ee");
-             ((Stub)googleSearchPort)._setProperty
-                 (Stub.PASSWORD_PROPERTY, "j2ee");
-
-            System.out.println("Contacting google for spelling suggestion at "
-                               + targetEndpointAddress);
-            String spellingSuggestion =
-                googleSearchPort.doSpellingSuggestion(googleKey, word);
-            System.out.println("Gave google the word '" + word + "' ... " +
-                               " and the suggested spelling is '" +
-                               spellingSuggestion + "'");
-
-            stat.addStatus("appclient main", stat.PASS);
-
-            } catch (Exception ex) {
-            System.out.println("google client test failed");
-            ex.printStackTrace();
-            stat.addStatus("appclient main" , stat.FAIL);
-
-        }
-
-    }
-
-}
-
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/web/FooHandler.java b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/web/FooHandler.java
deleted file mode 100644
index f5c3a6d..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/web/FooHandler.java
+++ /dev/null
@@ -1,68 +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.ejb.webservice.ksink.googleserverweb;
-
-import java.util.Map;
-
-import javax.xml.rpc.handler.Handler;
-import javax.xml.rpc.handler.GenericHandler;
-import javax.xml.rpc.handler.HandlerInfo;
-import javax.xml.rpc.handler.MessageContext;
-import javax.xml.namespace.QName;
-
-import javax.naming.InitialContext;
-
-public class FooHandler extends GenericHandler {
-
-    public void destroy() {
-        System.out.println("In FooHandler::destroy()");
-    }
-
-    public QName[] getHeaders() {
-        return new QName[0];
-    }
-
-    public boolean handleFault(MessageContext context) {
-        System.out.println("In FooHandler::handleFault()");
-        return true;
-    }
-
-    public boolean handleRequest(MessageContext context) {
-        System.out.println("In FooHandler::handleRequest()");
-        return true;
-    }
-
-    public boolean handleResponse(MessageContext context) {
-        System.out.println("In FooHandler::handleResponse()");
-        return true;
-    }
-
-    public void init(HandlerInfo config) {
-        System.out.println("In FooHandler::init()");
-        try {
-            InitialContext ic = new InitialContext();
-            String envEntry = (String) ic.lookup("java:comp/env/entry1");
-            System.out.println("env-entry = " + envEntry);
-        } catch(Exception e) {
-            e.printStackTrace();
-        }
-
-        System.out.println("Handler init params = " +
-                           config.getHandlerConfig());
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/web/GoogleServletImpl.java b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/web/GoogleServletImpl.java
deleted file mode 100644
index 6d04ad3..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/web/GoogleServletImpl.java
+++ /dev/null
@@ -1,135 +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.ejb.webservice.ksink.googleserverweb;
-
-import java.util.Date;
-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;
-
-public class GoogleServletImpl implements jakarta.servlet.SingleThreadModel, ServiceLifecycle {
-
-    private static final QName PORT_QNAME =
-        new QName("urn:GoogleSearch", "GoogleSearchPort");
-    private static final QName OPERATION_QNAME =
-        new QName("urn:GoogleSearch", "doSpellingSuggestion");
-
-    private boolean gotInit = false;
-
-    public GoogleServletImpl() {
-        System.out.println("GoogleServletImpl() instantiated");
-    }
-
-    public void init(Object context) {
-        System.out.println("Got ServiceLifecycle::init call " + context);
-        gotInit = true;
-    }
-
-    public void destroy() {
-        System.out.println("Got ServiceLifecycle::destroy call");
-    }
-
-    public byte[] doGetCachedPage(java.lang.String key, java.lang.String url)
-    {
-        return null;
-    }
-
-    public void helloOneWay(String s1) {
-
-        System.out.println("In GoogleServletImpl::helloOneWay. param = " +
-                           s1);
-        System.out.println("Sleeping for " + s1 + " milliseconds starting "
-                           + " at " + new Date());
-
-        try {
-            Thread.sleep((new Integer(s1)).intValue());
-        } catch(Exception e) {
-            e.printStackTrace();
-        }
-        System.out.println("Exiting GoogleServletImpl:helloOneWay at " +
-                           new Date());
-    }
-
-    public String doSpellingSuggestion(java.lang.String key,
-                                       java.lang.String phrase)
-
-        throws RemoteException {
-        System.out.println("GoogleServletImpl.doSpellingSuggestion() " +
-                           " called with " + phrase);
-
-        if( !gotInit ) {
-            throw new RuntimeException("Got business method before init()");
-        }
-
-        String returnValue = "spelling suggestion from web";
-        if( phrase.equals("forwardejb") ) {
-            System.out.println("Forwarding spelling suggestion to ejbendpoint");
-            Service genericServiceWithWSDL = null;
-            try {
-                InitialContext ic = new InitialContext();
-                Service service = (Service)
-                    ic.lookup("java:comp/env/service/EjbDIIReference");
-                doDynamicProxyTest(service);
-                GoogleSearchPort ejbPort = (GoogleSearchPort)
-                    service.getPort(GoogleSearchPort.class);
-                returnValue = ejbPort.doSpellingSuggestion(key, phrase);
-            } catch(Exception e) {
-                e.printStackTrace();
-                throw new RemoteException(e.getMessage(), e);
-            }
-        }
-
-        System.out.println("GoogleServletImpl returning " + returnValue);
-        return returnValue;
-    }
-
-    public GoogleSearchResult doGoogleSearch(java.lang.String key, java.lang.String q, int start, int maxResults, boolean filter, java.lang.String restrict, boolean safeSearch, java.lang.String lr, java.lang.String ie, java.lang.String oe) {
-        return null;
-    }
-
-    private void doDynamicProxyTest(Service service) throws Exception {
-
-        Call c1 = service.createCall();
-        Call c2 = service.createCall(PORT_QNAME);
-        Call c3 = service.createCall(PORT_QNAME, OPERATION_QNAME);
-        Call c4 = service.createCall(PORT_QNAME,
-                                     OPERATION_QNAME.getLocalPart());
-        Call[] calls = service.getCalls(PORT_QNAME);
-
-        // container-managed port selection
-        GoogleSearchPort sei = (GoogleSearchPort)
-            service.getPort(GoogleSearchPort.class);
-        sei = (GoogleSearchPort)
-            service.getPort(PORT_QNAME, GoogleSearchPort.class);
-
-        QName serviceName = service.getServiceName();
-        URL wsdlLocation = service.getWSDLDocumentLocation();
-        if( wsdlLocation != null ) {
-            System.out.println("wsdlLocation = " + wsdlLocation);
-        }
-        Iterator ports = service.getPorts();
-
-    }
-
-}
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/wscompile_config_appclient.xml b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/wscompile_config_appclient.xml
deleted file mode 100644
index 36f858e..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/wscompile_config_appclient.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="GoogleSearch.wsdl"
-      packageName="com.sun.s1asdev.ejb.webservice.ksink.googleclient"/>
-</configuration>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/wscompile_config_ejb.xml b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/wscompile_config_ejb.xml
deleted file mode 100644
index 76c9951..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/wscompile_config_ejb.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="GoogleSearch.wsdl"
-      packageName="com.sun.s1asdev.ejb.webservice.ksink.googleserver"/>
-</configuration>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/wscompile_config_standalone.xml b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/wscompile_config_standalone.xml
deleted file mode 100644
index 08a03a8..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/wscompile_config_standalone.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="http://localhost:8080/ejb_webservice_ksink_GoogleServlet/GoogleSearch?WSDL"
-      packageName="com.sun.s1asdev.ejb.webservice.ksink.standalone"/>
-</configuration>
diff --git a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/wscompile_config_web.xml b/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/wscompile_config_web.xml
deleted file mode 100644
index cc93bfd..0000000
--- a/appserver/tests/appserv-tests/devtests/ejb/webservice/ksink/wscompile_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="GoogleSearch.wsdl"
-      packageName="com.sun.s1asdev.ejb.webservice.ksink.googleserverweb"/>
-</configuration>
