[582259] wst.server.preview advertising fake service registrar

Change-Id: Ifdb90364837de5046ada2c753b605c3edd1e3cc2
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..b9e927e
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,47 @@
+# Community Code of Conduct
+
+**Version 1.2
+August 19, 2020**
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as community members, contributors, committers, and project leaders pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a professional setting
+
+## Our Responsibilities
+
+With the support of the Eclipse Foundation staff (the “Staff”), project committers and leaders are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
+
+Project committers and leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies within all project spaces, and it also applies when an individual is representing the Eclipse Foundation project or its community in public spaces. Examples of representing a project or community include posting via an official social media account, or acting as a project representative at an online or offline event. Representation of a project may be further defined and clarified by project committers, leaders, or the EMO.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the Staff at codeofconduct@eclipse.org. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The Staff is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
+
+Project committers or leaders who do not follow the Code of Conduct in good faith may face temporary or permanent repercussions as determined by the Staff.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
+available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
diff --git a/features/org.eclipse.jst.server_adapters.feature/feature.xml b/features/org.eclipse.jst.server_adapters.feature/feature.xml
index 3852158..e9e8b45 100644
--- a/features/org.eclipse.jst.server_adapters.feature/feature.xml
+++ b/features/org.eclipse.jst.server_adapters.feature/feature.xml
@@ -10,12 +10,11 @@
 

     Contributors:

         IBM Corporation - initial API and implementation

- -->
-
+ -->

 <feature

       id="org.eclipse.jst.server_adapters.feature"

       label="%featureName"

-      version="3.2.800.qualifier"

+      version="3.31.0.qualifier"

       provider-name="%providerName"

       license-feature="org.eclipse.license"

       license-feature-version="1.0.1.qualifier">

@@ -32,6 +31,10 @@
       %license

    </license>

 

+   <requires>

+      <import feature="org.eclipse.wst.server_adapters.feature"/>

+   </requires>

+

    <plugin

          id="org.eclipse.jst.server.preview.adapter"

          download-size="0"

diff --git a/features/org.eclipse.jst.server_adapters.feature/pom.xml b/features/org.eclipse.jst.server_adapters.feature/pom.xml
index b3e3122..54ff11c 100644
--- a/features/org.eclipse.jst.server_adapters.feature/pom.xml
+++ b/features/org.eclipse.jst.server_adapters.feature/pom.xml
@@ -22,7 +22,7 @@
 

   <groupId>org.eclipse.webtools.servertools</groupId>

   <artifactId>org.eclipse.jst.server_adapters.feature</artifactId>

-  <version>3.2.800-SNAPSHOT</version>

+  <version>3.31.0-SNAPSHOT</version>

   <packaging>eclipse-feature</packaging>

 

   <build>

diff --git a/features/org.eclipse.jst.server_adapters.sdk.feature/feature.xml b/features/org.eclipse.jst.server_adapters.sdk.feature/feature.xml
index 2bcffdf..589c501 100644
--- a/features/org.eclipse.jst.server_adapters.sdk.feature/feature.xml
+++ b/features/org.eclipse.jst.server_adapters.sdk.feature/feature.xml
@@ -11,11 +11,10 @@
     Contributors:
         IBM Corporation - initial API and implementation
  -->
-
 <feature
       id="org.eclipse.jst.server_adapters.sdk.feature"
       label="%featureName"
-      version="3.3.400.qualifier"
+      version="3.31.0.qualifier"
       provider-name="%providerName"
       license-feature="org.eclipse.license"
       license-feature-version="1.0.1.qualifier">
diff --git a/features/org.eclipse.jst.server_adapters.sdk.feature/pom.xml b/features/org.eclipse.jst.server_adapters.sdk.feature/pom.xml
index 8aa3e2d..ea874f3 100644
--- a/features/org.eclipse.jst.server_adapters.sdk.feature/pom.xml
+++ b/features/org.eclipse.jst.server_adapters.sdk.feature/pom.xml
@@ -22,6 +22,6 @@
 

   <groupId>org.eclipse.webtools.servertools</groupId>

   <artifactId>org.eclipse.jst.server_adapters.sdk.feature</artifactId>

-  <version>3.3.400-SNAPSHOT</version>

+  <version>3.31.0-SNAPSHOT</version>

   <packaging>eclipse-feature</packaging>

 </project>

diff --git a/features/org.eclipse.wst.server_adapters.feature/feature.xml b/features/org.eclipse.wst.server_adapters.feature/feature.xml
index 665aa7a..ec971fb 100644
--- a/features/org.eclipse.wst.server_adapters.feature/feature.xml
+++ b/features/org.eclipse.wst.server_adapters.feature/feature.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>

 <!--

-    Copyright (c) 2007, 2019 IBM Corporation and others.

+    Copyright (c) 2007, 2023 IBM Corporation and others.

     This program and the accompanying materials

     are made available under the terms of the Eclipse Public License 2.0

     which accompanies this distribution, and is available at

@@ -15,10 +15,10 @@
 <feature

       id="org.eclipse.wst.server_adapters.feature"

       label="%featureName"

-      version="3.2.1400.qualifier"

+      version="3.31.0.qualifier"

       provider-name="%providerName"

       license-feature="org.eclipse.license"

-      license-feature-version="1.0.1.qualifier">

+      license-feature-version="0.0.0.qualifier">

 

    <description>

       %description

@@ -43,6 +43,7 @@
      <import plugin="org.eclipse.jetty.io"/>

      <import plugin="org.eclipse.jetty.xml"/>

      <import plugin="jakarta.transaction-api"/>

+     <import plugin="org.apache.aries.spifly.dynamic.bundle"/>

    </requires>

    -->

 

diff --git a/features/org.eclipse.wst.server_adapters.feature/pom.xml b/features/org.eclipse.wst.server_adapters.feature/pom.xml
index 9fa1260..ee8c2f9 100644
--- a/features/org.eclipse.wst.server_adapters.feature/pom.xml
+++ b/features/org.eclipse.wst.server_adapters.feature/pom.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>

 <!--

-  Copyright (c) 2012, 2017 Eclipse Foundation and others.

+  Copyright (c) 2012, 2023 Eclipse Foundation and others.

   All rights reserved. This program and the accompanying materials

   are made available under the terms of the Eclipse Distribution License v1.0

   which accompanies this distribution, and is available at

@@ -22,7 +22,7 @@
 

   <groupId>org.eclipse.webtools.servertools</groupId>

   <artifactId>org.eclipse.wst.server_adapters.feature</artifactId>

-  <version>3.2.1400-SNAPSHOT</version>

+  <version>3.31.0-SNAPSHOT</version>

   <packaging>eclipse-feature</packaging>

 

   <build>

diff --git a/features/org.eclipse.wst.server_adapters.sdk.feature/feature.xml b/features/org.eclipse.wst.server_adapters.sdk.feature/feature.xml
index 97a825f..14ad30a 100644
--- a/features/org.eclipse.wst.server_adapters.sdk.feature/feature.xml
+++ b/features/org.eclipse.wst.server_adapters.sdk.feature/feature.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>

 <!--

-    Copyright (c) 2007, 2019 IBM Corporation and others.

+    Copyright (c) 2007, 2023 IBM Corporation and others.

     This program and the accompanying materials

     are made available under the terms of the Eclipse Public License 2.0

     which accompanies this distribution, and is available at

@@ -15,10 +15,10 @@
 <feature

       id="org.eclipse.wst.server_adapters.sdk.feature"

       label="%featureName"

-      version="3.2.1400.qualifier"

+      version="3.31.0.qualifier"

       provider-name="%providerName"

       license-feature="org.eclipse.license"

-      license-feature-version="1.0.1.qualifier">

+      license-feature-version="0.0.0.qualifier">

 

    <description>

       %description

diff --git a/features/org.eclipse.wst.server_adapters.sdk.feature/pom.xml b/features/org.eclipse.wst.server_adapters.sdk.feature/pom.xml
index cf2555c..e640781 100644
--- a/features/org.eclipse.wst.server_adapters.sdk.feature/pom.xml
+++ b/features/org.eclipse.wst.server_adapters.sdk.feature/pom.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>

 <!--

-  Copyright (c) 2012, 2018 Eclipse Foundation and others.

+  Copyright (c) 2012, 2023 Eclipse Foundation and others.

   All rights reserved. This program and the accompanying materials

   are made available under the terms of the Eclipse Distribution License v1.0

   which accompanies this distribution, and is available at

@@ -22,6 +22,6 @@
 

   <groupId>org.eclipse.webtools.servertools</groupId>

   <artifactId>org.eclipse.wst.server_adapters.sdk.feature</artifactId>

-  <version>3.2.1400-SNAPSHOT</version>

+  <version>3.31.0-SNAPSHOT</version>

   <packaging>eclipse-feature</packaging>

 </project>

diff --git a/plugins/org.eclipse.jst.server.preview.adapter/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.preview.adapter/META-INF/MANIFEST.MF
index e034d12..569a9ce 100644
--- a/plugins/org.eclipse.jst.server.preview.adapter/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.preview.adapter/META-INF/MANIFEST.MF
@@ -3,8 +3,9 @@
 Automatic-Module-Name: org.eclipse.jst.server.preview.adapter
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jst.server.preview.adapter;singleton:=true
-Bundle-Version: 1.1.900.qualifier
+Bundle-Version: 1.1.1000.qualifier
 Bundle-Activator: org.eclipse.jst.server.preview.adapter.internal.PreviewPlugin
+Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: org.eclipse.jst.server.preview.adapter.internal;x-internal:=true,
@@ -22,7 +23,6 @@
  org.eclipse.wst.server.preview;bundle-version="[1.2.0,2.0.0)",
  org.eclipse.wst.internet.monitor.core;bundle-version="[1.0.0,2.0.0)",
  slf4j.api;bundle-version="[1.7.36,3)"
-Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Import-Package: com.sun.el;version="2.2.0",
  javax.el;version="2.2.0",
diff --git a/plugins/org.eclipse.jst.server.preview.adapter/pom.xml b/plugins/org.eclipse.jst.server.preview.adapter/pom.xml
index e1effc3..c65972c 100644
--- a/plugins/org.eclipse.jst.server.preview.adapter/pom.xml
+++ b/plugins/org.eclipse.jst.server.preview.adapter/pom.xml
@@ -22,6 +22,6 @@
 

   <groupId>org.eclipse.webtools.servertools</groupId>

   <artifactId>org.eclipse.jst.server.preview.adapter</artifactId>

-  <version>1.1.900-SNAPSHOT</version>

+  <version>1.1.1000-SNAPSHOT</version>

   <packaging>eclipse-plugin</packaging>

 </project>

diff --git a/plugins/org.eclipse.jst.server.preview.adapter/src/org/eclipse/jst/server/preview/adapter/internal/core/PreviewLaunchConfigurationDelegate.java b/plugins/org.eclipse.jst.server.preview.adapter/src/org/eclipse/jst/server/preview/adapter/internal/core/PreviewLaunchConfigurationDelegate.java
index 9c8ac29..36b9c97 100644
--- a/plugins/org.eclipse.jst.server.preview.adapter/src/org/eclipse/jst/server/preview/adapter/internal/core/PreviewLaunchConfigurationDelegate.java
+++ b/plugins/org.eclipse.jst.server.preview.adapter/src/org/eclipse/jst/server/preview/adapter/internal/core/PreviewLaunchConfigurationDelegate.java
@@ -13,6 +13,7 @@
 package org.eclipse.jst.server.preview.adapter.internal.core;
 
 import java.io.File;
+import java.util.Arrays;
 import java.util.Map;
 
 import org.eclipse.core.runtime.CoreException;
@@ -24,11 +25,14 @@
 import org.eclipse.debug.core.ILaunch;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchManager;
-import org.eclipse.jdt.launching.*;
+import org.eclipse.jdt.launching.AbstractJavaLaunchConfigurationDelegate;
+import org.eclipse.jdt.launching.ExecutionArguments;
+import org.eclipse.jdt.launching.IVMInstall;
+import org.eclipse.jdt.launching.IVMRunner;
+import org.eclipse.jdt.launching.VMRunnerConfiguration;
 import org.eclipse.jst.server.core.ServerProfilerDelegate;
 import org.eclipse.jst.server.preview.adapter.internal.PreviewPlugin;
 import org.eclipse.jst.server.preview.adapter.internal.Trace;
-
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.ServerCore;
 import org.eclipse.wst.server.core.ServerUtil;
@@ -46,7 +50,8 @@
 	// this array, please ensure the index of org.eclipse.wst.server.preview
 	// corresponds to CLASSPATH_BIN_INDEX_PREVIEW_SERVER
 	private static final String[] REQUIRED_BUNDLE_IDS = new String[] {
-		getBundleForClass(javax.servlet.ServletContext.class),
+		getBundleForClass(javax.servlet.ServletResponse.class),
+//		getBundleForClass(javax.servlet.http.HttpServletResponse.class),
 		getBundleForClass(javax.servlet.jsp.JspContext.class),
 		getBundleForClass(org.apache.jasper.JspCompilationContext.class),
 		getBundleForClass(javax.el.ELContext.class),
@@ -60,6 +65,7 @@
 		"org.eclipse.jetty.util",
 		"org.eclipse.jetty.webapp",
 		"org.eclipse.jetty.xml",
+		"org.apache.aries.spifly.dynamic.bundle",
 		"org.eclipse.wst.server.preview"
 	};
 
@@ -71,7 +77,8 @@
 	 * Gets the symbolic name of the bundle that supplies the given class.
 	 */
 	private static String getBundleForClass(Class<?> cls) {
-		return FrameworkUtil.getBundle(cls).getSymbolicName();
+		Bundle bundle = FrameworkUtil.getBundle(cls);
+		return bundle.getSymbolicName() + ":" + bundle.getVersion();
 	}
 
 	private static final String MAIN_CLASS = "org.eclipse.wst.server.preview.internal.PreviewStarter";
@@ -92,7 +99,15 @@
 		int size = REQUIRED_BUNDLE_IDS.length;
 		String[] jars = new String[size];
 		for (int i = 0; i < size; i++) {
-			Bundle b = Platform.getBundle(REQUIRED_BUNDLE_IDS[i]);
+			String[] bundleInfo = REQUIRED_BUNDLE_IDS[i].split(":");
+			String version = null;
+			if (bundleInfo.length > 1) {
+				version = bundleInfo[1];
+			}
+			Bundle[] bundles = Platform.getBundles(bundleInfo[0], version);
+			// to use the lowest/exact version match
+			Arrays.sort(bundles, (bundle1, bundle2) -> bundle1.getVersion().compareTo(bundle2.getVersion()));
+			Bundle b = bundles[0];
 			IPath path = null;
 			if (b != null)
 				path = PreviewRuntime.getJarredPluginPath(b);
diff --git a/plugins/org.eclipse.jst.server.preview.adapter/src/org/eclipse/jst/server/preview/adapter/internal/core/PreviewRuntimeClasspathProvider.java b/plugins/org.eclipse.jst.server.preview.adapter/src/org/eclipse/jst/server/preview/adapter/internal/core/PreviewRuntimeClasspathProvider.java
index fd46ad4..765d7bc 100644
--- a/plugins/org.eclipse.jst.server.preview.adapter/src/org/eclipse/jst/server/preview/adapter/internal/core/PreviewRuntimeClasspathProvider.java
+++ b/plugins/org.eclipse.jst.server.preview.adapter/src/org/eclipse/jst/server/preview/adapter/internal/core/PreviewRuntimeClasspathProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2018 IBM Corporation and others.
+ * Copyright (c) 2007, 2023 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
  * which accompanies this distribution, and is available at
@@ -13,6 +13,7 @@
 package org.eclipse.jst.server.preview.adapter.internal.core;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import org.eclipse.core.resources.IProject;
@@ -44,7 +45,8 @@
 	 * Gets the symbolic name of the bundle that supplies the given class.
 	 */
 	private static String getBundleForClass(Class<?> cls) {
-		return FrameworkUtil.getBundle(cls).getSymbolicName();
+		Bundle bundle = FrameworkUtil.getBundle(cls);
+		return bundle.getSymbolicName() + ":" + bundle.getVersion().toString();
 	}
 
 	private String getJavadocLocation(IProject project) {
@@ -55,7 +57,11 @@
 				IProjectFacet webModuleFacet = ProjectFacetsManager.getProjectFacet("jst.web");
 				if (faceted.hasProjectFacet(webModuleFacet)) {
 					String servletVersionStr = faceted.getInstalledVersion(webModuleFacet).getVersionString();
-					if (servletVersionStr.equals("4.0")) {
+					if (servletVersionStr.equals("6.0")) {
+						eeVersion = 10;
+					} else if (servletVersionStr.equals("5.0")) {
+						eeVersion = 9;
+					} else if (servletVersionStr.equals("4.0")) {
 						eeVersion = 8;
 					} else if (servletVersionStr.equals("3.1")) {
 						eeVersion = 7;
@@ -98,6 +104,8 @@
 		case 8:
 			url = "https://javaee.github.io/javaee-spec/javadocs/";
 			break;
+		case 9:
+		case 10:
 		default:
 			url = "https://javaee.github.io/javaee-spec/javadocs/";
 			break;
@@ -112,7 +120,15 @@
 
 		int size = REQUIRED_BUNDLE_IDS.length;
 		for (int i = 0; i < size; i++) {
-			Bundle b = Platform.getBundle(REQUIRED_BUNDLE_IDS[i]);
+			String[] bundleInfo = REQUIRED_BUNDLE_IDS[i].split(":");
+			String version = null;
+			if (bundleInfo.length > 1) {
+				version = bundleInfo[1];
+			}
+			Bundle[] bundles = Platform.getBundles(bundleInfo[0], version);
+			// to use the lowest/exact version match
+			Arrays.sort(bundles, (bundle1, bundle2) -> bundle1.getVersion().compareTo(bundle2.getVersion()));
+			Bundle b = bundles[0];
 			IPath path = PreviewRuntime.getJarredPluginPath(b);
 			if (path != null) {
 				IClasspathEntry libraryEntry = JavaCore.newLibraryEntry(path, null, null, new IAccessRule[0], new IClasspathAttribute[]{JavaCore.newClasspathAttribute(IClasspathAttribute.JAVADOC_LOCATION_ATTRIBUTE_NAME, docUrl)}, false);
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF
index fd3afb7..6ff45e5 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,8 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.internet.monitor.ui; singleton:=true
-Bundle-Version: 1.0.800.qualifier
+Automatic-Module-Name: org.eclipse.wst.internet.monitor.ui
+Bundle-Version: 1.0.801.qualifier
 Bundle-Activator: org.eclipse.wst.internet.monitor.ui.internal.MonitorUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -13,6 +14,6 @@
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.wst.internet.monitor.core;bundle-version="[1.0.103,2.0.0)"
+ org.eclipse.wst.internet.monitor.core;bundle-version="[1.1.0,2.0.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/pom.xml b/plugins/org.eclipse.wst.internet.monitor.ui/pom.xml
index 996ab9d..aa058b3 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/pom.xml
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/pom.xml
@@ -22,6 +22,6 @@
 

   <groupId>org.eclipse.webtools.servertools</groupId>

   <artifactId>org.eclipse.wst.internet.monitor.ui</artifactId>

-  <version>1.0.800-SNAPSHOT</version>

+  <version>1.0.801-SNAPSHOT</version>

   <packaging>eclipse-plugin</packaging>

 </project>

diff --git a/plugins/org.eclipse.wst.server.preview.adapter/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.server.preview.adapter/META-INF/MANIFEST.MF
index 8e65443..443a272 100644
--- a/plugins/org.eclipse.wst.server.preview.adapter/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.server.preview.adapter/META-INF/MANIFEST.MF
@@ -3,8 +3,9 @@
 Automatic-Module-Name: org.eclipse.wst.server.preview.adapter
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.server.preview.adapter;singleton:=true
-Bundle-Version: 1.1.700.qualifier
+Bundle-Version: 1.1.800.qualifier
 Bundle-Activator: org.eclipse.wst.server.preview.adapter.internal.core.PreviewPlugin
+Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.wst.server.core;bundle-version="[1.11.0,2.0.0)",
@@ -12,8 +13,7 @@
  org.eclipse.debug.ui;bundle-version="[3.17.0,4.0.0)",
  org.eclipse.wst.common.project.facet.ui;bundle-version="[1.4.0,2.0.0)",
  slf4j.api;bundle-version="[1.7.34,3)"
-Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.wst.server.preview.adapter.internal.core;x-internal:=true,
  org.eclipse.wst.server.preview.adapter.internal.ui;x-internal:=true
-Import-Package: javax.servlet;version="3.1.0"
+Import-Package: javax.servlet;version="4.0.0"
diff --git a/plugins/org.eclipse.wst.server.preview.adapter/pom.xml b/plugins/org.eclipse.wst.server.preview.adapter/pom.xml
index 9e75955..b091f9c 100644
--- a/plugins/org.eclipse.wst.server.preview.adapter/pom.xml
+++ b/plugins/org.eclipse.wst.server.preview.adapter/pom.xml
@@ -22,6 +22,6 @@
 

   <groupId>org.eclipse.webtools.servertools</groupId>

   <artifactId>org.eclipse.wst.server.preview.adapter</artifactId>

-  <version>1.1.700-SNAPSHOT</version>

+  <version>1.1.800-SNAPSHOT</version>

   <packaging>eclipse-plugin</packaging>

 </project>

diff --git a/plugins/org.eclipse.wst.server.preview.adapter/src/org/eclipse/wst/server/preview/adapter/internal/core/PreviewLaunchConfigurationDelegate.java b/plugins/org.eclipse.wst.server.preview.adapter/src/org/eclipse/wst/server/preview/adapter/internal/core/PreviewLaunchConfigurationDelegate.java
index b769cc7..f1cf1c8 100644
--- a/plugins/org.eclipse.wst.server.preview.adapter/src/org/eclipse/wst/server/preview/adapter/internal/core/PreviewLaunchConfigurationDelegate.java
+++ b/plugins/org.eclipse.wst.server.preview.adapter/src/org/eclipse/wst/server/preview/adapter/internal/core/PreviewLaunchConfigurationDelegate.java
@@ -15,6 +15,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import org.eclipse.core.runtime.CoreException;
@@ -59,6 +60,7 @@
 		"org.eclipse.jetty.util",
 		"org.eclipse.jetty.webapp",
 		"org.eclipse.jetty.xml",
+		"org.apache.aries.spifly.dynamic.bundle",
 		"org.eclipse.wst.server.preview"
 	};
 
@@ -70,7 +72,8 @@
 	 * Gets the symbolic name of the bundle that supplies the given class.
 	 */
 	private static String getBundleForClass(Class<?> cls) {
-		return FrameworkUtil.getBundle(cls).getSymbolicName();
+		Bundle bundle = FrameworkUtil.getBundle(cls);
+		return bundle.getSymbolicName() + ":" + bundle.getVersion();
 	}
 
 	private static final String[] fgCandidateJavaFiles = {"javaw", "javaw.exe", "java",
@@ -96,7 +99,15 @@
 		StringBuffer cp = new StringBuffer();
 		int size = REQUIRED_BUNDLE_IDS.length;
 		for (int i = 0; i < size; i++) {
-			Bundle b = Platform.getBundle(REQUIRED_BUNDLE_IDS[i]);
+			String[] bundleInfo = REQUIRED_BUNDLE_IDS[i].split(":");
+			String version = null;
+			if (bundleInfo.length > 1) {
+				version = bundleInfo[1];
+			}
+			Bundle[] bundles = Platform.getBundles(bundleInfo[0], version);
+			// to use the lowest/exact version match
+			Arrays.sort(bundles, (bundle1, bundle2) -> bundle1.getVersion().compareTo(bundle2.getVersion()));
+			Bundle b = bundles[0];
 			IPath path = null;
 			if (b != null)
 				path = PreviewRuntime.getJarredPluginPath(b);
diff --git a/plugins/org.eclipse.wst.server.preview/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.server.preview/META-INF/MANIFEST.MF
index e2377ab..5d928e8 100644
--- a/plugins/org.eclipse.wst.server.preview/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.server.preview/META-INF/MANIFEST.MF
@@ -20,8 +20,6 @@
 Import-Package: javax.servlet;version="[4.0.0,5.0.0)",
  javax.servlet.http;version="[4.0.0,5.0.0)",
  javax.transaction.xa
-Provide-Capability: osgi.extender;osgi.extender="osgi.serviceloader.registrar";version:Version="1.0",
- osgi.extender;osgi.extender="osgi.serviceloader.processor";version:Version="1.0"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Automatic-Module-Name: org.eclipse.wst.server.preview
diff --git a/plugins/org.eclipse.wst.server.preview/jetty/pom.xml b/plugins/org.eclipse.wst.server.preview/jetty/pom.xml
index 6b3f1a2..217a37b 100644
--- a/plugins/org.eclipse.wst.server.preview/jetty/pom.xml
+++ b/plugins/org.eclipse.wst.server.preview/jetty/pom.xml
@@ -90,6 +90,14 @@
                   </excludes>
                 </artifact>
                 <artifact>
+                  <id>org.eclipse.jetty:jetty-logging:${jettyVersion}</id>
+                  <source>true</source>
+                  <excludes>
+                    <exclude>org.eclipse.jetty:*</exclude>
+                    <exclude>org.slf4j:*</exclude>
+                  </excludes>
+                </artifact>
+                <artifact>
                   <id>jakarta.transaction:jakarta.transaction-api:1.3.3</id>
                   <source>true</source>
                 </artifact>
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeComposite.java
index 884b46a..45bf0a5 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeComposite.java
@@ -38,9 +38,9 @@
 		public void runtimeDoubleClicked(IRuntime runtime);
 	}
 	
-	class RuntimeViewerSorter extends ViewerSorter {
+	class RuntimeViewerComparator extends ViewerComparator {
 		boolean sortByName;
-		public RuntimeViewerSorter(boolean sortByName) {
+		public RuntimeViewerComparator(boolean sortByName) {
 			this.sortByName = sortByName;
 		}
 		
@@ -77,7 +77,7 @@
 		col.setText(Messages.columnName);
 		col.addSelectionListener(new SelectionListener() {
 			public void widgetSelected(SelectionEvent e) {
-				tableViewer.setSorter(new RuntimeViewerSorter(true));
+				tableViewer.setComparator(new RuntimeViewerComparator(true));
 			}
 
 			public void widgetDefaultSelected(SelectionEvent e) {
@@ -90,7 +90,7 @@
 		col.setText(Messages.columnType);
 		col.addSelectionListener(new SelectionListener() {
 			public void widgetSelected(SelectionEvent e) {
-				tableViewer.setSorter(new RuntimeViewerSorter(false));
+				tableViewer.setComparator(new RuntimeViewerComparator(false));
 			}
 
 			public void widgetDefaultSelected(SelectionEvent e) {
@@ -118,7 +118,7 @@
 		
 		tableViewer.setInput(AbstractTreeContentProvider.ROOT);
 		tableViewer.setColumnProperties(new String[] {"name", "type"});
-		tableViewer.setSorter(new RuntimeViewerSorter(true));
+		tableViewer.setComparator(new RuntimeViewerComparator(true));
 		
 		tableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
 			public void selectionChanged(SelectionChangedEvent event) {