diff --git a/core/bundles/org.eclipse.jst.ws/META-INF/MANIFEST.MF b/core/bundles/org.eclipse.jst.ws/META-INF/MANIFEST.MF
index f3c218e..6ac2672 100644
--- a/core/bundles/org.eclipse.jst.ws/META-INF/MANIFEST.MF
+++ b/core/bundles/org.eclipse.jst.ws/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.jst.ws
-Bundle-Version: 1.0.900.qualifier
+Bundle-Version: 1.0.1000.qualifier
 Bundle-Activator: org.eclipse.jst.ws.internal.plugin.WebServicePlugin
 Bundle-Vendor: %PLUGIN_PROVIDER
 Bundle-Localization: plugin
@@ -27,7 +27,7 @@
  org.eclipse.jem;bundle-version="[2.0.0,3.0.0)",
  org.eclipse.jdt.core;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.emf.common;bundle-version="[2.2.0,3.0.0)",
- org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.17.0,4.0.0)",
  org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.jface;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.emf.ecore;bundle-version="[2.2.0,3.0.0)",
diff --git a/core/bundles/org.eclipse.jst.ws/pom.xml b/core/bundles/org.eclipse.jst.ws/pom.xml
index 6a0ae65..7994781 100644
--- a/core/bundles/org.eclipse.jst.ws/pom.xml
+++ b/core/bundles/org.eclipse.jst.ws/pom.xml
@@ -22,6 +22,6 @@
 
   <groupId>org.eclipse.webtools.webservices</groupId>
   <artifactId>org.eclipse.jst.ws</artifactId>
-  <version>1.0.900-SNAPSHOT</version>
+  <version>1.0.1000-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/core/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/common/ResourceUtils.java b/core/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/common/ResourceUtils.java
index 884017d..78ec541 100644
--- a/core/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/common/ResourceUtils.java
+++ b/core/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/common/ResourceUtils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2011 IBM Corporation and others.
+ * Copyright (c) 2004, 2021 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
@@ -47,6 +47,7 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Plugin;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jdt.core.IClasspathEntry;
@@ -715,7 +716,21 @@
 	 * @return
 	 */
 	public static IPath[] getAllJavaSourceLocations(IProject project) {
-		Vector pathVector = new Vector();
+		try {
+			IClasspathEntry[] entries = JavaCore.create(project).getRawClasspath();
+			List<IPath> paths = new ArrayList<IPath>();
+			for (int i = 0; i < entries.length; i++) {
+				if (IClasspathEntry.CPE_SOURCE == entries[i].getEntryKind()) {
+					paths.add(entries[i].getPath());
+				}
+			}
+			return paths.toArray(new IPath[paths.size()]);
+		}
+		catch (JavaModelException e1) {
+			Platform.getLog(WebServicePlugin.getInstance().getBundle()).error(e1.getLocalizedMessage(), e1);
+		}
+
+		Vector<IPath> pathVector = new Vector<IPath>();
 		IPackageFragmentRoot[] fragmentRoots = getJavaPackageFragmentRoots(project);
 
 		for (int i = 0; i < fragmentRoots.length; i++) {
diff --git a/jaxws/bundles/org.eclipse.jst.ws.cxf.ui/META-INF/MANIFEST.MF b/jaxws/bundles/org.eclipse.jst.ws.cxf.ui/META-INF/MANIFEST.MF
index 1b3374b..4e168d5 100644
--- a/jaxws/bundles/org.eclipse.jst.ws.cxf.ui/META-INF/MANIFEST.MF
+++ b/jaxws/bundles/org.eclipse.jst.ws.cxf.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jst.ws.cxf.ui;singleton:=true
-Bundle-Version: 1.0.400.qualifier
+Bundle-Version: 1.0.500.qualifier
 Bundle-Activator: org.eclipse.jst.ws.internal.cxf.ui.CXFUIPlugin
 Bundle-Vendor: %pluginProvider
 Bundle-Localization: plugin
diff --git a/jaxws/bundles/org.eclipse.jst.ws.cxf.ui/pom.xml b/jaxws/bundles/org.eclipse.jst.ws.cxf.ui/pom.xml
index 62e4f76..dc41cb2 100644
--- a/jaxws/bundles/org.eclipse.jst.ws.cxf.ui/pom.xml
+++ b/jaxws/bundles/org.eclipse.jst.ws.cxf.ui/pom.xml
@@ -24,6 +24,6 @@
 
   <groupId>org.eclipse.webtools.webservices</groupId>
   <artifactId>org.eclipse.jst.ws.cxf.ui</artifactId>
-  <version>1.0.400-SNAPSHOT</version>
+  <version>1.0.500-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/jaxws/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/preferences/CXFRuntimePreferencePage.java b/jaxws/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/preferences/CXFRuntimePreferencePage.java
index f2f00f7..4fbdf2c 100644
--- a/jaxws/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/preferences/CXFRuntimePreferencePage.java
+++ b/jaxws/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/preferences/CXFRuntimePreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IONA Technologies PLC
+ * Copyright (c) 2008, 2021 IONA Technologies PLC 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
@@ -17,6 +17,7 @@
 import java.util.Map;
 
 import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
 import org.eclipse.jface.viewers.ColumnLabelProvider;
@@ -273,21 +274,7 @@
         gridData.verticalSpan = 5;
         cxfInstallations.getTable().setLayoutData(gridData);
 
-        cxfInstallations.setContentProvider(new IStructuredContentProvider() {
-
-            public Object[] getElements(Object inputElement) {
-                if (inputElement instanceof Collection<?>) {
-                    return ((Collection<?>) inputElement).toArray();
-                }
-                return new Object[] {};
-            }
-
-            public void dispose() {
-            }
-
-            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-            }
-        });
+        cxfInstallations.setContentProvider(new ArrayContentProvider());
 
         cxfInstallations.setComparator(new ViewerComparator() {
             @Override
diff --git a/jaxws/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFInstallWizardPage.java b/jaxws/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFInstallWizardPage.java
index 34a6f37..16110aa 100644
--- a/jaxws/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFInstallWizardPage.java
+++ b/jaxws/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFInstallWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2012 Shane Clarke.
+ * Copyright (c) 2010, 2021 Shane Clarke 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
@@ -26,6 +26,7 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jdt.core.ClasspathContainerInitializer;
 import org.eclipse.jdt.core.IJavaProject;
@@ -54,6 +55,7 @@
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.wst.common.project.facet.core.IFacetedProject;
 import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.Version;
 
 public class CXFInstallWizardPage extends WizardPage {
@@ -285,6 +287,12 @@
             cxfLib.add(cxLibFolderPath + System.getProperty("file.separator") + jarFile); //$NON-NLS-1$
         }
 
+        final String supportedPrefix = "reference:file:"; //$NON-NLS-1$
+        Bundle activation = Platform.getBundle("javax.activation");
+        if (activation != null && activation.getLocation().startsWith(supportedPrefix)) {
+            cxfLib.add(activation.getLocation().substring(supportedPrefix.length()));
+        }
+
         IStatus toolVersionStatus = LaunchUtils.launch(cxfLib.toArray(new String[cxfLib.size()]),
                 "org.apache.cxf.tools.wsdlto.WSDLToJava", new String[] { "-v" }); //$NON-NLS-1$ //$NON-NLS-2$
         return toolVersionStatus;
diff --git a/jaxws/bundles/org.eclipse.jst.ws.jaxws.core/META-INF/MANIFEST.MF b/jaxws/bundles/org.eclipse.jst.ws.jaxws.core/META-INF/MANIFEST.MF
index 9d3d86c..2ce4b1d 100644
--- a/jaxws/bundles/org.eclipse.jst.ws.jaxws.core/META-INF/MANIFEST.MF
+++ b/jaxws/bundles/org.eclipse.jst.ws.jaxws.core/META-INF/MANIFEST.MF
@@ -3,12 +3,12 @@
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jst.ws.jaxws.core;singleton:=true
 Bundle-Vendor: %pluginProvider
-Bundle-Version: 1.0.501.qualifier
+Bundle-Version: 1.0.600.qualifier
 Bundle-ClassPath: .
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-Activator: org.eclipse.jst.ws.internal.jaxws.core.JAXWSCorePlugin
-Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.17.0,4.0.0)",
  org.eclipse.jdt.core;bundle-version="[3.4.0,4.0.0)",
  org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
  org.eclipse.jdt.apt.core;bundle-version="[3.3.100,4.0.0)",
diff --git a/jaxws/bundles/org.eclipse.jst.ws.jaxws.core/pom.xml b/jaxws/bundles/org.eclipse.jst.ws.jaxws.core/pom.xml
index 19230b4..8664ff0 100644
--- a/jaxws/bundles/org.eclipse.jst.ws.jaxws.core/pom.xml
+++ b/jaxws/bundles/org.eclipse.jst.ws.jaxws.core/pom.xml
@@ -24,7 +24,7 @@
 
   <groupId>org.eclipse.webtools.webservices</groupId>
   <artifactId>org.eclipse.jst.ws.jaxws.core</artifactId>
-  <version>1.0.501-SNAPSHOT</version>
+  <version>1.0.600-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
   <build>
diff --git a/jaxws/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/jaxws/core/utils/JDTUtils.java b/jaxws/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/jaxws/core/utils/JDTUtils.java
index b15c929..3d8d54d 100644
--- a/jaxws/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/jaxws/core/utils/JDTUtils.java
+++ b/jaxws/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/jaxws/core/utils/JDTUtils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IONA Technologies PLC
+ * Copyright (c) 2008, 2021 IONA Technologies PLC 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
@@ -153,6 +153,13 @@
      */
     public static IPath getJavaProjectSourceDirectoryPath(IJavaProject javaProject) {
         try {
+            IClasspathEntry[] rawClasspath = javaProject.getRawClasspath();
+            for (int i = 0; i < rawClasspath.length; i++) {
+                if (rawClasspath[i].getEntryKind() == IClasspathEntry.CPE_SOURCE) {
+                    return rawClasspath[i].getPath();
+                }
+            }
+
             IPackageFragmentRoot[] packageFragmentRoots = javaProject.getAllPackageFragmentRoots();
             IPackageFragmentRoot packageFragmentRoot = packageFragmentRoots[0];
             IResource srcDirectoryResource = packageFragmentRoot.getResource();
diff --git a/jaxws/features/org.eclipse.jst.ws.cxf.feature/feature.xml b/jaxws/features/org.eclipse.jst.ws.cxf.feature/feature.xml
index a2dd9e7..461b627 100644
--- a/jaxws/features/org.eclipse.jst.ws.cxf.feature/feature.xml
+++ b/jaxws/features/org.eclipse.jst.ws.cxf.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jst.ws.cxf.feature"
       label="%featureName"
-      version="1.1.700.qualifier"
+      version="1.1.800.qualifier"
       provider-name="%featureProvider"
       plugin="org.eclipse.jst.ws.cxf.core"
       image="eclipse_update_120.jpg"
diff --git a/jaxws/features/org.eclipse.jst.ws.cxf.feature/pom.xml b/jaxws/features/org.eclipse.jst.ws.cxf.feature/pom.xml
index 9515248..66a357a 100644
--- a/jaxws/features/org.eclipse.jst.ws.cxf.feature/pom.xml
+++ b/jaxws/features/org.eclipse.jst.ws.cxf.feature/pom.xml
@@ -24,7 +24,7 @@
 
   <groupId>org.eclipse.webtools.webservices</groupId>
   <artifactId>org.eclipse.jst.ws.cxf.feature</artifactId>
-  <version>1.1.700-SNAPSHOT</version>
+  <version>1.1.800-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>
diff --git a/jaxws/features/org.eclipse.jst.ws.jaxws.dom.feature/feature.xml b/jaxws/features/org.eclipse.jst.ws.jaxws.dom.feature/feature.xml
index 7b65aaa..7a48a6e 100755
--- a/jaxws/features/org.eclipse.jst.ws.jaxws.dom.feature/feature.xml
+++ b/jaxws/features/org.eclipse.jst.ws.jaxws.dom.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jst.ws.jaxws.dom.feature"
       label="%featureName"
-      version="1.0.303.qualifier"
+      version="1.0.400.qualifier"
       provider-name="%featureProvider"
       image="eclipse_update_120.jpg"
       license-feature="org.eclipse.license"
diff --git a/jaxws/features/org.eclipse.jst.ws.jaxws.dom.feature/pom.xml b/jaxws/features/org.eclipse.jst.ws.jaxws.dom.feature/pom.xml
index cfb17e1..d8750ec 100644
--- a/jaxws/features/org.eclipse.jst.ws.jaxws.dom.feature/pom.xml
+++ b/jaxws/features/org.eclipse.jst.ws.jaxws.dom.feature/pom.xml
@@ -24,7 +24,7 @@
 
   <groupId>org.eclipse.webtools.webservices</groupId>
   <artifactId>org.eclipse.jst.ws.jaxws.dom.feature</artifactId>
-  <version>1.0.303-SNAPSHOT</version>
+  <version>1.0.400-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>
diff --git a/jaxws/features/org.eclipse.jst.ws.jaxws.feature/feature.xml b/jaxws/features/org.eclipse.jst.ws.jaxws.feature/feature.xml
index afef371..d406dd8 100644
--- a/jaxws/features/org.eclipse.jst.ws.jaxws.feature/feature.xml
+++ b/jaxws/features/org.eclipse.jst.ws.jaxws.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jst.ws.jaxws.feature"
       label="%featureName"
-      version="1.2.700.qualifier"
+      version="1.2.800.qualifier"
       provider-name="%featureProvider"
       plugin="org.eclipse.jst.ws.jaxws.core"
       image="eclipse_update_120.jpg"
diff --git a/jaxws/features/org.eclipse.jst.ws.jaxws.feature/pom.xml b/jaxws/features/org.eclipse.jst.ws.jaxws.feature/pom.xml
index 30007c0..fe446ad 100644
--- a/jaxws/features/org.eclipse.jst.ws.jaxws.feature/pom.xml
+++ b/jaxws/features/org.eclipse.jst.ws.jaxws.feature/pom.xml
@@ -24,7 +24,7 @@
 
   <groupId>org.eclipse.webtools.webservices</groupId>
   <artifactId>org.eclipse.jst.ws.jaxws.feature</artifactId>
-  <version>1.2.700-SNAPSHOT</version>
+  <version>1.2.800-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>
