[345667] NPE when creating a servlet if created in a source folder with java build path exclusion patters
diff --git a/features/org.eclipse.jst.enterprise_ui.feature.patch/buildnotes_org.eclipse.jst.enterprise_ui.feature.patch.html b/features/org.eclipse.jst.enterprise_ui.feature.patch/buildnotes_org.eclipse.jst.enterprise_ui.feature.patch.html
index 9dc1682..be6108e 100644
--- a/features/org.eclipse.jst.enterprise_ui.feature.patch/buildnotes_org.eclipse.jst.enterprise_ui.feature.patch.html
+++ b/features/org.eclipse.jst.enterprise_ui.feature.patch/buildnotes_org.eclipse.jst.enterprise_ui.feature.patch.html
@@ -14,6 +14,7 @@
 <h2>org.eclipse.jst.enterprise_ui.feature</h2>
 
 <p>Bug <a href='https://bugs.eclipse.org/344733'>344733</a>. [JAX-RS] Upon selection, the JAX-RS Configuration page is blank when Project Facets page has unapplied changes</p>
+<p>Bug <a href='https://bugs.eclipse.org/345667'>345667</a>. NPE when creating a servlet if created in a source folder with java build path exclusion patters</p>
 
 </body>
 </html>
\ No newline at end of file
diff --git a/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.properties b/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.properties
index d1b4e67..4500af7 100644
--- a/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.properties
+++ b/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.properties
@@ -29,6 +29,7 @@
 The fixes are described in the following bugzilla entries:\n\
 \n\
 Bug https://bugs.eclipse.org/344733 [JAX-RS] Upon selection, the JAX-RS Configuration page is blank when Project Facets page has unapplied changes\n\
+Bug https://bugs.eclipse.org/345667 NPE when creating a servlet if created in a source folder with java build path exclusion patters\n\
 \n\
 
 # "copyright" property - text of the "Feature Update Copyright"
diff --git a/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.xml b/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.xml
index f356799..69fead2 100644
--- a/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.xml
+++ b/features/org.eclipse.jst.enterprise_ui.feature.patch/feature.xml
@@ -22,6 +22,13 @@
    </requires>
 
    <plugin
+         id="org.eclipse.jst.servlet.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
          id="org.eclipse.jst.ws.jaxrs.ui"
          download-size="0"
          install-size="0"
diff --git a/plugins/org.eclipse.jst.servlet.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.servlet.ui/META-INF/MANIFEST.MF
index 7805cdf..2b256b9 100644
--- a/plugins/org.eclipse.jst.servlet.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.servlet.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jst.servlet.ui; singleton:=true
-Bundle-Version: 1.1.405.qualifier
+Bundle-Version: 1.1.406.qualifier
 Bundle-Activator: org.eclipse.jst.servlet.ui.internal.plugin.ServletUIPlugin
 Bundle-Vendor: %pluginVendor
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/NewWebArtifactWizard.java b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/NewWebArtifactWizard.java
index d1fe456..a75b864 100644
--- a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/NewWebArtifactWizard.java
+++ b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/NewWebArtifactWizard.java
@@ -11,19 +11,28 @@
 package org.eclipse.jst.servlet.ui.internal.wizard;
 
 import static org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties.CLASS_NAME;
+import static org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties.JAVA_PACKAGE;
 import static org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties.OPEN_IN_EDITOR;
 import static org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties.PROJECT;
 import static org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties.QUALIFIED_CLASS_NAME;
+import static org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties.JAVA_SOURCE_FOLDER;
 import static org.eclipse.jst.j2ee.internal.web.operations.INewWebClassDataModelProperties.USE_EXISTING_CLASS;
 
 import java.net.URL;
 
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.IType;
 import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jst.j2ee.internal.common.operations.JavaModelUtil;
 import org.eclipse.jst.j2ee.internal.plugin.J2EEEditorUtility;
 import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin;
 import org.eclipse.jst.servlet.ui.internal.plugin.ServletUIPlugin;
@@ -76,8 +85,35 @@
 			}
 			IProject p = (IProject) getDataModel().getProperty(PROJECT);
 			IJavaProject javaProject = J2EEEditorUtility.getJavaProject(p);
-			IFile file = (IFile) javaProject.findType(className).getResource();
-			openEditor(file);
+			IType type = javaProject.findType(className);
+			IFile file = null;
+			
+			if (type != null){
+				file = (IFile) type.getResource();				
+			}
+			else if (!getDataModel().getBooleanProperty(USE_EXISTING_CLASS)){
+				// If we could not find the type, the class might be in a folder that is not part of the build path. 
+				// Let's look for it using the class name and source folder (this does not work when using existing class, but
+				// should not be a problem, because the wizard to select the existing class will not let you select class that 
+				// is not in the build path)
+				IFolder sourceFolder = (IFolder) getDataModel().getProperty(JAVA_SOURCE_FOLDER);
+				String packageName = getDataModel().getStringProperty(JAVA_PACKAGE);
+				IPackageFragmentRoot packageFragmentRoot = javaProject.getPackageFragmentRoot(sourceFolder);
+				IPackageFragment packageFragment = null;
+				if (packageFragmentRoot!= null){
+					packageFragment = packageFragmentRoot.getPackageFragment(packageName);
+				}
+				if (packageFragment!= null){
+					ICompilationUnit cu = packageFragment.getCompilationUnit(getDataModel().getStringProperty(CLASS_NAME) + JavaModelUtil.DEFAULT_CU_SUFFIX);				
+					IResource resource = cu.getResource();
+					if (resource.exists() && resource instanceof IFile) {
+						file = (IFile)resource;
+					}
+				}			
+			}
+			if (file != null){
+				openEditor(file);
+			}
 		} catch (Exception cantOpen) {
 			ServletUIPlugin.log(cantOpen);
 		}