[376643] Source files not included in WEB-INF/classes when exporting a WAR if .component file contains non-existing folders
diff --git a/tests/org.eclipse.jst.j2ee.tests/DefectTestData/TestCaseSourceNotExported.zip b/tests/org.eclipse.jst.j2ee.tests/DefectTestData/TestCaseSourceNotExported.zip
new file mode 100644
index 0000000..8835354
--- /dev/null
+++ b/tests/org.eclipse.jst.j2ee.tests/DefectTestData/TestCaseSourceNotExported.zip
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/defect-tests/org/eclipse/jst/j2ee/defect/tests/DefectVerificationTests.java b/tests/org.eclipse.jst.j2ee.tests/defect-tests/org/eclipse/jst/j2ee/defect/tests/DefectVerificationTests.java
index 0ac5e98..500b539 100644
--- a/tests/org.eclipse.jst.j2ee.tests/defect-tests/org/eclipse/jst/j2ee/defect/tests/DefectVerificationTests.java
+++ b/tests/org.eclipse.jst.j2ee.tests/defect-tests/org/eclipse/jst/j2ee/defect/tests/DefectVerificationTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2012 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,6 +32,7 @@
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.jobs.IJobManager;
 import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.etools.common.test.apitools.ProjectUnzipUtil;
 import org.eclipse.jdt.core.IClasspathContainer;
 import org.eclipse.jdt.core.IClasspathEntry;
 import org.eclipse.jdt.core.IJavaProject;
@@ -53,6 +54,7 @@
 import org.eclipse.jst.j2ee.componentcore.util.EARArtifactEdit;
 import org.eclipse.jst.j2ee.datamodel.properties.IEARComponentExportDataModelProperties;
 import org.eclipse.jst.j2ee.datamodel.properties.IEARComponentImportDataModelProperties;
+import org.eclipse.jst.j2ee.datamodel.properties.IJ2EEComponentExportDataModelProperties;
 import org.eclipse.jst.j2ee.dependency.tests.util.ProjectUtil;
 import org.eclipse.jst.j2ee.ejb.project.operations.IEjbFacetInstallDataModelProperties;
 import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
@@ -748,6 +750,42 @@
 	*/
 
 	/**
+	 * Test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=376643
+	 */
+	public void test376643() throws Exception {
+		final String[] projectNames = {"EAR", "Web"};
+		final String zipLocation = getFullTestDataPath("TestCaseSourceNotExported.zip");
+		final Path servletJavaFilePath = new Path("com/test/TestServlet1.java");
+		
+		// Import projects
+		ProjectUnzipUtil util = new ProjectUnzipUtil(new Path(zipLocation), projectNames);
+		util.createProjects();
+		IVirtualComponent webComponent = ComponentCore.createComponent(J2EEProjectUtilities.getProject("Web"));
+		
+		final IVirtualFolder jsrc = webComponent.getRootFolder().getFolder("/WEB-INF/classes");
+	
+		//Export WAR including source
+		IDataModel dataModel = DataModelFactory.createDataModel(new WebComponentExportDataModelProvider());
+		dataModel.setProperty(IJ2EEComponentExportDataModelProperties.PROJECT_NAME, projectNames[1]);
+		dataModel.setProperty(J2EEComponentExportDataModelProvider.ARCHIVE_DESTINATION, getDataPath("Web.war"));
+		dataModel.setBooleanProperty(J2EEComponentExportDataModelProvider.EXPORT_SOURCE_FILES, true);
+		dataModel.setBooleanProperty(J2EEComponentExportDataModelProvider.OVERWRITE_EXISTING, true);
+		dataModel.setProperty(IJ2EEComponentExportDataModelProperties.RUN_BUILD, true);
+		IStatus status = dataModel.getDefaultOperation().execute(null, null);
+		Assert.assertEquals("Exporting WAR failed " + status.getMessage(), IStatus.OK, status.getSeverity());
+		
+		// Verify source was exported in the WAR
+		IArchive archiveWAR = JavaEEArchiveUtilities.INSTANCE.openArchive(new Path(getDataPath("Web.war")));
+		Assert.assertTrue("Archive does not contain file " + servletJavaFilePath,
+						archiveWAR.containsArchiveResource(jsrc.getRuntimePath().append(servletJavaFilePath).makeRelative())); 
+												
+		//archiveWAR.
+		JavaEEArchiveUtilities.INSTANCE.closeArchive(archiveWAR);
+		
+	}
+	
+	
+	/**
 	 * Test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=311542
 	 */
 	public void test311542() throws Exception {