diff --git a/tests/org.eclipse.jst.j2ee.core.tests/.classpath b/tests/org.eclipse.jst.j2ee.core.tests/.classpath
deleted file mode 100644
index 3484998..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="commonArchiveTests"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/.cvsignore b/tests/org.eclipse.jst.j2ee.core.tests/.cvsignore
deleted file mode 100644
index 09178ee..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-bin
-testOutput
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/.project b/tests/org.eclipse.jst.j2ee.core.tests/.project
deleted file mode 100644
index ecd7aaa..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/.project
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jst.j2ee.core.tests</name>
-	<comment></comment>
-	<projects></projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/build.properties b/tests/org.eclipse.jst.j2ee.core.tests/build.properties
deleted file mode 100644
index a6ad43d..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/build.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-bin.includes = tests.jar,\
-               plugin.xml,\
-               my/,\
-               my.bar,\
-               test.xml,\
-               commonArchiveResources/,\
-               testData/
-output.tests.jar = bin/
-jars.compile.order = tests.jar
-source.tests.jar = commonArchiveTests/
-bin.excludes = commonArchiveResources/.cvsignore
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/build/buildcontrol.properties b/tests/org.eclipse.jst.j2ee.core.tests/build/buildcontrol.properties
deleted file mode 100644
index 082a993..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/build/buildcontrol.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-CONTACT=danberg@us.ibm.com
-ComponentShortName=com.ibm.etools.j2ee.core.test
-ComponentFullName=com.ibm.etools.j2ee.core.test
-ComponentCompetency=TESTS
-JavaCompile.1=srcjar
-BuildVerification.1=dir
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/build/package.xml b/tests/org.eclipse.jst.j2ee.core.tests/build/package.xml
deleted file mode 100644
index 191f326..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/build/package.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<project name="com.ibm.etools.j2ee.core.test" default="packagingPlugin" basedir="./..">
-    <target name="init">
-        <property name="packageDir" value=""/>
-        <property name="plugin.directory"  value="${basedir}"/>
-        <property name="plugin.id" value="com.ibm.etools.j2ee.core.test"/>
-        <property name="plugin.version"  value=""/>
-    </target>
-    <target name="packagingPlugin" depends="init">
-        <echo message="${plugin.id}"/>
-        <copy todir="${packageDir}/plugins/${plugin.id}_${plugin.version}">
-            <fileset dir="${plugin.directory}">
-                <include name="plugin.xml"/>
-                <include name="test.xml"/>
-                <include name="runtime/commonArchiveTests.jar"/>
-                <include name="runtime/modelTests.jar"/>
-                <include name="runtime/javaTests.jar"/>
-            </fileset>
-        </copy>
-    </target>
-</project>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/build/wsBuild.xml b/tests/org.eclipse.jst.j2ee.core.tests/build/wsBuild.xml
deleted file mode 100644
index bb53885..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/build/wsBuild.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE project [
-	<!ENTITY baseBuild SYSTEM "file:../../wsBuildDef.xml">
-]>
-
-<project name="buildPlugin" default="build" basedir="./..">
-
-<!-- include the common xml build file -->
-&baseBuild;
-
-<target name="build" depends="prepare" if="plugin.id">
-
-    <antcall target="unzipsrcjar"> <param name="jarname" value="commonArchiveTests"/> </antcall>
-    <antcall target="unzipsrcjar"> <param name="jarname" value="modelTests"/> </antcall>
-    <antcall target="unzipsrcjar"> <param name="jarname" value="javaTests"/> </antcall>
-
-    <mkdir dir= "${plugin.build.directory}/commonbld"/>
-    <javac failonerror="false" destdir="${plugin.build.directory}/commonbld" includeAntRuntime="false">
-        <src path="${plugin.src.directory}/commonArchiveTests"/>
-        <src path="${plugin.src.directory}/modelTests"/>
-        <src path="${plugin.src.directory}/javaTests"/>
-        <bootclasspath path="${bootclasspath}"/>
-        <classpath path="${plugin.classpath}"/>
-    </javac>
-
-	<antcall target="buildjar">
-		<param name="jarname" value="commonArchiveTests"/>
-		<param name="jarclasspath" value="${plugin.classpath};${plugin.build.directory}/commonbld"/>
-	</antcall>
-	<antcall target="buildjar">
-		<param name="jarname" value="modelTests"/>
-		<param name="jarclasspath" value="${plugin.classpath};${plugin.build.directory}/commonbld"/>
-	</antcall>
-	<antcall target="buildjar">
-		<param name="jarname" value="javaTests"/>
-		<param name="jarclasspath" value="${plugin.classpath};${plugin.build.directory}/commonbld"/>
-	</antcall>
-
-</target>
-</project>
-
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/.cvsignore b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/.cvsignore
deleted file mode 100644
index 09178ee..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-bin
-testOutput
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTestNoID/application-client.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTestNoID/application-client.xml
deleted file mode 100644
index 8796e23..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTestNoID/application-client.xml
+++ /dev/null
@@ -1,142 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE application-client PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application Client 1.3//EN" "http://java.sun.com/dtd/application-client_1_3.dtd">
-
-   <application-client id="Application-client_ID">
-      <icon>
-         <small-icon>smallIcon_0</small-icon>
-         <large-icon>largeIcon_0</large-icon>
-      </icon>
-      <display-name>displayName_0</display-name>
-      <description>description_0</description>
-      <env-entry>
-         <description>description_0</description>
-         <env-entry-name>name_0</env-entry-name>
-         <env-entry-type>java.lang.String</env-entry-type>
-         <env-entry-value>value_0</env-entry-value>
-      </env-entry>
-      <env-entry>
-         <description>description_1</description>
-         <env-entry-name>name_1</env-entry-name>
-         <env-entry-type>java.lang.Integer</env-entry-type>
-         <env-entry-value>value_1</env-entry-value>
-      </env-entry>
-      <env-entry>
-         <description>description_2</description>
-         <env-entry-name>name_2</env-entry-name>
-         <env-entry-type>java.lang.Boolean</env-entry-type>
-         <env-entry-value>value_2</env-entry-value>
-      </env-entry>
-      <env-entry>
-         <description>description_3</description>
-         <env-entry-name>name_3</env-entry-name>
-         <env-entry-type>java.lang.Double</env-entry-type>
-         <env-entry-value>value_3</env-entry-value>
-      </env-entry>
-      <env-entry>
-         <description>description_4</description>
-         <env-entry-name>name_4</env-entry-name>
-         <env-entry-type>java.lang.Byte</env-entry-type>
-         <env-entry-value>value_4</env-entry-value>
-      </env-entry>
-      <ejb-ref>
-         <description>description_0</description>
-         <ejb-ref-name>name_0</ejb-ref-name>
-         <ejb-ref-type>Session</ejb-ref-type>
-         <home>home_0</home>
-         <remote>remote_0</remote>
-         <ejb-link>link_0</ejb-link>
-      </ejb-ref>
-      <ejb-ref>
-         <description>description_1</description>
-         <ejb-ref-name>name_1</ejb-ref-name>
-         <ejb-ref-type>Entity</ejb-ref-type>
-         <home>home_1</home>
-         <remote>remote_1</remote>
-         <ejb-link>link_1</ejb-link>
-      </ejb-ref>
-      <ejb-ref>
-         <description>description_2</description>
-         <ejb-ref-name>name_2</ejb-ref-name>
-         <ejb-ref-type>Session</ejb-ref-type>
-         <home>home_2</home>
-         <remote>remote_2</remote>
-         <ejb-link>link_2</ejb-link>
-      </ejb-ref>
-      <ejb-ref>
-         <description>description_3</description>
-         <ejb-ref-name>name_3</ejb-ref-name>
-         <ejb-ref-type>Entity</ejb-ref-type>
-         <home>home_3</home>
-         <remote>remote_3</remote>
-         <ejb-link>link_3</ejb-link>
-      </ejb-ref>
-      <ejb-ref>
-         <description>description_4</description>
-         <ejb-ref-name>name_4</ejb-ref-name>
-         <ejb-ref-type>Session</ejb-ref-type>
-         <home>home_4</home>
-         <remote>remote_4</remote>
-         <ejb-link>link_4</ejb-link>
-      </ejb-ref>
-      <resource-ref>
-         <description>description_0</description>
-         <res-ref-name>name_0</res-ref-name>
-         <res-type>type_0</res-type>
-         <res-auth>Container</res-auth>
-         <res-sharing-scope>Shareable</res-sharing-scope>
-      </resource-ref>
-      <resource-ref>
-         <description>description_1</description>
-         <res-ref-name>name_1</res-ref-name>
-         <res-type>type_1</res-type>
-         <res-auth>Application</res-auth>
-         <res-sharing-scope>Unshareable</res-sharing-scope>
-      </resource-ref>
-      <resource-ref>
-         <description>description_2</description>
-         <res-ref-name>name_2</res-ref-name>
-         <res-type>type_2</res-type>
-         <res-auth>Container</res-auth>
-         <res-sharing-scope>Shareable</res-sharing-scope>
-      </resource-ref>
-      <resource-ref>
-         <description>description_3</description>
-         <res-ref-name>name_3</res-ref-name>
-         <res-type>type_3</res-type>
-         <res-auth>Application</res-auth>
-         <res-sharing-scope>Unshareable</res-sharing-scope>
-      </resource-ref>
-      <resource-ref>
-         <description>description_4</description>
-         <res-ref-name>name_4</res-ref-name>
-         <res-type>type_4</res-type>
-         <res-auth>Container</res-auth>
-         <res-sharing-scope>Shareable</res-sharing-scope>
-      </resource-ref>
-      <resource-env-ref>
-         <description>description_0</description>
-         <resource-env-ref-name>name_0</resource-env-ref-name>
-         <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-      </resource-env-ref>
-      <resource-env-ref>
-         <description>description_1</description>
-         <resource-env-ref-name>name_1</resource-env-ref-name>
-         <resource-env-ref-type>java.util.List</resource-env-ref-type>
-      </resource-env-ref>
-      <resource-env-ref>
-         <description>description_2</description>
-         <resource-env-ref-name>name_2</resource-env-ref-name>
-         <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-      </resource-env-ref>
-      <resource-env-ref>
-         <description>description_3</description>
-         <resource-env-ref-name>name_3</resource-env-ref-name>
-         <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-      </resource-env-ref>
-      <resource-env-ref>
-         <description>description_4</description>
-         <resource-env-ref-name>name_4</resource-env-ref-name>
-         <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-      </resource-env-ref>
-      <callback-handler>java.util.HashTable</callback-handler>
-   </application-client>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTestNoID/application.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTestNoID/application.xml
deleted file mode 100644
index dbe7745..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTestNoID/application.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" "http://java.sun.com/dtd/application_1_3.dtd">
-
-   <application id="Application_ID">
-      <icon>
-         <small-icon>smallIcon_0</small-icon>
-         <large-icon>largeIcon_0</large-icon>
-      </icon>
-      <display-name>displayName_0</display-name>
-      <description>description_0</description>
-      <module>
-         <java>uri_0</java>
-         <alt-dd>altDD_0</alt-dd>
-      </module>
-      <module>
-         <ejb>uri_0</ejb>
-         <alt-dd>altDD_0</alt-dd>
-      </module>
-      <module>
-         <web>
-            <web-uri>uri_0</web-uri>
-            <context-root>contextRoot_0</context-root>
-         </web>
-         <alt-dd>altDD_0</alt-dd>
-      </module>
-      <module>
-         <connector>uri_0</connector>
-         <alt-dd>altDD_0</alt-dd>
-      </module>
-      <module>
-         <java>uri_1</java>
-         <alt-dd>altDD_1</alt-dd>
-      </module>
-      <security-role>
-         <description>description_0</description>
-         <role-name>roleName_0</role-name>
-      </security-role>
-      <security-role>
-         <description>description_1</description>
-         <role-name>roleName_1</role-name>
-      </security-role>
-      <security-role>
-         <description>description_2</description>
-         <role-name>roleName_2</role-name>
-      </security-role>
-      <security-role>
-         <description>description_3</description>
-         <role-name>roleName_3</role-name>
-      </security-role>
-      <security-role>
-         <description>description_4</description>
-         <role-name>roleName_4</role-name>
-      </security-role>
-   </application>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTestNoID/ejb-jar.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTestNoID/ejb-jar.xml
deleted file mode 100644
index 739d68d..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTestNoID/ejb-jar.xml
+++ /dev/null
@@ -1,2869 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
-
-   <ejb-jar id="ejb-jar_ID">
-      <description>description_0</description>
-      <display-name>displayName_0</display-name>
-      <small-icon>smallIcon_0</small-icon>
-      <large-icon>largeIcon_0</large-icon>
-      <enterprise-beans>
-         <entity>
-            <description>description_0</description>
-            <display-name>displayName_0</display-name>
-            <small-icon>smallIcon_0</small-icon>
-            <large-icon>largeIcon_0</large-icon>
-            <ejb-name>name_0</ejb-name>
-            <home>java.util.HashTable</home>
-            <remote>java.util.HashTable</remote>
-            <local-home>java.util.HashTable</local-home>
-            <local>java.util.HashTable</local>
-            <ejb-class>java.util.HashTable</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.util.HashTable</prim-key-class>
-            <reentrant>True</reentrant>
-            <env-entry>
-               <description>description_0</description>
-               <env-entry-name>name_0</env-entry-name>
-               <env-entry-type>java.lang.String</env-entry-type>
-               <env-entry-value>value_0</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_1</description>
-               <env-entry-name>name_1</env-entry-name>
-               <env-entry-type>java.lang.Integer</env-entry-type>
-               <env-entry-value>value_1</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_2</description>
-               <env-entry-name>name_2</env-entry-name>
-               <env-entry-type>java.lang.Boolean</env-entry-type>
-               <env-entry-value>value_2</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_3</description>
-               <env-entry-name>name_3</env-entry-name>
-               <env-entry-type>java.lang.Double</env-entry-type>
-               <env-entry-value>value_3</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_4</description>
-               <env-entry-name>name_4</env-entry-name>
-               <env-entry-type>java.lang.Byte</env-entry-type>
-               <env-entry-value>value_4</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-               <description>description_0</description>
-               <ejb-ref-name>name_0</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_0</home>
-               <remote>remote_0</remote>
-               <ejb-link>link_0</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_1</description>
-               <ejb-ref-name>name_1</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_1</home>
-               <remote>remote_1</remote>
-               <ejb-link>link_1</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_2</description>
-               <ejb-ref-name>name_2</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_2</home>
-               <remote>remote_2</remote>
-               <ejb-link>link_2</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_3</description>
-               <ejb-ref-name>name_3</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_3</home>
-               <remote>remote_3</remote>
-               <ejb-link>link_3</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_4</description>
-               <ejb-ref-name>name_4</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_4</home>
-               <remote>remote_4</remote>
-               <ejb-link>link_4</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-               <description>description_0</description>
-               <ejb-ref-name>name_0</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_0</local-home>
-               <local>remote_0</local>
-               <ejb-link>link_0</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_1</description>
-               <ejb-ref-name>name_1</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_1</local-home>
-               <local>remote_1</local>
-               <ejb-link>link_1</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_2</description>
-               <ejb-ref-name>name_2</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_2</local-home>
-               <local>remote_2</local>
-               <ejb-link>link_2</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_3</description>
-               <ejb-ref-name>name_3</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_3</local-home>
-               <local>remote_3</local>
-               <ejb-link>link_3</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_4</description>
-               <ejb-ref-name>name_4</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_4</local-home>
-               <local>remote_4</local>
-               <ejb-link>link_4</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-               <description>description_0</description>
-               <role-name>name_0</role-name>
-               <role-link>link_0</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_1</description>
-               <role-name>name_1</role-name>
-               <role-link>link_1</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_2</description>
-               <role-name>name_2</role-name>
-               <role-link>link_2</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_3</description>
-               <role-name>name_3</role-name>
-               <role-link>link_3</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_4</description>
-               <role-name>name_4</role-name>
-               <role-link>link_4</role-link>
-            </security-role-ref>
-            <security-identity>
-               <description>description_0</description>
-               <run-as>
-                  <description>description_0</description>
-                  <role-name>roleName_0</role-name>
-               </run-as>
-            </security-identity>
-            <resource-ref>
-               <description>description_0</description>
-               <res-ref-name>name_0</res-ref-name>
-               <res-type>type_0</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_1</description>
-               <res-ref-name>name_1</res-ref-name>
-               <res-type>type_1</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_2</description>
-               <res-ref-name>name_2</res-ref-name>
-               <res-type>type_2</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_3</description>
-               <res-ref-name>name_3</res-ref-name>
-               <res-type>type_3</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_4</description>
-               <res-ref-name>name_4</res-ref-name>
-               <res-type>type_4</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-               <description>description_0</description>
-               <resource-env-ref-name>name_0</resource-env-ref-name>
-               <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_1</description>
-               <resource-env-ref-name>name_1</resource-env-ref-name>
-               <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_2</description>
-               <resource-env-ref-name>name_2</resource-env-ref-name>
-               <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_3</description>
-               <resource-env-ref-name>name_3</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_4</description>
-               <resource-env-ref-name>name_4</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-         </entity>
-         <entity>
-            <description>description_1</description>
-            <display-name>displayName_1</display-name>
-            <small-icon>smallIcon_1</small-icon>
-            <large-icon>largeIcon_1</large-icon>
-            <ejb-name>name_1</ejb-name>
-            <home>java.util.List</home>
-            <remote>java.util.List</remote>
-            <local-home>java.util.List</local-home>
-            <local>java.util.List</local>
-            <ejb-class>java.util.List</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.util.List</prim-key-class>
-            <reentrant>False</reentrant>
-            <env-entry>
-               <description>description_5</description>
-               <env-entry-name>name_5</env-entry-name>
-               <env-entry-type>java.lang.Short</env-entry-type>
-               <env-entry-value>value_5</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_6</description>
-               <env-entry-name>name_6</env-entry-name>
-               <env-entry-type>java.lang.Long</env-entry-type>
-               <env-entry-value>value_6</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_7</description>
-               <env-entry-name>name_7</env-entry-name>
-               <env-entry-type>java.lang.Float</env-entry-type>
-               <env-entry-value>value_7</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_8</description>
-               <env-entry-name>name_8</env-entry-name>
-               <env-entry-type>java.lang.Character</env-entry-type>
-               <env-entry-value>value_8</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_9</description>
-               <env-entry-name>name_9</env-entry-name>
-               <env-entry-type>java.lang.String</env-entry-type>
-               <env-entry-value>value_9</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-               <description>description_5</description>
-               <ejb-ref-name>name_5</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_5</home>
-               <remote>remote_5</remote>
-               <ejb-link>link_5</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_6</description>
-               <ejb-ref-name>name_6</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_6</home>
-               <remote>remote_6</remote>
-               <ejb-link>link_6</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_7</description>
-               <ejb-ref-name>name_7</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_7</home>
-               <remote>remote_7</remote>
-               <ejb-link>link_7</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_8</description>
-               <ejb-ref-name>name_8</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_8</home>
-               <remote>remote_8</remote>
-               <ejb-link>link_8</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_9</description>
-               <ejb-ref-name>name_9</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_9</home>
-               <remote>remote_9</remote>
-               <ejb-link>link_9</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-               <description>description_5</description>
-               <ejb-ref-name>name_5</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_5</local-home>
-               <local>remote_5</local>
-               <ejb-link>link_5</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_6</description>
-               <ejb-ref-name>name_6</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_6</local-home>
-               <local>remote_6</local>
-               <ejb-link>link_6</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_7</description>
-               <ejb-ref-name>name_7</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_7</local-home>
-               <local>remote_7</local>
-               <ejb-link>link_7</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_8</description>
-               <ejb-ref-name>name_8</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_8</local-home>
-               <local>remote_8</local>
-               <ejb-link>link_8</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_9</description>
-               <ejb-ref-name>name_9</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_9</local-home>
-               <local>remote_9</local>
-               <ejb-link>link_9</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-               <description>description_5</description>
-               <role-name>name_5</role-name>
-               <role-link>link_5</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_6</description>
-               <role-name>name_6</role-name>
-               <role-link>link_6</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_7</description>
-               <role-name>name_7</role-name>
-               <role-link>link_7</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_8</description>
-               <role-name>name_8</role-name>
-               <role-link>link_8</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_9</description>
-               <role-name>name_9</role-name>
-               <role-link>link_9</role-link>
-            </security-role-ref>
-            <security-identity>
-               <description>description_0</description>
-               <use-caller-identity></use-caller-identity>
-            </security-identity>
-            <resource-ref>
-               <description>description_5</description>
-               <res-ref-name>name_5</res-ref-name>
-               <res-type>type_5</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_6</description>
-               <res-ref-name>name_6</res-ref-name>
-               <res-type>type_6</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_7</description>
-               <res-ref-name>name_7</res-ref-name>
-               <res-type>type_7</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_8</description>
-               <res-ref-name>name_8</res-ref-name>
-               <res-type>type_8</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_9</description>
-               <res-ref-name>name_9</res-ref-name>
-               <res-type>type_9</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-               <description>description_5</description>
-               <resource-env-ref-name>name_5</resource-env-ref-name>
-               <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_6</description>
-               <resource-env-ref-name>name_6</resource-env-ref-name>
-               <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_7</description>
-               <resource-env-ref-name>name_7</resource-env-ref-name>
-               <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_8</description>
-               <resource-env-ref-name>name_8</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_9</description>
-               <resource-env-ref-name>name_9</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-         </entity>
-         <entity>
-            <description>description_0</description>
-            <display-name>displayName_0</display-name>
-            <small-icon>smallIcon_0</small-icon>
-            <large-icon>largeIcon_0</large-icon>
-            <ejb-name>name_2</ejb-name>
-            <home>java.util.HashTable</home>
-            <remote>java.util.HashTable</remote>
-            <local-home>java.util.HashTable</local-home>
-            <local>java.util.HashTable</local>
-            <ejb-class>java.util.HashTable</ejb-class>
-            <persistence-type>Container</persistence-type>
-            <prim-key-class>java.util.HashTable</prim-key-class>
-            <reentrant>True</reentrant>
-            <cmp-version>2.x</cmp-version>
-            <abstract-schema-name>abstractSchemaName_0</abstract-schema-name>
-            <cmp-field>
-               <field-name>name_0</field-name>
-            </cmp-field>
-            <cmp-field>
-               <field-name>name_1</field-name>
-            </cmp-field>
-            <cmp-field>
-               <field-name>name_2</field-name>
-            </cmp-field>
-            <cmp-field>
-               <field-name>name_3</field-name>
-            </cmp-field>
-            <cmp-field>
-               <field-name>name_4</field-name>
-            </cmp-field>
-            <primkey-field>name_0</primkey-field>
-            <env-entry>
-               <description>description_10</description>
-               <env-entry-name>name_10</env-entry-name>
-               <env-entry-type>java.lang.Integer</env-entry-type>
-               <env-entry-value>value_10</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_11</description>
-               <env-entry-name>name_11</env-entry-name>
-               <env-entry-type>java.lang.Boolean</env-entry-type>
-               <env-entry-value>value_11</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_12</description>
-               <env-entry-name>name_12</env-entry-name>
-               <env-entry-type>java.lang.Double</env-entry-type>
-               <env-entry-value>value_12</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_13</description>
-               <env-entry-name>name_13</env-entry-name>
-               <env-entry-type>java.lang.Byte</env-entry-type>
-               <env-entry-value>value_13</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_14</description>
-               <env-entry-name>name_14</env-entry-name>
-               <env-entry-type>java.lang.Short</env-entry-type>
-               <env-entry-value>value_14</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-               <description>description_10</description>
-               <ejb-ref-name>name_10</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_10</home>
-               <remote>remote_10</remote>
-               <ejb-link>link_10</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_11</description>
-               <ejb-ref-name>name_11</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_11</home>
-               <remote>remote_11</remote>
-               <ejb-link>link_11</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_12</description>
-               <ejb-ref-name>name_12</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_12</home>
-               <remote>remote_12</remote>
-               <ejb-link>link_12</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_13</description>
-               <ejb-ref-name>name_13</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_13</home>
-               <remote>remote_13</remote>
-               <ejb-link>link_13</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_14</description>
-               <ejb-ref-name>name_14</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_14</home>
-               <remote>remote_14</remote>
-               <ejb-link>link_14</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-               <description>description_10</description>
-               <ejb-ref-name>name_10</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_10</local-home>
-               <local>remote_10</local>
-               <ejb-link>link_10</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_11</description>
-               <ejb-ref-name>name_11</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_11</local-home>
-               <local>remote_11</local>
-               <ejb-link>link_11</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_12</description>
-               <ejb-ref-name>name_12</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_12</local-home>
-               <local>remote_12</local>
-               <ejb-link>link_12</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_13</description>
-               <ejb-ref-name>name_13</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_13</local-home>
-               <local>remote_13</local>
-               <ejb-link>link_13</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_14</description>
-               <ejb-ref-name>name_14</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_14</local-home>
-               <local>remote_14</local>
-               <ejb-link>link_14</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-               <description>description_10</description>
-               <role-name>name_10</role-name>
-               <role-link>link_10</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_11</description>
-               <role-name>name_11</role-name>
-               <role-link>link_11</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_12</description>
-               <role-name>name_12</role-name>
-               <role-link>link_12</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_13</description>
-               <role-name>name_13</role-name>
-               <role-link>link_13</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_14</description>
-               <role-name>name_14</role-name>
-               <role-link>link_14</role-link>
-            </security-role-ref>
-            <security-identity>
-               <description>description_1</description>
-               <run-as>
-                  <description>description_1</description>
-                  <role-name>roleName_1</role-name>
-               </run-as>
-            </security-identity>
-            <resource-ref>
-               <description>description_10</description>
-               <res-ref-name>name_10</res-ref-name>
-               <res-type>type_10</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_11</description>
-               <res-ref-name>name_11</res-ref-name>
-               <res-type>type_11</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_12</description>
-               <res-ref-name>name_12</res-ref-name>
-               <res-type>type_12</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_13</description>
-               <res-ref-name>name_13</res-ref-name>
-               <res-type>type_13</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_14</description>
-               <res-ref-name>name_14</res-ref-name>
-               <res-type>type_14</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-               <description>description_10</description>
-               <resource-env-ref-name>name_10</resource-env-ref-name>
-               <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_11</description>
-               <resource-env-ref-name>name_11</resource-env-ref-name>
-               <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_12</description>
-               <resource-env-ref-name>name_12</resource-env-ref-name>
-               <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_13</description>
-               <resource-env-ref-name>name_13</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_14</description>
-               <resource-env-ref-name>name_14</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <query>
-               <description>description_0</description>
-               <query-method>
-                  <method-name>name_0</method-name>
-                  <method-params></method-params>
-               </query-method>
-               <result-type-mapping>Remote</result-type-mapping>
-               <ejb-ql>ejbQL_0</ejb-ql>
-            </query>
-            <query>
-               <description>description_1</description>
-               <query-method>
-                  <method-name>name_1</method-name>
-                  <method-params>
-                     <method-param>parms_0</method-param>
-                  </method-params>
-               </query-method>
-               <result-type-mapping>Local</result-type-mapping>
-               <ejb-ql>ejbQL_1</ejb-ql>
-            </query>
-            <query>
-               <description>description_2</description>
-               <query-method>
-                  <method-name>name_2</method-name>
-                  <method-params>
-                     <method-param>parms_1</method-param>
-                     <method-param>parms_2</method-param>
-                  </method-params>
-               </query-method>
-               <result-type-mapping>Remote</result-type-mapping>
-               <ejb-ql>ejbQL_2</ejb-ql>
-            </query>
-            <query>
-               <description>description_3</description>
-               <query-method>
-                  <method-name>name_3</method-name>
-                  <method-params>
-                     <method-param>parms_3</method-param>
-                     <method-param>parms_4</method-param>
-                     <method-param>parms_5</method-param>
-                  </method-params>
-               </query-method>
-               <result-type-mapping>Local</result-type-mapping>
-               <ejb-ql>ejbQL_3</ejb-ql>
-            </query>
-            <query>
-               <description>description_4</description>
-               <query-method>
-                  <method-name>name_4</method-name>
-                  <method-params></method-params>
-               </query-method>
-               <result-type-mapping>Remote</result-type-mapping>
-               <ejb-ql>ejbQL_4</ejb-ql>
-            </query>
-         </entity>
-         <session>
-            <description>description_0</description>
-            <display-name>displayName_0</display-name>
-            <small-icon>smallIcon_0</small-icon>
-            <large-icon>largeIcon_0</large-icon>
-            <ejb-name>name_3</ejb-name>
-            <home>java.util.HashTable</home>
-            <remote>java.util.HashTable</remote>
-            <local-home>java.util.HashTable</local-home>
-            <local>java.util.HashTable</local>
-            <ejb-class>java.util.HashTable</ejb-class>
-            <session-type>Stateful</session-type>
-            <transaction-type>Bean</transaction-type>
-            <env-entry>
-               <description>description_15</description>
-               <env-entry-name>name_15</env-entry-name>
-               <env-entry-type>java.lang.Long</env-entry-type>
-               <env-entry-value>value_15</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_16</description>
-               <env-entry-name>name_16</env-entry-name>
-               <env-entry-type>java.lang.Float</env-entry-type>
-               <env-entry-value>value_16</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_17</description>
-               <env-entry-name>name_17</env-entry-name>
-               <env-entry-type>java.lang.Character</env-entry-type>
-               <env-entry-value>value_17</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_18</description>
-               <env-entry-name>name_18</env-entry-name>
-               <env-entry-type>java.lang.String</env-entry-type>
-               <env-entry-value>value_18</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_19</description>
-               <env-entry-name>name_19</env-entry-name>
-               <env-entry-type>java.lang.Integer</env-entry-type>
-               <env-entry-value>value_19</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-               <description>description_15</description>
-               <ejb-ref-name>name_15</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_15</home>
-               <remote>remote_15</remote>
-               <ejb-link>link_15</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_16</description>
-               <ejb-ref-name>name_16</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_16</home>
-               <remote>remote_16</remote>
-               <ejb-link>link_16</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_17</description>
-               <ejb-ref-name>name_17</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_17</home>
-               <remote>remote_17</remote>
-               <ejb-link>link_17</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_18</description>
-               <ejb-ref-name>name_18</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_18</home>
-               <remote>remote_18</remote>
-               <ejb-link>link_18</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_19</description>
-               <ejb-ref-name>name_19</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_19</home>
-               <remote>remote_19</remote>
-               <ejb-link>link_19</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-               <description>description_15</description>
-               <ejb-ref-name>name_15</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_15</local-home>
-               <local>remote_15</local>
-               <ejb-link>link_15</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_16</description>
-               <ejb-ref-name>name_16</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_16</local-home>
-               <local>remote_16</local>
-               <ejb-link>link_16</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_17</description>
-               <ejb-ref-name>name_17</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_17</local-home>
-               <local>remote_17</local>
-               <ejb-link>link_17</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_18</description>
-               <ejb-ref-name>name_18</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_18</local-home>
-               <local>remote_18</local>
-               <ejb-link>link_18</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_19</description>
-               <ejb-ref-name>name_19</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_19</local-home>
-               <local>remote_19</local>
-               <ejb-link>link_19</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-               <description>description_15</description>
-               <role-name>name_15</role-name>
-               <role-link>link_15</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_16</description>
-               <role-name>name_16</role-name>
-               <role-link>link_16</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_17</description>
-               <role-name>name_17</role-name>
-               <role-link>link_17</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_18</description>
-               <role-name>name_18</role-name>
-               <role-link>link_18</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_19</description>
-               <role-name>name_19</role-name>
-               <role-link>link_19</role-link>
-            </security-role-ref>
-            <security-identity>
-               <description>description_1</description>
-               <use-caller-identity></use-caller-identity>
-            </security-identity>
-            <resource-ref>
-               <description>description_15</description>
-               <res-ref-name>name_15</res-ref-name>
-               <res-type>type_15</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_16</description>
-               <res-ref-name>name_16</res-ref-name>
-               <res-type>type_16</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_17</description>
-               <res-ref-name>name_17</res-ref-name>
-               <res-type>type_17</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_18</description>
-               <res-ref-name>name_18</res-ref-name>
-               <res-type>type_18</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_19</description>
-               <res-ref-name>name_19</res-ref-name>
-               <res-type>type_19</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-               <description>description_15</description>
-               <resource-env-ref-name>name_15</resource-env-ref-name>
-               <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_16</description>
-               <resource-env-ref-name>name_16</resource-env-ref-name>
-               <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_17</description>
-               <resource-env-ref-name>name_17</resource-env-ref-name>
-               <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_18</description>
-               <resource-env-ref-name>name_18</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_19</description>
-               <resource-env-ref-name>name_19</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-         </session>
-         <entity>
-            <description>description_2</description>
-            <display-name>displayName_2</display-name>
-            <small-icon>smallIcon_2</small-icon>
-            <large-icon>largeIcon_2</large-icon>
-            <ejb-name>name_4</ejb-name>
-            <home>java.sql.Data</home>
-            <remote>java.sql.Data</remote>
-            <local-home>java.sql.Data</local-home>
-            <local>java.sql.Data</local>
-            <ejb-class>java.sql.Data</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.sql.Data</prim-key-class>
-            <reentrant>True</reentrant>
-            <env-entry>
-               <description>description_20</description>
-               <env-entry-name>name_20</env-entry-name>
-               <env-entry-type>java.lang.Boolean</env-entry-type>
-               <env-entry-value>value_20</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_21</description>
-               <env-entry-name>name_21</env-entry-name>
-               <env-entry-type>java.lang.Double</env-entry-type>
-               <env-entry-value>value_21</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_22</description>
-               <env-entry-name>name_22</env-entry-name>
-               <env-entry-type>java.lang.Byte</env-entry-type>
-               <env-entry-value>value_22</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_23</description>
-               <env-entry-name>name_23</env-entry-name>
-               <env-entry-type>java.lang.Short</env-entry-type>
-               <env-entry-value>value_23</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_24</description>
-               <env-entry-name>name_24</env-entry-name>
-               <env-entry-type>java.lang.Long</env-entry-type>
-               <env-entry-value>value_24</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-               <description>description_20</description>
-               <ejb-ref-name>name_20</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_20</home>
-               <remote>remote_20</remote>
-               <ejb-link>link_20</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_21</description>
-               <ejb-ref-name>name_21</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_21</home>
-               <remote>remote_21</remote>
-               <ejb-link>link_21</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_22</description>
-               <ejb-ref-name>name_22</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_22</home>
-               <remote>remote_22</remote>
-               <ejb-link>link_22</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_23</description>
-               <ejb-ref-name>name_23</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_23</home>
-               <remote>remote_23</remote>
-               <ejb-link>link_23</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_24</description>
-               <ejb-ref-name>name_24</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_24</home>
-               <remote>remote_24</remote>
-               <ejb-link>link_24</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-               <description>description_20</description>
-               <ejb-ref-name>name_20</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_20</local-home>
-               <local>remote_20</local>
-               <ejb-link>link_20</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_21</description>
-               <ejb-ref-name>name_21</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_21</local-home>
-               <local>remote_21</local>
-               <ejb-link>link_21</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_22</description>
-               <ejb-ref-name>name_22</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_22</local-home>
-               <local>remote_22</local>
-               <ejb-link>link_22</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_23</description>
-               <ejb-ref-name>name_23</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_23</local-home>
-               <local>remote_23</local>
-               <ejb-link>link_23</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_24</description>
-               <ejb-ref-name>name_24</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_24</local-home>
-               <local>remote_24</local>
-               <ejb-link>link_24</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-               <description>description_20</description>
-               <role-name>name_20</role-name>
-               <role-link>link_20</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_21</description>
-               <role-name>name_21</role-name>
-               <role-link>link_21</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_22</description>
-               <role-name>name_22</role-name>
-               <role-link>link_22</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_23</description>
-               <role-name>name_23</role-name>
-               <role-link>link_23</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_24</description>
-               <role-name>name_24</role-name>
-               <role-link>link_24</role-link>
-            </security-role-ref>
-            <security-identity>
-               <description>description_2</description>
-               <run-as>
-                  <description>description_2</description>
-                  <role-name>roleName_2</role-name>
-               </run-as>
-            </security-identity>
-            <resource-ref>
-               <description>description_20</description>
-               <res-ref-name>name_20</res-ref-name>
-               <res-type>type_20</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_21</description>
-               <res-ref-name>name_21</res-ref-name>
-               <res-type>type_21</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_22</description>
-               <res-ref-name>name_22</res-ref-name>
-               <res-type>type_22</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_23</description>
-               <res-ref-name>name_23</res-ref-name>
-               <res-type>type_23</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_24</description>
-               <res-ref-name>name_24</res-ref-name>
-               <res-type>type_24</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-               <description>description_20</description>
-               <resource-env-ref-name>name_20</resource-env-ref-name>
-               <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_21</description>
-               <resource-env-ref-name>name_21</resource-env-ref-name>
-               <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_22</description>
-               <resource-env-ref-name>name_22</resource-env-ref-name>
-               <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_23</description>
-               <resource-env-ref-name>name_23</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_24</description>
-               <resource-env-ref-name>name_24</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-         </entity>
-         <entity>
-            <description>description_3</description>
-            <display-name>displayName_3</display-name>
-            <small-icon>smallIcon_3</small-icon>
-            <large-icon>largeIcon_3</large-icon>
-            <ejb-name>name_5</ejb-name>
-            <home>java.lang.Integer</home>
-            <remote>java.lang.Integer</remote>
-            <local-home>java.lang.Integer</local-home>
-            <local>java.lang.Integer</local>
-            <ejb-class>java.lang.Integer</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.lang.Integer</prim-key-class>
-            <reentrant>False</reentrant>
-            <env-entry>
-               <description>description_25</description>
-               <env-entry-name>name_25</env-entry-name>
-               <env-entry-type>java.lang.Float</env-entry-type>
-               <env-entry-value>value_25</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_26</description>
-               <env-entry-name>name_26</env-entry-name>
-               <env-entry-type>java.lang.Character</env-entry-type>
-               <env-entry-value>value_26</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_27</description>
-               <env-entry-name>name_27</env-entry-name>
-               <env-entry-type>java.lang.String</env-entry-type>
-               <env-entry-value>value_27</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_28</description>
-               <env-entry-name>name_28</env-entry-name>
-               <env-entry-type>java.lang.Integer</env-entry-type>
-               <env-entry-value>value_28</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_29</description>
-               <env-entry-name>name_29</env-entry-name>
-               <env-entry-type>java.lang.Boolean</env-entry-type>
-               <env-entry-value>value_29</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-               <description>description_25</description>
-               <ejb-ref-name>name_25</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_25</home>
-               <remote>remote_25</remote>
-               <ejb-link>link_25</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_26</description>
-               <ejb-ref-name>name_26</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_26</home>
-               <remote>remote_26</remote>
-               <ejb-link>link_26</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_27</description>
-               <ejb-ref-name>name_27</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_27</home>
-               <remote>remote_27</remote>
-               <ejb-link>link_27</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_28</description>
-               <ejb-ref-name>name_28</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_28</home>
-               <remote>remote_28</remote>
-               <ejb-link>link_28</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_29</description>
-               <ejb-ref-name>name_29</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_29</home>
-               <remote>remote_29</remote>
-               <ejb-link>link_29</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-               <description>description_25</description>
-               <ejb-ref-name>name_25</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_25</local-home>
-               <local>remote_25</local>
-               <ejb-link>link_25</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_26</description>
-               <ejb-ref-name>name_26</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_26</local-home>
-               <local>remote_26</local>
-               <ejb-link>link_26</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_27</description>
-               <ejb-ref-name>name_27</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_27</local-home>
-               <local>remote_27</local>
-               <ejb-link>link_27</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_28</description>
-               <ejb-ref-name>name_28</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_28</local-home>
-               <local>remote_28</local>
-               <ejb-link>link_28</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_29</description>
-               <ejb-ref-name>name_29</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_29</local-home>
-               <local>remote_29</local>
-               <ejb-link>link_29</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-               <description>description_25</description>
-               <role-name>name_25</role-name>
-               <role-link>link_25</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_26</description>
-               <role-name>name_26</role-name>
-               <role-link>link_26</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_27</description>
-               <role-name>name_27</role-name>
-               <role-link>link_27</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_28</description>
-               <role-name>name_28</role-name>
-               <role-link>link_28</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_29</description>
-               <role-name>name_29</role-name>
-               <role-link>link_29</role-link>
-            </security-role-ref>
-            <security-identity>
-               <description>description_2</description>
-               <use-caller-identity></use-caller-identity>
-            </security-identity>
-            <resource-ref>
-               <description>description_25</description>
-               <res-ref-name>name_25</res-ref-name>
-               <res-type>type_25</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_26</description>
-               <res-ref-name>name_26</res-ref-name>
-               <res-type>type_26</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_27</description>
-               <res-ref-name>name_27</res-ref-name>
-               <res-type>type_27</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_28</description>
-               <res-ref-name>name_28</res-ref-name>
-               <res-type>type_28</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_29</description>
-               <res-ref-name>name_29</res-ref-name>
-               <res-type>type_29</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-               <description>description_25</description>
-               <resource-env-ref-name>name_25</resource-env-ref-name>
-               <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_26</description>
-               <resource-env-ref-name>name_26</resource-env-ref-name>
-               <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_27</description>
-               <resource-env-ref-name>name_27</resource-env-ref-name>
-               <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_28</description>
-               <resource-env-ref-name>name_28</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_29</description>
-               <resource-env-ref-name>name_29</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-         </entity>
-         <message-driven>
-            <description>description_0</description>
-            <display-name>displayName_0</display-name>
-            <small-icon>smallIcon_0</small-icon>
-            <large-icon>largeIcon_0</large-icon>
-            <ejb-name>name_6</ejb-name>
-            <ejb-class>java.util.HashTable</ejb-class>
-            <transaction-type>Bean</transaction-type>
-            <message-selector>messageSelector_0</message-selector>
-            <acknowledge-mode>Auto-acknowledge</acknowledge-mode>
-            <message-driven-destination>
-               <destination-type>javax.jms.Queue</destination-type>
-               <subscription-durability>Durable</subscription-durability>
-            </message-driven-destination>
-            <env-entry>
-               <description>description_30</description>
-               <env-entry-name>name_30</env-entry-name>
-               <env-entry-type>java.lang.Double</env-entry-type>
-               <env-entry-value>value_30</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_31</description>
-               <env-entry-name>name_31</env-entry-name>
-               <env-entry-type>java.lang.Byte</env-entry-type>
-               <env-entry-value>value_31</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_32</description>
-               <env-entry-name>name_32</env-entry-name>
-               <env-entry-type>java.lang.Short</env-entry-type>
-               <env-entry-value>value_32</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_33</description>
-               <env-entry-name>name_33</env-entry-name>
-               <env-entry-type>java.lang.Long</env-entry-type>
-               <env-entry-value>value_33</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_34</description>
-               <env-entry-name>name_34</env-entry-name>
-               <env-entry-type>java.lang.Float</env-entry-type>
-               <env-entry-value>value_34</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-               <description>description_30</description>
-               <ejb-ref-name>name_30</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_30</home>
-               <remote>remote_30</remote>
-               <ejb-link>link_30</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_31</description>
-               <ejb-ref-name>name_31</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_31</home>
-               <remote>remote_31</remote>
-               <ejb-link>link_31</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_32</description>
-               <ejb-ref-name>name_32</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_32</home>
-               <remote>remote_32</remote>
-               <ejb-link>link_32</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_33</description>
-               <ejb-ref-name>name_33</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_33</home>
-               <remote>remote_33</remote>
-               <ejb-link>link_33</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_34</description>
-               <ejb-ref-name>name_34</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_34</home>
-               <remote>remote_34</remote>
-               <ejb-link>link_34</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-               <description>description_30</description>
-               <ejb-ref-name>name_30</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_30</local-home>
-               <local>remote_30</local>
-               <ejb-link>link_30</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_31</description>
-               <ejb-ref-name>name_31</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_31</local-home>
-               <local>remote_31</local>
-               <ejb-link>link_31</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_32</description>
-               <ejb-ref-name>name_32</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_32</local-home>
-               <local>remote_32</local>
-               <ejb-link>link_32</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_33</description>
-               <ejb-ref-name>name_33</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_33</local-home>
-               <local>remote_33</local>
-               <ejb-link>link_33</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_34</description>
-               <ejb-ref-name>name_34</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_34</local-home>
-               <local>remote_34</local>
-               <ejb-link>link_34</ejb-link>
-            </ejb-local-ref>
-            <security-identity>
-               <description>description_3</description>
-               <run-as>
-                  <description>description_3</description>
-                  <role-name>roleName_3</role-name>
-               </run-as>
-            </security-identity>
-            <resource-ref>
-               <description>description_30</description>
-               <res-ref-name>name_30</res-ref-name>
-               <res-type>type_30</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_31</description>
-               <res-ref-name>name_31</res-ref-name>
-               <res-type>type_31</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_32</description>
-               <res-ref-name>name_32</res-ref-name>
-               <res-type>type_32</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_33</description>
-               <res-ref-name>name_33</res-ref-name>
-               <res-type>type_33</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_34</description>
-               <res-ref-name>name_34</res-ref-name>
-               <res-type>type_34</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-               <description>description_30</description>
-               <resource-env-ref-name>name_30</resource-env-ref-name>
-               <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_31</description>
-               <resource-env-ref-name>name_31</resource-env-ref-name>
-               <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_32</description>
-               <resource-env-ref-name>name_32</resource-env-ref-name>
-               <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_33</description>
-               <resource-env-ref-name>name_33</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_34</description>
-               <resource-env-ref-name>name_34</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-         </message-driven>
-         <session>
-            <description>description_1</description>
-            <display-name>displayName_1</display-name>
-            <small-icon>smallIcon_1</small-icon>
-            <large-icon>largeIcon_1</large-icon>
-            <ejb-name>name_7</ejb-name>
-            <home>java.util.List</home>
-            <remote>java.util.List</remote>
-            <local-home>java.util.List</local-home>
-            <local>java.util.List</local>
-            <ejb-class>java.util.List</ejb-class>
-            <session-type>Stateless</session-type>
-            <transaction-type>Container</transaction-type>
-            <env-entry>
-               <description>description_35</description>
-               <env-entry-name>name_35</env-entry-name>
-               <env-entry-type>java.lang.Character</env-entry-type>
-               <env-entry-value>value_35</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_36</description>
-               <env-entry-name>name_36</env-entry-name>
-               <env-entry-type>java.lang.String</env-entry-type>
-               <env-entry-value>value_36</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_37</description>
-               <env-entry-name>name_37</env-entry-name>
-               <env-entry-type>java.lang.Integer</env-entry-type>
-               <env-entry-value>value_37</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_38</description>
-               <env-entry-name>name_38</env-entry-name>
-               <env-entry-type>java.lang.Boolean</env-entry-type>
-               <env-entry-value>value_38</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_39</description>
-               <env-entry-name>name_39</env-entry-name>
-               <env-entry-type>java.lang.Double</env-entry-type>
-               <env-entry-value>value_39</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-               <description>description_35</description>
-               <ejb-ref-name>name_35</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_35</home>
-               <remote>remote_35</remote>
-               <ejb-link>link_35</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_36</description>
-               <ejb-ref-name>name_36</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_36</home>
-               <remote>remote_36</remote>
-               <ejb-link>link_36</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_37</description>
-               <ejb-ref-name>name_37</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_37</home>
-               <remote>remote_37</remote>
-               <ejb-link>link_37</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_38</description>
-               <ejb-ref-name>name_38</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_38</home>
-               <remote>remote_38</remote>
-               <ejb-link>link_38</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_39</description>
-               <ejb-ref-name>name_39</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_39</home>
-               <remote>remote_39</remote>
-               <ejb-link>link_39</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-               <description>description_35</description>
-               <ejb-ref-name>name_35</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_35</local-home>
-               <local>remote_35</local>
-               <ejb-link>link_35</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_36</description>
-               <ejb-ref-name>name_36</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_36</local-home>
-               <local>remote_36</local>
-               <ejb-link>link_36</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_37</description>
-               <ejb-ref-name>name_37</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_37</local-home>
-               <local>remote_37</local>
-               <ejb-link>link_37</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_38</description>
-               <ejb-ref-name>name_38</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_38</local-home>
-               <local>remote_38</local>
-               <ejb-link>link_38</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_39</description>
-               <ejb-ref-name>name_39</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_39</local-home>
-               <local>remote_39</local>
-               <ejb-link>link_39</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-               <description>description_30</description>
-               <role-name>name_30</role-name>
-               <role-link>link_30</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_31</description>
-               <role-name>name_31</role-name>
-               <role-link>link_31</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_32</description>
-               <role-name>name_32</role-name>
-               <role-link>link_32</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_33</description>
-               <role-name>name_33</role-name>
-               <role-link>link_33</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_34</description>
-               <role-name>name_34</role-name>
-               <role-link>link_34</role-link>
-            </security-role-ref>
-            <security-identity>
-               <description>description_3</description>
-               <use-caller-identity></use-caller-identity>
-            </security-identity>
-            <resource-ref>
-               <description>description_35</description>
-               <res-ref-name>name_35</res-ref-name>
-               <res-type>type_35</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_36</description>
-               <res-ref-name>name_36</res-ref-name>
-               <res-type>type_36</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_37</description>
-               <res-ref-name>name_37</res-ref-name>
-               <res-type>type_37</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_38</description>
-               <res-ref-name>name_38</res-ref-name>
-               <res-type>type_38</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_39</description>
-               <res-ref-name>name_39</res-ref-name>
-               <res-type>type_39</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-               <description>description_35</description>
-               <resource-env-ref-name>name_35</resource-env-ref-name>
-               <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_36</description>
-               <resource-env-ref-name>name_36</resource-env-ref-name>
-               <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_37</description>
-               <resource-env-ref-name>name_37</resource-env-ref-name>
-               <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_38</description>
-               <resource-env-ref-name>name_38</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_39</description>
-               <resource-env-ref-name>name_39</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-         </session>
-         <entity>
-            <description>description_4</description>
-            <display-name>displayName_4</display-name>
-            <small-icon>smallIcon_4</small-icon>
-            <large-icon>largeIcon_4</large-icon>
-            <ejb-name>name_8</ejb-name>
-            <home>java.lang.String</home>
-            <remote>java.lang.String</remote>
-            <local-home>java.lang.String</local-home>
-            <local>java.lang.String</local>
-            <ejb-class>java.lang.String</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.lang.String</prim-key-class>
-            <reentrant>True</reentrant>
-            <env-entry>
-               <description>description_40</description>
-               <env-entry-name>name_40</env-entry-name>
-               <env-entry-type>java.lang.Byte</env-entry-type>
-               <env-entry-value>value_40</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_41</description>
-               <env-entry-name>name_41</env-entry-name>
-               <env-entry-type>java.lang.Short</env-entry-type>
-               <env-entry-value>value_41</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_42</description>
-               <env-entry-name>name_42</env-entry-name>
-               <env-entry-type>java.lang.Long</env-entry-type>
-               <env-entry-value>value_42</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_43</description>
-               <env-entry-name>name_43</env-entry-name>
-               <env-entry-type>java.lang.Float</env-entry-type>
-               <env-entry-value>value_43</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_44</description>
-               <env-entry-name>name_44</env-entry-name>
-               <env-entry-type>java.lang.Character</env-entry-type>
-               <env-entry-value>value_44</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-               <description>description_40</description>
-               <ejb-ref-name>name_40</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_40</home>
-               <remote>remote_40</remote>
-               <ejb-link>link_40</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_41</description>
-               <ejb-ref-name>name_41</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_41</home>
-               <remote>remote_41</remote>
-               <ejb-link>link_41</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_42</description>
-               <ejb-ref-name>name_42</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_42</home>
-               <remote>remote_42</remote>
-               <ejb-link>link_42</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_43</description>
-               <ejb-ref-name>name_43</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_43</home>
-               <remote>remote_43</remote>
-               <ejb-link>link_43</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_44</description>
-               <ejb-ref-name>name_44</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_44</home>
-               <remote>remote_44</remote>
-               <ejb-link>link_44</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-               <description>description_40</description>
-               <ejb-ref-name>name_40</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_40</local-home>
-               <local>remote_40</local>
-               <ejb-link>link_40</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_41</description>
-               <ejb-ref-name>name_41</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_41</local-home>
-               <local>remote_41</local>
-               <ejb-link>link_41</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_42</description>
-               <ejb-ref-name>name_42</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_42</local-home>
-               <local>remote_42</local>
-               <ejb-link>link_42</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_43</description>
-               <ejb-ref-name>name_43</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_43</local-home>
-               <local>remote_43</local>
-               <ejb-link>link_43</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_44</description>
-               <ejb-ref-name>name_44</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_44</local-home>
-               <local>remote_44</local>
-               <ejb-link>link_44</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-               <description>description_35</description>
-               <role-name>name_35</role-name>
-               <role-link>link_35</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_36</description>
-               <role-name>name_36</role-name>
-               <role-link>link_36</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_37</description>
-               <role-name>name_37</role-name>
-               <role-link>link_37</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_38</description>
-               <role-name>name_38</role-name>
-               <role-link>link_38</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_39</description>
-               <role-name>name_39</role-name>
-               <role-link>link_39</role-link>
-            </security-role-ref>
-            <security-identity>
-               <description>description_4</description>
-               <run-as>
-                  <description>description_4</description>
-                  <role-name>roleName_4</role-name>
-               </run-as>
-            </security-identity>
-            <resource-ref>
-               <description>description_40</description>
-               <res-ref-name>name_40</res-ref-name>
-               <res-type>type_40</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_41</description>
-               <res-ref-name>name_41</res-ref-name>
-               <res-type>type_41</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_42</description>
-               <res-ref-name>name_42</res-ref-name>
-               <res-type>type_42</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_43</description>
-               <res-ref-name>name_43</res-ref-name>
-               <res-type>type_43</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_44</description>
-               <res-ref-name>name_44</res-ref-name>
-               <res-type>type_44</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-               <description>description_40</description>
-               <resource-env-ref-name>name_40</resource-env-ref-name>
-               <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_41</description>
-               <resource-env-ref-name>name_41</resource-env-ref-name>
-               <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_42</description>
-               <resource-env-ref-name>name_42</resource-env-ref-name>
-               <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_43</description>
-               <resource-env-ref-name>name_43</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_44</description>
-               <resource-env-ref-name>name_44</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-         </entity>
-         <entity>
-            <description>description_5</description>
-            <display-name>displayName_5</display-name>
-            <small-icon>smallIcon_5</small-icon>
-            <large-icon>largeIcon_5</large-icon>
-            <ejb-name>name_9</ejb-name>
-            <home>java.util.HashTable</home>
-            <remote>java.util.HashTable</remote>
-            <local-home>java.util.HashTable</local-home>
-            <local>java.util.HashTable</local>
-            <ejb-class>java.util.HashTable</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.util.HashTable</prim-key-class>
-            <reentrant>False</reentrant>
-            <env-entry>
-               <description>description_45</description>
-               <env-entry-name>name_45</env-entry-name>
-               <env-entry-type>java.lang.String</env-entry-type>
-               <env-entry-value>value_45</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_46</description>
-               <env-entry-name>name_46</env-entry-name>
-               <env-entry-type>java.lang.Integer</env-entry-type>
-               <env-entry-value>value_46</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_47</description>
-               <env-entry-name>name_47</env-entry-name>
-               <env-entry-type>java.lang.Boolean</env-entry-type>
-               <env-entry-value>value_47</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_48</description>
-               <env-entry-name>name_48</env-entry-name>
-               <env-entry-type>java.lang.Double</env-entry-type>
-               <env-entry-value>value_48</env-entry-value>
-            </env-entry>
-            <env-entry>
-               <description>description_49</description>
-               <env-entry-name>name_49</env-entry-name>
-               <env-entry-type>java.lang.Byte</env-entry-type>
-               <env-entry-value>value_49</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-               <description>description_45</description>
-               <ejb-ref-name>name_45</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_45</home>
-               <remote>remote_45</remote>
-               <ejb-link>link_45</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_46</description>
-               <ejb-ref-name>name_46</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_46</home>
-               <remote>remote_46</remote>
-               <ejb-link>link_46</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_47</description>
-               <ejb-ref-name>name_47</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_47</home>
-               <remote>remote_47</remote>
-               <ejb-link>link_47</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_48</description>
-               <ejb-ref-name>name_48</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_48</home>
-               <remote>remote_48</remote>
-               <ejb-link>link_48</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-               <description>description_49</description>
-               <ejb-ref-name>name_49</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_49</home>
-               <remote>remote_49</remote>
-               <ejb-link>link_49</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-               <description>description_45</description>
-               <ejb-ref-name>name_45</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_45</local-home>
-               <local>remote_45</local>
-               <ejb-link>link_45</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_46</description>
-               <ejb-ref-name>name_46</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_46</local-home>
-               <local>remote_46</local>
-               <ejb-link>link_46</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_47</description>
-               <ejb-ref-name>name_47</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_47</local-home>
-               <local>remote_47</local>
-               <ejb-link>link_47</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_48</description>
-               <ejb-ref-name>name_48</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_48</local-home>
-               <local>remote_48</local>
-               <ejb-link>link_48</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-               <description>description_49</description>
-               <ejb-ref-name>name_49</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_49</local-home>
-               <local>remote_49</local>
-               <ejb-link>link_49</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-               <description>description_40</description>
-               <role-name>name_40</role-name>
-               <role-link>link_40</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_41</description>
-               <role-name>name_41</role-name>
-               <role-link>link_41</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_42</description>
-               <role-name>name_42</role-name>
-               <role-link>link_42</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_43</description>
-               <role-name>name_43</role-name>
-               <role-link>link_43</role-link>
-            </security-role-ref>
-            <security-role-ref>
-               <description>description_44</description>
-               <role-name>name_44</role-name>
-               <role-link>link_44</role-link>
-            </security-role-ref>
-            <security-identity>
-               <description>description_4</description>
-               <use-caller-identity></use-caller-identity>
-            </security-identity>
-            <resource-ref>
-               <description>description_45</description>
-               <res-ref-name>name_45</res-ref-name>
-               <res-type>type_45</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_46</description>
-               <res-ref-name>name_46</res-ref-name>
-               <res-type>type_46</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_47</description>
-               <res-ref-name>name_47</res-ref-name>
-               <res-type>type_47</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_48</description>
-               <res-ref-name>name_48</res-ref-name>
-               <res-type>type_48</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-               <description>description_49</description>
-               <res-ref-name>name_49</res-ref-name>
-               <res-type>type_49</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-               <description>description_45</description>
-               <resource-env-ref-name>name_45</resource-env-ref-name>
-               <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_46</description>
-               <resource-env-ref-name>name_46</resource-env-ref-name>
-               <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_47</description>
-               <resource-env-ref-name>name_47</resource-env-ref-name>
-               <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_48</description>
-               <resource-env-ref-name>name_48</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-               <description>description_49</description>
-               <resource-env-ref-name>name_49</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-         </entity>
-      </enterprise-beans>
-      <relationships>
-         <description>description_0</description>
-         <ejb-relation>
-            <description>description_0</description>
-            <ejb-relation-name>name_0</ejb-relation-name>
-            <ejb-relationship-role>
-               <description>description_0</description>
-               <ejb-relationship-role-name>roleName_0</ejb-relationship-role-name>
-               <multiplicity>One</multiplicity>
-               <relationship-role-source>
-                  <description>description_0</description>
-                  <ejb-name>name_2</ejb-name>
-               </relationship-role-source>
-               <cmr-field>
-                  <cmr-field-name>name_8</cmr-field-name>
-                  <cmr-field-type>java.util.Collection</cmr-field-type>
-               </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-               <description>description_1</description>
-               <ejb-relationship-role-name>roleName_1</ejb-relationship-role-name>
-               <multiplicity>Many</multiplicity>
-			   <cascade-delete/>
-               <relationship-role-source>
-                  <description>description_1</description>
-                  <ejb-name>name_2</ejb-name>
-               </relationship-role-source>
-               <cmr-field>
-                  <cmr-field-name>name_9</cmr-field-name>
-                  <cmr-field-type>java.util.Collection</cmr-field-type>
-               </cmr-field>
-            </ejb-relationship-role>
-         </ejb-relation>
-         <ejb-relation>
-            <description>description_1</description>
-            <ejb-relation-name>name_1</ejb-relation-name>
-            <ejb-relationship-role>
-               <description>description_2</description>
-               <ejb-relationship-role-name>roleName_2</ejb-relationship-role-name>
-               <multiplicity>One</multiplicity>
-               <relationship-role-source>
-                  <description>description_2</description>
-                  <ejb-name>name_2</ejb-name>
-               </relationship-role-source>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-               <description>description_3</description>
-               <ejb-relationship-role-name>roleName_3</ejb-relationship-role-name>
-               <multiplicity>Many</multiplicity>
-               <relationship-role-source>
-                  <description>description_3</description>
-                  <ejb-name>name_2</ejb-name>
-               </relationship-role-source>
-            </ejb-relationship-role>
-         </ejb-relation>
-         <ejb-relation>
-            <description>description_2</description>
-            <ejb-relation-name>name_2</ejb-relation-name>
-            <ejb-relationship-role>
-               <description>description_4</description>
-               <ejb-relationship-role-name>roleName_4</ejb-relationship-role-name>
-               <multiplicity>One</multiplicity>
-               <relationship-role-source>
-                  <description>description_4</description>
-                  <ejb-name>name_2</ejb-name>
-               </relationship-role-source>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-               <description>description_5</description>
-               <ejb-relationship-role-name>roleName_5</ejb-relationship-role-name>
-               <multiplicity>Many</multiplicity>
-			   <cascade-delete/>
-               <relationship-role-source>
-                  <description>description_5</description>
-                  <ejb-name>name_2</ejb-name>
-               </relationship-role-source>
-            </ejb-relationship-role>
-         </ejb-relation>
-         <ejb-relation>
-            <description>description_3</description>
-            <ejb-relation-name>name_3</ejb-relation-name>
-            <ejb-relationship-role>
-               <description>description_6</description>
-               <ejb-relationship-role-name>roleName_6</ejb-relationship-role-name>
-               <multiplicity>One</multiplicity>
-               <relationship-role-source>
-                  <description>description_6</description>
-                  <ejb-name>name_2</ejb-name>
-               </relationship-role-source>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-               <description>description_7</description>
-               <ejb-relationship-role-name>roleName_7</ejb-relationship-role-name>
-               <multiplicity>Many</multiplicity>
-               <relationship-role-source>
-                  <description>description_7</description>
-                  <ejb-name>name_2</ejb-name>
-               </relationship-role-source>
-            </ejb-relationship-role>
-         </ejb-relation>
-         <ejb-relation>
-            <description>description_4</description>
-            <ejb-relation-name>name_4</ejb-relation-name>
-            <ejb-relationship-role>
-               <description>description_8</description>
-               <ejb-relationship-role-name>roleName_8</ejb-relationship-role-name>
-               <multiplicity>One</multiplicity>
-               <relationship-role-source>
-                  <description>description_8</description>
-                  <ejb-name>name_2</ejb-name>
-               </relationship-role-source>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-               <description>description_9</description>
-               <ejb-relationship-role-name>roleName_9</ejb-relationship-role-name>
-               <multiplicity>Many</multiplicity>
-			   <cascade-delete/>
-               <relationship-role-source>
-                  <description>description_9</description>
-                  <ejb-name>name_2</ejb-name>
-               </relationship-role-source>
-            </ejb-relationship-role>
-         </ejb-relation>
-      </relationships>
-      <assembly-descriptor>
-         <security-role>
-            <description>description_0</description>
-            <role-name>roleName_0</role-name>
-         </security-role>
-         <security-role>
-            <description>description_1</description>
-            <role-name>roleName_1</role-name>
-         </security-role>
-         <security-role>
-            <description>description_2</description>
-            <role-name>roleName_2</role-name>
-         </security-role>
-         <security-role>
-            <description>description_3</description>
-            <role-name>roleName_3</role-name>
-         </security-role>
-         <security-role>
-            <description>description_4</description>
-            <role-name>roleName_4</role-name>
-         </security-role>
-         <method-permission>
-            <description>description_0</description>
-            <unchecked/>
-            <method>
-               <description>description_0</description>
-               <ejb-name>name_0</ejb-name>
-               <method-name>name_0</method-name>
-            </method>
-            <method>
-               <description>description_1</description>
-               <ejb-name>name_1</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_1</method-name>
-               <method-params></method-params>
-            </method>
-            <method>
-               <description>description_2</description>
-               <ejb-name>name_2</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_2</method-name>
-               <method-params>
-                  <method-param>parms_0</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_3</description>
-               <ejb-name>name_3</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_3</method-name>
-               <method-params>
-                  <method-param>parms_1</method-param>
-                  <method-param>parms_2</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_4</description>
-               <ejb-name>name_4</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_4</method-name>
-               <method-params>
-                  <method-param>parms_3</method-param>
-                  <method-param>parms_4</method-param>
-                  <method-param>parms_5</method-param>
-               </method-params>
-            </method>
-         </method-permission>
-         <method-permission>
-            <description>description_1</description>
-            <role-name>roleName_0</role-name>
-            <method>
-               <description>description_5</description>
-               <ejb-name>name_5</ejb-name>
-               <method-name>name_5</method-name>
-            </method>
-            <method>
-               <description>description_6</description>
-               <ejb-name>name_6</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_6</method-name>
-               <method-params></method-params>
-            </method>
-            <method>
-               <description>description_7</description>
-               <ejb-name>name_7</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_7</method-name>
-               <method-params>
-                  <method-param>parms_6</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_8</description>
-               <ejb-name>name_8</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_8</method-name>
-               <method-params>
-                  <method-param>parms_7</method-param>
-                  <method-param>parms_8</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_9</description>
-               <ejb-name>name_9</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_9</method-name>
-               <method-params>
-                  <method-param>parms_9</method-param>
-                  <method-param>parms_10</method-param>
-                  <method-param>parms_11</method-param>
-               </method-params>
-            </method>
-         </method-permission>
-         <method-permission>
-            <description>description_2</description>
-            <role-name>roleName_0</role-name>
-            <role-name>roleName_1</role-name>
-            <method>
-               <description>description_10</description>
-               <ejb-name>name_0</ejb-name>
-               <method-name>name_10</method-name>
-            </method>
-            <method>
-               <description>description_11</description>
-               <ejb-name>name_1</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_11</method-name>
-               <method-params></method-params>
-            </method>
-            <method>
-               <description>description_12</description>
-               <ejb-name>name_2</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_12</method-name>
-               <method-params>
-                  <method-param>parms_12</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_13</description>
-               <ejb-name>name_3</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_13</method-name>
-               <method-params>
-                  <method-param>parms_13</method-param>
-                  <method-param>parms_14</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_14</description>
-               <ejb-name>name_4</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_14</method-name>
-               <method-params>
-                  <method-param>parms_15</method-param>
-                  <method-param>parms_16</method-param>
-                  <method-param>parms_17</method-param>
-               </method-params>
-            </method>
-         </method-permission>
-         <method-permission>
-            <description>description_3</description>
-            <role-name>roleName_0</role-name>
-            <role-name>roleName_1</role-name>
-            <role-name>roleName_2</role-name>
-            <method>
-               <description>description_15</description>
-               <ejb-name>name_5</ejb-name>
-               <method-name>name_15</method-name>
-            </method>
-            <method>
-               <description>description_16</description>
-               <ejb-name>name_6</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_16</method-name>
-               <method-params></method-params>
-            </method>
-            <method>
-               <description>description_17</description>
-               <ejb-name>name_7</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_17</method-name>
-               <method-params>
-                  <method-param>parms_18</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_18</description>
-               <ejb-name>name_8</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_18</method-name>
-               <method-params>
-                  <method-param>parms_19</method-param>
-                  <method-param>parms_20</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_19</description>
-               <ejb-name>name_9</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_19</method-name>
-               <method-params>
-                  <method-param>parms_21</method-param>
-                  <method-param>parms_22</method-param>
-                  <method-param>parms_23</method-param>
-               </method-params>
-            </method>
-         </method-permission>
-         <method-permission>
-            <description>description_4</description>
-            <role-name>roleName_0</role-name>
-            <role-name>roleName_1</role-name>
-            <role-name>roleName_2</role-name>
-            <role-name>roleName_3</role-name>
-            <method>
-               <description>description_20</description>
-               <ejb-name>name_0</ejb-name>
-               <method-name>name_20</method-name>
-            </method>
-            <method>
-               <description>description_21</description>
-               <ejb-name>name_1</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_21</method-name>
-               <method-params></method-params>
-            </method>
-            <method>
-               <description>description_22</description>
-               <ejb-name>name_2</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_22</method-name>
-               <method-params>
-                  <method-param>parms_24</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_23</description>
-               <ejb-name>name_3</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_23</method-name>
-               <method-params>
-                  <method-param>parms_25</method-param>
-                  <method-param>parms_26</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_24</description>
-               <ejb-name>name_4</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_24</method-name>
-               <method-params>
-                  <method-param>parms_27</method-param>
-                  <method-param>parms_28</method-param>
-                  <method-param>parms_29</method-param>
-               </method-params>
-            </method>
-         </method-permission>
-         <container-transaction>
-            <description>description_0</description>
-            <method>
-               <description>description_25</description>
-               <ejb-name>name_5</ejb-name>
-               <method-name>name_25</method-name>
-            </method>
-            <method>
-               <description>description_26</description>
-               <ejb-name>name_6</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_26</method-name>
-               <method-params></method-params>
-            </method>
-            <method>
-               <description>description_27</description>
-               <ejb-name>name_7</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_27</method-name>
-               <method-params>
-                  <method-param>parms_30</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_28</description>
-               <ejb-name>name_8</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_28</method-name>
-               <method-params>
-                  <method-param>parms_31</method-param>
-                  <method-param>parms_32</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_29</description>
-               <ejb-name>name_9</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_29</method-name>
-               <method-params>
-                  <method-param>parms_33</method-param>
-                  <method-param>parms_34</method-param>
-                  <method-param>parms_35</method-param>
-               </method-params>
-            </method>
-            <trans-attribute>NotSupported</trans-attribute>
-         </container-transaction>
-         <container-transaction>
-            <description>description_1</description>
-            <method>
-               <description>description_30</description>
-               <ejb-name>name_0</ejb-name>
-               <method-name>name_30</method-name>
-            </method>
-            <method>
-               <description>description_31</description>
-               <ejb-name>name_1</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_31</method-name>
-               <method-params></method-params>
-            </method>
-            <method>
-               <description>description_32</description>
-               <ejb-name>name_2</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_32</method-name>
-               <method-params>
-                  <method-param>parms_36</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_33</description>
-               <ejb-name>name_3</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_33</method-name>
-               <method-params>
-                  <method-param>parms_37</method-param>
-                  <method-param>parms_38</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_34</description>
-               <ejb-name>name_4</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_34</method-name>
-               <method-params>
-                  <method-param>parms_39</method-param>
-                  <method-param>parms_40</method-param>
-                  <method-param>parms_41</method-param>
-               </method-params>
-            </method>
-            <trans-attribute>Supports</trans-attribute>
-         </container-transaction>
-         <container-transaction>
-            <description>description_2</description>
-            <method>
-               <description>description_35</description>
-               <ejb-name>name_5</ejb-name>
-               <method-name>name_35</method-name>
-            </method>
-            <method>
-               <description>description_36</description>
-               <ejb-name>name_6</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_36</method-name>
-               <method-params></method-params>
-            </method>
-            <method>
-               <description>description_37</description>
-               <ejb-name>name_7</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_37</method-name>
-               <method-params>
-                  <method-param>parms_42</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_38</description>
-               <ejb-name>name_8</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_38</method-name>
-               <method-params>
-                  <method-param>parms_43</method-param>
-                  <method-param>parms_44</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_39</description>
-               <ejb-name>name_9</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_39</method-name>
-               <method-params>
-                  <method-param>parms_45</method-param>
-                  <method-param>parms_46</method-param>
-                  <method-param>parms_47</method-param>
-               </method-params>
-            </method>
-            <trans-attribute>Required</trans-attribute>
-         </container-transaction>
-         <container-transaction>
-            <description>description_3</description>
-            <method>
-               <description>description_40</description>
-               <ejb-name>name_0</ejb-name>
-               <method-name>name_40</method-name>
-            </method>
-            <method>
-               <description>description_41</description>
-               <ejb-name>name_1</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_41</method-name>
-               <method-params></method-params>
-            </method>
-            <method>
-               <description>description_42</description>
-               <ejb-name>name_2</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_42</method-name>
-               <method-params>
-                  <method-param>parms_48</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_43</description>
-               <ejb-name>name_3</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_43</method-name>
-               <method-params>
-                  <method-param>parms_49</method-param>
-                  <method-param>parms_50</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_44</description>
-               <ejb-name>name_4</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_44</method-name>
-               <method-params>
-                  <method-param>parms_51</method-param>
-                  <method-param>parms_52</method-param>
-                  <method-param>parms_53</method-param>
-               </method-params>
-            </method>
-            <trans-attribute>RequiresNew</trans-attribute>
-         </container-transaction>
-         <container-transaction>
-            <description>description_4</description>
-            <method>
-               <description>description_45</description>
-               <ejb-name>name_5</ejb-name>
-               <method-name>name_45</method-name>
-            </method>
-            <method>
-               <description>description_46</description>
-               <ejb-name>name_6</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_46</method-name>
-               <method-params></method-params>
-            </method>
-            <method>
-               <description>description_47</description>
-               <ejb-name>name_7</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_47</method-name>
-               <method-params>
-                  <method-param>parms_54</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_48</description>
-               <ejb-name>name_8</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_48</method-name>
-               <method-params>
-                  <method-param>parms_55</method-param>
-                  <method-param>parms_56</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_49</description>
-               <ejb-name>name_9</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_49</method-name>
-               <method-params>
-                  <method-param>parms_57</method-param>
-                  <method-param>parms_58</method-param>
-                  <method-param>parms_59</method-param>
-               </method-params>
-            </method>
-            <trans-attribute>Mandatory</trans-attribute>
-         </container-transaction>
-         <exclude-list>
-            <description>description_0</description>
-            <method>
-               <description>description_50</description>
-               <ejb-name>name_0</ejb-name>
-               <method-name>name_50</method-name>
-            </method>
-            <method>
-               <description>description_51</description>
-               <ejb-name>name_1</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_51</method-name>
-               <method-params></method-params>
-            </method>
-            <method>
-               <description>description_52</description>
-               <ejb-name>name_2</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_52</method-name>
-               <method-params>
-                  <method-param>parms_60</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_53</description>
-               <ejb-name>name_3</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_53</method-name>
-               <method-params>
-                  <method-param>parms_61</method-param>
-                  <method-param>parms_62</method-param>
-               </method-params>
-            </method>
-            <method>
-               <description>description_54</description>
-               <ejb-name>name_4</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_54</method-name>
-               <method-params>
-                  <method-param>parms_63</method-param>
-                  <method-param>parms_64</method-param>
-                  <method-param>parms_65</method-param>
-               </method-params>
-            </method>
-         </exclude-list>
-      </assembly-descriptor>
-      <ejb-client-jar>ejbClientJar_0</ejb-client-jar>
-   </ejb-jar>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTestNoID/ra.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTestNoID/ra.xml
deleted file mode 100644
index 2e2a262..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTestNoID/ra.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE connector PUBLIC "-//Sun Microsystems, Inc.//DTD Connector 1.0//EN" "http://java.sun.com/dtd/connector_1_0.dtd">
-<connector>
-    <display-name>displayName_0</display-name>
-    <description>description_0</description>
-    <icon>
-        <small-icon>smallIcon_0</small-icon>
-        <large-icon>largeIcon_0</large-icon>
-    </icon>
-    <vendor-name>vendorName_0</vendor-name>
-    <spec-version>1.0</spec-version>
-    <eis-type>eisType_0</eis-type>
-    <version>1.0</version>
-    <license>
-        <description>description_0</description>
-        <license-required>true</license-required>
-    </license>
-    <resourceadapter>
-        <managedconnectionfactory-class>managedConnectionFactoryClass_0</managedconnectionfactory-class>
-        <connectionfactory-interface>connectionFactoryInterface_0</connectionfactory-interface>
-        <connectionfactory-impl-class>connectionFactoryImplClass_0</connectionfactory-impl-class>
-        <connection-interface>connectionInterface_0</connection-interface>
-        <connection-impl-class>connectionImplClass_0</connection-impl-class>
-        <transaction-support>NoTransaction</transaction-support>
-        <config-property>
-            <description>description_0</description>
-            <config-property-name>name_0</config-property-name>
-            <config-property-type>java.lang.String</config-property-type>
-            <config-property-value>value_0</config-property-value>
-        </config-property>
-        <config-property>
-            <description>description_1</description>
-            <config-property-name>name_1</config-property-name>
-            <config-property-type>java.lang.String</config-property-type>
-            <config-property-value>value_1</config-property-value>
-        </config-property>
-        <config-property>
-            <description>description_2</description>
-            <config-property-name>name_2</config-property-name>
-            <config-property-type>java.lang.String</config-property-type>
-            <config-property-value>value_2</config-property-value>
-        </config-property>
-        <config-property>
-            <description>description_3</description>
-            <config-property-name>name_3</config-property-name>
-            <config-property-type>java.lang.String</config-property-type>
-            <config-property-value>value_3</config-property-value>
-        </config-property>
-        <config-property>
-            <description>description_4</description>
-            <config-property-name>name_4</config-property-name>
-            <config-property-type>java.lang.String</config-property-type>
-            <config-property-value>value_4</config-property-value>
-        </config-property>
-        <authentication-mechanism>
-            <description>description_0</description>
-            <authentication-mechanism-type>BasicPassword</authentication-mechanism-type>
-            <credential-interface>javax.resource.spi.security.PasswordCredential</credential-interface>
-        </authentication-mechanism>
-        <authentication-mechanism>
-            <description>description_1</description>
-            <authentication-mechanism-type>Kerbv5</authentication-mechanism-type>
-            <credential-interface>javax.resource.spi.security.PasswordCredential</credential-interface>
-        </authentication-mechanism>
-        <authentication-mechanism>
-            <description>description_2</description>
-            <authentication-mechanism-type>BasicPassword</authentication-mechanism-type>
-            <credential-interface>javax.resource.spi.security.PasswordCredential</credential-interface>
-        </authentication-mechanism>
-        <authentication-mechanism>
-            <description>description_3</description>
-            <authentication-mechanism-type>Kerbv5</authentication-mechanism-type>
-            <credential-interface>javax.resource.spi.security.PasswordCredential</credential-interface>
-        </authentication-mechanism>
-        <authentication-mechanism>
-            <description>description_4</description>
-            <authentication-mechanism-type>BasicPassword</authentication-mechanism-type>
-            <credential-interface>javax.resource.spi.security.PasswordCredential</credential-interface>
-        </authentication-mechanism>
-        <reauthentication-support>true</reauthentication-support>
-        <security-permission>
-            <description>description_0</description>
-            <security-permission-spec>specification_0</security-permission-spec>
-        </security-permission>
-        <security-permission>
-            <description>description_1</description>
-            <security-permission-spec>specification_1</security-permission-spec>
-        </security-permission>
-        <security-permission>
-            <description>description_2</description>
-            <security-permission-spec>specification_2</security-permission-spec>
-        </security-permission>
-        <security-permission>
-            <description>description_3</description>
-            <security-permission-spec>specification_3</security-permission-spec>
-        </security-permission>
-        <security-permission>
-            <description>description_4</description>
-            <security-permission-spec>specification_4</security-permission-spec>
-        </security-permission>
-    </resourceadapter>
-</connector>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTestNoID/web.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTestNoID/web.xml
deleted file mode 100644
index f34ec57..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTestNoID/web.xml
+++ /dev/null
@@ -1,1284 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
-<web-app id="WebApp_ID">
-    <icon>
-        <small-icon>smallIcon_0</small-icon>
-        <large-icon>largeIcon_0</large-icon>
-    </icon>
-    <display-name>displayName_0</display-name>
-    <description>description_0</description>
-    <distributable/>
-    <context-param>
-        <param-name>paramName_0</param-name>
-        <param-value>paramValue_0</param-value>
-        <description>description_0</description>
-    </context-param>
-    <context-param>
-        <param-name>paramName_1</param-name>
-        <param-value>paramValue_1</param-value>
-        <description>description_1</description>
-    </context-param>
-    <context-param>
-        <param-name>paramName_2</param-name>
-        <param-value>paramValue_2</param-value>
-        <description>description_2</description>
-    </context-param>
-    <context-param>
-        <param-name>paramName_3</param-name>
-        <param-value>paramValue_3</param-value>
-        <description>description_3</description>
-    </context-param>
-    <context-param>
-        <param-name>paramName_4</param-name>
-        <param-value>paramValue_4</param-value>
-        <description>description_4</description>
-    </context-param>
-    <filter>
-        <icon>
-            <small-icon>smallIcon_0</small-icon>
-            <large-icon>largeIcon_0</large-icon>
-        </icon>
-        <filter-name>name_0</filter-name>
-        <display-name>displayName_0</display-name>
-        <description>description_0</description>
-        <filter-class>java.util.HashTable</filter-class>
-        <init-param>
-            <param-name>paramName_25</param-name>
-            <param-value>paramValue_25</param-value>
-            <description>description_25</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_26</param-name>
-            <param-value>paramValue_26</param-value>
-            <description>description_26</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_27</param-name>
-            <param-value>paramValue_27</param-value>
-            <description>description_27</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_28</param-name>
-            <param-value>paramValue_28</param-value>
-            <description>description_28</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_29</param-name>
-            <param-value>paramValue_29</param-value>
-            <description>description_29</description>
-        </init-param>
-    </filter>
-    <filter>
-        <icon>
-            <small-icon>smallIcon_1</small-icon>
-            <large-icon>largeIcon_1</large-icon>
-        </icon>
-        <filter-name>name_1</filter-name>
-        <display-name>displayName_1</display-name>
-        <description>description_1</description>
-        <filter-class>java.util.List</filter-class>
-        <init-param>
-            <param-name>paramName_30</param-name>
-            <param-value>paramValue_30</param-value>
-            <description>description_30</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_31</param-name>
-            <param-value>paramValue_31</param-value>
-            <description>description_31</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_32</param-name>
-            <param-value>paramValue_32</param-value>
-            <description>description_32</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_33</param-name>
-            <param-value>paramValue_33</param-value>
-            <description>description_33</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_34</param-name>
-            <param-value>paramValue_34</param-value>
-            <description>description_34</description>
-        </init-param>
-    </filter>
-    <filter>
-        <icon>
-            <small-icon>smallIcon_2</small-icon>
-            <large-icon>largeIcon_2</large-icon>
-        </icon>
-        <filter-name>name_2</filter-name>
-        <display-name>displayName_2</display-name>
-        <description>description_2</description>
-        <filter-class>java.sql.Data</filter-class>
-        <init-param>
-            <param-name>paramName_35</param-name>
-            <param-value>paramValue_35</param-value>
-            <description>description_35</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_36</param-name>
-            <param-value>paramValue_36</param-value>
-            <description>description_36</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_37</param-name>
-            <param-value>paramValue_37</param-value>
-            <description>description_37</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_38</param-name>
-            <param-value>paramValue_38</param-value>
-            <description>description_38</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_39</param-name>
-            <param-value>paramValue_39</param-value>
-            <description>description_39</description>
-        </init-param>
-    </filter>
-    <filter>
-        <icon>
-            <small-icon>smallIcon_3</small-icon>
-            <large-icon>largeIcon_3</large-icon>
-        </icon>
-        <filter-name>name_3</filter-name>
-        <display-name>displayName_3</display-name>
-        <description>description_3</description>
-        <filter-class>java.lang.Integer</filter-class>
-        <init-param>
-            <param-name>paramName_40</param-name>
-            <param-value>paramValue_40</param-value>
-            <description>description_40</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_41</param-name>
-            <param-value>paramValue_41</param-value>
-            <description>description_41</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_42</param-name>
-            <param-value>paramValue_42</param-value>
-            <description>description_42</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_43</param-name>
-            <param-value>paramValue_43</param-value>
-            <description>description_43</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_44</param-name>
-            <param-value>paramValue_44</param-value>
-            <description>description_44</description>
-        </init-param>
-    </filter>
-    <filter>
-        <icon>
-            <small-icon>smallIcon_4</small-icon>
-            <large-icon>largeIcon_4</large-icon>
-        </icon>
-        <filter-name>name_4</filter-name>
-        <display-name>displayName_4</display-name>
-        <description>description_4</description>
-        <filter-class>java.lang.String</filter-class>
-        <init-param>
-            <param-name>paramName_45</param-name>
-            <param-value>paramValue_45</param-value>
-            <description>description_45</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_46</param-name>
-            <param-value>paramValue_46</param-value>
-            <description>description_46</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_47</param-name>
-            <param-value>paramValue_47</param-value>
-            <description>description_47</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_48</param-name>
-            <param-value>paramValue_48</param-value>
-            <description>description_48</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_49</param-name>
-            <param-value>paramValue_49</param-value>
-            <description>description_49</description>
-        </init-param>
-    </filter>
-    <filter-mapping>
-        <filter-name>name_0</filter-name>
-        <url-pattern>urlPattern_0</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>name_1</filter-name>
-        <url-pattern>urlPattern_1</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>name_2</filter-name>
-        <url-pattern>urlPattern_2</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>name_3</filter-name>
-        <url-pattern>urlPattern_3</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>name_4</filter-name>
-        <url-pattern>urlPattern_4</url-pattern>
-    </filter-mapping>
-    <listener>
-        <listener-class>java.util.HashTable</listener-class>
-    </listener>
-    <listener>
-        <listener-class>java.util.List</listener-class>
-    </listener>
-    <listener>
-        <listener-class>java.sql.Data</listener-class>
-    </listener>
-    <listener>
-        <listener-class>java.lang.Integer</listener-class>
-    </listener>
-    <listener>
-        <listener-class>java.lang.String</listener-class>
-    </listener>
-    <servlet>
-        <icon>
-            <small-icon>smallIcon_0</small-icon>
-            <large-icon>largeIcon_0</large-icon>
-        </icon>
-        <servlet-name>servletName_0</servlet-name>
-        <display-name>displayName_0</display-name>
-        <description>description_0</description>
-        <jsp-file>jspFile_0</jsp-file>
-        <init-param>
-            <param-name>paramName_0</param-name>
-            <param-value>paramValue_0</param-value>
-            <description>description_0</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_1</param-name>
-            <param-value>paramValue_1</param-value>
-            <description>description_1</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_2</param-name>
-            <param-value>paramValue_2</param-value>
-            <description>description_2</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_3</param-name>
-            <param-value>paramValue_3</param-value>
-            <description>description_3</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_4</param-name>
-            <param-value>paramValue_4</param-value>
-            <description>description_4</description>
-        </init-param>
-        <load-on-startup>0</load-on-startup>
-        <run-as>
-            <description>description_0</description>
-            <role-name>roleName_0</role-name>
-        </run-as>
-        <security-role-ref>
-            <description>description_0</description>
-            <role-name>name_0</role-name>
-            <role-link>link_0</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_1</description>
-            <role-name>name_1</role-name>
-            <role-link>link_1</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_2</description>
-            <role-name>name_2</role-name>
-            <role-link>link_2</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_3</description>
-            <role-name>name_3</role-name>
-            <role-link>link_3</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_4</description>
-            <role-name>name_4</role-name>
-            <role-link>link_4</role-link>
-        </security-role-ref>
-    </servlet>
-    <servlet>
-        <icon>
-            <small-icon>smallIcon_1</small-icon>
-            <large-icon>largeIcon_1</large-icon>
-        </icon>
-        <servlet-name>servletName_1</servlet-name>
-        <display-name>displayName_1</display-name>
-        <description>description_1</description>
-        <servlet-class>className_0</servlet-class>
-        <init-param>
-            <param-name>paramName_5</param-name>
-            <param-value>paramValue_5</param-value>
-            <description>description_5</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_6</param-name>
-            <param-value>paramValue_6</param-value>
-            <description>description_6</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_7</param-name>
-            <param-value>paramValue_7</param-value>
-            <description>description_7</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_8</param-name>
-            <param-value>paramValue_8</param-value>
-            <description>description_8</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_9</param-name>
-            <param-value>paramValue_9</param-value>
-            <description>description_9</description>
-        </init-param>
-        <load-on-startup>1</load-on-startup>
-        <run-as>
-            <description>description_1</description>
-            <role-name>roleName_1</role-name>
-        </run-as>
-        <security-role-ref>
-            <description>description_5</description>
-            <role-name>name_5</role-name>
-            <role-link>link_5</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_6</description>
-            <role-name>name_6</role-name>
-            <role-link>link_6</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_7</description>
-            <role-name>name_7</role-name>
-            <role-link>link_7</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_8</description>
-            <role-name>name_8</role-name>
-            <role-link>link_8</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_9</description>
-            <role-name>name_9</role-name>
-            <role-link>link_9</role-link>
-        </security-role-ref>
-    </servlet>
-    <servlet>
-        <icon>
-            <small-icon>smallIcon_2</small-icon>
-            <large-icon>largeIcon_2</large-icon>
-        </icon>
-        <servlet-name>servletName_2</servlet-name>
-        <display-name>displayName_2</display-name>
-        <description>description_2</description>
-        <jsp-file>jspFile_1</jsp-file>
-        <init-param>
-            <param-name>paramName_10</param-name>
-            <param-value>paramValue_10</param-value>
-            <description>description_10</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_11</param-name>
-            <param-value>paramValue_11</param-value>
-            <description>description_11</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_12</param-name>
-            <param-value>paramValue_12</param-value>
-            <description>description_12</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_13</param-name>
-            <param-value>paramValue_13</param-value>
-            <description>description_13</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_14</param-name>
-            <param-value>paramValue_14</param-value>
-            <description>description_14</description>
-        </init-param>
-        <load-on-startup>2</load-on-startup>
-        <run-as>
-            <description>description_2</description>
-            <role-name>roleName_2</role-name>
-        </run-as>
-        <security-role-ref>
-            <description>description_10</description>
-            <role-name>name_10</role-name>
-            <role-link>link_10</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_11</description>
-            <role-name>name_11</role-name>
-            <role-link>link_11</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_12</description>
-            <role-name>name_12</role-name>
-            <role-link>link_12</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_13</description>
-            <role-name>name_13</role-name>
-            <role-link>link_13</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_14</description>
-            <role-name>name_14</role-name>
-            <role-link>link_14</role-link>
-        </security-role-ref>
-    </servlet>
-    <servlet>
-        <icon>
-            <small-icon>smallIcon_3</small-icon>
-            <large-icon>largeIcon_3</large-icon>
-        </icon>
-        <servlet-name>servletName_3</servlet-name>
-        <display-name>displayName_3</display-name>
-        <description>description_3</description>
-        <servlet-class>className_1</servlet-class>
-        <init-param>
-            <param-name>paramName_15</param-name>
-            <param-value>paramValue_15</param-value>
-            <description>description_15</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_16</param-name>
-            <param-value>paramValue_16</param-value>
-            <description>description_16</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_17</param-name>
-            <param-value>paramValue_17</param-value>
-            <description>description_17</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_18</param-name>
-            <param-value>paramValue_18</param-value>
-            <description>description_18</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_19</param-name>
-            <param-value>paramValue_19</param-value>
-            <description>description_19</description>
-        </init-param>
-        <load-on-startup>3</load-on-startup>
-        <run-as>
-            <description>description_3</description>
-            <role-name>roleName_3</role-name>
-        </run-as>
-        <security-role-ref>
-            <description>description_15</description>
-            <role-name>name_15</role-name>
-            <role-link>link_15</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_16</description>
-            <role-name>name_16</role-name>
-            <role-link>link_16</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_17</description>
-            <role-name>name_17</role-name>
-            <role-link>link_17</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_18</description>
-            <role-name>name_18</role-name>
-            <role-link>link_18</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_19</description>
-            <role-name>name_19</role-name>
-            <role-link>link_19</role-link>
-        </security-role-ref>
-    </servlet>
-    <servlet>
-        <icon>
-            <small-icon>smallIcon_4</small-icon>
-            <large-icon>largeIcon_4</large-icon>
-        </icon>
-        <servlet-name>servletName_4</servlet-name>
-        <display-name>displayName_4</display-name>
-        <description>description_4</description>
-        <jsp-file>jspFile_2</jsp-file>
-        <init-param>
-            <param-name>paramName_20</param-name>
-            <param-value>paramValue_20</param-value>
-            <description>description_20</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_21</param-name>
-            <param-value>paramValue_21</param-value>
-            <description>description_21</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_22</param-name>
-            <param-value>paramValue_22</param-value>
-            <description>description_22</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_23</param-name>
-            <param-value>paramValue_23</param-value>
-            <description>description_23</description>
-        </init-param>
-        <init-param>
-            <param-name>paramName_24</param-name>
-            <param-value>paramValue_24</param-value>
-            <description>description_24</description>
-        </init-param>
-        <load-on-startup>4</load-on-startup>
-        <run-as>
-            <description>description_4</description>
-            <role-name>roleName_4</role-name>
-        </run-as>
-        <security-role-ref>
-            <description>description_20</description>
-            <role-name>name_20</role-name>
-            <role-link>link_20</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_21</description>
-            <role-name>name_21</role-name>
-            <role-link>link_21</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_22</description>
-            <role-name>name_22</role-name>
-            <role-link>link_22</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_23</description>
-            <role-name>name_23</role-name>
-            <role-link>link_23</role-link>
-        </security-role-ref>
-        <security-role-ref>
-            <description>description_24</description>
-            <role-name>name_24</role-name>
-            <role-link>link_24</role-link>
-        </security-role-ref>
-    </servlet>
-    <servlet-mapping>
-        <servlet-name>servletName_0</servlet-name>
-        <url-pattern>urlPattern_0</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>servletName_1</servlet-name>
-        <url-pattern>urlPattern_1</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>servletName_2</servlet-name>
-        <url-pattern>urlPattern_2</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>servletName_3</servlet-name>
-        <url-pattern>urlPattern_3</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>servletName_4</servlet-name>
-        <url-pattern>urlPattern_4</url-pattern>
-    </servlet-mapping>
-    <session-config>
-        <session-timeout>0</session-timeout>
-    </session-config>
-    <mime-mapping>
-        <extension>extension_0</extension>
-        <mime-type>mimeType_0</mime-type>
-    </mime-mapping>
-    <mime-mapping>
-        <extension>extension_1</extension>
-        <mime-type>mimeType_1</mime-type>
-    </mime-mapping>
-    <mime-mapping>
-        <extension>extension_2</extension>
-        <mime-type>mimeType_2</mime-type>
-    </mime-mapping>
-    <mime-mapping>
-        <extension>extension_3</extension>
-        <mime-type>mimeType_3</mime-type>
-    </mime-mapping>
-    <mime-mapping>
-        <extension>extension_4</extension>
-        <mime-type>mimeType_4</mime-type>
-    </mime-mapping>
-    <welcome-file-list>
-        <welcome-file>welcomeFile_0</welcome-file>
-        <welcome-file>welcomeFile_1</welcome-file>
-        <welcome-file>welcomeFile_2</welcome-file>
-        <welcome-file>welcomeFile_3</welcome-file>
-        <welcome-file>welcomeFile_4</welcome-file>
-    </welcome-file-list>
-    <error-page>
-        <exception-type>java.util.HashTable</exception-type>
-        <location>location_0</location>
-    </error-page>
-    <error-page>
-        <error-code>errorCode_0</error-code>
-        <location>location_0</location>
-    </error-page>
-    <error-page>
-        <exception-type>java.util.List</exception-type>
-        <location>location_1</location>
-    </error-page>
-    <error-page>
-        <error-code>errorCode_1</error-code>
-        <location>location_1</location>
-    </error-page>
-    <error-page>
-        <exception-type>java.sql.Data</exception-type>
-        <location>location_2</location>
-    </error-page>
-    <taglib>
-        <taglib-uri>taglibURI_0</taglib-uri>
-        <taglib-location>taglibLocation_0</taglib-location>
-    </taglib>
-    <taglib>
-        <taglib-uri>taglibURI_1</taglib-uri>
-        <taglib-location>taglibLocation_1</taglib-location>
-    </taglib>
-    <taglib>
-        <taglib-uri>taglibURI_2</taglib-uri>
-        <taglib-location>taglibLocation_2</taglib-location>
-    </taglib>
-    <taglib>
-        <taglib-uri>taglibURI_3</taglib-uri>
-        <taglib-location>taglibLocation_3</taglib-location>
-    </taglib>
-    <taglib>
-        <taglib-uri>taglibURI_4</taglib-uri>
-        <taglib-location>taglibLocation_4</taglib-location>
-    </taglib>
-    <resource-env-ref>
-        <description>description_0</description>
-        <resource-env-ref-name>name_0</resource-env-ref-name>
-        <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-    </resource-env-ref>
-    <resource-env-ref>
-        <description>description_1</description>
-        <resource-env-ref-name>name_1</resource-env-ref-name>
-        <resource-env-ref-type>java.util.List</resource-env-ref-type>
-    </resource-env-ref>
-    <resource-env-ref>
-        <description>description_2</description>
-        <resource-env-ref-name>name_2</resource-env-ref-name>
-        <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-    </resource-env-ref>
-    <resource-env-ref>
-        <description>description_3</description>
-        <resource-env-ref-name>name_3</resource-env-ref-name>
-        <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-    </resource-env-ref>
-    <resource-env-ref>
-        <description>description_4</description>
-        <resource-env-ref-name>name_4</resource-env-ref-name>
-        <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-    </resource-env-ref>
-    <resource-ref>
-        <description>description_0</description>
-        <res-ref-name>name_0</res-ref-name>
-        <res-type>type_0</res-type>
-        <res-auth>Container</res-auth>
-        <res-sharing-scope>Shareable</res-sharing-scope>
-    </resource-ref>
-    <resource-ref>
-        <description>description_1</description>
-        <res-ref-name>name_1</res-ref-name>
-        <res-type>type_1</res-type>
-        <res-auth>Application</res-auth>
-        <res-sharing-scope>Unshareable</res-sharing-scope>
-    </resource-ref>
-    <resource-ref>
-        <description>description_2</description>
-        <res-ref-name>name_2</res-ref-name>
-        <res-type>type_2</res-type>
-        <res-auth>Container</res-auth>
-        <res-sharing-scope>Shareable</res-sharing-scope>
-    </resource-ref>
-    <resource-ref>
-        <description>description_3</description>
-        <res-ref-name>name_3</res-ref-name>
-        <res-type>type_3</res-type>
-        <res-auth>Application</res-auth>
-        <res-sharing-scope>Unshareable</res-sharing-scope>
-    </resource-ref>
-    <resource-ref>
-        <description>description_4</description>
-        <res-ref-name>name_4</res-ref-name>
-        <res-type>type_4</res-type>
-        <res-auth>Container</res-auth>
-        <res-sharing-scope>Shareable</res-sharing-scope>
-    </resource-ref>
-    <security-constraint>
-        <display-name>displayName_0</display-name>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_0</web-resource-name>
-            <description>description_0</description>
-            <url-pattern>urlPattern_0</url-pattern>
-            <url-pattern>urlPattern_1</url-pattern>
-            <url-pattern>urlPattern_2</url-pattern>
-            <url-pattern>urlPattern_3</url-pattern>
-            <url-pattern>urlPattern_4</url-pattern>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_1</web-resource-name>
-            <description>description_1</description>
-            <url-pattern>urlPattern_5</url-pattern>
-            <url-pattern>urlPattern_6</url-pattern>
-            <url-pattern>urlPattern_7</url-pattern>
-            <url-pattern>urlPattern_8</url-pattern>
-            <url-pattern>urlPattern_9</url-pattern>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_2</web-resource-name>
-            <description>description_2</description>
-            <url-pattern>urlPattern_10</url-pattern>
-            <url-pattern>urlPattern_11</url-pattern>
-            <url-pattern>urlPattern_12</url-pattern>
-            <url-pattern>urlPattern_13</url-pattern>
-            <url-pattern>urlPattern_14</url-pattern>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_3</web-resource-name>
-            <description>description_3</description>
-            <url-pattern>urlPattern_15</url-pattern>
-            <url-pattern>urlPattern_16</url-pattern>
-            <url-pattern>urlPattern_17</url-pattern>
-            <url-pattern>urlPattern_18</url-pattern>
-            <url-pattern>urlPattern_19</url-pattern>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_4</web-resource-name>
-            <description>description_4</description>
-            <url-pattern>urlPattern_20</url-pattern>
-            <url-pattern>urlPattern_21</url-pattern>
-            <url-pattern>urlPattern_22</url-pattern>
-            <url-pattern>urlPattern_23</url-pattern>
-            <url-pattern>urlPattern_24</url-pattern>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-        </web-resource-collection>
-        <auth-constraint>
-            <description>description_0</description>
-            <role-name>roles_0</role-name>
-            <role-name>roles_1</role-name>
-            <role-name>roles_2</role-name>
-            <role-name>roles_3</role-name>
-            <role-name>roles_4</role-name>
-        </auth-constraint>
-        <user-data-constraint>
-            <description>description_0</description>
-            <transport-guarantee>NONE</transport-guarantee>
-        </user-data-constraint>
-    </security-constraint>
-    <security-constraint>
-        <display-name>displayName_1</display-name>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_5</web-resource-name>
-            <description>description_5</description>
-            <url-pattern>urlPattern_25</url-pattern>
-            <url-pattern>urlPattern_26</url-pattern>
-            <url-pattern>urlPattern_27</url-pattern>
-            <url-pattern>urlPattern_28</url-pattern>
-            <url-pattern>urlPattern_29</url-pattern>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_6</web-resource-name>
-            <description>description_6</description>
-            <url-pattern>urlPattern_30</url-pattern>
-            <url-pattern>urlPattern_31</url-pattern>
-            <url-pattern>urlPattern_32</url-pattern>
-            <url-pattern>urlPattern_33</url-pattern>
-            <url-pattern>urlPattern_34</url-pattern>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_7</web-resource-name>
-            <description>description_7</description>
-            <url-pattern>urlPattern_35</url-pattern>
-            <url-pattern>urlPattern_36</url-pattern>
-            <url-pattern>urlPattern_37</url-pattern>
-            <url-pattern>urlPattern_38</url-pattern>
-            <url-pattern>urlPattern_39</url-pattern>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_8</web-resource-name>
-            <description>description_8</description>
-            <url-pattern>urlPattern_40</url-pattern>
-            <url-pattern>urlPattern_41</url-pattern>
-            <url-pattern>urlPattern_42</url-pattern>
-            <url-pattern>urlPattern_43</url-pattern>
-            <url-pattern>urlPattern_44</url-pattern>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_9</web-resource-name>
-            <description>description_9</description>
-            <url-pattern>urlPattern_45</url-pattern>
-            <url-pattern>urlPattern_46</url-pattern>
-            <url-pattern>urlPattern_47</url-pattern>
-            <url-pattern>urlPattern_48</url-pattern>
-            <url-pattern>urlPattern_49</url-pattern>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-        </web-resource-collection>
-        <auth-constraint>
-            <description>description_1</description>
-            <role-name>roles_5</role-name>
-            <role-name>roles_6</role-name>
-            <role-name>roles_7</role-name>
-            <role-name>roles_8</role-name>
-            <role-name>roles_9</role-name>
-        </auth-constraint>
-        <user-data-constraint>
-            <description>description_1</description>
-            <transport-guarantee>INTEGRAL</transport-guarantee>
-        </user-data-constraint>
-    </security-constraint>
-    <security-constraint>
-        <display-name>displayName_2</display-name>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_10</web-resource-name>
-            <description>description_10</description>
-            <url-pattern>urlPattern_50</url-pattern>
-            <url-pattern>urlPattern_51</url-pattern>
-            <url-pattern>urlPattern_52</url-pattern>
-            <url-pattern>urlPattern_53</url-pattern>
-            <url-pattern>urlPattern_54</url-pattern>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_11</web-resource-name>
-            <description>description_11</description>
-            <url-pattern>urlPattern_55</url-pattern>
-            <url-pattern>urlPattern_56</url-pattern>
-            <url-pattern>urlPattern_57</url-pattern>
-            <url-pattern>urlPattern_58</url-pattern>
-            <url-pattern>urlPattern_59</url-pattern>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_12</web-resource-name>
-            <description>description_12</description>
-            <url-pattern>urlPattern_60</url-pattern>
-            <url-pattern>urlPattern_61</url-pattern>
-            <url-pattern>urlPattern_62</url-pattern>
-            <url-pattern>urlPattern_63</url-pattern>
-            <url-pattern>urlPattern_64</url-pattern>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_13</web-resource-name>
-            <description>description_13</description>
-            <url-pattern>urlPattern_65</url-pattern>
-            <url-pattern>urlPattern_66</url-pattern>
-            <url-pattern>urlPattern_67</url-pattern>
-            <url-pattern>urlPattern_68</url-pattern>
-            <url-pattern>urlPattern_69</url-pattern>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_14</web-resource-name>
-            <description>description_14</description>
-            <url-pattern>urlPattern_70</url-pattern>
-            <url-pattern>urlPattern_71</url-pattern>
-            <url-pattern>urlPattern_72</url-pattern>
-            <url-pattern>urlPattern_73</url-pattern>
-            <url-pattern>urlPattern_74</url-pattern>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-        </web-resource-collection>
-        <auth-constraint>
-            <description>description_2</description>
-            <role-name>roles_10</role-name>
-            <role-name>roles_11</role-name>
-            <role-name>roles_12</role-name>
-            <role-name>roles_13</role-name>
-            <role-name>roles_14</role-name>
-        </auth-constraint>
-        <user-data-constraint>
-            <description>description_2</description>
-            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
-        </user-data-constraint>
-    </security-constraint>
-    <security-constraint>
-        <display-name>displayName_3</display-name>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_15</web-resource-name>
-            <description>description_15</description>
-            <url-pattern>urlPattern_75</url-pattern>
-            <url-pattern>urlPattern_76</url-pattern>
-            <url-pattern>urlPattern_77</url-pattern>
-            <url-pattern>urlPattern_78</url-pattern>
-            <url-pattern>urlPattern_79</url-pattern>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_16</web-resource-name>
-            <description>description_16</description>
-            <url-pattern>urlPattern_80</url-pattern>
-            <url-pattern>urlPattern_81</url-pattern>
-            <url-pattern>urlPattern_82</url-pattern>
-            <url-pattern>urlPattern_83</url-pattern>
-            <url-pattern>urlPattern_84</url-pattern>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_17</web-resource-name>
-            <description>description_17</description>
-            <url-pattern>urlPattern_85</url-pattern>
-            <url-pattern>urlPattern_86</url-pattern>
-            <url-pattern>urlPattern_87</url-pattern>
-            <url-pattern>urlPattern_88</url-pattern>
-            <url-pattern>urlPattern_89</url-pattern>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_18</web-resource-name>
-            <description>description_18</description>
-            <url-pattern>urlPattern_90</url-pattern>
-            <url-pattern>urlPattern_91</url-pattern>
-            <url-pattern>urlPattern_92</url-pattern>
-            <url-pattern>urlPattern_93</url-pattern>
-            <url-pattern>urlPattern_94</url-pattern>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_19</web-resource-name>
-            <description>description_19</description>
-            <url-pattern>urlPattern_95</url-pattern>
-            <url-pattern>urlPattern_96</url-pattern>
-            <url-pattern>urlPattern_97</url-pattern>
-            <url-pattern>urlPattern_98</url-pattern>
-            <url-pattern>urlPattern_99</url-pattern>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-        </web-resource-collection>
-        <auth-constraint>
-            <description>description_3</description>
-            <role-name>roles_15</role-name>
-            <role-name>roles_16</role-name>
-            <role-name>roles_17</role-name>
-            <role-name>roles_18</role-name>
-            <role-name>roles_19</role-name>
-        </auth-constraint>
-        <user-data-constraint>
-            <description>description_3</description>
-            <transport-guarantee>NONE</transport-guarantee>
-        </user-data-constraint>
-    </security-constraint>
-    <security-constraint>
-        <display-name>displayName_4</display-name>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_20</web-resource-name>
-            <description>description_20</description>
-            <url-pattern>urlPattern_100</url-pattern>
-            <url-pattern>urlPattern_101</url-pattern>
-            <url-pattern>urlPattern_102</url-pattern>
-            <url-pattern>urlPattern_103</url-pattern>
-            <url-pattern>urlPattern_104</url-pattern>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_21</web-resource-name>
-            <description>description_21</description>
-            <url-pattern>urlPattern_105</url-pattern>
-            <url-pattern>urlPattern_106</url-pattern>
-            <url-pattern>urlPattern_107</url-pattern>
-            <url-pattern>urlPattern_108</url-pattern>
-            <url-pattern>urlPattern_109</url-pattern>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_22</web-resource-name>
-            <description>description_22</description>
-            <url-pattern>urlPattern_110</url-pattern>
-            <url-pattern>urlPattern_111</url-pattern>
-            <url-pattern>urlPattern_112</url-pattern>
-            <url-pattern>urlPattern_113</url-pattern>
-            <url-pattern>urlPattern_114</url-pattern>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_23</web-resource-name>
-            <description>description_23</description>
-            <url-pattern>urlPattern_115</url-pattern>
-            <url-pattern>urlPattern_116</url-pattern>
-            <url-pattern>urlPattern_117</url-pattern>
-            <url-pattern>urlPattern_118</url-pattern>
-            <url-pattern>urlPattern_119</url-pattern>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-        </web-resource-collection>
-        <web-resource-collection>
-            <web-resource-name>webResourceName_24</web-resource-name>
-            <description>description_24</description>
-            <url-pattern>urlPattern_120</url-pattern>
-            <url-pattern>urlPattern_121</url-pattern>
-            <url-pattern>urlPattern_122</url-pattern>
-            <url-pattern>urlPattern_123</url-pattern>
-            <url-pattern>urlPattern_124</url-pattern>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-        </web-resource-collection>
-        <auth-constraint>
-            <description>description_4</description>
-            <role-name>roles_20</role-name>
-            <role-name>roles_21</role-name>
-            <role-name>roles_22</role-name>
-            <role-name>roles_23</role-name>
-            <role-name>roles_24</role-name>
-        </auth-constraint>
-        <user-data-constraint>
-            <description>description_4</description>
-            <transport-guarantee>INTEGRAL</transport-guarantee>
-        </user-data-constraint>
-    </security-constraint>
-    <login-config>
-        <auth-method>BASIC</auth-method>
-        <realm-name>realmName_0</realm-name>
-        <form-login-config>
-            <form-login-page>formLoginPage_0</form-login-page>
-            <form-error-page>formErrorPage_0</form-error-page>
-        </form-login-config>
-    </login-config>
-    <security-role>
-        <description>description_0</description>
-        <role-name>roleName_0</role-name>
-    </security-role>
-    <security-role>
-        <description>description_1</description>
-        <role-name>roleName_1</role-name>
-    </security-role>
-    <security-role>
-        <description>description_2</description>
-        <role-name>roleName_2</role-name>
-    </security-role>
-    <security-role>
-        <description>description_3</description>
-        <role-name>roleName_3</role-name>
-    </security-role>
-    <security-role>
-        <description>description_4</description>
-        <role-name>roleName_4</role-name>
-    </security-role>
-    <env-entry>
-        <description>description_0</description>
-        <env-entry-name>name_0</env-entry-name>
-        <env-entry-value>value_0</env-entry-value>
-        <env-entry-type>java.lang.String</env-entry-type>
-    </env-entry>
-    <env-entry>
-        <description>description_1</description>
-        <env-entry-name>name_1</env-entry-name>
-        <env-entry-value>value_1</env-entry-value>
-        <env-entry-type>java.lang.Integer</env-entry-type>
-    </env-entry>
-    <env-entry>
-        <description>description_2</description>
-        <env-entry-name>name_2</env-entry-name>
-        <env-entry-value>value_2</env-entry-value>
-        <env-entry-type>java.lang.Boolean</env-entry-type>
-    </env-entry>
-    <env-entry>
-        <description>description_3</description>
-        <env-entry-name>name_3</env-entry-name>
-        <env-entry-value>value_3</env-entry-value>
-        <env-entry-type>java.lang.Double</env-entry-type>
-    </env-entry>
-    <env-entry>
-        <description>description_4</description>
-        <env-entry-name>name_4</env-entry-name>
-        <env-entry-value>value_4</env-entry-value>
-        <env-entry-type>java.lang.Byte</env-entry-type>
-    </env-entry>
-    <ejb-ref>
-        <description>description_0</description>
-        <ejb-ref-name>name_0</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <home>home_0</home>
-        <remote>remote_0</remote>
-        <ejb-link>link_0</ejb-link>
-    </ejb-ref>
-    <ejb-ref>
-        <description>description_1</description>
-        <ejb-ref-name>name_1</ejb-ref-name>
-        <ejb-ref-type>Entity</ejb-ref-type>
-        <home>home_1</home>
-        <remote>remote_1</remote>
-        <ejb-link>link_1</ejb-link>
-    </ejb-ref>
-    <ejb-ref>
-        <description>description_2</description>
-        <ejb-ref-name>name_2</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <home>home_2</home>
-        <remote>remote_2</remote>
-        <ejb-link>link_2</ejb-link>
-    </ejb-ref>
-    <ejb-ref>
-        <description>description_3</description>
-        <ejb-ref-name>name_3</ejb-ref-name>
-        <ejb-ref-type>Entity</ejb-ref-type>
-        <home>home_3</home>
-        <remote>remote_3</remote>
-        <ejb-link>link_3</ejb-link>
-    </ejb-ref>
-    <ejb-ref>
-        <description>description_4</description>
-        <ejb-ref-name>name_4</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <home>home_4</home>
-        <remote>remote_4</remote>
-        <ejb-link>link_4</ejb-link>
-    </ejb-ref>
-    <ejb-local-ref>
-        <description>description_0</description>
-        <ejb-ref-name>name_0</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <local-home>home_0</local-home>
-        <local>remote_0</local>
-        <ejb-link>link_0</ejb-link>
-    </ejb-local-ref>
-    <ejb-local-ref>
-        <description>description_1</description>
-        <ejb-ref-name>name_1</ejb-ref-name>
-        <ejb-ref-type>Entity</ejb-ref-type>
-        <local-home>home_1</local-home>
-        <local>remote_1</local>
-        <ejb-link>link_1</ejb-link>
-    </ejb-local-ref>
-    <ejb-local-ref>
-        <description>description_2</description>
-        <ejb-ref-name>name_2</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <local-home>home_2</local-home>
-        <local>remote_2</local>
-        <ejb-link>link_2</ejb-link>
-    </ejb-local-ref>
-    <ejb-local-ref>
-        <description>description_3</description>
-        <ejb-ref-name>name_3</ejb-ref-name>
-        <ejb-ref-type>Entity</ejb-ref-type>
-        <local-home>home_3</local-home>
-        <local>remote_3</local>
-        <ejb-link>link_3</ejb-link>
-    </ejb-local-ref>
-    <ejb-local-ref>
-        <description>description_4</description>
-        <ejb-ref-name>name_4</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <local-home>home_4</local-home>
-        <local>remote_4</local>
-        <ejb-link>link_4</ejb-link>
-    </ejb-local-ref>
-</web-app>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/application-client.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/application-client.xml
deleted file mode 100644
index 325960c..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/application-client.xml
+++ /dev/null
@@ -1,142 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE application-client PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application Client 1.3//EN" "http://java.sun.com/dtd/application-client_1_3.dtd">
-
-   <application-client id="Application-client_ID">
-      <icon>
-         <small-icon>smallIcon_0</small-icon>
-         <large-icon>largeIcon_0</large-icon>
-      </icon>
-      <display-name>displayName_0</display-name>
-      <description>description_0</description>
-      <env-entry id="EnvEntry_1051639763239">
-         <description>description_0</description>
-         <env-entry-name>name_0</env-entry-name>
-         <env-entry-type>java.lang.String</env-entry-type>
-         <env-entry-value>value_0</env-entry-value>
-      </env-entry>
-      <env-entry id="EnvEntry_1051639763240">
-         <description>description_1</description>
-         <env-entry-name>name_1</env-entry-name>
-         <env-entry-type>java.lang.Integer</env-entry-type>
-         <env-entry-value>value_1</env-entry-value>
-      </env-entry>
-      <env-entry id="EnvEntry_1051639763241">
-         <description>description_2</description>
-         <env-entry-name>name_2</env-entry-name>
-         <env-entry-type>java.lang.Boolean</env-entry-type>
-         <env-entry-value>value_2</env-entry-value>
-      </env-entry>
-      <env-entry id="EnvEntry_1051639763259">
-         <description>description_3</description>
-         <env-entry-name>name_3</env-entry-name>
-         <env-entry-type>java.lang.Double</env-entry-type>
-         <env-entry-value>value_3</env-entry-value>
-      </env-entry>
-      <env-entry id="EnvEntry_1051639763260">
-         <description>description_4</description>
-         <env-entry-name>name_4</env-entry-name>
-         <env-entry-type>java.lang.Byte</env-entry-type>
-         <env-entry-value>value_4</env-entry-value>
-      </env-entry>
-      <ejb-ref id="EjbRef_1051639763279">
-         <description>description_0</description>
-         <ejb-ref-name>name_0</ejb-ref-name>
-         <ejb-ref-type>Session</ejb-ref-type>
-         <home>home_0</home>
-         <remote>remote_0</remote>
-         <ejb-link>link_0</ejb-link>
-      </ejb-ref>
-      <ejb-ref id="EjbRef_1051639763280">
-         <description>description_1</description>
-         <ejb-ref-name>name_1</ejb-ref-name>
-         <ejb-ref-type>Entity</ejb-ref-type>
-         <home>home_1</home>
-         <remote>remote_1</remote>
-         <ejb-link>link_1</ejb-link>
-      </ejb-ref>
-      <ejb-ref id="EjbRef_1051639763281">
-         <description>description_2</description>
-         <ejb-ref-name>name_2</ejb-ref-name>
-         <ejb-ref-type>Session</ejb-ref-type>
-         <home>home_2</home>
-         <remote>remote_2</remote>
-         <ejb-link>link_2</ejb-link>
-      </ejb-ref>
-      <ejb-ref id="EjbRef_1051639763282">
-         <description>description_3</description>
-         <ejb-ref-name>name_3</ejb-ref-name>
-         <ejb-ref-type>Entity</ejb-ref-type>
-         <home>home_3</home>
-         <remote>remote_3</remote>
-         <ejb-link>link_3</ejb-link>
-      </ejb-ref>
-      <ejb-ref id="EjbRef_1051639763283">
-         <description>description_4</description>
-         <ejb-ref-name>name_4</ejb-ref-name>
-         <ejb-ref-type>Session</ejb-ref-type>
-         <home>home_4</home>
-         <remote>remote_4</remote>
-         <ejb-link>link_4</ejb-link>
-      </ejb-ref>
-      <resource-ref id="ResourceRef_1051639763299">
-         <description>description_0</description>
-         <res-ref-name>name_0</res-ref-name>
-         <res-type>type_0</res-type>
-         <res-auth>Container</res-auth>
-         <res-sharing-scope>Shareable</res-sharing-scope>
-      </resource-ref>
-      <resource-ref id="ResourceRef_1051639763300">
-         <description>description_1</description>
-         <res-ref-name>name_1</res-ref-name>
-         <res-type>type_1</res-type>
-         <res-auth>Application</res-auth>
-         <res-sharing-scope>Unshareable</res-sharing-scope>
-      </resource-ref>
-      <resource-ref id="ResourceRef_1051639763301">
-         <description>description_2</description>
-         <res-ref-name>name_2</res-ref-name>
-         <res-type>type_2</res-type>
-         <res-auth>Container</res-auth>
-         <res-sharing-scope>Shareable</res-sharing-scope>
-      </resource-ref>
-      <resource-ref id="ResourceRef_1051639763302">
-         <description>description_3</description>
-         <res-ref-name>name_3</res-ref-name>
-         <res-type>type_3</res-type>
-         <res-auth>Application</res-auth>
-         <res-sharing-scope>Unshareable</res-sharing-scope>
-      </resource-ref>
-      <resource-ref id="ResourceRef_1051639763303">
-         <description>description_4</description>
-         <res-ref-name>name_4</res-ref-name>
-         <res-type>type_4</res-type>
-         <res-auth>Container</res-auth>
-         <res-sharing-scope>Shareable</res-sharing-scope>
-      </resource-ref>
-      <resource-env-ref id="ResourceEnvRef_1051639763319">
-         <description>description_0</description>
-         <resource-env-ref-name>name_0</resource-env-ref-name>
-         <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-      </resource-env-ref>
-      <resource-env-ref id="ResourceEnvRef_1051639763349">
-         <description>description_1</description>
-         <resource-env-ref-name>name_1</resource-env-ref-name>
-         <resource-env-ref-type>java.util.List</resource-env-ref-type>
-      </resource-env-ref>
-      <resource-env-ref id="ResourceEnvRef_1051639763350">
-         <description>description_2</description>
-         <resource-env-ref-name>name_2</resource-env-ref-name>
-         <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-      </resource-env-ref>
-      <resource-env-ref id="ResourceEnvRef_1051639763351">
-         <description>description_3</description>
-         <resource-env-ref-name>name_3</resource-env-ref-name>
-         <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-      </resource-env-ref>
-      <resource-env-ref id="ResourceEnvRef_1051639763352">
-         <description>description_4</description>
-         <resource-env-ref-name>name_4</resource-env-ref-name>
-         <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-      </resource-env-ref>
-      <callback-handler>java.util.HashTable</callback-handler>
-   </application-client>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/application.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/application.xml
deleted file mode 100644
index faf46bd..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/application.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" "http://java.sun.com/dtd/application_1_3.dtd">
-
-   <application id="Application_ID">
-      <icon>
-         <small-icon>smallIcon_0</small-icon>
-         <large-icon>largeIcon_0</large-icon>
-      </icon>
-      <display-name>displayName_0</display-name>
-      <description>description_0</description>
-      <module id="JavaClientModule_1051639778160">
-         <java>uri_0</java>
-         <alt-dd>altDD_0</alt-dd>
-      </module>
-      <module id="EjbModule_1051639778160">
-         <ejb>uri_1</ejb>
-         <alt-dd>altDD_1</alt-dd>
-      </module>
-      <module id="WebModule_1051639778160">
-         <web>
-            <web-uri>uri_2</web-uri>
-            <context-root>contextRoot_0</context-root>
-         </web>
-         <alt-dd>altDD_2</alt-dd>
-      </module>
-      <module id="ConnectorModule_1051639778160">
-         <connector>uri_3</connector>
-         <alt-dd>altDD_3</alt-dd>
-      </module>
-      <module id="JavaClientModule_1051639778161">
-         <java>uri_4</java>
-         <alt-dd>altDD_4</alt-dd>
-      </module>
-      <security-role id="SecurityRole_1051639778170">
-         <description>description_0</description>
-         <role-name>roleName_0</role-name>
-      </security-role>
-      <security-role id="SecurityRole_1051639778190">
-         <description>description_1</description>
-         <role-name>roleName_1</role-name>
-      </security-role>
-      <security-role id="SecurityRole_1051639778191">
-         <description>description_2</description>
-         <role-name>roleName_2</role-name>
-      </security-role>
-      <security-role id="SecurityRole_1051639778192">
-         <description>description_3</description>
-         <role-name>roleName_3</role-name>
-      </security-role>
-      <security-role id="SecurityRole_1051639778193">
-         <description>description_4</description>
-         <role-name>roleName_4</role-name>
-      </security-role>
-   </application>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/ejb-jar.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/ejb-jar.xml
deleted file mode 100644
index e875eae..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/ejb-jar.xml
+++ /dev/null
@@ -1,1864 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
-
-   <ejb-jar id="ejb-jar_ID">
-      <description>description_0</description>
-      <display-name>displayName_0</display-name>
-      <small-icon>smallIcon_0</small-icon>
-      <large-icon>largeIcon_0</large-icon>
-      <enterprise-beans>
-         <entity id="Entity_1051639788645">
-            <description>description_0</description>
-            <display-name>displayName_0</display-name>
-            <small-icon>smallIcon_0</small-icon>
-            <large-icon>largeIcon_0</large-icon>
-            <ejb-name>name_0</ejb-name>
-            <home>java.util.List</home>
-            <remote>java.sql.Data</remote>
-            <local-home>java.lang.Integer</local-home>
-            <local>java.lang.String</local>
-            <ejb-class>java.util.HashTable</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.util.HashTable</prim-key-class>
-            <reentrant>True</reentrant>
-            <env-entry id="EnvEntry_1051639788695">
-               <description>description_0</description>
-               <env-entry-name>name_0</env-entry-name>
-               <env-entry-type>java.lang.String</env-entry-type>
-               <env-entry-value>value_0</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788705">
-               <description>description_1</description>
-               <env-entry-name>name_1</env-entry-name>
-               <env-entry-type>java.lang.Integer</env-entry-type>
-               <env-entry-value>value_1</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788706">
-               <description>description_2</description>
-               <env-entry-name>name_2</env-entry-name>
-               <env-entry-type>java.lang.Boolean</env-entry-type>
-               <env-entry-value>value_2</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788707">
-               <description>description_3</description>
-               <env-entry-name>name_3</env-entry-name>
-               <env-entry-type>java.lang.Double</env-entry-type>
-               <env-entry-value>value_3</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788715">
-               <description>description_4</description>
-               <env-entry-name>name_4</env-entry-name>
-               <env-entry-type>java.lang.Byte</env-entry-type>
-               <env-entry-value>value_4</env-entry-value>
-            </env-entry>
-            <ejb-ref id="EjbRef_1051639788725">
-               <description>description_0</description>
-               <ejb-ref-name>name_0</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_0</home>
-               <remote>remote_0</remote>
-               <ejb-link>link_0</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788726">
-               <description>description_1</description>
-               <ejb-ref-name>name_1</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_1</home>
-               <remote>remote_1</remote>
-               <ejb-link>link_1</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788727">
-               <description>description_2</description>
-               <ejb-ref-name>name_2</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_2</home>
-               <remote>remote_2</remote>
-               <ejb-link>link_2</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788728">
-               <description>description_3</description>
-               <ejb-ref-name>name_3</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_3</home>
-               <remote>remote_3</remote>
-               <ejb-link>link_3</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788729">
-               <description>description_4</description>
-               <ejb-ref-name>name_4</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_4</home>
-               <remote>remote_4</remote>
-               <ejb-link>link_4</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788745">
-               <description>description_5</description>
-               <ejb-ref-name>name_5</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_5</local-home>
-               <local>remote_5</local>
-               <ejb-link>link_5</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788746">
-               <description>description_6</description>
-               <ejb-ref-name>name_6</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_6</local-home>
-               <local>remote_6</local>
-               <ejb-link>link_6</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788747">
-               <description>description_7</description>
-               <ejb-ref-name>name_7</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_7</local-home>
-               <local>remote_7</local>
-               <ejb-link>link_7</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788748">
-               <description>description_8</description>
-               <ejb-ref-name>name_8</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_8</local-home>
-               <local>remote_8</local>
-               <ejb-link>link_8</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788749">
-               <description>description_9</description>
-               <ejb-ref-name>name_9</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_9</local-home>
-               <local>remote_9</local>
-               <ejb-link>link_9</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788775">
-               <description>description_0</description>
-               <role-name>name_0</role-name>
-               <role-link>link_0</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788776">
-               <description>description_1</description>
-               <role-name>name_1</role-name>
-               <role-link>link_1</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788777">
-               <description>description_2</description>
-               <role-name>name_2</role-name>
-               <role-link>link_2</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788778">
-               <description>description_3</description>
-               <role-name>name_3</role-name>
-               <role-link>link_3</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788779">
-               <description>description_4</description>
-               <role-name>name_4</role-name>
-               <role-link>link_4</role-link>
-            </security-role-ref>
-            <security-identity>
-               <description>description_0</description>
-               <run-as id="RunAsSpecifiedIdentity_1051639788775">
-                  <description>description_0</description>
-                  <role-name>roleName_0</role-name>
-               </run-as>
-            </security-identity>
-            <resource-ref id="ResourceRef_1051639788785">
-               <description>description_0</description>
-               <res-ref-name>name_0</res-ref-name>
-               <res-type>type_0</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788786">
-               <description>description_1</description>
-               <res-ref-name>name_1</res-ref-name>
-               <res-type>type_1</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788787">
-               <description>description_2</description>
-               <res-ref-name>name_2</res-ref-name>
-               <res-type>type_2</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788788">
-               <description>description_3</description>
-               <res-ref-name>name_3</res-ref-name>
-               <res-type>type_3</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788795">
-               <description>description_4</description>
-               <res-ref-name>name_4</res-ref-name>
-               <res-type>type_4</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788805">
-               <description>description_0</description>
-               <resource-env-ref-name>name_0</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788806">
-               <description>description_1</description>
-               <resource-env-ref-name>name_1</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788807">
-               <description>description_2</description>
-               <resource-env-ref-name>name_2</resource-env-ref-name>
-               <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788808">
-               <description>description_3</description>
-               <resource-env-ref-name>name_3</resource-env-ref-name>
-               <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788809">
-               <description>description_4</description>
-               <resource-env-ref-name>name_4</resource-env-ref-name>
-               <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-         </entity>
-         <entity id="Entity_1051639788805">
-            <description>description_1</description>
-            <display-name>displayName_1</display-name>
-            <small-icon>smallIcon_1</small-icon>
-            <large-icon>largeIcon_1</large-icon>
-            <ejb-name>name_1</ejb-name>
-            <home>java.sql.Data</home>
-            <remote>java.lang.Integer</remote>
-            <local-home>java.lang.String</local-home>
-            <local>java.util.HashTable</local>
-            <ejb-class>java.util.List</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.util.List</prim-key-class>
-            <reentrant>False</reentrant>
-            <env-entry id="EnvEntry_1051639788805">
-               <description>description_5</description>
-               <env-entry-name>name_5</env-entry-name>
-               <env-entry-type>java.lang.Short</env-entry-type>
-               <env-entry-value>value_5</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788815">
-               <description>description_6</description>
-               <env-entry-name>name_6</env-entry-name>
-               <env-entry-type>java.lang.Long</env-entry-type>
-               <env-entry-value>value_6</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788816">
-               <description>description_7</description>
-               <env-entry-name>name_7</env-entry-name>
-               <env-entry-type>java.lang.Float</env-entry-type>
-               <env-entry-value>value_7</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788817">
-               <description>description_8</description>
-               <env-entry-name>name_8</env-entry-name>
-               <env-entry-type>java.lang.Character</env-entry-type>
-               <env-entry-value>value_8</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788818">
-               <description>description_9</description>
-               <env-entry-name>name_9</env-entry-name>
-               <env-entry-type>java.lang.String</env-entry-type>
-               <env-entry-value>value_9</env-entry-value>
-            </env-entry>
-            <ejb-ref id="EjbRef_1051639788815">
-               <description>description_10</description>
-               <ejb-ref-name>name_10</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_10</home>
-               <remote>remote_10</remote>
-               <ejb-link>link_10</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788816">
-               <description>description_11</description>
-               <ejb-ref-name>name_11</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_11</home>
-               <remote>remote_11</remote>
-               <ejb-link>link_11</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788817">
-               <description>description_12</description>
-               <ejb-ref-name>name_12</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_12</home>
-               <remote>remote_12</remote>
-               <ejb-link>link_12</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788818">
-               <description>description_13</description>
-               <ejb-ref-name>name_13</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_13</home>
-               <remote>remote_13</remote>
-               <ejb-link>link_13</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788819">
-               <description>description_14</description>
-               <ejb-ref-name>name_14</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_14</home>
-               <remote>remote_14</remote>
-               <ejb-link>link_14</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788815">
-               <description>description_15</description>
-               <ejb-ref-name>name_15</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_15</local-home>
-               <local>remote_15</local>
-               <ejb-link>link_15</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788816">
-               <description>description_16</description>
-               <ejb-ref-name>name_16</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_16</local-home>
-               <local>remote_16</local>
-               <ejb-link>link_16</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788817">
-               <description>description_17</description>
-               <ejb-ref-name>name_17</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_17</local-home>
-               <local>remote_17</local>
-               <ejb-link>link_17</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788818">
-               <description>description_18</description>
-               <ejb-ref-name>name_18</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_18</local-home>
-               <local>remote_18</local>
-               <ejb-link>link_18</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788819">
-               <description>description_19</description>
-               <ejb-ref-name>name_19</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_19</local-home>
-               <local>remote_19</local>
-               <ejb-link>link_19</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788825">
-               <description>description_5</description>
-               <role-name>name_5</role-name>
-               <role-link>link_5</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788826">
-               <description>description_6</description>
-               <role-name>name_6</role-name>
-               <role-link>link_6</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788827">
-               <description>description_7</description>
-               <role-name>name_7</role-name>
-               <role-link>link_7</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788828">
-               <description>description_8</description>
-               <role-name>name_8</role-name>
-               <role-link>link_8</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788829">
-               <description>description_9</description>
-               <role-name>name_9</role-name>
-               <role-link>link_9</role-link>
-            </security-role-ref>
-            <security-identity>
-               <description>description_1</description>
-               <use-caller-identity id="UseCallerIdentity_1051639788825"></use-caller-identity>
-            </security-identity>
-            <resource-ref id="ResourceRef_1051639788825">
-               <description>description_5</description>
-               <res-ref-name>name_5</res-ref-name>
-               <res-type>type_5</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788826">
-               <description>description_6</description>
-               <res-ref-name>name_6</res-ref-name>
-               <res-type>type_6</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788827">
-               <description>description_7</description>
-               <res-ref-name>name_7</res-ref-name>
-               <res-type>type_7</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788828">
-               <description>description_8</description>
-               <res-ref-name>name_8</res-ref-name>
-               <res-type>type_8</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788829">
-               <description>description_9</description>
-               <res-ref-name>name_9</res-ref-name>
-               <res-type>type_9</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788825">
-               <description>description_5</description>
-               <resource-env-ref-name>name_5</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788826">
-               <description>description_6</description>
-               <resource-env-ref-name>name_6</resource-env-ref-name>
-               <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788827">
-               <description>description_7</description>
-               <resource-env-ref-name>name_7</resource-env-ref-name>
-               <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788828">
-               <description>description_8</description>
-               <resource-env-ref-name>name_8</resource-env-ref-name>
-               <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788829">
-               <description>description_9</description>
-               <resource-env-ref-name>name_9</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-         </entity>
-         <entity id="ContainerManagedEntity_1051639788825">
-            <description>description_2</description>
-            <display-name>displayName_2</display-name>
-            <small-icon>smallIcon_2</small-icon>
-            <large-icon>largeIcon_2</large-icon>
-            <ejb-name>name_2</ejb-name>
-            <home>java.lang.Integer</home>
-            <remote>java.lang.String</remote>
-            <local-home>java.util.HashTable</local-home>
-            <local>java.util.List</local>
-            <ejb-class>java.sql.Data</ejb-class>
-            <persistence-type>Container</persistence-type>
-            <prim-key-class>java.sql.Data</prim-key-class>
-            <reentrant>True</reentrant>
-            <cmp-version>2.0</cmp-version>
-            <abstract-schema-name>abstractSchemaName_0</abstract-schema-name>
-            <cmp-field id="CMPAttribute_1051639788845">
-               <field-name>name_3</field-name>
-            </cmp-field>
-            <cmp-field id="CMPAttribute_1051639788846">
-               <field-name>name_4</field-name>
-            </cmp-field>
-            <cmp-field id="CMPAttribute_1051639788847">
-               <field-name>name_5</field-name>
-            </cmp-field>
-            <cmp-field id="CMPAttribute_1051639788848">
-               <field-name>name_6</field-name>
-            </cmp-field>
-            <cmp-field id="CMPAttribute_1051639788849">
-               <field-name>name_7</field-name>
-            </cmp-field>
-            <env-entry id="EnvEntry_1051639788885">
-               <description>description_10</description>
-               <env-entry-name>name_10</env-entry-name>
-               <env-entry-type>java.lang.Integer</env-entry-type>
-               <env-entry-value>value_10</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788886">
-               <description>description_11</description>
-               <env-entry-name>name_11</env-entry-name>
-               <env-entry-type>java.lang.Boolean</env-entry-type>
-               <env-entry-value>value_11</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788887">
-               <description>description_12</description>
-               <env-entry-name>name_12</env-entry-name>
-               <env-entry-type>java.lang.Double</env-entry-type>
-               <env-entry-value>value_12</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788888">
-               <description>description_13</description>
-               <env-entry-name>name_13</env-entry-name>
-               <env-entry-type>java.lang.Byte</env-entry-type>
-               <env-entry-value>value_13</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788889">
-               <description>description_14</description>
-               <env-entry-name>name_14</env-entry-name>
-               <env-entry-type>java.lang.Short</env-entry-type>
-               <env-entry-value>value_14</env-entry-value>
-            </env-entry>
-            <ejb-ref id="EjbRef_1051639788885">
-               <description>description_20</description>
-               <ejb-ref-name>name_20</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_20</home>
-               <remote>remote_20</remote>
-               <ejb-link>link_20</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788886">
-               <description>description_21</description>
-               <ejb-ref-name>name_21</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_21</home>
-               <remote>remote_21</remote>
-               <ejb-link>link_21</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788887">
-               <description>description_22</description>
-               <ejb-ref-name>name_22</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_22</home>
-               <remote>remote_22</remote>
-               <ejb-link>link_22</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788888">
-               <description>description_23</description>
-               <ejb-ref-name>name_23</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_23</home>
-               <remote>remote_23</remote>
-               <ejb-link>link_23</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788889">
-               <description>description_24</description>
-               <ejb-ref-name>name_24</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_24</home>
-               <remote>remote_24</remote>
-               <ejb-link>link_24</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788895">
-               <description>description_25</description>
-               <ejb-ref-name>name_25</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_25</local-home>
-               <local>remote_25</local>
-               <ejb-link>link_25</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788896">
-               <description>description_26</description>
-               <ejb-ref-name>name_26</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_26</local-home>
-               <local>remote_26</local>
-               <ejb-link>link_26</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788897">
-               <description>description_27</description>
-               <ejb-ref-name>name_27</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_27</local-home>
-               <local>remote_27</local>
-               <ejb-link>link_27</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788898">
-               <description>description_28</description>
-               <ejb-ref-name>name_28</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_28</local-home>
-               <local>remote_28</local>
-               <ejb-link>link_28</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788899">
-               <description>description_29</description>
-               <ejb-ref-name>name_29</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_29</local-home>
-               <local>remote_29</local>
-               <ejb-link>link_29</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788895">
-               <description>description_10</description>
-               <role-name>name_10</role-name>
-               <role-link>link_10</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788896">
-               <description>description_11</description>
-               <role-name>name_11</role-name>
-               <role-link>link_11</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788897">
-               <description>description_12</description>
-               <role-name>name_12</role-name>
-               <role-link>link_12</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788898">
-               <description>description_13</description>
-               <role-name>name_13</role-name>
-               <role-link>link_13</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788899">
-               <description>description_14</description>
-               <role-name>name_14</role-name>
-               <role-link>link_14</role-link>
-            </security-role-ref>
-            <security-identity>
-               <description>description_2</description>
-               <run-as id="RunAsSpecifiedIdentity_1051639788895">
-                  <description>description_1</description>
-                  <role-name>roleName_1</role-name>
-               </run-as>
-            </security-identity>
-            <resource-ref id="ResourceRef_1051639788895">
-               <description>description_10</description>
-               <res-ref-name>name_10</res-ref-name>
-               <res-type>type_10</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788896">
-               <description>description_11</description>
-               <res-ref-name>name_11</res-ref-name>
-               <res-type>type_11</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788897">
-               <description>description_12</description>
-               <res-ref-name>name_12</res-ref-name>
-               <res-type>type_12</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788898">
-               <description>description_13</description>
-               <res-ref-name>name_13</res-ref-name>
-               <res-type>type_13</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788905">
-               <description>description_14</description>
-               <res-ref-name>name_14</res-ref-name>
-               <res-type>type_14</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788905">
-               <description>description_10</description>
-               <resource-env-ref-name>name_10</resource-env-ref-name>
-               <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788906">
-               <description>description_11</description>
-               <resource-env-ref-name>name_11</resource-env-ref-name>
-               <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788907">
-               <description>description_12</description>
-               <resource-env-ref-name>name_12</resource-env-ref-name>
-               <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788908">
-               <description>description_13</description>
-               <resource-env-ref-name>name_13</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788909">
-               <description>description_14</description>
-               <resource-env-ref-name>name_14</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <query id="Query_1051639788936">
-               <description>description_0</description>
-               <query-method id="QueryMethod_1051639788936">
-                  <method-name>name_55</method-name>
-                  <method-params>
-                  </method-params>
-               </query-method>
-               <result-type-mapping>Remote</result-type-mapping>
-               <ejb-ql>ejbQL_0</ejb-ql>
-            </query>
-            <query id="Query_1051639788937">
-               <description>description_1</description>
-               <query-method id="QueryMethod_1051639788937">
-                  <method-name>name_56</method-name>
-                  <method-params>
-                     <method-param>parms_66</method-param>
-                  </method-params>
-               </query-method>
-               <result-type-mapping>Local</result-type-mapping>
-               <ejb-ql>ejbQL_1</ejb-ql>
-            </query>
-            <query id="Query_1051639788938">
-               <description>description_2</description>
-               <query-method id="QueryMethod_1051639788938">
-                  <method-name>name_57</method-name>
-                  <method-params>
-                     <method-param>parms_67</method-param>
-                     <method-param>parms_68</method-param>
-                  </method-params>
-               </query-method>
-               <result-type-mapping>Remote</result-type-mapping>
-               <ejb-ql>ejbQL_2</ejb-ql>
-            </query>
-            <query id="Query_1051639788939">
-               <description>description_3</description>
-               <query-method id="QueryMethod_1051639788939">
-                  <method-name>name_58</method-name>
-                  <method-params>
-                     <method-param>parms_69</method-param>
-                     <method-param>parms_70</method-param>
-                     <method-param>parms_71</method-param>
-                  </method-params>
-               </query-method>
-               <result-type-mapping>Local</result-type-mapping>
-               <ejb-ql>ejbQL_3</ejb-ql>
-            </query>
-            <query id="Query_1051639788940">
-               <description>description_4</description>
-               <query-method id="QueryMethod_1051639788940">
-                  <method-name>name_59</method-name>
-                  <method-params>
-                  </method-params>
-               </query-method>
-               <result-type-mapping>Remote</result-type-mapping>
-               <ejb-ql>ejbQL_4</ejb-ql>
-            </query>
-         </entity>
-         <session id="Session_1051639788946">
-            <description>description_3</description>
-            <display-name>displayName_3</display-name>
-            <small-icon>smallIcon_3</small-icon>
-            <large-icon>largeIcon_3</large-icon>
-            <ejb-name>name_8</ejb-name>
-            <home>java.lang.String</home>
-            <remote>java.util.HashTable</remote>
-            <local-home>java.util.List</local-home>
-            <local>java.sql.Data</local>
-            <ejb-class>java.lang.Integer</ejb-class>
-            <session-type>Stateful</session-type>
-            <transaction-type>Bean</transaction-type>
-            <env-entry id="EnvEntry_1051639788946">
-               <description>description_15</description>
-               <env-entry-name>name_15</env-entry-name>
-               <env-entry-type>java.lang.Long</env-entry-type>
-               <env-entry-value>value_15</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788947">
-               <description>description_16</description>
-               <env-entry-name>name_16</env-entry-name>
-               <env-entry-type>java.lang.Float</env-entry-type>
-               <env-entry-value>value_16</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788948">
-               <description>description_17</description>
-               <env-entry-name>name_17</env-entry-name>
-               <env-entry-type>java.lang.Character</env-entry-type>
-               <env-entry-value>value_17</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788949">
-               <description>description_18</description>
-               <env-entry-name>name_18</env-entry-name>
-               <env-entry-type>java.lang.String</env-entry-type>
-               <env-entry-value>value_18</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788950">
-               <description>description_19</description>
-               <env-entry-name>name_19</env-entry-name>
-               <env-entry-type>java.lang.Integer</env-entry-type>
-               <env-entry-value>value_19</env-entry-value>
-            </env-entry>
-            <ejb-ref id="EjbRef_1051639788946">
-               <description>description_30</description>
-               <ejb-ref-name>name_30</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_30</home>
-               <remote>remote_30</remote>
-               <ejb-link>link_30</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788947">
-               <description>description_31</description>
-               <ejb-ref-name>name_31</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_31</home>
-               <remote>remote_31</remote>
-               <ejb-link>link_31</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788948">
-               <description>description_32</description>
-               <ejb-ref-name>name_32</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_32</home>
-               <remote>remote_32</remote>
-               <ejb-link>link_32</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788949">
-               <description>description_33</description>
-               <ejb-ref-name>name_33</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_33</home>
-               <remote>remote_33</remote>
-               <ejb-link>link_33</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788950">
-               <description>description_34</description>
-               <ejb-ref-name>name_34</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_34</home>
-               <remote>remote_34</remote>
-               <ejb-link>link_34</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788946">
-               <description>description_35</description>
-               <ejb-ref-name>name_35</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_35</local-home>
-               <local>remote_35</local>
-               <ejb-link>link_35</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788947">
-               <description>description_36</description>
-               <ejb-ref-name>name_36</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_36</local-home>
-               <local>remote_36</local>
-               <ejb-link>link_36</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788948">
-               <description>description_37</description>
-               <ejb-ref-name>name_37</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_37</local-home>
-               <local>remote_37</local>
-               <ejb-link>link_37</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788949">
-               <description>description_38</description>
-               <ejb-ref-name>name_38</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_38</local-home>
-               <local>remote_38</local>
-               <ejb-link>link_38</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788950">
-               <description>description_39</description>
-               <ejb-ref-name>name_39</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_39</local-home>
-               <local>remote_39</local>
-               <ejb-link>link_39</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788946">
-               <description>description_15</description>
-               <role-name>name_15</role-name>
-               <role-link>link_15</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788947">
-               <description>description_16</description>
-               <role-name>name_16</role-name>
-               <role-link>link_16</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788948">
-               <description>description_17</description>
-               <role-name>name_17</role-name>
-               <role-link>link_17</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788949">
-               <description>description_18</description>
-               <role-name>name_18</role-name>
-               <role-link>link_18</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788950">
-               <description>description_19</description>
-               <role-name>name_19</role-name>
-               <role-link>link_19</role-link>
-            </security-role-ref>
-            <security-identity>
-               <description>description_3</description>
-               <use-caller-identity id="UseCallerIdentity_1051639788946"></use-caller-identity>
-            </security-identity>
-            <resource-ref id="ResourceRef_1051639788946">
-               <description>description_15</description>
-               <res-ref-name>name_15</res-ref-name>
-               <res-type>type_15</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788947">
-               <description>description_16</description>
-               <res-ref-name>name_16</res-ref-name>
-               <res-type>type_16</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788948">
-               <description>description_17</description>
-               <res-ref-name>name_17</res-ref-name>
-               <res-type>type_17</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788949">
-               <description>description_18</description>
-               <res-ref-name>name_18</res-ref-name>
-               <res-type>type_18</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788956">
-               <description>description_19</description>
-               <res-ref-name>name_19</res-ref-name>
-               <res-type>type_19</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788956">
-               <description>description_15</description>
-               <resource-env-ref-name>name_15</resource-env-ref-name>
-               <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788957">
-               <description>description_16</description>
-               <resource-env-ref-name>name_16</resource-env-ref-name>
-               <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788958">
-               <description>description_17</description>
-               <resource-env-ref-name>name_17</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788959">
-               <description>description_18</description>
-               <resource-env-ref-name>name_18</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788960">
-               <description>description_19</description>
-               <resource-env-ref-name>name_19</resource-env-ref-name>
-               <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-         </session>
-         <entity id="Entity_1051639788956">
-            <description>description_4</description>
-            <display-name>displayName_4</display-name>
-            <small-icon>smallIcon_4</small-icon>
-            <large-icon>largeIcon_4</large-icon>
-            <ejb-name>name_9</ejb-name>
-            <home>java.lang.String</home>
-            <remote>java.util.HashTable</remote>
-            <local-home>java.util.List</local-home>
-            <local>java.sql.Data</local>
-            <ejb-class>java.lang.Integer</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.lang.Integer</prim-key-class>
-            <reentrant>False</reentrant>
-            <env-entry id="EnvEntry_1051639788956">
-               <description>description_20</description>
-               <env-entry-name>name_20</env-entry-name>
-               <env-entry-type>java.lang.Boolean</env-entry-type>
-               <env-entry-value>value_20</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788957">
-               <description>description_21</description>
-               <env-entry-name>name_21</env-entry-name>
-               <env-entry-type>java.lang.Double</env-entry-type>
-               <env-entry-value>value_21</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788958">
-               <description>description_22</description>
-               <env-entry-name>name_22</env-entry-name>
-               <env-entry-type>java.lang.Byte</env-entry-type>
-               <env-entry-value>value_22</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788959">
-               <description>description_23</description>
-               <env-entry-name>name_23</env-entry-name>
-               <env-entry-type>java.lang.Short</env-entry-type>
-               <env-entry-value>value_23</env-entry-value>
-            </env-entry>
-            <env-entry id="EnvEntry_1051639788960">
-               <description>description_24</description>
-               <env-entry-name>name_24</env-entry-name>
-               <env-entry-type>java.lang.Long</env-entry-type>
-               <env-entry-value>value_24</env-entry-value>
-            </env-entry>
-            <ejb-ref id="EjbRef_1051639788956">
-               <description>description_40</description>
-               <ejb-ref-name>name_40</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_40</home>
-               <remote>remote_40</remote>
-               <ejb-link>link_40</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788957">
-               <description>description_41</description>
-               <ejb-ref-name>name_41</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_41</home>
-               <remote>remote_41</remote>
-               <ejb-link>link_41</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788958">
-               <description>description_42</description>
-               <ejb-ref-name>name_42</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_42</home>
-               <remote>remote_42</remote>
-               <ejb-link>link_42</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788959">
-               <description>description_43</description>
-               <ejb-ref-name>name_43</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <home>home_43</home>
-               <remote>remote_43</remote>
-               <ejb-link>link_43</ejb-link>
-            </ejb-ref>
-            <ejb-ref id="EjbRef_1051639788960">
-               <description>description_44</description>
-               <ejb-ref-name>name_44</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <home>home_44</home>
-               <remote>remote_44</remote>
-               <ejb-link>link_44</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788956">
-               <description>description_45</description>
-               <ejb-ref-name>name_45</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_45</local-home>
-               <local>remote_45</local>
-               <ejb-link>link_45</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788957">
-               <description>description_46</description>
-               <ejb-ref-name>name_46</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_46</local-home>
-               <local>remote_46</local>
-               <ejb-link>link_46</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788958">
-               <description>description_47</description>
-               <ejb-ref-name>name_47</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_47</local-home>
-               <local>remote_47</local>
-               <ejb-link>link_47</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788959">
-               <description>description_48</description>
-               <ejb-ref-name>name_48</ejb-ref-name>
-               <ejb-ref-type>Session</ejb-ref-type>
-               <local-home>home_48</local-home>
-               <local>remote_48</local>
-               <ejb-link>link_48</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref id="EJBLocalRef_1051639788960">
-               <description>description_49</description>
-               <ejb-ref-name>name_49</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>home_49</local-home>
-               <local>remote_49</local>
-               <ejb-link>link_49</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788956">
-               <description>description_20</description>
-               <role-name>name_20</role-name>
-               <role-link>link_20</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788957">
-               <description>description_21</description>
-               <role-name>name_21</role-name>
-               <role-link>link_21</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788958">
-               <description>description_22</description>
-               <role-name>name_22</role-name>
-               <role-link>link_22</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788959">
-               <description>description_23</description>
-               <role-name>name_23</role-name>
-               <role-link>link_23</role-link>
-            </security-role-ref>
-            <security-role-ref id="SecurityRoleRef_1051639788960">
-               <description>description_24</description>
-               <role-name>name_24</role-name>
-               <role-link>link_24</role-link>
-            </security-role-ref>
-            <security-identity>
-               <description>description_4</description>
-               <run-as id="RunAsSpecifiedIdentity_1051639788956">
-                  <description>description_2</description>
-                  <role-name>roleName_2</role-name>
-               </run-as>
-            </security-identity>
-            <resource-ref id="ResourceRef_1051639788957">
-               <description>description_20</description>
-               <res-ref-name>name_20</res-ref-name>
-               <res-type>type_20</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788958">
-               <description>description_21</description>
-               <res-ref-name>name_21</res-ref-name>
-               <res-type>type_21</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788959">
-               <description>description_22</description>
-               <res-ref-name>name_22</res-ref-name>
-               <res-type>type_22</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788960">
-               <description>description_23</description>
-               <res-ref-name>name_23</res-ref-name>
-               <res-type>type_23</res-type>
-               <res-auth>Application</res-auth>
-               <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref id="ResourceRef_1051639788961">
-               <description>description_24</description>
-               <res-ref-name>name_24</res-ref-name>
-               <res-type>type_24</res-type>
-               <res-auth>Container</res-auth>
-               <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788961">
-               <description>description_20</description>
-               <resource-env-ref-name>name_20</resource-env-ref-name>
-               <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788962">
-               <description>description_21</description>
-               <resource-env-ref-name>name_21</resource-env-ref-name>
-               <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788963">
-               <description>description_22</description>
-               <resource-env-ref-name>name_22</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788964">
-               <description>description_23</description>
-               <resource-env-ref-name>name_23</resource-env-ref-name>
-               <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref id="ResourceEnvRef_1051639788965">
-               <description>description_24</description>
-               <resource-env-ref-name>name_24</resource-env-ref-name>
-               <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-         </entity>
-      </enterprise-beans>
-      <relationships id="Relationships_1051639788956">
-         <description>description_0</description>
-         <ejb-relation id="EJBRelation_1051639788996">
-            <description>description_0</description>
-            <ejb-relation-name>name_0</ejb-relation-name>
-            <ejb-relationship-role id="EJBRelationshipRole_1051639788996">
-               <description>description_0</description>
-               <ejb-relationship-role-name>roleName_0</ejb-relationship-role-name>
-               <multiplicity>One</multiplicity>
-               <cascade-delete></cascade-delete>
-               <relationship-role-source id="RoleSource_1051639788996">
-                  <description>description_0</description>
-                  <ejb-name>name_0</ejb-name>
-               </relationship-role-source>
-               <cmr-field id="CMRField_1051639788996">
-                  <description>description_0</description>
-                  <cmr-field-name>name_10</cmr-field-name>
-                  <cmr-field-type>java.lang.String</cmr-field-type>
-               </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role id="EJBRelationshipRole_1051639788997">
-               <description>description_1</description>
-               <ejb-relationship-role-name>roleName_1</ejb-relationship-role-name>
-               <multiplicity>Many</multiplicity>
-               <relationship-role-source id="RoleSource_1051639788997">
-                  <description>description_1</description>
-                  <ejb-name>name_1</ejb-name>
-               </relationship-role-source>
-               <cmr-field id="CMRField_1051639788997">
-                  <description>description_1</description>
-                  <cmr-field-name>name_11</cmr-field-name>
-                  <cmr-field-type>java.util.HashTable</cmr-field-type>
-               </cmr-field>
-            </ejb-relationship-role>
-         </ejb-relation>
-         <ejb-relation id="EJBRelation_1051639788997">
-            <description>description_1</description>
-            <ejb-relation-name>name_1</ejb-relation-name>
-            <ejb-relationship-role id="EJBRelationshipRole_1051639788998">
-               <description>description_5</description>
-               <ejb-relationship-role-name>roleName_5</ejb-relationship-role-name>
-               <multiplicity>Many</multiplicity>
-               <relationship-role-source id="RoleSource_1051639788998">
-                  <description>description_5</description>
-                  <ejb-name>name_1</ejb-name>
-               </relationship-role-source>
-               <cmr-field id="CMRField_1051639788998">
-                  <description>description_5</description>
-                  <cmr-field-name>name_15</cmr-field-name>
-                  <cmr-field-type>java.lang.String</cmr-field-type>
-               </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role id="EJBRelationshipRole_1051639788999">
-               <description>description_6</description>
-               <ejb-relationship-role-name>roleName_6</ejb-relationship-role-name>
-               <multiplicity>One</multiplicity>
-               <cascade-delete></cascade-delete>
-               <relationship-role-source id="RoleSource_1051639788999">
-                  <description>description_6</description>
-                  <ejb-name>name_2</ejb-name>
-               </relationship-role-source>
-               <cmr-field id="CMRField_1051639788999">
-                  <description>description_6</description>
-                  <cmr-field-name>name_16</cmr-field-name>
-                  <cmr-field-type>java.util.HashTable</cmr-field-type>
-               </cmr-field>
-            </ejb-relationship-role>
-         </ejb-relation>
-         <ejb-relation id="EJBRelation_1051639789006">
-            <description>description_2</description>
-            <ejb-relation-name>name_2</ejb-relation-name>
-            <ejb-relationship-role id="EJBRelationshipRole_1051639789006">
-               <description>description_10</description>
-               <ejb-relationship-role-name>roleName_10</ejb-relationship-role-name>
-               <multiplicity>One</multiplicity>
-               <cascade-delete></cascade-delete>
-               <relationship-role-source id="RoleSource_1051639789006">
-                  <description>description_10</description>
-                  <ejb-name>name_2</ejb-name>
-               </relationship-role-source>
-               <cmr-field id="CMRField_1051639789006">
-                  <description>description_10</description>
-                  <cmr-field-name>name_20</cmr-field-name>
-                  <cmr-field-type>java.lang.String</cmr-field-type>
-               </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role id="EJBRelationshipRole_1051639789007">
-               <description>description_11</description>
-               <ejb-relationship-role-name>roleName_11</ejb-relationship-role-name>
-               <multiplicity>Many</multiplicity>
-               <relationship-role-source id="RoleSource_1051639789007">
-                  <description>description_11</description>
-                  <ejb-name>name_9</ejb-name>
-               </relationship-role-source>
-               <cmr-field id="CMRField_1051639789007">
-                  <description>description_11</description>
-                  <cmr-field-name>name_21</cmr-field-name>
-                  <cmr-field-type>java.util.HashTable</cmr-field-type>
-               </cmr-field>
-            </ejb-relationship-role>
-         </ejb-relation>
-         <ejb-relation id="EJBRelation_1051639789007">
-            <description>description_3</description>
-            <ejb-relation-name>name_3</ejb-relation-name>
-            <ejb-relationship-role id="EJBRelationshipRole_1051639789008">
-               <description>description_15</description>
-               <ejb-relationship-role-name>roleName_15</ejb-relationship-role-name>
-               <multiplicity>Many</multiplicity>
-               <relationship-role-source id="RoleSource_1051639789008">
-                  <description>description_15</description>
-                  <ejb-name>name_9</ejb-name>
-               </relationship-role-source>
-               <cmr-field id="CMRField_1051639789008">
-                  <description>description_15</description>
-                  <cmr-field-name>name_25</cmr-field-name>
-                  <cmr-field-type>java.lang.String</cmr-field-type>
-               </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role id="EJBRelationshipRole_1051639789009">
-               <description>description_16</description>
-               <ejb-relationship-role-name>roleName_16</ejb-relationship-role-name>
-               <multiplicity>One</multiplicity>
-               <cascade-delete></cascade-delete>
-               <relationship-role-source id="RoleSource_1051639789009">
-                  <description>description_16</description>
-                  <ejb-name>name_0</ejb-name>
-               </relationship-role-source>
-               <cmr-field id="CMRField_1051639789009">
-                  <description>description_16</description>
-                  <cmr-field-name>name_26</cmr-field-name>
-                  <cmr-field-type>java.util.HashTable</cmr-field-type>
-               </cmr-field>
-            </ejb-relationship-role>
-         </ejb-relation>
-         <ejb-relation id="EJBRelation_1051639789008">
-            <description>description_4</description>
-            <ejb-relation-name>name_4</ejb-relation-name>
-            <ejb-relationship-role id="EJBRelationshipRole_1051639789010">
-               <description>description_20</description>
-               <ejb-relationship-role-name>roleName_20</ejb-relationship-role-name>
-               <multiplicity>One</multiplicity>
-               <cascade-delete></cascade-delete>
-               <relationship-role-source id="RoleSource_1051639789010">
-                  <description>description_20</description>
-                  <ejb-name>name_0</ejb-name>
-               </relationship-role-source>
-               <cmr-field id="CMRField_1051639789010">
-                  <description>description_20</description>
-                  <cmr-field-name>name_30</cmr-field-name>
-                  <cmr-field-type>java.lang.String</cmr-field-type>
-               </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role id="EJBRelationshipRole_1051639789011">
-               <description>description_21</description>
-               <ejb-relationship-role-name>roleName_21</ejb-relationship-role-name>
-               <multiplicity>Many</multiplicity>
-               <relationship-role-source id="RoleSource_1051639789011">
-                  <description>description_21</description>
-                  <ejb-name>name_1</ejb-name>
-               </relationship-role-source>
-               <cmr-field id="CMRField_1051639789011">
-                  <description>description_21</description>
-                  <cmr-field-name>name_31</cmr-field-name>
-                  <cmr-field-type>java.util.HashTable</cmr-field-type>
-               </cmr-field>
-            </ejb-relationship-role>
-         </ejb-relation>
-      </relationships>
-      <assembly-descriptor id="AssemblyDescriptor_1051639789016">
-         <security-role id="SecurityRole_1051639789036">
-            <description>description_0</description>
-            <role-name>roleName_0</role-name>
-         </security-role>
-         <security-role id="SecurityRole_1051639789037">
-            <description>description_1</description>
-            <role-name>roleName_1</role-name>
-         </security-role>
-         <security-role id="SecurityRole_1051639789046">
-            <description>description_2</description>
-            <role-name>roleName_2</role-name>
-         </security-role>
-         <security-role id="SecurityRole_1051639789047">
-            <description>description_3</description>
-            <role-name>roleName_3</role-name>
-         </security-role>
-         <security-role id="SecurityRole_1051639789048">
-            <description>description_4</description>
-            <role-name>roleName_4</role-name>
-         </security-role>
-         <method-permission id="MethodPermission_1051639789056">
-            <description>description_0</description>
-            <method id="MethodElement_1051639789106">
-               <description>description_0</description>
-               <ejb-name>name_0</ejb-name>
-               <method-name>name_0</method-name>
-            </method>
-            <method id="MethodElement_1051639789107">
-               <description>description_1</description>
-               <ejb-name>name_1</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_1</method-name>
-               <method-params>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789108">
-               <description>description_2</description>
-               <ejb-name>name_2</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_2</method-name>
-               <method-params>
-                  <method-param>parms_0</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789109">
-               <description>description_3</description>
-               <ejb-name>name_8</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_3</method-name>
-               <method-params>
-                  <method-param>parms_1</method-param>
-                  <method-param>parms_2</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789110">
-               <description>description_4</description>
-               <ejb-name>name_9</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_4</method-name>
-               <method-params>
-                  <method-param>parms_3</method-param>
-                  <method-param>parms_4</method-param>
-                  <method-param>parms_5</method-param>
-               </method-params>
-            </method>
-         </method-permission>
-         <method-permission id="MethodPermission_1051639789116">
-            <description>description_1</description>
-            <method id="MethodElement_1051639789116">
-               <description>description_5</description>
-               <ejb-name>name_0</ejb-name>
-               <method-name>name_5</method-name>
-            </method>
-            <method id="MethodElement_1051639789117">
-               <description>description_6</description>
-               <ejb-name>name_1</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_6</method-name>
-               <method-params>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789118">
-               <description>description_7</description>
-               <ejb-name>name_2</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_7</method-name>
-               <method-params>
-                  <method-param>parms_6</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789119">
-               <description>description_8</description>
-               <ejb-name>name_8</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_8</method-name>
-               <method-params>
-                  <method-param>parms_7</method-param>
-                  <method-param>parms_8</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789120">
-               <description>description_9</description>
-               <ejb-name>name_9</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_9</method-name>
-               <method-params>
-                  <method-param>parms_9</method-param>
-                  <method-param>parms_10</method-param>
-                  <method-param>parms_11</method-param>
-               </method-params>
-            </method>
-         </method-permission>
-         <method-permission id="MethodPermission_1051639789117">
-            <description>description_2</description>
-            <method id="MethodElement_1051639789121">
-               <description>description_10</description>
-               <ejb-name>name_0</ejb-name>
-               <method-name>name_10</method-name>
-            </method>
-            <method id="MethodElement_1051639789122">
-               <description>description_11</description>
-               <ejb-name>name_1</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_11</method-name>
-               <method-params>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789123">
-               <description>description_12</description>
-               <ejb-name>name_2</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_12</method-name>
-               <method-params>
-                  <method-param>parms_12</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789124">
-               <description>description_13</description>
-               <ejb-name>name_8</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_13</method-name>
-               <method-params>
-                  <method-param>parms_13</method-param>
-                  <method-param>parms_14</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789125">
-               <description>description_14</description>
-               <ejb-name>name_9</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_14</method-name>
-               <method-params>
-                  <method-param>parms_15</method-param>
-                  <method-param>parms_16</method-param>
-                  <method-param>parms_17</method-param>
-               </method-params>
-            </method>
-         </method-permission>
-         <method-permission id="MethodPermission_1051639789126">
-            <description>description_3</description>
-            <method id="MethodElement_1051639789126">
-               <description>description_15</description>
-               <ejb-name>name_0</ejb-name>
-               <method-name>name_15</method-name>
-            </method>
-            <method id="MethodElement_1051639789127">
-               <description>description_16</description>
-               <ejb-name>name_1</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_16</method-name>
-               <method-params>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789128">
-               <description>description_17</description>
-               <ejb-name>name_2</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_17</method-name>
-               <method-params>
-                  <method-param>parms_18</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789129">
-               <description>description_18</description>
-               <ejb-name>name_8</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_18</method-name>
-               <method-params>
-                  <method-param>parms_19</method-param>
-                  <method-param>parms_20</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789130">
-               <description>description_19</description>
-               <ejb-name>name_9</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_19</method-name>
-               <method-params>
-                  <method-param>parms_21</method-param>
-                  <method-param>parms_22</method-param>
-                  <method-param>parms_23</method-param>
-               </method-params>
-            </method>
-         </method-permission>
-         <method-permission id="MethodPermission_1051639789127">
-            <description>description_4</description>
-            <method id="MethodElement_1051639789131">
-               <description>description_20</description>
-               <ejb-name>name_0</ejb-name>
-               <method-name>name_20</method-name>
-            </method>
-            <method id="MethodElement_1051639789132">
-               <description>description_21</description>
-               <ejb-name>name_1</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_21</method-name>
-               <method-params>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789133">
-               <description>description_22</description>
-               <ejb-name>name_2</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_22</method-name>
-               <method-params>
-                  <method-param>parms_24</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789134">
-               <description>description_23</description>
-               <ejb-name>name_8</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_23</method-name>
-               <method-params>
-                  <method-param>parms_25</method-param>
-                  <method-param>parms_26</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789135">
-               <description>description_24</description>
-               <ejb-name>name_9</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_24</method-name>
-               <method-params>
-                  <method-param>parms_27</method-param>
-                  <method-param>parms_28</method-param>
-                  <method-param>parms_29</method-param>
-               </method-params>
-            </method>
-         </method-permission>
-         <container-transaction id="MethodTransaction_1051639789146">
-            <description>description_0</description>
-            <method id="MethodElement_1051639789146">
-               <description>description_25</description>
-               <ejb-name>name_0</ejb-name>
-               <method-name>name_25</method-name>
-            </method>
-            <method id="MethodElement_1051639789147">
-               <description>description_26</description>
-               <ejb-name>name_1</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_26</method-name>
-               <method-params>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789148">
-               <description>description_27</description>
-               <ejb-name>name_2</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_27</method-name>
-               <method-params>
-                  <method-param>parms_30</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789149">
-               <description>description_28</description>
-               <ejb-name>name_8</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_28</method-name>
-               <method-params>
-                  <method-param>parms_31</method-param>
-                  <method-param>parms_32</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789150">
-               <description>description_29</description>
-               <ejb-name>name_9</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_29</method-name>
-               <method-params>
-                  <method-param>parms_33</method-param>
-                  <method-param>parms_34</method-param>
-                  <method-param>parms_35</method-param>
-               </method-params>
-            </method>
-            <trans-attribute>NotSupported</trans-attribute>
-         </container-transaction>
-         <container-transaction id="MethodTransaction_1051639789147">
-            <description>description_1</description>
-            <method id="MethodElement_1051639789151">
-               <description>description_30</description>
-               <ejb-name>name_0</ejb-name>
-               <method-name>name_30</method-name>
-            </method>
-            <method id="MethodElement_1051639789152">
-               <description>description_31</description>
-               <ejb-name>name_1</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_31</method-name>
-               <method-params>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789153">
-               <description>description_32</description>
-               <ejb-name>name_2</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_32</method-name>
-               <method-params>
-                  <method-param>parms_36</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789154">
-               <description>description_33</description>
-               <ejb-name>name_8</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_33</method-name>
-               <method-params>
-                  <method-param>parms_37</method-param>
-                  <method-param>parms_38</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789156">
-               <description>description_34</description>
-               <ejb-name>name_9</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_34</method-name>
-               <method-params>
-                  <method-param>parms_39</method-param>
-                  <method-param>parms_40</method-param>
-                  <method-param>parms_41</method-param>
-               </method-params>
-            </method>
-            <trans-attribute>Supports</trans-attribute>
-         </container-transaction>
-         <container-transaction id="MethodTransaction_1051639789156">
-            <description>description_2</description>
-            <method id="MethodElement_1051639789157">
-               <description>description_35</description>
-               <ejb-name>name_0</ejb-name>
-               <method-name>name_35</method-name>
-            </method>
-            <method id="MethodElement_1051639789158">
-               <description>description_36</description>
-               <ejb-name>name_1</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_36</method-name>
-               <method-params>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789159">
-               <description>description_37</description>
-               <ejb-name>name_2</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_37</method-name>
-               <method-params>
-                  <method-param>parms_42</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789160">
-               <description>description_38</description>
-               <ejb-name>name_8</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_38</method-name>
-               <method-params>
-                  <method-param>parms_43</method-param>
-                  <method-param>parms_44</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789161">
-               <description>description_39</description>
-               <ejb-name>name_9</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_39</method-name>
-               <method-params>
-                  <method-param>parms_45</method-param>
-                  <method-param>parms_46</method-param>
-                  <method-param>parms_47</method-param>
-               </method-params>
-            </method>
-            <trans-attribute>Required</trans-attribute>
-         </container-transaction>
-         <container-transaction id="MethodTransaction_1051639789157">
-            <description>description_3</description>
-            <method id="MethodElement_1051639789162">
-               <description>description_40</description>
-               <ejb-name>name_0</ejb-name>
-               <method-name>name_40</method-name>
-            </method>
-            <method id="MethodElement_1051639789163">
-               <description>description_41</description>
-               <ejb-name>name_1</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_41</method-name>
-               <method-params>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789164">
-               <description>description_42</description>
-               <ejb-name>name_2</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_42</method-name>
-               <method-params>
-                  <method-param>parms_48</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789165">
-               <description>description_43</description>
-               <ejb-name>name_8</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_43</method-name>
-               <method-params>
-                  <method-param>parms_49</method-param>
-                  <method-param>parms_50</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789166">
-               <description>description_44</description>
-               <ejb-name>name_9</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_44</method-name>
-               <method-params>
-                  <method-param>parms_51</method-param>
-                  <method-param>parms_52</method-param>
-                  <method-param>parms_53</method-param>
-               </method-params>
-            </method>
-            <trans-attribute>RequiresNew</trans-attribute>
-         </container-transaction>
-         <container-transaction id="MethodTransaction_1051639789158">
-            <description>description_4</description>
-            <method id="MethodElement_1051639789167">
-               <description>description_45</description>
-               <ejb-name>name_0</ejb-name>
-               <method-name>name_45</method-name>
-            </method>
-            <method id="MethodElement_1051639789168">
-               <description>description_46</description>
-               <ejb-name>name_1</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_46</method-name>
-               <method-params>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789169">
-               <description>description_47</description>
-               <ejb-name>name_2</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_47</method-name>
-               <method-params>
-                  <method-param>parms_54</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789170">
-               <description>description_48</description>
-               <ejb-name>name_8</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_48</method-name>
-               <method-params>
-                  <method-param>parms_55</method-param>
-                  <method-param>parms_56</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789171">
-               <description>description_49</description>
-               <ejb-name>name_9</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_49</method-name>
-               <method-params>
-                  <method-param>parms_57</method-param>
-                  <method-param>parms_58</method-param>
-                  <method-param>parms_59</method-param>
-               </method-params>
-            </method>
-            <trans-attribute>Mandatory</trans-attribute>
-         </container-transaction>
-         <exclude-list id="ExcludeList_1051639789166">
-            <description>description_0</description>
-            <method id="MethodElement_1051639789172">
-               <description>description_50</description>
-               <ejb-name>name_0</ejb-name>
-               <method-name>name_50</method-name>
-            </method>
-            <method id="MethodElement_1051639789176">
-               <description>description_51</description>
-               <ejb-name>name_1</ejb-name>
-               <method-intf>Remote</method-intf>
-               <method-name>name_51</method-name>
-               <method-params>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789177">
-               <description>description_52</description>
-               <ejb-name>name_2</ejb-name>
-               <method-intf>Home</method-intf>
-               <method-name>name_52</method-name>
-               <method-params>
-                  <method-param>parms_60</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789178">
-               <description>description_53</description>
-               <ejb-name>name_8</ejb-name>
-               <method-intf>Local</method-intf>
-               <method-name>name_53</method-name>
-               <method-params>
-                  <method-param>parms_61</method-param>
-                  <method-param>parms_62</method-param>
-               </method-params>
-            </method>
-            <method id="MethodElement_1051639789179">
-               <description>description_54</description>
-               <ejb-name>name_9</ejb-name>
-               <method-intf>LocalHome</method-intf>
-               <method-name>name_54</method-name>
-               <method-params>
-                  <method-param>parms_63</method-param>
-                  <method-param>parms_64</method-param>
-                  <method-param>parms_65</method-param>
-               </method-params>
-            </method>
-         </exclude-list>
-      </assembly-descriptor>
-      <ejb-client-jar>ejbClientJar_0</ejb-client-jar>
-   </ejb-jar>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/ejb-jar1-1.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/ejb-jar1-1.xml
deleted file mode 100644
index d70d2d4..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/ejb-jar1-1.xml
+++ /dev/null
@@ -1,2831 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd">
-<ejb-jar id="ejb-jar_ID">
-    <description>description_0</description>
-    <display-name>displayName_0</display-name>
-    <small-icon>smallIcon_0</small-icon>
-    <large-icon>largeIcon_0</large-icon>
-    <enterprise-beans>
-        <entity id="MyCMP">
-            <ejb-name>MyCMP</ejb-name>
-            <home>com.ibm.test.ejb.MyCMPHome</home>
-            <remote>com.ibm.test.ejb.MyCMP</remote>
-            <ejb-class>com.ibm.test.ejb.MyCMPBean</ejb-class>
-            <persistence-type>Container</persistence-type>
-            <prim-key-class>com.ibm.test.ejb.MyCMPKey</prim-key-class>
-            <reentrant>False</reentrant>
-            <cmp-field>
-                <field-name>k1</field-name>
-            </cmp-field>
-        </entity>
-        <entity id="MyCMP1">
-            <ejb-name>MyCMP1</ejb-name>
-            <home>com.ibm.test.ejb.MyCMP1Home</home>
-            <remote>com.ibm.test.ejb.MyCMP1</remote>
-            <ejb-class>com.ibm.test.ejb.MyCMP1Bean</ejb-class>
-            <persistence-type>Container</persistence-type>
-            <prim-key-class>com.ibm.test.ejb.MyCMP1Key</prim-key-class>
-            <reentrant>False</reentrant>
-            <cmp-field>
-                <field-name>k1</field-name>
-            </cmp-field>
-        </entity>
-        <entity id="MyCMP2">
-            <ejb-name>MyCMP2</ejb-name>
-            <home>com.ibm.test.ejb.MyCMP2Home</home>
-            <remote>com.ibm.test.ejb.MyCMP2</remote>
-            <ejb-class>com.ibm.test.ejb.MyCMP2Bean</ejb-class>
-            <persistence-type>Container</persistence-type>
-            <prim-key-class>com.ibm.test.ejb.MyCMP2Key</prim-key-class>
-            <reentrant>False</reentrant>
-            <cmp-field>
-                <field-name>k1</field-name>
-            </cmp-field>
-        </entity>
-        <entity>
-            <description>description_0</description>
-            <display-name>displayName_0</display-name>
-            <small-icon>smallIcon_0</small-icon>
-            <large-icon>largeIcon_0</large-icon>
-            <ejb-name>name_0</ejb-name>
-            <home>java.util.List</home>
-            <remote>java.sql.Data</remote>
-            <local-home>java.lang.Integer</local-home>
-            <local>java.lang.String</local>
-            <ejb-class>java.util.HashTable</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.util.HashTable</prim-key-class>
-            <reentrant>True</reentrant>
-            <env-entry>
-                <description>description_0</description>
-                <env-entry-name>name_0</env-entry-name>
-                <env-entry-type>java.lang.String</env-entry-type>
-                <env-entry-value>value_0</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_1</description>
-                <env-entry-name>name_1</env-entry-name>
-                <env-entry-type>java.lang.Integer</env-entry-type>
-                <env-entry-value>value_1</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_2</description>
-                <env-entry-name>name_2</env-entry-name>
-                <env-entry-type>java.lang.Boolean</env-entry-type>
-                <env-entry-value>value_2</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_3</description>
-                <env-entry-name>name_3</env-entry-name>
-                <env-entry-type>java.lang.Double</env-entry-type>
-                <env-entry-value>value_3</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_4</description>
-                <env-entry-name>name_4</env-entry-name>
-                <env-entry-type>java.lang.Byte</env-entry-type>
-                <env-entry-value>value_4</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_0</description>
-                <ejb-ref-name>name_0</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_0</home>
-                <remote>remote_0</remote>
-                <ejb-link>link_0</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_1</description>
-                <ejb-ref-name>name_1</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_1</home>
-                <remote>remote_1</remote>
-                <ejb-link>link_1</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_2</description>
-                <ejb-ref-name>name_2</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_2</home>
-                <remote>remote_2</remote>
-                <ejb-link>link_2</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_3</description>
-                <ejb-ref-name>name_3</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_3</home>
-                <remote>remote_3</remote>
-                <ejb-link>link_3</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_4</description>
-                <ejb-ref-name>name_4</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_4</home>
-                <remote>remote_4</remote>
-                <ejb-link>link_4</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_0</description>
-                <ejb-ref-name>name_0</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_0</local-home>
-                <local>local_0</local>
-                <ejb-link>link_0</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_1</description>
-                <ejb-ref-name>name_1</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_1</local-home>
-                <local>local_1</local>
-                <ejb-link>link_1</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_2</description>
-                <ejb-ref-name>name_2</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_2</local-home>
-                <local>local_2</local>
-                <ejb-link>link_2</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_3</description>
-                <ejb-ref-name>name_3</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_3</local-home>
-                <local>local_3</local>
-                <ejb-link>link_3</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_4</description>
-                <ejb-ref-name>name_4</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_4</local-home>
-                <local>local_4</local>
-                <ejb-link>link_4</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <description>description_0</description>
-                <role-name>name_0</role-name>
-                <role-link>link_0</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_1</description>
-                <role-name>name_1</role-name>
-                <role-link>link_1</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_2</description>
-                <role-name>name_2</role-name>
-                <role-link>link_2</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_3</description>
-                <role-name>name_3</role-name>
-                <role-link>link_3</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_4</description>
-                <role-name>name_4</role-name>
-                <role-link>link_4</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_0</description>
-                <run-as>
-                    <description>description_0</description>
-                    <role-name>roleName_0</role-name>
-                </run-as>
-            </security-identity>
-            <resource-ref>
-                <description>description_0</description>
-                <res-ref-name>name_0</res-ref-name>
-                <res-type>type_0</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_1</description>
-                <res-ref-name>name_1</res-ref-name>
-                <res-type>type_1</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_2</description>
-                <res-ref-name>name_2</res-ref-name>
-                <res-type>type_2</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_3</description>
-                <res-ref-name>name_3</res-ref-name>
-                <res-type>type_3</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_4</description>
-                <res-ref-name>name_4</res-ref-name>
-                <res-type>type_4</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_0</description>
-                <resource-env-ref-name>name_0</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_1</description>
-                <resource-env-ref-name>name_1</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_2</description>
-                <resource-env-ref-name>name_2</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_3</description>
-                <resource-env-ref-name>name_3</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_4</description>
-                <resource-env-ref-name>name_4</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-        <entity>
-            <description>description_1</description>
-            <display-name>displayName_1</display-name>
-            <small-icon>smallIcon_1</small-icon>
-            <large-icon>largeIcon_1</large-icon>
-            <ejb-name>name_1</ejb-name>
-            <home>java.sql.Data</home>
-            <remote>java.lang.Integer</remote>
-            <local-home>java.lang.String</local-home>
-            <local>java.util.HashTable</local>
-            <ejb-class>java.util.List</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.util.List</prim-key-class>
-            <reentrant>False</reentrant>
-            <env-entry>
-                <description>description_5</description>
-                <env-entry-name>name_5</env-entry-name>
-                <env-entry-type>java.lang.Short</env-entry-type>
-                <env-entry-value>value_5</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_6</description>
-                <env-entry-name>name_6</env-entry-name>
-                <env-entry-type>java.lang.Long</env-entry-type>
-                <env-entry-value>value_6</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_7</description>
-                <env-entry-name>name_7</env-entry-name>
-                <env-entry-type>java.lang.Float</env-entry-type>
-                <env-entry-value>value_7</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_8</description>
-                <env-entry-name>name_8</env-entry-name>
-                <env-entry-type>java.lang.Character</env-entry-type>
-                <env-entry-value>value_8</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_9</description>
-                <env-entry-name>name_9</env-entry-name>
-                <env-entry-type>java.lang.String</env-entry-type>
-                <env-entry-value>value_9</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_5</description>
-                <ejb-ref-name>name_5</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_5</home>
-                <remote>remote_5</remote>
-                <ejb-link>link_5</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_6</description>
-                <ejb-ref-name>name_6</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_6</home>
-                <remote>remote_6</remote>
-                <ejb-link>link_6</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_7</description>
-                <ejb-ref-name>name_7</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_7</home>
-                <remote>remote_7</remote>
-                <ejb-link>link_7</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_8</description>
-                <ejb-ref-name>name_8</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_8</home>
-                <remote>remote_8</remote>
-                <ejb-link>link_8</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_9</description>
-                <ejb-ref-name>name_9</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_9</home>
-                <remote>remote_9</remote>
-                <ejb-link>link_9</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_5</description>
-                <ejb-ref-name>name_5</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_5</local-home>
-                <local>local_5</local>
-                <ejb-link>link_5</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_6</description>
-                <ejb-ref-name>name_6</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_6</local-home>
-                <local>local_6</local>
-                <ejb-link>link_6</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_7</description>
-                <ejb-ref-name>name_7</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_7</local-home>
-                <local>local_7</local>
-                <ejb-link>link_7</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_8</description>
-                <ejb-ref-name>name_8</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_8</local-home>
-                <local>local_8</local>
-                <ejb-link>link_8</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_9</description>
-                <ejb-ref-name>name_9</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_9</local-home>
-                <local>local_9</local>
-                <ejb-link>link_9</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <description>description_5</description>
-                <role-name>name_5</role-name>
-                <role-link>link_5</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_6</description>
-                <role-name>name_6</role-name>
-                <role-link>link_6</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_7</description>
-                <role-name>name_7</role-name>
-                <role-link>link_7</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_8</description>
-                <role-name>name_8</role-name>
-                <role-link>link_8</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_9</description>
-                <role-name>name_9</role-name>
-                <role-link>link_9</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_0</description>
-                <use-caller-identity/>
-            </security-identity>
-            <resource-ref>
-                <description>description_5</description>
-                <res-ref-name>name_5</res-ref-name>
-                <res-type>type_5</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_6</description>
-                <res-ref-name>name_6</res-ref-name>
-                <res-type>type_6</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_7</description>
-                <res-ref-name>name_7</res-ref-name>
-                <res-type>type_7</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_8</description>
-                <res-ref-name>name_8</res-ref-name>
-                <res-type>type_8</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_9</description>
-                <res-ref-name>name_9</res-ref-name>
-                <res-type>type_9</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_5</description>
-                <resource-env-ref-name>name_5</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_6</description>
-                <resource-env-ref-name>name_6</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_7</description>
-                <resource-env-ref-name>name_7</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_8</description>
-                <resource-env-ref-name>name_8</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_9</description>
-                <resource-env-ref-name>name_9</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-        <entity>
-            <description>description_2</description>
-            <display-name>displayName_2</display-name>
-            <small-icon>smallIcon_2</small-icon>
-            <large-icon>largeIcon_2</large-icon>
-            <ejb-name>name_2</ejb-name>
-            <home>java.lang.Integer</home>
-            <remote>java.lang.String</remote>
-            <local-home>java.util.HashTable</local-home>
-            <local>java.util.List</local>
-            <ejb-class>java.sql.Data</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.sql.Data</prim-key-class>
-            <reentrant>True</reentrant>
-            <env-entry>
-                <description>description_10</description>
-                <env-entry-name>name_10</env-entry-name>
-                <env-entry-type>java.lang.Integer</env-entry-type>
-                <env-entry-value>value_10</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_11</description>
-                <env-entry-name>name_11</env-entry-name>
-                <env-entry-type>java.lang.Boolean</env-entry-type>
-                <env-entry-value>value_11</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_12</description>
-                <env-entry-name>name_12</env-entry-name>
-                <env-entry-type>java.lang.Double</env-entry-type>
-                <env-entry-value>value_12</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_13</description>
-                <env-entry-name>name_13</env-entry-name>
-                <env-entry-type>java.lang.Byte</env-entry-type>
-                <env-entry-value>value_13</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_14</description>
-                <env-entry-name>name_14</env-entry-name>
-                <env-entry-type>java.lang.Short</env-entry-type>
-                <env-entry-value>value_14</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_10</description>
-                <ejb-ref-name>name_10</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_10</home>
-                <remote>remote_10</remote>
-                <ejb-link>link_10</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_11</description>
-                <ejb-ref-name>name_11</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_11</home>
-                <remote>remote_11</remote>
-                <ejb-link>link_11</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_12</description>
-                <ejb-ref-name>name_12</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_12</home>
-                <remote>remote_12</remote>
-                <ejb-link>link_12</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_13</description>
-                <ejb-ref-name>name_13</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_13</home>
-                <remote>remote_13</remote>
-                <ejb-link>link_13</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_14</description>
-                <ejb-ref-name>name_14</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_14</home>
-                <remote>remote_14</remote>
-                <ejb-link>link_14</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_10</description>
-                <ejb-ref-name>name_10</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_10</local-home>
-                <local>local_10</local>
-                <ejb-link>link_10</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_11</description>
-                <ejb-ref-name>name_11</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_11</local-home>
-                <local>local_11</local>
-                <ejb-link>link_11</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_12</description>
-                <ejb-ref-name>name_12</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_12</local-home>
-                <local>local_12</local>
-                <ejb-link>link_12</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_13</description>
-                <ejb-ref-name>name_13</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_13</local-home>
-                <local>local_13</local>
-                <ejb-link>link_13</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_14</description>
-                <ejb-ref-name>name_14</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_14</local-home>
-                <local>local_14</local>
-                <ejb-link>link_14</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <description>description_10</description>
-                <role-name>name_10</role-name>
-                <role-link>link_10</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_11</description>
-                <role-name>name_11</role-name>
-                <role-link>link_11</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_12</description>
-                <role-name>name_12</role-name>
-                <role-link>link_12</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_13</description>
-                <role-name>name_13</role-name>
-                <role-link>link_13</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_14</description>
-                <role-name>name_14</role-name>
-                <role-link>link_14</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_1</description>
-                <run-as>
-                    <description>description_1</description>
-                    <role-name>roleName_1</role-name>
-                </run-as>
-            </security-identity>
-            <resource-ref>
-                <description>description_10</description>
-                <res-ref-name>name_10</res-ref-name>
-                <res-type>type_10</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_11</description>
-                <res-ref-name>name_11</res-ref-name>
-                <res-type>type_11</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_12</description>
-                <res-ref-name>name_12</res-ref-name>
-                <res-type>type_12</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_13</description>
-                <res-ref-name>name_13</res-ref-name>
-                <res-type>type_13</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_14</description>
-                <res-ref-name>name_14</res-ref-name>
-                <res-type>type_14</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_10</description>
-                <resource-env-ref-name>name_10</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_11</description>
-                <resource-env-ref-name>name_11</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_12</description>
-                <resource-env-ref-name>name_12</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_13</description>
-                <resource-env-ref-name>name_13</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_14</description>
-                <resource-env-ref-name>name_14</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-        <entity>
-            <description>description_3</description>
-            <display-name>displayName_3</display-name>
-            <small-icon>smallIcon_3</small-icon>
-            <large-icon>largeIcon_3</large-icon>
-            <ejb-name>name_3</ejb-name>
-            <home>java.lang.String</home>
-            <remote>java.util.HashTable</remote>
-            <local-home>java.util.List</local-home>
-            <local>java.sql.Data</local>
-            <ejb-class>java.lang.Integer</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.lang.Integer</prim-key-class>
-            <reentrant>False</reentrant>
-            <env-entry>
-                <description>description_15</description>
-                <env-entry-name>name_15</env-entry-name>
-                <env-entry-type>java.lang.Long</env-entry-type>
-                <env-entry-value>value_15</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_16</description>
-                <env-entry-name>name_16</env-entry-name>
-                <env-entry-type>java.lang.Float</env-entry-type>
-                <env-entry-value>value_16</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_17</description>
-                <env-entry-name>name_17</env-entry-name>
-                <env-entry-type>java.lang.Character</env-entry-type>
-                <env-entry-value>value_17</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_18</description>
-                <env-entry-name>name_18</env-entry-name>
-                <env-entry-type>java.lang.String</env-entry-type>
-                <env-entry-value>value_18</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_19</description>
-                <env-entry-name>name_19</env-entry-name>
-                <env-entry-type>java.lang.Integer</env-entry-type>
-                <env-entry-value>value_19</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_15</description>
-                <ejb-ref-name>name_15</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_15</home>
-                <remote>remote_15</remote>
-                <ejb-link>link_15</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_16</description>
-                <ejb-ref-name>name_16</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_16</home>
-                <remote>remote_16</remote>
-                <ejb-link>link_16</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_17</description>
-                <ejb-ref-name>name_17</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_17</home>
-                <remote>remote_17</remote>
-                <ejb-link>link_17</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_18</description>
-                <ejb-ref-name>name_18</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_18</home>
-                <remote>remote_18</remote>
-                <ejb-link>link_18</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_19</description>
-                <ejb-ref-name>name_19</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_19</home>
-                <remote>remote_19</remote>
-                <ejb-link>link_19</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_15</description>
-                <ejb-ref-name>name_15</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_15</local-home>
-                <local>local_15</local>
-                <ejb-link>link_15</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_16</description>
-                <ejb-ref-name>name_16</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_16</local-home>
-                <local>local_16</local>
-                <ejb-link>link_16</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_17</description>
-                <ejb-ref-name>name_17</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_17</local-home>
-                <local>local_17</local>
-                <ejb-link>link_17</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_18</description>
-                <ejb-ref-name>name_18</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_18</local-home>
-                <local>local_18</local>
-                <ejb-link>link_18</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_19</description>
-                <ejb-ref-name>name_19</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_19</local-home>
-                <local>local_19</local>
-                <ejb-link>link_19</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <description>description_15</description>
-                <role-name>name_15</role-name>
-                <role-link>link_15</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_16</description>
-                <role-name>name_16</role-name>
-                <role-link>link_16</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_17</description>
-                <role-name>name_17</role-name>
-                <role-link>link_17</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_18</description>
-                <role-name>name_18</role-name>
-                <role-link>link_18</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_19</description>
-                <role-name>name_19</role-name>
-                <role-link>link_19</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_1</description>
-                <use-caller-identity/>
-            </security-identity>
-            <resource-ref>
-                <description>description_15</description>
-                <res-ref-name>name_15</res-ref-name>
-                <res-type>type_15</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_16</description>
-                <res-ref-name>name_16</res-ref-name>
-                <res-type>type_16</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_17</description>
-                <res-ref-name>name_17</res-ref-name>
-                <res-type>type_17</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_18</description>
-                <res-ref-name>name_18</res-ref-name>
-                <res-type>type_18</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_19</description>
-                <res-ref-name>name_19</res-ref-name>
-                <res-type>type_19</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_15</description>
-                <resource-env-ref-name>name_15</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_16</description>
-                <resource-env-ref-name>name_16</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_17</description>
-                <resource-env-ref-name>name_17</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_18</description>
-                <resource-env-ref-name>name_18</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_19</description>
-                <resource-env-ref-name>name_19</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-        <entity>
-            <description>description_4</description>
-            <display-name>displayName_4</display-name>
-            <small-icon>smallIcon_4</small-icon>
-            <large-icon>largeIcon_4</large-icon>
-            <ejb-name>name_4</ejb-name>
-            <home>java.util.HashTable</home>
-            <remote>java.util.List</remote>
-            <local-home>java.sql.Data</local-home>
-            <local>java.lang.Integer</local>
-            <ejb-class>java.lang.String</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.lang.String</prim-key-class>
-            <reentrant>True</reentrant>
-            <env-entry>
-                <description>description_20</description>
-                <env-entry-name>name_20</env-entry-name>
-                <env-entry-type>java.lang.Boolean</env-entry-type>
-                <env-entry-value>value_20</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_21</description>
-                <env-entry-name>name_21</env-entry-name>
-                <env-entry-type>java.lang.Double</env-entry-type>
-                <env-entry-value>value_21</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_22</description>
-                <env-entry-name>name_22</env-entry-name>
-                <env-entry-type>java.lang.Byte</env-entry-type>
-                <env-entry-value>value_22</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_23</description>
-                <env-entry-name>name_23</env-entry-name>
-                <env-entry-type>java.lang.Short</env-entry-type>
-                <env-entry-value>value_23</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_24</description>
-                <env-entry-name>name_24</env-entry-name>
-                <env-entry-type>java.lang.Long</env-entry-type>
-                <env-entry-value>value_24</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_20</description>
-                <ejb-ref-name>name_20</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_20</home>
-                <remote>remote_20</remote>
-                <ejb-link>link_20</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_21</description>
-                <ejb-ref-name>name_21</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_21</home>
-                <remote>remote_21</remote>
-                <ejb-link>link_21</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_22</description>
-                <ejb-ref-name>name_22</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_22</home>
-                <remote>remote_22</remote>
-                <ejb-link>link_22</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_23</description>
-                <ejb-ref-name>name_23</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_23</home>
-                <remote>remote_23</remote>
-                <ejb-link>link_23</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_24</description>
-                <ejb-ref-name>name_24</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_24</home>
-                <remote>remote_24</remote>
-                <ejb-link>link_24</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_20</description>
-                <ejb-ref-name>name_20</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_20</local-home>
-                <local>local_20</local>
-                <ejb-link>link_20</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_21</description>
-                <ejb-ref-name>name_21</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_21</local-home>
-                <local>local_21</local>
-                <ejb-link>link_21</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_22</description>
-                <ejb-ref-name>name_22</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_22</local-home>
-                <local>local_22</local>
-                <ejb-link>link_22</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_23</description>
-                <ejb-ref-name>name_23</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_23</local-home>
-                <local>local_23</local>
-                <ejb-link>link_23</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_24</description>
-                <ejb-ref-name>name_24</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_24</local-home>
-                <local>local_24</local>
-                <ejb-link>link_24</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <description>description_20</description>
-                <role-name>name_20</role-name>
-                <role-link>link_20</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_21</description>
-                <role-name>name_21</role-name>
-                <role-link>link_21</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_22</description>
-                <role-name>name_22</role-name>
-                <role-link>link_22</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_23</description>
-                <role-name>name_23</role-name>
-                <role-link>link_23</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_24</description>
-                <role-name>name_24</role-name>
-                <role-link>link_24</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_2</description>
-                <run-as>
-                    <description>description_2</description>
-                    <role-name>roleName_2</role-name>
-                </run-as>
-            </security-identity>
-            <resource-ref>
-                <description>description_20</description>
-                <res-ref-name>name_20</res-ref-name>
-                <res-type>type_20</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_21</description>
-                <res-ref-name>name_21</res-ref-name>
-                <res-type>type_21</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_22</description>
-                <res-ref-name>name_22</res-ref-name>
-                <res-type>type_22</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_23</description>
-                <res-ref-name>name_23</res-ref-name>
-                <res-type>type_23</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_24</description>
-                <res-ref-name>name_24</res-ref-name>
-                <res-type>type_24</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_20</description>
-                <resource-env-ref-name>name_20</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_21</description>
-                <resource-env-ref-name>name_21</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_22</description>
-                <resource-env-ref-name>name_22</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_23</description>
-                <resource-env-ref-name>name_23</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_24</description>
-                <resource-env-ref-name>name_24</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-        <entity>
-            <description>description_5</description>
-            <display-name>displayName_5</display-name>
-            <small-icon>smallIcon_5</small-icon>
-            <large-icon>largeIcon_5</large-icon>
-            <ejb-name>name_5</ejb-name>
-            <home>java.util.List</home>
-            <remote>java.sql.Data</remote>
-            <local-home>java.lang.Integer</local-home>
-            <local>java.lang.String</local>
-            <ejb-class>java.util.HashTable</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.util.HashTable</prim-key-class>
-            <reentrant>False</reentrant>
-            <env-entry>
-                <description>description_25</description>
-                <env-entry-name>name_25</env-entry-name>
-                <env-entry-type>java.lang.Float</env-entry-type>
-                <env-entry-value>value_25</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_26</description>
-                <env-entry-name>name_26</env-entry-name>
-                <env-entry-type>java.lang.Character</env-entry-type>
-                <env-entry-value>value_26</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_27</description>
-                <env-entry-name>name_27</env-entry-name>
-                <env-entry-type>java.lang.String</env-entry-type>
-                <env-entry-value>value_27</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_28</description>
-                <env-entry-name>name_28</env-entry-name>
-                <env-entry-type>java.lang.Integer</env-entry-type>
-                <env-entry-value>value_28</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_29</description>
-                <env-entry-name>name_29</env-entry-name>
-                <env-entry-type>java.lang.Boolean</env-entry-type>
-                <env-entry-value>value_29</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_25</description>
-                <ejb-ref-name>name_25</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_25</home>
-                <remote>remote_25</remote>
-                <ejb-link>link_25</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_26</description>
-                <ejb-ref-name>name_26</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_26</home>
-                <remote>remote_26</remote>
-                <ejb-link>link_26</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_27</description>
-                <ejb-ref-name>name_27</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_27</home>
-                <remote>remote_27</remote>
-                <ejb-link>link_27</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_28</description>
-                <ejb-ref-name>name_28</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_28</home>
-                <remote>remote_28</remote>
-                <ejb-link>link_28</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_29</description>
-                <ejb-ref-name>name_29</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_29</home>
-                <remote>remote_29</remote>
-                <ejb-link>link_29</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_25</description>
-                <ejb-ref-name>name_25</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_25</local-home>
-                <local>local_25</local>
-                <ejb-link>link_25</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_26</description>
-                <ejb-ref-name>name_26</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_26</local-home>
-                <local>local_26</local>
-                <ejb-link>link_26</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_27</description>
-                <ejb-ref-name>name_27</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_27</local-home>
-                <local>local_27</local>
-                <ejb-link>link_27</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_28</description>
-                <ejb-ref-name>name_28</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_28</local-home>
-                <local>local_28</local>
-                <ejb-link>link_28</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_29</description>
-                <ejb-ref-name>name_29</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_29</local-home>
-                <local>local_29</local>
-                <ejb-link>link_29</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <description>description_25</description>
-                <role-name>name_25</role-name>
-                <role-link>link_25</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_26</description>
-                <role-name>name_26</role-name>
-                <role-link>link_26</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_27</description>
-                <role-name>name_27</role-name>
-                <role-link>link_27</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_28</description>
-                <role-name>name_28</role-name>
-                <role-link>link_28</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_29</description>
-                <role-name>name_29</role-name>
-                <role-link>link_29</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_2</description>
-                <use-caller-identity/>
-            </security-identity>
-            <resource-ref>
-                <description>description_25</description>
-                <res-ref-name>name_25</res-ref-name>
-                <res-type>type_25</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_26</description>
-                <res-ref-name>name_26</res-ref-name>
-                <res-type>type_26</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_27</description>
-                <res-ref-name>name_27</res-ref-name>
-                <res-type>type_27</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_28</description>
-                <res-ref-name>name_28</res-ref-name>
-                <res-type>type_28</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_29</description>
-                <res-ref-name>name_29</res-ref-name>
-                <res-type>type_29</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_25</description>
-                <resource-env-ref-name>name_25</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_26</description>
-                <resource-env-ref-name>name_26</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_27</description>
-                <resource-env-ref-name>name_27</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_28</description>
-                <resource-env-ref-name>name_28</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_29</description>
-                <resource-env-ref-name>name_29</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-        <entity>
-            <description>description_6</description>
-            <display-name>displayName_6</display-name>
-            <small-icon>smallIcon_6</small-icon>
-            <large-icon>largeIcon_6</large-icon>
-            <ejb-name>name_6</ejb-name>
-            <home>java.sql.Data</home>
-            <remote>java.lang.Integer</remote>
-            <local-home>java.lang.String</local-home>
-            <local>java.util.HashTable</local>
-            <ejb-class>java.util.List</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.util.List</prim-key-class>
-            <reentrant>True</reentrant>
-            <env-entry>
-                <description>description_30</description>
-                <env-entry-name>name_30</env-entry-name>
-                <env-entry-type>java.lang.Double</env-entry-type>
-                <env-entry-value>value_30</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_31</description>
-                <env-entry-name>name_31</env-entry-name>
-                <env-entry-type>java.lang.Byte</env-entry-type>
-                <env-entry-value>value_31</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_32</description>
-                <env-entry-name>name_32</env-entry-name>
-                <env-entry-type>java.lang.Short</env-entry-type>
-                <env-entry-value>value_32</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_33</description>
-                <env-entry-name>name_33</env-entry-name>
-                <env-entry-type>java.lang.Long</env-entry-type>
-                <env-entry-value>value_33</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_34</description>
-                <env-entry-name>name_34</env-entry-name>
-                <env-entry-type>java.lang.Float</env-entry-type>
-                <env-entry-value>value_34</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_30</description>
-                <ejb-ref-name>name_30</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_30</home>
-                <remote>remote_30</remote>
-                <ejb-link>link_30</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_31</description>
-                <ejb-ref-name>name_31</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_31</home>
-                <remote>remote_31</remote>
-                <ejb-link>link_31</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_32</description>
-                <ejb-ref-name>name_32</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_32</home>
-                <remote>remote_32</remote>
-                <ejb-link>link_32</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_33</description>
-                <ejb-ref-name>name_33</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_33</home>
-                <remote>remote_33</remote>
-                <ejb-link>link_33</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_34</description>
-                <ejb-ref-name>name_34</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_34</home>
-                <remote>remote_34</remote>
-                <ejb-link>link_34</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_30</description>
-                <ejb-ref-name>name_30</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_30</local-home>
-                <local>local_30</local>
-                <ejb-link>link_30</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_31</description>
-                <ejb-ref-name>name_31</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_31</local-home>
-                <local>local_31</local>
-                <ejb-link>link_31</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_32</description>
-                <ejb-ref-name>name_32</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_32</local-home>
-                <local>local_32</local>
-                <ejb-link>link_32</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_33</description>
-                <ejb-ref-name>name_33</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_33</local-home>
-                <local>local_33</local>
-                <ejb-link>link_33</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_34</description>
-                <ejb-ref-name>name_34</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_34</local-home>
-                <local>local_34</local>
-                <ejb-link>link_34</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <description>description_30</description>
-                <role-name>name_30</role-name>
-                <role-link>link_30</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_31</description>
-                <role-name>name_31</role-name>
-                <role-link>link_31</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_32</description>
-                <role-name>name_32</role-name>
-                <role-link>link_32</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_33</description>
-                <role-name>name_33</role-name>
-                <role-link>link_33</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_34</description>
-                <role-name>name_34</role-name>
-                <role-link>link_34</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_3</description>
-                <run-as>
-                    <description>description_3</description>
-                    <role-name>roleName_3</role-name>
-                </run-as>
-            </security-identity>
-            <resource-ref>
-                <description>description_30</description>
-                <res-ref-name>name_30</res-ref-name>
-                <res-type>type_30</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_31</description>
-                <res-ref-name>name_31</res-ref-name>
-                <res-type>type_31</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_32</description>
-                <res-ref-name>name_32</res-ref-name>
-                <res-type>type_32</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_33</description>
-                <res-ref-name>name_33</res-ref-name>
-                <res-type>type_33</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_34</description>
-                <res-ref-name>name_34</res-ref-name>
-                <res-type>type_34</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_30</description>
-                <resource-env-ref-name>name_30</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_31</description>
-                <resource-env-ref-name>name_31</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_32</description>
-                <resource-env-ref-name>name_32</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_33</description>
-                <resource-env-ref-name>name_33</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_34</description>
-                <resource-env-ref-name>name_34</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-        <entity>
-            <description>description_7</description>
-            <display-name>displayName_7</display-name>
-            <small-icon>smallIcon_7</small-icon>
-            <large-icon>largeIcon_7</large-icon>
-            <ejb-name>name_7</ejb-name>
-            <home>java.lang.Integer</home>
-            <remote>java.lang.String</remote>
-            <local-home>java.util.HashTable</local-home>
-            <local>java.util.List</local>
-            <ejb-class>java.sql.Data</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.sql.Data</prim-key-class>
-            <reentrant>False</reentrant>
-            <env-entry>
-                <description>description_35</description>
-                <env-entry-name>name_35</env-entry-name>
-                <env-entry-type>java.lang.Character</env-entry-type>
-                <env-entry-value>value_35</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_36</description>
-                <env-entry-name>name_36</env-entry-name>
-                <env-entry-type>java.lang.String</env-entry-type>
-                <env-entry-value>value_36</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_37</description>
-                <env-entry-name>name_37</env-entry-name>
-                <env-entry-type>java.lang.Integer</env-entry-type>
-                <env-entry-value>value_37</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_38</description>
-                <env-entry-name>name_38</env-entry-name>
-                <env-entry-type>java.lang.Boolean</env-entry-type>
-                <env-entry-value>value_38</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_39</description>
-                <env-entry-name>name_39</env-entry-name>
-                <env-entry-type>java.lang.Double</env-entry-type>
-                <env-entry-value>value_39</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_35</description>
-                <ejb-ref-name>name_35</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_35</home>
-                <remote>remote_35</remote>
-                <ejb-link>link_35</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_36</description>
-                <ejb-ref-name>name_36</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_36</home>
-                <remote>remote_36</remote>
-                <ejb-link>link_36</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_37</description>
-                <ejb-ref-name>name_37</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_37</home>
-                <remote>remote_37</remote>
-                <ejb-link>link_37</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_38</description>
-                <ejb-ref-name>name_38</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_38</home>
-                <remote>remote_38</remote>
-                <ejb-link>link_38</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_39</description>
-                <ejb-ref-name>name_39</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_39</home>
-                <remote>remote_39</remote>
-                <ejb-link>link_39</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_35</description>
-                <ejb-ref-name>name_35</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_35</local-home>
-                <local>local_35</local>
-                <ejb-link>link_35</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_36</description>
-                <ejb-ref-name>name_36</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_36</local-home>
-                <local>local_36</local>
-                <ejb-link>link_36</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_37</description>
-                <ejb-ref-name>name_37</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_37</local-home>
-                <local>local_37</local>
-                <ejb-link>link_37</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_38</description>
-                <ejb-ref-name>name_38</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_38</local-home>
-                <local>local_38</local>
-                <ejb-link>link_38</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_39</description>
-                <ejb-ref-name>name_39</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_39</local-home>
-                <local>local_39</local>
-                <ejb-link>link_39</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <description>description_35</description>
-                <role-name>name_35</role-name>
-                <role-link>link_35</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_36</description>
-                <role-name>name_36</role-name>
-                <role-link>link_36</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_37</description>
-                <role-name>name_37</role-name>
-                <role-link>link_37</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_38</description>
-                <role-name>name_38</role-name>
-                <role-link>link_38</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_39</description>
-                <role-name>name_39</role-name>
-                <role-link>link_39</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_3</description>
-                <use-caller-identity/>
-            </security-identity>
-            <resource-ref>
-                <description>description_35</description>
-                <res-ref-name>name_35</res-ref-name>
-                <res-type>type_35</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_36</description>
-                <res-ref-name>name_36</res-ref-name>
-                <res-type>type_36</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_37</description>
-                <res-ref-name>name_37</res-ref-name>
-                <res-type>type_37</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_38</description>
-                <res-ref-name>name_38</res-ref-name>
-                <res-type>type_38</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_39</description>
-                <res-ref-name>name_39</res-ref-name>
-                <res-type>type_39</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_35</description>
-                <resource-env-ref-name>name_35</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_36</description>
-                <resource-env-ref-name>name_36</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_37</description>
-                <resource-env-ref-name>name_37</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_38</description>
-                <resource-env-ref-name>name_38</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_39</description>
-                <resource-env-ref-name>name_39</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-        <entity>
-            <description>description_8</description>
-            <display-name>displayName_8</display-name>
-            <small-icon>smallIcon_8</small-icon>
-            <large-icon>largeIcon_8</large-icon>
-            <ejb-name>name_8</ejb-name>
-            <home>java.lang.String</home>
-            <remote>java.util.HashTable</remote>
-            <local-home>java.util.List</local-home>
-            <local>java.sql.Data</local>
-            <ejb-class>java.lang.Integer</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.lang.Integer</prim-key-class>
-            <reentrant>True</reentrant>
-            <env-entry>
-                <description>description_40</description>
-                <env-entry-name>name_40</env-entry-name>
-                <env-entry-type>java.lang.Byte</env-entry-type>
-                <env-entry-value>value_40</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_41</description>
-                <env-entry-name>name_41</env-entry-name>
-                <env-entry-type>java.lang.Short</env-entry-type>
-                <env-entry-value>value_41</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_42</description>
-                <env-entry-name>name_42</env-entry-name>
-                <env-entry-type>java.lang.Long</env-entry-type>
-                <env-entry-value>value_42</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_43</description>
-                <env-entry-name>name_43</env-entry-name>
-                <env-entry-type>java.lang.Float</env-entry-type>
-                <env-entry-value>value_43</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_44</description>
-                <env-entry-name>name_44</env-entry-name>
-                <env-entry-type>java.lang.Character</env-entry-type>
-                <env-entry-value>value_44</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_40</description>
-                <ejb-ref-name>name_40</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_40</home>
-                <remote>remote_40</remote>
-                <ejb-link>link_40</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_41</description>
-                <ejb-ref-name>name_41</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_41</home>
-                <remote>remote_41</remote>
-                <ejb-link>link_41</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_42</description>
-                <ejb-ref-name>name_42</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_42</home>
-                <remote>remote_42</remote>
-                <ejb-link>link_42</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_43</description>
-                <ejb-ref-name>name_43</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_43</home>
-                <remote>remote_43</remote>
-                <ejb-link>link_43</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_44</description>
-                <ejb-ref-name>name_44</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_44</home>
-                <remote>remote_44</remote>
-                <ejb-link>link_44</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_40</description>
-                <ejb-ref-name>name_40</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_40</local-home>
-                <local>local_40</local>
-                <ejb-link>link_40</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_41</description>
-                <ejb-ref-name>name_41</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_41</local-home>
-                <local>local_41</local>
-                <ejb-link>link_41</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_42</description>
-                <ejb-ref-name>name_42</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_42</local-home>
-                <local>local_42</local>
-                <ejb-link>link_42</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_43</description>
-                <ejb-ref-name>name_43</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_43</local-home>
-                <local>local_43</local>
-                <ejb-link>link_43</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_44</description>
-                <ejb-ref-name>name_44</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_44</local-home>
-                <local>local_44</local>
-                <ejb-link>link_44</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <description>description_40</description>
-                <role-name>name_40</role-name>
-                <role-link>link_40</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_41</description>
-                <role-name>name_41</role-name>
-                <role-link>link_41</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_42</description>
-                <role-name>name_42</role-name>
-                <role-link>link_42</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_43</description>
-                <role-name>name_43</role-name>
-                <role-link>link_43</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_44</description>
-                <role-name>name_44</role-name>
-                <role-link>link_44</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_4</description>
-                <run-as>
-                    <description>description_4</description>
-                    <role-name>roleName_4</role-name>
-                </run-as>
-            </security-identity>
-            <resource-ref>
-                <description>description_40</description>
-                <res-ref-name>name_40</res-ref-name>
-                <res-type>type_40</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_41</description>
-                <res-ref-name>name_41</res-ref-name>
-                <res-type>type_41</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_42</description>
-                <res-ref-name>name_42</res-ref-name>
-                <res-type>type_42</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_43</description>
-                <res-ref-name>name_43</res-ref-name>
-                <res-type>type_43</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_44</description>
-                <res-ref-name>name_44</res-ref-name>
-                <res-type>type_44</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_40</description>
-                <resource-env-ref-name>name_40</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_41</description>
-                <resource-env-ref-name>name_41</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_42</description>
-                <resource-env-ref-name>name_42</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_43</description>
-                <resource-env-ref-name>name_43</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_44</description>
-                <resource-env-ref-name>name_44</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-        <entity>
-            <description>description_9</description>
-            <display-name>displayName_9</display-name>
-            <small-icon>smallIcon_9</small-icon>
-            <large-icon>largeIcon_9</large-icon>
-            <ejb-name>name_9</ejb-name>
-            <home>java.util.HashTable</home>
-            <remote>java.util.List</remote>
-            <local-home>java.sql.Data</local-home>
-            <local>java.lang.Integer</local>
-            <ejb-class>java.lang.String</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.lang.String</prim-key-class>
-            <reentrant>False</reentrant>
-            <env-entry>
-                <description>description_45</description>
-                <env-entry-name>name_45</env-entry-name>
-                <env-entry-type>java.lang.String</env-entry-type>
-                <env-entry-value>value_45</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_46</description>
-                <env-entry-name>name_46</env-entry-name>
-                <env-entry-type>java.lang.Integer</env-entry-type>
-                <env-entry-value>value_46</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_47</description>
-                <env-entry-name>name_47</env-entry-name>
-                <env-entry-type>java.lang.Boolean</env-entry-type>
-                <env-entry-value>value_47</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_48</description>
-                <env-entry-name>name_48</env-entry-name>
-                <env-entry-type>java.lang.Double</env-entry-type>
-                <env-entry-value>value_48</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_49</description>
-                <env-entry-name>name_49</env-entry-name>
-                <env-entry-type>java.lang.Byte</env-entry-type>
-                <env-entry-value>value_49</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_45</description>
-                <ejb-ref-name>name_45</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_45</home>
-                <remote>remote_45</remote>
-                <ejb-link>link_45</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_46</description>
-                <ejb-ref-name>name_46</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_46</home>
-                <remote>remote_46</remote>
-                <ejb-link>link_46</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_47</description>
-                <ejb-ref-name>name_47</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_47</home>
-                <remote>remote_47</remote>
-                <ejb-link>link_47</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_48</description>
-                <ejb-ref-name>name_48</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_48</home>
-                <remote>remote_48</remote>
-                <ejb-link>link_48</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_49</description>
-                <ejb-ref-name>name_49</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_49</home>
-                <remote>remote_49</remote>
-                <ejb-link>link_49</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_45</description>
-                <ejb-ref-name>name_45</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_45</local-home>
-                <local>local_45</local>
-                <ejb-link>link_45</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_46</description>
-                <ejb-ref-name>name_46</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_46</local-home>
-                <local>local_46</local>
-                <ejb-link>link_46</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_47</description>
-                <ejb-ref-name>name_47</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_47</local-home>
-                <local>local_47</local>
-                <ejb-link>link_47</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_48</description>
-                <ejb-ref-name>name_48</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>localHome_48</local-home>
-                <local>local_48</local>
-                <ejb-link>link_48</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_49</description>
-                <ejb-ref-name>name_49</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>localHome_49</local-home>
-                <local>local_49</local>
-                <ejb-link>link_49</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <description>description_45</description>
-                <role-name>name_45</role-name>
-                <role-link>link_45</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_46</description>
-                <role-name>name_46</role-name>
-                <role-link>link_46</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_47</description>
-                <role-name>name_47</role-name>
-                <role-link>link_47</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_48</description>
-                <role-name>name_48</role-name>
-                <role-link>link_48</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_49</description>
-                <role-name>name_49</role-name>
-                <role-link>link_49</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_4</description>
-                <use-caller-identity/>
-            </security-identity>
-            <resource-ref>
-                <description>description_45</description>
-                <res-ref-name>name_45</res-ref-name>
-                <res-type>type_45</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_46</description>
-                <res-ref-name>name_46</res-ref-name>
-                <res-type>type_46</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_47</description>
-                <res-ref-name>name_47</res-ref-name>
-                <res-type>type_47</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_48</description>
-                <res-ref-name>name_48</res-ref-name>
-                <res-type>type_48</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_49</description>
-                <res-ref-name>name_49</res-ref-name>
-                <res-type>type_49</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_45</description>
-                <resource-env-ref-name>name_45</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_46</description>
-                <resource-env-ref-name>name_46</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_47</description>
-                <resource-env-ref-name>name_47</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_48</description>
-                <resource-env-ref-name>name_48</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_49</description>
-                <resource-env-ref-name>name_49</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-    </enterprise-beans>
-    <relationships>
-        <description>description_0</description>
-        <ejb-relation>
-            <description>description_0</description>
-            <ejb-relation-name>name_0</ejb-relation-name>
-            <ejb-relationship-role>
-                <description>description_0</description>
-                <ejb-relationship-role-name>roleName_0</ejb-relationship-role-name>
-                <multiplicity>One</multiplicity>
-                <cascade-delete/>
-                <relationship-role-source>
-                    <description>description_0</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_0</description>
-                    <cmr-field-name>name_0</cmr-field-name>
-                    <cmr-field-type>java.util.HashTable</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-                <description>description_1</description>
-                <ejb-relationship-role-name>roleName_1</ejb-relationship-role-name>
-                <multiplicity>Many</multiplicity>
-                <relationship-role-source>
-                    <description>description_1</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_1</description>
-                    <cmr-field-name>name_1</cmr-field-name>
-                    <cmr-field-type>java.util.List</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-        </ejb-relation>
-        <ejb-relation>
-            <description>description_1</description>
-            <ejb-relation-name>name_1</ejb-relation-name>
-            <ejb-relationship-role>
-                <description>description_2</description>
-                <ejb-relationship-role-name>roleName_2</ejb-relationship-role-name>
-                <multiplicity>One</multiplicity>
-                <cascade-delete/>
-                <relationship-role-source>
-                    <description>description_2</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_2</description>
-                    <cmr-field-name>name_2</cmr-field-name>
-                    <cmr-field-type>java.sql.Data</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-                <description>description_3</description>
-                <ejb-relationship-role-name>roleName_3</ejb-relationship-role-name>
-                <multiplicity>Many</multiplicity>
-                <relationship-role-source>
-                    <description>description_3</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_3</description>
-                    <cmr-field-name>name_3</cmr-field-name>
-                    <cmr-field-type>java.lang.Integer</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-        </ejb-relation>
-        <ejb-relation>
-            <description>description_2</description>
-            <ejb-relation-name>name_2</ejb-relation-name>
-            <ejb-relationship-role>
-                <description>description_4</description>
-                <ejb-relationship-role-name>roleName_4</ejb-relationship-role-name>
-                <multiplicity>One</multiplicity>
-                <cascade-delete/>
-                <relationship-role-source>
-                    <description>description_4</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_4</description>
-                    <cmr-field-name>name_4</cmr-field-name>
-                    <cmr-field-type>java.lang.String</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-                <description>description_5</description>
-                <ejb-relationship-role-name>roleName_5</ejb-relationship-role-name>
-                <multiplicity>Many</multiplicity>
-                <relationship-role-source>
-                    <description>description_5</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_5</description>
-                    <cmr-field-name>name_5</cmr-field-name>
-                    <cmr-field-type>java.util.HashTable</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-        </ejb-relation>
-        <ejb-relation>
-            <description>description_3</description>
-            <ejb-relation-name>name_3</ejb-relation-name>
-            <ejb-relationship-role>
-                <description>description_6</description>
-                <ejb-relationship-role-name>roleName_6</ejb-relationship-role-name>
-                <multiplicity>One</multiplicity>
-                <cascade-delete/>
-                <relationship-role-source>
-                    <description>description_6</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_6</description>
-                    <cmr-field-name>name_6</cmr-field-name>
-                    <cmr-field-type>java.util.List</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-                <description>description_7</description>
-                <ejb-relationship-role-name>roleName_7</ejb-relationship-role-name>
-                <multiplicity>Many</multiplicity>
-                <relationship-role-source>
-                    <description>description_7</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_7</description>
-                    <cmr-field-name>name_7</cmr-field-name>
-                    <cmr-field-type>java.sql.Data</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-        </ejb-relation>
-        <ejb-relation>
-            <description>description_4</description>
-            <ejb-relation-name>name_4</ejb-relation-name>
-            <ejb-relationship-role>
-                <description>description_8</description>
-                <ejb-relationship-role-name>roleName_8</ejb-relationship-role-name>
-                <multiplicity>One</multiplicity>
-                <cascade-delete/>
-                <relationship-role-source>
-                    <description>description_8</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_8</description>
-                    <cmr-field-name>name_8</cmr-field-name>
-                    <cmr-field-type>java.lang.Integer</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-                <description>description_9</description>
-                <ejb-relationship-role-name>roleName_9</ejb-relationship-role-name>
-                <multiplicity>Many</multiplicity>
-                <relationship-role-source>
-                    <description>description_9</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_9</description>
-                    <cmr-field-name>name_9</cmr-field-name>
-                    <cmr-field-type>java.lang.String</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-        </ejb-relation>
-    </relationships>
-    <assembly-descriptor>
-        <security-role>
-            <description>description_5</description>
-            <role-name>roleName_5</role-name>
-        </security-role>
-        <security-role>
-            <description>description_6</description>
-            <role-name>roleName_6</role-name>
-        </security-role>
-        <security-role>
-            <description>description_7</description>
-            <role-name>roleName_7</role-name>
-        </security-role>
-        <security-role>
-            <description>description_8</description>
-            <role-name>roleName_8</role-name>
-        </security-role>
-        <security-role>
-            <description>description_9</description>
-            <role-name>roleName_9</role-name>
-        </security-role>
-        <method-permission>
-            <description>description_0</description>
-            <unchecked/>
-            <method>
-                <description>description_0</description>
-                <method-name>name_0</method-name>
-            </method>
-            <method>
-                <description>description_1</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_1</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_2</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_2</method-name>
-                <method-params>
-                    <method-param>parms_0</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_3</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_3</method-name>
-                <method-params>
-                    <method-param>parms_1</method-param>
-                    <method-param>parms_2</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_4</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_4</method-name>
-                <method-params>
-                    <method-param>parms_3</method-param>
-                    <method-param>parms_4</method-param>
-                    <method-param>parms_5</method-param>
-                </method-params>
-            </method>
-        </method-permission>
-        <method-permission>
-            <description>description_1</description>
-            <method>
-                <description>description_5</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_5</method-name>
-            </method>
-            <method>
-                <description>description_6</description>
-                <method-name>name_6</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_7</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_7</method-name>
-                <method-params>
-                    <method-param>parms_6</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_8</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_8</method-name>
-                <method-params>
-                    <method-param>parms_7</method-param>
-                    <method-param>parms_8</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_9</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_9</method-name>
-                <method-params>
-                    <method-param>parms_9</method-param>
-                    <method-param>parms_10</method-param>
-                    <method-param>parms_11</method-param>
-                </method-params>
-            </method>
-        </method-permission>
-        <method-permission>
-            <description>description_2</description>
-            <unchecked/>
-            <method>
-                <description>description_10</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_10</method-name>
-            </method>
-            <method>
-                <description>description_11</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_11</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_12</description>
-                <method-name>name_12</method-name>
-                <method-params>
-                    <method-param>parms_12</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_13</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_13</method-name>
-                <method-params>
-                    <method-param>parms_13</method-param>
-                    <method-param>parms_14</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_14</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_14</method-name>
-                <method-params>
-                    <method-param>parms_15</method-param>
-                    <method-param>parms_16</method-param>
-                    <method-param>parms_17</method-param>
-                </method-params>
-            </method>
-        </method-permission>
-        <method-permission>
-            <description>description_3</description>
-            <method>
-                <description>description_15</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_15</method-name>
-            </method>
-            <method>
-                <description>description_16</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_16</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_17</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_17</method-name>
-                <method-params>
-                    <method-param>parms_18</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_18</description>
-                <method-name>name_18</method-name>
-                <method-params>
-                    <method-param>parms_19</method-param>
-                    <method-param>parms_20</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_19</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_19</method-name>
-                <method-params>
-                    <method-param>parms_21</method-param>
-                    <method-param>parms_22</method-param>
-                    <method-param>parms_23</method-param>
-                </method-params>
-            </method>
-        </method-permission>
-        <method-permission>
-            <description>description_4</description>
-            <unchecked/>
-            <method>
-                <description>description_20</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_20</method-name>
-            </method>
-            <method>
-                <description>description_21</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_21</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_22</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_22</method-name>
-                <method-params>
-                    <method-param>parms_24</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_23</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_23</method-name>
-                <method-params>
-                    <method-param>parms_25</method-param>
-                    <method-param>parms_26</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_24</description>
-                <method-name>name_24</method-name>
-                <method-params>
-                    <method-param>parms_27</method-param>
-                    <method-param>parms_28</method-param>
-                    <method-param>parms_29</method-param>
-                </method-params>
-            </method>
-        </method-permission>
-        <container-transaction>
-            <description>description_0</description>
-            <method>
-                <description>description_25</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_25</method-name>
-            </method>
-            <method>
-                <description>description_26</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_26</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_27</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_27</method-name>
-                <method-params>
-                    <method-param>parms_30</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_28</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_28</method-name>
-                <method-params>
-                    <method-param>parms_31</method-param>
-                    <method-param>parms_32</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_29</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_29</method-name>
-                <method-params>
-                    <method-param>parms_33</method-param>
-                    <method-param>parms_34</method-param>
-                    <method-param>parms_35</method-param>
-                </method-params>
-            </method>
-            <trans-attribute>NotSupported</trans-attribute>
-        </container-transaction>
-        <container-transaction>
-            <description>description_1</description>
-            <method>
-                <description>description_30</description>
-                <method-name>name_30</method-name>
-            </method>
-            <method>
-                <description>description_31</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_31</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_32</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_32</method-name>
-                <method-params>
-                    <method-param>parms_36</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_33</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_33</method-name>
-                <method-params>
-                    <method-param>parms_37</method-param>
-                    <method-param>parms_38</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_34</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_34</method-name>
-                <method-params>
-                    <method-param>parms_39</method-param>
-                    <method-param>parms_40</method-param>
-                    <method-param>parms_41</method-param>
-                </method-params>
-            </method>
-            <trans-attribute>Supports</trans-attribute>
-        </container-transaction>
-        <container-transaction>
-            <description>description_2</description>
-            <method>
-                <description>description_35</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_35</method-name>
-            </method>
-            <method>
-                <description>description_36</description>
-                <method-name>name_36</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_37</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_37</method-name>
-                <method-params>
-                    <method-param>parms_42</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_38</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_38</method-name>
-                <method-params>
-                    <method-param>parms_43</method-param>
-                    <method-param>parms_44</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_39</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_39</method-name>
-                <method-params>
-                    <method-param>parms_45</method-param>
-                    <method-param>parms_46</method-param>
-                    <method-param>parms_47</method-param>
-                </method-params>
-            </method>
-            <trans-attribute>Required</trans-attribute>
-        </container-transaction>
-        <container-transaction>
-            <description>description_3</description>
-            <method>
-                <description>description_40</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_40</method-name>
-            </method>
-            <method>
-                <description>description_41</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_41</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_42</description>
-                <method-name>name_42</method-name>
-                <method-params>
-                    <method-param>parms_48</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_43</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_43</method-name>
-                <method-params>
-                    <method-param>parms_49</method-param>
-                    <method-param>parms_50</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_44</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_44</method-name>
-                <method-params>
-                    <method-param>parms_51</method-param>
-                    <method-param>parms_52</method-param>
-                    <method-param>parms_53</method-param>
-                </method-params>
-            </method>
-            <trans-attribute>RequiresNew</trans-attribute>
-        </container-transaction>
-        <container-transaction>
-            <description>description_4</description>
-            <method>
-                <description>description_45</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_45</method-name>
-            </method>
-            <method>
-                <description>description_46</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_46</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_47</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_47</method-name>
-                <method-params>
-                    <method-param>parms_54</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_48</description>
-                <method-name>name_48</method-name>
-                <method-params>
-                    <method-param>parms_55</method-param>
-                    <method-param>parms_56</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_49</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_49</method-name>
-                <method-params>
-                    <method-param>parms_57</method-param>
-                    <method-param>parms_58</method-param>
-                    <method-param>parms_59</method-param>
-                </method-params>
-            </method>
-            <trans-attribute>Mandatory</trans-attribute>
-        </container-transaction>
-        <exclude-list>
-            <description>description_0</description>
-            <method>
-                <description>description_50</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_50</method-name>
-            </method>
-            <method>
-                <description>description_51</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_51</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_52</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_52</method-name>
-                <method-params>
-                    <method-param>parms_60</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_53</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_53</method-name>
-                <method-params>
-                    <method-param>parms_61</method-param>
-                    <method-param>parms_62</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_54</description>
-                <method-name>name_54</method-name>
-                <method-params>
-                    <method-param>parms_63</method-param>
-                    <method-param>parms_64</method-param>
-                    <method-param>parms_65</method-param>
-                </method-params>
-            </method>
-        </exclude-list>
-    </assembly-descriptor>
-    <ejb-client-jar>ejbClientJar_0</ejb-client-jar>
-</ejb-jar>
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/ejb-jar2-0.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/ejb-jar2-0.xml
deleted file mode 100644
index 28b4822..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/ejb-jar2-0.xml
+++ /dev/null
@@ -1,2818 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
-<ejb-jar id="ejb-jar_ID">
-    <description>description_0</description>
-	<display-name>displayName_0</display-name>
-    <small-icon>smallIcon_0</small-icon>
-    <large-icon>largeIcon_0</large-icon>
-	<enterprise-beans>
-		<entity id="CMP1">
-			<ejb-name>CMP1</ejb-name>
-			<local-home>ejbs.CMP1LocalHome</local-home>
-			<local>ejbs.CMP1Local</local>
-			<ejb-class>ejbs.CMP1Bean</ejb-class>
-			<persistence-type>Container</persistence-type>
-			<prim-key-class>ejbs.CMP1Key</prim-key-class>
-			<reentrant>False</reentrant>
-			<cmp-version>2.x</cmp-version>
-			<abstract-schema-name>CMP1</abstract-schema-name>
-			<cmp-field>
-				<field-name>id</field-name>
-			</cmp-field>
-		</entity>
-		<entity id="CMP2">
-			<ejb-name>CMP2</ejb-name>
-			<local-home>ejbs.CMP2LocalHome</local-home>
-			<local>ejbs.CMP2Local</local>
-			<ejb-class>ejbs.CMP2Bean</ejb-class>
-			<persistence-type>Container</persistence-type>
-			<prim-key-class>ejbs.CMP2Key</prim-key-class>
-			<reentrant>False</reentrant>
-			<cmp-version>2.x</cmp-version>
-			<abstract-schema-name>CMP2</abstract-schema-name>
-			<cmp-field>
-				<field-name>id</field-name>
-			</cmp-field>
-		</entity>
-        <entity>
-            <description>description_0</description>
-            <display-name>displayName_0</display-name>
-            <small-icon>smallIcon_0</small-icon>
-            <large-icon>largeIcon_0</large-icon>
-            <ejb-name>name_0</ejb-name>
-            <home>java.util.List</home>
-            <remote>java.sql.Data</remote>
-            <local-home>java.lang.Integer</local-home>
-            <local>java.lang.String</local>
-            <ejb-class>java.util.HashTable</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.util.HashTable</prim-key-class>
-            <reentrant>True</reentrant>
-            <env-entry>
-                <description>description_0</description>
-                <env-entry-name>name_0</env-entry-name>
-                <env-entry-type>java.lang.String</env-entry-type>
-                <env-entry-value>value_0</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_1</description>
-                <env-entry-name>name_1</env-entry-name>
-                <env-entry-type>java.lang.Integer</env-entry-type>
-                <env-entry-value>value_1</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_2</description>
-                <env-entry-name>name_2</env-entry-name>
-                <env-entry-type>java.lang.Boolean</env-entry-type>
-                <env-entry-value>value_2</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_3</description>
-                <env-entry-name>name_3</env-entry-name>
-                <env-entry-type>java.lang.Double</env-entry-type>
-                <env-entry-value>value_3</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_4</description>
-                <env-entry-name>name_4</env-entry-name>
-                <env-entry-type>java.lang.Byte</env-entry-type>
-                <env-entry-value>value_4</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_0</description>
-                <ejb-ref-name>name_0</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_0</home>
-                <remote>remote_0</remote>
-                <ejb-link>link_0</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_1</description>
-                <ejb-ref-name>name_1</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_1</home>
-                <remote>remote_1</remote>
-                <ejb-link>link_1</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_2</description>
-                <ejb-ref-name>name_2</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_2</home>
-                <remote>remote_2</remote>
-                <ejb-link>link_2</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_3</description>
-                <ejb-ref-name>name_3</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_3</home>
-                <remote>remote_3</remote>
-                <ejb-link>link_3</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_4</description>
-                <ejb-ref-name>name_4</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_4</home>
-                <remote>remote_4</remote>
-                <ejb-link>link_4</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_0</description>
-                <ejb-ref-name>name_0</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_1</local-home>
-                <local>remote_1</local>
-                <ejb-link>link_0</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_1</description>
-                <ejb-ref-name>name_1</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_3</local-home>
-                <local>remote_3</local>
-                <ejb-link>link_1</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_2</description>
-                <ejb-ref-name>name_2</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_5</local-home>
-                <local>remote_5</local>
-                <ejb-link>link_2</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_3</description>
-                <ejb-ref-name>name_3</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_7</local-home>
-                <local>remote_7</local>
-                <ejb-link>link_3</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_4</description>
-                <ejb-ref-name>name_4</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_9</local-home>
-                <local>remote_9</local>
-                <ejb-link>link_4</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <role-name>name_0</role-name>
-                <role-link>link_0</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_1</role-name>
-                <role-link>link_1</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_2</role-name>
-                <role-link>link_2</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_3</role-name>
-                <role-link>link_3</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_4</role-name>
-                <role-link>link_4</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_0</description>
-                <run-as>
-                    <description>description_0</description>
-                    <role-name>roleName_0</role-name>
-                </run-as>
-            </security-identity>
-            <resource-ref>
-                <description>description_0</description>
-                <res-ref-name>name_0</res-ref-name>
-                <res-type>type_0</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_1</description>
-                <res-ref-name>name_1</res-ref-name>
-                <res-type>type_1</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_2</description>
-                <res-ref-name>name_2</res-ref-name>
-                <res-type>type_2</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_3</description>
-                <res-ref-name>name_3</res-ref-name>
-                <res-type>type_3</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_4</description>
-                <res-ref-name>name_4</res-ref-name>
-                <res-type>type_4</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_0</description>
-                <resource-env-ref-name>name_0</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_1</description>
-                <resource-env-ref-name>name_1</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_2</description>
-                <resource-env-ref-name>name_2</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_3</description>
-                <resource-env-ref-name>name_3</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_4</description>
-                <resource-env-ref-name>name_4</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-        <entity>
-            <description>description_1</description>
-            <display-name>displayName_1</display-name>
-            <small-icon>smallIcon_1</small-icon>
-            <large-icon>largeIcon_1</large-icon>
-            <ejb-name>name_1</ejb-name>
-            <home>java.sql.Data</home>
-            <remote>java.lang.Integer</remote>
-            <local-home>java.lang.String</local-home>
-            <local>java.util.HashTable</local>
-            <ejb-class>java.util.List</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.util.List</prim-key-class>
-            <reentrant>False</reentrant>
-            <env-entry>
-                <description>description_5</description>
-                <env-entry-name>name_5</env-entry-name>
-                <env-entry-type>java.lang.Short</env-entry-type>
-                <env-entry-value>value_5</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_6</description>
-                <env-entry-name>name_6</env-entry-name>
-                <env-entry-type>java.lang.Long</env-entry-type>
-                <env-entry-value>value_6</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_7</description>
-                <env-entry-name>name_7</env-entry-name>
-                <env-entry-type>java.lang.Float</env-entry-type>
-                <env-entry-value>value_7</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_8</description>
-                <env-entry-name>name_8</env-entry-name>
-                <env-entry-type>java.lang.Character</env-entry-type>
-                <env-entry-value>value_8</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_9</description>
-                <env-entry-name>name_9</env-entry-name>
-                <env-entry-type>java.lang.String</env-entry-type>
-                <env-entry-value>value_9</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_5</description>
-                <ejb-ref-name>name_5</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_5</home>
-                <remote>remote_5</remote>
-                <ejb-link>link_5</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_6</description>
-                <ejb-ref-name>name_6</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_6</home>
-                <remote>remote_6</remote>
-                <ejb-link>link_6</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_7</description>
-                <ejb-ref-name>name_7</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_7</home>
-                <remote>remote_7</remote>
-                <ejb-link>link_7</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_8</description>
-                <ejb-ref-name>name_8</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_8</home>
-                <remote>remote_8</remote>
-                <ejb-link>link_8</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_9</description>
-                <ejb-ref-name>name_9</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_9</home>
-                <remote>remote_9</remote>
-                <ejb-link>link_9</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_5</description>
-                <ejb-ref-name>name_5</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_11</local-home>
-                <local>remote_11</local>
-                <ejb-link>link_5</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_6</description>
-                <ejb-ref-name>name_6</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_13</local-home>
-                <local>remote_13</local>
-                <ejb-link>link_6</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_7</description>
-                <ejb-ref-name>name_7</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_15</local-home>
-                <local>remote_15</local>
-                <ejb-link>link_7</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_8</description>
-                <ejb-ref-name>name_8</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_17</local-home>
-                <local>remote_17</local>
-                <ejb-link>link_8</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_9</description>
-                <ejb-ref-name>name_9</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_19</local-home>
-                <local>remote_19</local>
-                <ejb-link>link_9</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <role-name>name_5</role-name>
-                <role-link>link_5</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_6</role-name>
-                <role-link>link_6</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_7</role-name>
-                <role-link>link_7</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_8</role-name>
-                <role-link>link_8</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_9</role-name>
-                <role-link>link_9</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_0</description>
-                <use-caller-identity></use-caller-identity>
-            </security-identity>
-            <resource-ref>
-                <description>description_5</description>
-                <res-ref-name>name_5</res-ref-name>
-                <res-type>type_5</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_6</description>
-                <res-ref-name>name_6</res-ref-name>
-                <res-type>type_6</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_7</description>
-                <res-ref-name>name_7</res-ref-name>
-                <res-type>type_7</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_8</description>
-                <res-ref-name>name_8</res-ref-name>
-                <res-type>type_8</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_9</description>
-                <res-ref-name>name_9</res-ref-name>
-                <res-type>type_9</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_5</description>
-                <resource-env-ref-name>name_5</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_6</description>
-                <resource-env-ref-name>name_6</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_7</description>
-                <resource-env-ref-name>name_7</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_8</description>
-                <resource-env-ref-name>name_8</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_9</description>
-                <resource-env-ref-name>name_9</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-        <entity>
-            <description>description_0</description>
-            <display-name>displayName_0</display-name>
-            <small-icon>smallIcon_0</small-icon>
-            <large-icon>largeIcon_0</large-icon>
-            <ejb-name>name_0</ejb-name>
-            <home>java.lang.Integer</home>
-            <remote>java.lang.String</remote>
-            <local-home>java.util.HashTable</local-home>
-            <local>java.util.List</local>
-            <ejb-class>java.sql.Data</ejb-class>
-            <persistence-type>Container</persistence-type>
-            <prim-key-class>java.sql.Data</prim-key-class>
-            <reentrant>True</reentrant>
-            <cmp-version>2.x</cmp-version>
-            <abstract-schema-name>abstractSchemaName_0</abstract-schema-name>
-            <cmp-field>
-                <description>description_1</description>
-                <field-name>name_1</field-name>
-            </cmp-field>
-            <cmp-field>
-                <description>description_3</description>
-                <field-name>name_3</field-name>
-            </cmp-field>
-            <cmp-field>
-                <description>description_4</description>
-                <field-name>name_4</field-name>
-            </cmp-field>
-            <env-entry>
-                <description>description_10</description>
-                <env-entry-name>name_10</env-entry-name>
-                <env-entry-type>java.lang.Integer</env-entry-type>
-                <env-entry-value>value_10</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_11</description>
-                <env-entry-name>name_11</env-entry-name>
-                <env-entry-type>java.lang.Boolean</env-entry-type>
-                <env-entry-value>value_11</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_12</description>
-                <env-entry-name>name_12</env-entry-name>
-                <env-entry-type>java.lang.Double</env-entry-type>
-                <env-entry-value>value_12</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_13</description>
-                <env-entry-name>name_13</env-entry-name>
-                <env-entry-type>java.lang.Byte</env-entry-type>
-                <env-entry-value>value_13</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_14</description>
-                <env-entry-name>name_14</env-entry-name>
-                <env-entry-type>java.lang.Short</env-entry-type>
-                <env-entry-value>value_14</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_10</description>
-                <ejb-ref-name>name_10</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_10</home>
-                <remote>remote_10</remote>
-                <ejb-link>link_10</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_11</description>
-                <ejb-ref-name>name_11</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_11</home>
-                <remote>remote_11</remote>
-                <ejb-link>link_11</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_12</description>
-                <ejb-ref-name>name_12</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_12</home>
-                <remote>remote_12</remote>
-                <ejb-link>link_12</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_13</description>
-                <ejb-ref-name>name_13</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_13</home>
-                <remote>remote_13</remote>
-                <ejb-link>link_13</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_14</description>
-                <ejb-ref-name>name_14</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_14</home>
-                <remote>remote_14</remote>
-                <ejb-link>link_14</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_10</description>
-                <ejb-ref-name>name_10</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_21</local-home>
-                <local>remote_21</local>
-                <ejb-link>link_10</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_11</description>
-                <ejb-ref-name>name_11</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_23</local-home>
-                <local>remote_23</local>
-                <ejb-link>link_11</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_12</description>
-                <ejb-ref-name>name_12</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_25</local-home>
-                <local>remote_25</local>
-                <ejb-link>link_12</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_13</description>
-                <ejb-ref-name>name_13</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_27</local-home>
-                <local>remote_27</local>
-                <ejb-link>link_13</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_14</description>
-                <ejb-ref-name>name_14</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_29</local-home>
-                <local>remote_29</local>
-                <ejb-link>link_14</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <role-name>name_10</role-name>
-                <role-link>link_10</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_11</role-name>
-                <role-link>link_11</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_12</role-name>
-                <role-link>link_12</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_13</role-name>
-                <role-link>link_13</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_14</role-name>
-                <role-link>link_14</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_1</description>
-                <run-as>
-                    <description>description_1</description>
-                    <role-name>roleName_1</role-name>
-                </run-as>
-            </security-identity>
-            <resource-ref>
-                <description>description_10</description>
-                <res-ref-name>name_10</res-ref-name>
-                <res-type>type_10</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_11</description>
-                <res-ref-name>name_11</res-ref-name>
-                <res-type>type_11</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_12</description>
-                <res-ref-name>name_12</res-ref-name>
-                <res-type>type_12</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_13</description>
-                <res-ref-name>name_13</res-ref-name>
-                <res-type>type_13</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_14</description>
-                <res-ref-name>name_14</res-ref-name>
-                <res-type>type_14</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_10</description>
-                <resource-env-ref-name>name_10</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_11</description>
-                <resource-env-ref-name>name_11</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_12</description>
-                <resource-env-ref-name>name_12</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_13</description>
-                <resource-env-ref-name>name_13</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_14</description>
-                <resource-env-ref-name>name_14</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <query>
-                <description>description_0</description>
-                <query-method>
-                    <method-name>name_0</method-name>
-                </query-method>
-                <result-type-mapping>Local</result-type-mapping>
-                <ejb-ql>ejbQL_0</ejb-ql>
-            </query>
-            <query>
-                <description>description_1</description>
-                <query-method>
-                    <method-name>name_1</method-name>
-                    <method-params/>
-                </query-method>
-                <result-type-mapping>Remote</result-type-mapping>
-                <ejb-ql>ejbQL_1</ejb-ql>
-            </query>
-            <query>
-                <description>description_2</description>
-                <query-method>
-                    <method-name>name_2</method-name>
-                    <method-params>
-                        <method-param>parms_0</method-param>
-                    </method-params>
-                </query-method>
-                <result-type-mapping>Local</result-type-mapping>
-                <ejb-ql>ejbQL_2</ejb-ql>
-            </query>
-            <query>
-                <description>description_3</description>
-                <query-method>
-                    <method-name>name_3</method-name>
-                    <method-params>
-                        <method-param>parms_1</method-param>
-                        <method-param>parms_2</method-param>
-                    </method-params>
-                </query-method>
-                <result-type-mapping>Remote</result-type-mapping>
-                <ejb-ql>ejbQL_3</ejb-ql>
-            </query>
-            <query>
-                <description>description_4</description>
-                <query-method>
-                    <method-name>name_4</method-name>
-                    <method-params>
-                        <method-param>parms_3</method-param>
-                        <method-param>parms_4</method-param>
-                        <method-param>parms_5</method-param>
-                    </method-params>
-                </query-method>
-                <result-type-mapping>Local</result-type-mapping>
-                <ejb-ql>ejbQL_4</ejb-ql>
-            </query>
-        </entity>
-        <session>
-            <description>description_0</description>
-            <display-name>displayName_0</display-name>
-            <small-icon>smallIcon_0</small-icon>
-            <large-icon>largeIcon_0</large-icon>
-            <ejb-name>name_0</ejb-name>
-            <home>java.lang.String</home>
-            <remote>java.util.HashTable</remote>
-            <local-home>java.util.List</local-home>
-            <local>java.sql.Data</local>
-            <ejb-class>java.lang.Integer</ejb-class>
-            <session-type>Stateful</session-type>
-            <transaction-type>Bean</transaction-type>
-            <env-entry>
-                <description>description_15</description>
-                <env-entry-name>name_15</env-entry-name>
-                <env-entry-type>java.lang.Long</env-entry-type>
-                <env-entry-value>value_15</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_16</description>
-                <env-entry-name>name_16</env-entry-name>
-                <env-entry-type>java.lang.Float</env-entry-type>
-                <env-entry-value>value_16</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_17</description>
-                <env-entry-name>name_17</env-entry-name>
-                <env-entry-type>java.lang.Character</env-entry-type>
-                <env-entry-value>value_17</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_18</description>
-                <env-entry-name>name_18</env-entry-name>
-                <env-entry-type>java.lang.String</env-entry-type>
-                <env-entry-value>value_18</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_19</description>
-                <env-entry-name>name_19</env-entry-name>
-                <env-entry-type>java.lang.Integer</env-entry-type>
-                <env-entry-value>value_19</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_15</description>
-                <ejb-ref-name>name_15</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_15</home>
-                <remote>remote_15</remote>
-                <ejb-link>link_15</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_16</description>
-                <ejb-ref-name>name_16</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_16</home>
-                <remote>remote_16</remote>
-                <ejb-link>link_16</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_17</description>
-                <ejb-ref-name>name_17</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_17</home>
-                <remote>remote_17</remote>
-                <ejb-link>link_17</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_18</description>
-                <ejb-ref-name>name_18</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_18</home>
-                <remote>remote_18</remote>
-                <ejb-link>link_18</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_19</description>
-                <ejb-ref-name>name_19</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_19</home>
-                <remote>remote_19</remote>
-                <ejb-link>link_19</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_15</description>
-                <ejb-ref-name>name_15</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_31</local-home>
-                <local>remote_31</local>
-                <ejb-link>link_15</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_16</description>
-                <ejb-ref-name>name_16</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_33</local-home>
-                <local>remote_33</local>
-                <ejb-link>link_16</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_17</description>
-                <ejb-ref-name>name_17</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_35</local-home>
-                <local>remote_35</local>
-                <ejb-link>link_17</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_18</description>
-                <ejb-ref-name>name_18</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_37</local-home>
-                <local>remote_37</local>
-                <ejb-link>link_18</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_19</description>
-                <ejb-ref-name>name_19</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_39</local-home>
-                <local>remote_39</local>
-                <ejb-link>link_19</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <role-name>name_15</role-name>
-                <role-link>link_15</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_16</role-name>
-                <role-link>link_16</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_17</role-name>
-                <role-link>link_17</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_18</role-name>
-                <role-link>link_18</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_19</role-name>
-                <role-link>link_19</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_1</description>
-                <use-caller-identity></use-caller-identity>
-            </security-identity>
-            <resource-ref>
-                <description>description_15</description>
-                <res-ref-name>name_15</res-ref-name>
-                <res-type>type_15</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_16</description>
-                <res-ref-name>name_16</res-ref-name>
-                <res-type>type_16</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_17</description>
-                <res-ref-name>name_17</res-ref-name>
-                <res-type>type_17</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_18</description>
-                <res-ref-name>name_18</res-ref-name>
-                <res-type>type_18</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_19</description>
-                <res-ref-name>name_19</res-ref-name>
-                <res-type>type_19</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_15</description>
-                <resource-env-ref-name>name_15</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_16</description>
-                <resource-env-ref-name>name_16</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_17</description>
-                <resource-env-ref-name>name_17</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_18</description>
-                <resource-env-ref-name>name_18</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_19</description>
-                <resource-env-ref-name>name_19</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-        </session>
-        <entity>
-            <description>description_2</description>
-            <display-name>displayName_2</display-name>
-            <small-icon>smallIcon_2</small-icon>
-            <large-icon>largeIcon_2</large-icon>
-            <ejb-name>name_2</ejb-name>
-            <home>java.util.HashTable</home>
-            <remote>java.util.List</remote>
-            <local-home>java.sql.Data</local-home>
-            <local>java.lang.Integer</local>
-            <ejb-class>java.lang.String</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.lang.String</prim-key-class>
-            <reentrant>True</reentrant>
-            <env-entry>
-                <description>description_20</description>
-                <env-entry-name>name_20</env-entry-name>
-                <env-entry-type>java.lang.Boolean</env-entry-type>
-                <env-entry-value>value_20</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_21</description>
-                <env-entry-name>name_21</env-entry-name>
-                <env-entry-type>java.lang.Double</env-entry-type>
-                <env-entry-value>value_21</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_22</description>
-                <env-entry-name>name_22</env-entry-name>
-                <env-entry-type>java.lang.Byte</env-entry-type>
-                <env-entry-value>value_22</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_23</description>
-                <env-entry-name>name_23</env-entry-name>
-                <env-entry-type>java.lang.Short</env-entry-type>
-                <env-entry-value>value_23</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_24</description>
-                <env-entry-name>name_24</env-entry-name>
-                <env-entry-type>java.lang.Long</env-entry-type>
-                <env-entry-value>value_24</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_20</description>
-                <ejb-ref-name>name_20</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_20</home>
-                <remote>remote_20</remote>
-                <ejb-link>link_20</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_21</description>
-                <ejb-ref-name>name_21</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_21</home>
-                <remote>remote_21</remote>
-                <ejb-link>link_21</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_22</description>
-                <ejb-ref-name>name_22</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_22</home>
-                <remote>remote_22</remote>
-                <ejb-link>link_22</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_23</description>
-                <ejb-ref-name>name_23</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_23</home>
-                <remote>remote_23</remote>
-                <ejb-link>link_23</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_24</description>
-                <ejb-ref-name>name_24</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_24</home>
-                <remote>remote_24</remote>
-                <ejb-link>link_24</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_20</description>
-                <ejb-ref-name>name_20</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_41</local-home>
-                <local>remote_41</local>
-                <ejb-link>link_20</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_21</description>
-                <ejb-ref-name>name_21</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_43</local-home>
-                <local>remote_43</local>
-                <ejb-link>link_21</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_22</description>
-                <ejb-ref-name>name_22</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_45</local-home>
-                <local>remote_45</local>
-                <ejb-link>link_22</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_23</description>
-                <ejb-ref-name>name_23</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_47</local-home>
-                <local>remote_47</local>
-                <ejb-link>link_23</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_24</description>
-                <ejb-ref-name>name_24</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_49</local-home>
-                <local>remote_49</local>
-                <ejb-link>link_24</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <role-name>name_20</role-name>
-                <role-link>link_20</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_21</role-name>
-                <role-link>link_21</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_22</role-name>
-                <role-link>link_22</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_23</role-name>
-                <role-link>link_23</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_24</role-name>
-                <role-link>link_24</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_2</description>
-                <run-as>
-                    <description>description_2</description>
-                    <role-name>roleName_2</role-name>
-                </run-as>
-            </security-identity>
-            <resource-ref>
-                <description>description_20</description>
-                <res-ref-name>name_20</res-ref-name>
-                <res-type>type_20</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_21</description>
-                <res-ref-name>name_21</res-ref-name>
-                <res-type>type_21</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_22</description>
-                <res-ref-name>name_22</res-ref-name>
-                <res-type>type_22</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_23</description>
-                <res-ref-name>name_23</res-ref-name>
-                <res-type>type_23</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_24</description>
-                <res-ref-name>name_24</res-ref-name>
-                <res-type>type_24</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_20</description>
-                <resource-env-ref-name>name_20</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_21</description>
-                <resource-env-ref-name>name_21</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_22</description>
-                <resource-env-ref-name>name_22</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_23</description>
-                <resource-env-ref-name>name_23</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_24</description>
-                <resource-env-ref-name>name_24</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-        <entity>
-            <description>description_3</description>
-            <display-name>displayName_3</display-name>
-            <small-icon>smallIcon_3</small-icon>
-            <large-icon>largeIcon_3</large-icon>
-            <ejb-name>name_3</ejb-name>
-            <home>java.util.List</home>
-            <remote>java.sql.Data</remote>
-            <local-home>java.lang.Integer</local-home>
-            <local>java.lang.String</local>
-            <ejb-class>java.util.HashTable</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.util.HashTable</prim-key-class>
-            <reentrant>False</reentrant>
-            <env-entry>
-                <description>description_25</description>
-                <env-entry-name>name_25</env-entry-name>
-                <env-entry-type>java.lang.Float</env-entry-type>
-                <env-entry-value>value_25</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_26</description>
-                <env-entry-name>name_26</env-entry-name>
-                <env-entry-type>java.lang.Character</env-entry-type>
-                <env-entry-value>value_26</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_27</description>
-                <env-entry-name>name_27</env-entry-name>
-                <env-entry-type>java.lang.String</env-entry-type>
-                <env-entry-value>value_27</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_28</description>
-                <env-entry-name>name_28</env-entry-name>
-                <env-entry-type>java.lang.Integer</env-entry-type>
-                <env-entry-value>value_28</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_29</description>
-                <env-entry-name>name_29</env-entry-name>
-                <env-entry-type>java.lang.Boolean</env-entry-type>
-                <env-entry-value>value_29</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_25</description>
-                <ejb-ref-name>name_25</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_25</home>
-                <remote>remote_25</remote>
-                <ejb-link>link_25</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_26</description>
-                <ejb-ref-name>name_26</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_26</home>
-                <remote>remote_26</remote>
-                <ejb-link>link_26</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_27</description>
-                <ejb-ref-name>name_27</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_27</home>
-                <remote>remote_27</remote>
-                <ejb-link>link_27</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_28</description>
-                <ejb-ref-name>name_28</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_28</home>
-                <remote>remote_28</remote>
-                <ejb-link>link_28</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_29</description>
-                <ejb-ref-name>name_29</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_29</home>
-                <remote>remote_29</remote>
-                <ejb-link>link_29</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_25</description>
-                <ejb-ref-name>name_25</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_51</local-home>
-                <local>remote_51</local>
-                <ejb-link>link_25</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_26</description>
-                <ejb-ref-name>name_26</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_53</local-home>
-                <local>remote_53</local>
-                <ejb-link>link_26</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_27</description>
-                <ejb-ref-name>name_27</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_55</local-home>
-                <local>remote_55</local>
-                <ejb-link>link_27</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_28</description>
-                <ejb-ref-name>name_28</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_57</local-home>
-                <local>remote_57</local>
-                <ejb-link>link_28</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_29</description>
-                <ejb-ref-name>name_29</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_59</local-home>
-                <local>remote_59</local>
-                <ejb-link>link_29</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <role-name>name_25</role-name>
-                <role-link>link_25</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_26</role-name>
-                <role-link>link_26</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_27</role-name>
-                <role-link>link_27</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_28</role-name>
-                <role-link>link_28</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_29</role-name>
-                <role-link>link_29</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_2</description>
-                <use-caller-identity></use-caller-identity>
-            </security-identity>
-            <resource-ref>
-                <description>description_25</description>
-                <res-ref-name>name_25</res-ref-name>
-                <res-type>type_25</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_26</description>
-                <res-ref-name>name_26</res-ref-name>
-                <res-type>type_26</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_27</description>
-                <res-ref-name>name_27</res-ref-name>
-                <res-type>type_27</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_28</description>
-                <res-ref-name>name_28</res-ref-name>
-                <res-type>type_28</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_29</description>
-                <res-ref-name>name_29</res-ref-name>
-                <res-type>type_29</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_25</description>
-                <resource-env-ref-name>name_25</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_26</description>
-                <resource-env-ref-name>name_26</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_27</description>
-                <resource-env-ref-name>name_27</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_28</description>
-                <resource-env-ref-name>name_28</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_29</description>
-                <resource-env-ref-name>name_29</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-        <message-driven>
-            <description>description_0</description>
-            <display-name>displayName_0</display-name>
-            <small-icon>smallIcon_0</small-icon>
-            <large-icon>largeIcon_0</large-icon>
-            <ejb-name>name_0</ejb-name>
-            <ejb-class>java.util.List</ejb-class>
-            <transaction-type>Bean</transaction-type>
-            <message-selector>messageSelector_0</message-selector>
-            <acknowledge-mode>Auto-acknowledge</acknowledge-mode>
-            <message-driven-destination>
-                <destination-type>javax.jms.Queue</destination-type>
-                <subscription-durability>Durable</subscription-durability>
-            </message-driven-destination>
-            <env-entry>
-                <description>description_30</description>
-                <env-entry-name>name_30</env-entry-name>
-                <env-entry-type>java.lang.Double</env-entry-type>
-                <env-entry-value>value_30</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_31</description>
-                <env-entry-name>name_31</env-entry-name>
-                <env-entry-type>java.lang.Byte</env-entry-type>
-                <env-entry-value>value_31</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_32</description>
-                <env-entry-name>name_32</env-entry-name>
-                <env-entry-type>java.lang.Short</env-entry-type>
-                <env-entry-value>value_32</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_33</description>
-                <env-entry-name>name_33</env-entry-name>
-                <env-entry-type>java.lang.Long</env-entry-type>
-                <env-entry-value>value_33</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_34</description>
-                <env-entry-name>name_34</env-entry-name>
-                <env-entry-type>java.lang.Float</env-entry-type>
-                <env-entry-value>value_34</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_30</description>
-                <ejb-ref-name>name_30</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_30</home>
-                <remote>remote_30</remote>
-                <ejb-link>link_30</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_31</description>
-                <ejb-ref-name>name_31</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_31</home>
-                <remote>remote_31</remote>
-                <ejb-link>link_31</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_32</description>
-                <ejb-ref-name>name_32</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_32</home>
-                <remote>remote_32</remote>
-                <ejb-link>link_32</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_33</description>
-                <ejb-ref-name>name_33</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_33</home>
-                <remote>remote_33</remote>
-                <ejb-link>link_33</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_34</description>
-                <ejb-ref-name>name_34</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_34</home>
-                <remote>remote_34</remote>
-                <ejb-link>link_34</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_30</description>
-                <ejb-ref-name>name_30</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_61</local-home>
-                <local>remote_61</local>
-                <ejb-link>link_30</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_31</description>
-                <ejb-ref-name>name_31</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_63</local-home>
-                <local>remote_63</local>
-                <ejb-link>link_31</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_32</description>
-                <ejb-ref-name>name_32</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_65</local-home>
-                <local>remote_65</local>
-                <ejb-link>link_32</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_33</description>
-                <ejb-ref-name>name_33</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_67</local-home>
-                <local>remote_67</local>
-                <ejb-link>link_33</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_34</description>
-                <ejb-ref-name>name_34</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_69</local-home>
-                <local>remote_69</local>
-                <ejb-link>link_34</ejb-link>
-            </ejb-local-ref>
-            <security-identity>
-                <description>description_3</description>
-                <run-as>
-                    <description>description_3</description>
-                    <role-name>roleName_3</role-name>
-                </run-as>
-            </security-identity>
-            <resource-ref>
-                <description>description_30</description>
-                <res-ref-name>name_30</res-ref-name>
-                <res-type>type_30</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_31</description>
-                <res-ref-name>name_31</res-ref-name>
-                <res-type>type_31</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_32</description>
-                <res-ref-name>name_32</res-ref-name>
-                <res-type>type_32</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_33</description>
-                <res-ref-name>name_33</res-ref-name>
-                <res-type>type_33</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_34</description>
-                <res-ref-name>name_34</res-ref-name>
-                <res-type>type_34</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_30</description>
-                <resource-env-ref-name>name_30</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_31</description>
-                <resource-env-ref-name>name_31</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_32</description>
-                <resource-env-ref-name>name_32</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_33</description>
-                <resource-env-ref-name>name_33</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_34</description>
-                <resource-env-ref-name>name_34</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-        </message-driven>
-        <session>
-            <description>description_1</description>
-            <display-name>displayName_1</display-name>
-            <small-icon>smallIcon_1</small-icon>
-            <large-icon>largeIcon_1</large-icon>
-            <ejb-name>name_1</ejb-name>
-            <home>java.lang.String</home>
-            <remote>java.util.HashTable</remote>
-            <local-home>java.util.List</local-home>
-            <local>java.sql.Data</local>
-            <ejb-class>java.lang.Integer</ejb-class>
-            <session-type>Stateless</session-type>
-            <transaction-type>Container</transaction-type>
-            <env-entry>
-                <description>description_35</description>
-                <env-entry-name>name_35</env-entry-name>
-                <env-entry-type>java.lang.Character</env-entry-type>
-                <env-entry-value>value_35</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_36</description>
-                <env-entry-name>name_36</env-entry-name>
-                <env-entry-type>java.lang.String</env-entry-type>
-                <env-entry-value>value_36</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_37</description>
-                <env-entry-name>name_37</env-entry-name>
-                <env-entry-type>java.lang.Integer</env-entry-type>
-                <env-entry-value>value_37</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_38</description>
-                <env-entry-name>name_38</env-entry-name>
-                <env-entry-type>java.lang.Boolean</env-entry-type>
-                <env-entry-value>value_38</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_39</description>
-                <env-entry-name>name_39</env-entry-name>
-                <env-entry-type>java.lang.Double</env-entry-type>
-                <env-entry-value>value_39</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_35</description>
-                <ejb-ref-name>name_35</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_35</home>
-                <remote>remote_35</remote>
-                <ejb-link>link_35</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_36</description>
-                <ejb-ref-name>name_36</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_36</home>
-                <remote>remote_36</remote>
-                <ejb-link>link_36</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_37</description>
-                <ejb-ref-name>name_37</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_37</home>
-                <remote>remote_37</remote>
-                <ejb-link>link_37</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_38</description>
-                <ejb-ref-name>name_38</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_38</home>
-                <remote>remote_38</remote>
-                <ejb-link>link_38</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_39</description>
-                <ejb-ref-name>name_39</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_39</home>
-                <remote>remote_39</remote>
-                <ejb-link>link_39</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_35</description>
-                <ejb-ref-name>name_35</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_71</local-home>
-                <local>remote_71</local>
-                <ejb-link>link_35</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_36</description>
-                <ejb-ref-name>name_36</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_73</local-home>
-                <local>remote_73</local>
-                <ejb-link>link_36</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_37</description>
-                <ejb-ref-name>name_37</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_75</local-home>
-                <local>remote_75</local>
-                <ejb-link>link_37</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_38</description>
-                <ejb-ref-name>name_38</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_77</local-home>
-                <local>remote_77</local>
-                <ejb-link>link_38</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_39</description>
-                <ejb-ref-name>name_39</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_79</local-home>
-                <local>remote_79</local>
-                <ejb-link>link_39</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <role-name>name_35</role-name>
-                <role-link>link_35</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_36</role-name>
-                <role-link>link_36</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_37</role-name>
-                <role-link>link_37</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_38</role-name>
-                <role-link>link_38</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_39</role-name>
-                <role-link>link_39</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_3</description>
-                <use-caller-identity></use-caller-identity>
-            </security-identity>
-            <resource-ref>
-                <description>description_35</description>
-                <res-ref-name>name_35</res-ref-name>
-                <res-type>type_35</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_36</description>
-                <res-ref-name>name_36</res-ref-name>
-                <res-type>type_36</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_37</description>
-                <res-ref-name>name_37</res-ref-name>
-                <res-type>type_37</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_38</description>
-                <res-ref-name>name_38</res-ref-name>
-                <res-type>type_38</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_39</description>
-                <res-ref-name>name_39</res-ref-name>
-                <res-type>type_39</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_35</description>
-                <resource-env-ref-name>name_35</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_36</description>
-                <resource-env-ref-name>name_36</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_37</description>
-                <resource-env-ref-name>name_37</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_38</description>
-                <resource-env-ref-name>name_38</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_39</description>
-                <resource-env-ref-name>name_39</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-        </session>
-        <entity>
-            <description>description_4</description>
-            <display-name>displayName_4</display-name>
-            <small-icon>smallIcon_4</small-icon>
-            <large-icon>largeIcon_4</large-icon>
-            <ejb-name>name_4</ejb-name>
-            <home>java.util.HashTable</home>
-            <remote>java.util.List</remote>
-            <local-home>java.sql.Data</local-home>
-            <local>java.lang.Integer</local>
-            <ejb-class>java.lang.String</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.lang.String</prim-key-class>
-            <reentrant>True</reentrant>
-            <env-entry>
-                <description>description_40</description>
-                <env-entry-name>name_40</env-entry-name>
-                <env-entry-type>java.lang.Byte</env-entry-type>
-                <env-entry-value>value_40</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_41</description>
-                <env-entry-name>name_41</env-entry-name>
-                <env-entry-type>java.lang.Short</env-entry-type>
-                <env-entry-value>value_41</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_42</description>
-                <env-entry-name>name_42</env-entry-name>
-                <env-entry-type>java.lang.Long</env-entry-type>
-                <env-entry-value>value_42</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_43</description>
-                <env-entry-name>name_43</env-entry-name>
-                <env-entry-type>java.lang.Float</env-entry-type>
-                <env-entry-value>value_43</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_44</description>
-                <env-entry-name>name_44</env-entry-name>
-                <env-entry-type>java.lang.Character</env-entry-type>
-                <env-entry-value>value_44</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_40</description>
-                <ejb-ref-name>name_40</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_40</home>
-                <remote>remote_40</remote>
-                <ejb-link>link_40</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_41</description>
-                <ejb-ref-name>name_41</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_41</home>
-                <remote>remote_41</remote>
-                <ejb-link>link_41</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_42</description>
-                <ejb-ref-name>name_42</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_42</home>
-                <remote>remote_42</remote>
-                <ejb-link>link_42</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_43</description>
-                <ejb-ref-name>name_43</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_43</home>
-                <remote>remote_43</remote>
-                <ejb-link>link_43</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_44</description>
-                <ejb-ref-name>name_44</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_44</home>
-                <remote>remote_44</remote>
-                <ejb-link>link_44</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_40</description>
-                <ejb-ref-name>name_40</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_81</local-home>
-                <local>remote_81</local>
-                <ejb-link>link_40</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_41</description>
-                <ejb-ref-name>name_41</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_83</local-home>
-                <local>remote_83</local>
-                <ejb-link>link_41</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_42</description>
-                <ejb-ref-name>name_42</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_85</local-home>
-                <local>remote_85</local>
-                <ejb-link>link_42</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_43</description>
-                <ejb-ref-name>name_43</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_87</local-home>
-                <local>remote_87</local>
-                <ejb-link>link_43</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_44</description>
-                <ejb-ref-name>name_44</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_89</local-home>
-                <local>remote_89</local>
-                <ejb-link>link_44</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <role-name>name_40</role-name>
-                <role-link>link_40</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_41</role-name>
-                <role-link>link_41</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_42</role-name>
-                <role-link>link_42</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_43</role-name>
-                <role-link>link_43</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_44</role-name>
-                <role-link>link_44</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_4</description>
-                <run-as>
-                    <description>description_4</description>
-                    <role-name>roleName_4</role-name>
-                </run-as>
-            </security-identity>
-            <resource-ref>
-                <description>description_40</description>
-                <res-ref-name>name_40</res-ref-name>
-                <res-type>type_40</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_41</description>
-                <res-ref-name>name_41</res-ref-name>
-                <res-type>type_41</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_42</description>
-                <res-ref-name>name_42</res-ref-name>
-                <res-type>type_42</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_43</description>
-                <res-ref-name>name_43</res-ref-name>
-                <res-type>type_43</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_44</description>
-                <res-ref-name>name_44</res-ref-name>
-                <res-type>type_44</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_40</description>
-                <resource-env-ref-name>name_40</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_41</description>
-                <resource-env-ref-name>name_41</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_42</description>
-                <resource-env-ref-name>name_42</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_43</description>
-                <resource-env-ref-name>name_43</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_44</description>
-                <resource-env-ref-name>name_44</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-        <entity>
-            <description>description_5</description>
-            <display-name>displayName_5</display-name>
-            <small-icon>smallIcon_5</small-icon>
-            <large-icon>largeIcon_5</large-icon>
-            <ejb-name>name_5</ejb-name>
-            <home>java.util.List</home>
-            <remote>java.sql.Data</remote>
-            <local-home>java.lang.Integer</local-home>
-            <local>java.lang.String</local>
-            <ejb-class>java.util.HashTable</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.util.HashTable</prim-key-class>
-            <reentrant>False</reentrant>
-            <env-entry>
-                <description>description_45</description>
-                <env-entry-name>name_45</env-entry-name>
-                <env-entry-type>java.lang.String</env-entry-type>
-                <env-entry-value>value_45</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_46</description>
-                <env-entry-name>name_46</env-entry-name>
-                <env-entry-type>java.lang.Integer</env-entry-type>
-                <env-entry-value>value_46</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_47</description>
-                <env-entry-name>name_47</env-entry-name>
-                <env-entry-type>java.lang.Boolean</env-entry-type>
-                <env-entry-value>value_47</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_48</description>
-                <env-entry-name>name_48</env-entry-name>
-                <env-entry-type>java.lang.Double</env-entry-type>
-                <env-entry-value>value_48</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_49</description>
-                <env-entry-name>name_49</env-entry-name>
-                <env-entry-type>java.lang.Byte</env-entry-type>
-                <env-entry-value>value_49</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_45</description>
-                <ejb-ref-name>name_45</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_45</home>
-                <remote>remote_45</remote>
-                <ejb-link>link_45</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_46</description>
-                <ejb-ref-name>name_46</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_46</home>
-                <remote>remote_46</remote>
-                <ejb-link>link_46</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_47</description>
-                <ejb-ref-name>name_47</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_47</home>
-                <remote>remote_47</remote>
-                <ejb-link>link_47</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_48</description>
-                <ejb-ref-name>name_48</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_48</home>
-                <remote>remote_48</remote>
-                <ejb-link>link_48</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_49</description>
-                <ejb-ref-name>name_49</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_49</home>
-                <remote>remote_49</remote>
-                <ejb-link>link_49</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_45</description>
-                <ejb-ref-name>name_45</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_91</local-home>
-                <local>remote_91</local>
-                <ejb-link>link_45</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_46</description>
-                <ejb-ref-name>name_46</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_93</local-home>
-                <local>remote_93</local>
-                <ejb-link>link_46</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_47</description>
-                <ejb-ref-name>name_47</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_95</local-home>
-                <local>remote_95</local>
-                <ejb-link>link_47</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_48</description>
-                <ejb-ref-name>name_48</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_97</local-home>
-                <local>remote_97</local>
-                <ejb-link>link_48</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_49</description>
-                <ejb-ref-name>name_49</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_99</local-home>
-                <local>remote_99</local>
-                <ejb-link>link_49</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <role-name>name_45</role-name>
-                <role-link>link_45</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_46</role-name>
-                <role-link>link_46</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_47</role-name>
-                <role-link>link_47</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_48</role-name>
-                <role-link>link_48</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <role-name>name_49</role-name>
-                <role-link>link_49</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_4</description>
-                <use-caller-identity></use-caller-identity>
-            </security-identity>
-            <resource-ref>
-                <description>description_45</description>
-                <res-ref-name>name_45</res-ref-name>
-                <res-type>type_45</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_46</description>
-                <res-ref-name>name_46</res-ref-name>
-                <res-type>type_46</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_47</description>
-                <res-ref-name>name_47</res-ref-name>
-                <res-type>type_47</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_48</description>
-                <res-ref-name>name_48</res-ref-name>
-                <res-type>type_48</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_49</description>
-                <res-ref-name>name_49</res-ref-name>
-                <res-type>type_49</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_45</description>
-                <resource-env-ref-name>name_45</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_46</description>
-                <resource-env-ref-name>name_46</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_47</description>
-                <resource-env-ref-name>name_47</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_48</description>
-                <resource-env-ref-name>name_48</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_49</description>
-                <resource-env-ref-name>name_49</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-	</enterprise-beans>
-    <relationships>
-        <description>description_0</description>
-        <ejb-relation>
-            <description>description_0</description>
-            <ejb-relation-name>name_0</ejb-relation-name>
-            <ejb-relationship-role>
-                <description>description_0</description>
-                <ejb-relationship-role-name>roleName_0</ejb-relationship-role-name>
-                <multiplicity>One</multiplicity>
-                <cascade-delete></cascade-delete>
-                <relationship-role-source>
-                    <description>description_0</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_0</description>
-                    <cmr-field-name>name_0</cmr-field-name>
-                    <cmr-field-type>java.util.List</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-                <description>description_1</description>
-                <ejb-relationship-role-name>roleName_1</ejb-relationship-role-name>
-                <multiplicity>Many</multiplicity>
-                <relationship-role-source>
-                    <description>description_1</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_1</description>
-                    <cmr-field-name>name_1</cmr-field-name>
-                    <cmr-field-type>java.sql.Data</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-        </ejb-relation>
-        <ejb-relation>
-            <description>description_1</description>
-            <ejb-relation-name>name_1</ejb-relation-name>
-            <ejb-relationship-role>
-                <description>description_2</description>
-                <ejb-relationship-role-name>roleName_2</ejb-relationship-role-name>
-                <multiplicity>One</multiplicity>
-                <cascade-delete></cascade-delete>
-                <relationship-role-source>
-                    <description>description_2</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_2</description>
-                    <cmr-field-name>name_2</cmr-field-name>
-                    <cmr-field-type>java.lang.Integer</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-                <description>description_3</description>
-                <ejb-relationship-role-name>roleName_3</ejb-relationship-role-name>
-                <multiplicity>Many</multiplicity>
-                <relationship-role-source>
-                    <description>description_3</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_3</description>
-                    <cmr-field-name>name_3</cmr-field-name>
-                    <cmr-field-type>java.lang.String</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-        </ejb-relation>
-        <ejb-relation>
-            <description>description_2</description>
-            <ejb-relation-name>name_2</ejb-relation-name>
-            <ejb-relationship-role>
-                <description>description_4</description>
-                <ejb-relationship-role-name>roleName_4</ejb-relationship-role-name>
-                <multiplicity>One</multiplicity>
-                <cascade-delete></cascade-delete>
-                <relationship-role-source>
-                    <description>description_4</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_4</description>
-                    <cmr-field-name>name_4</cmr-field-name>
-                    <cmr-field-type>java.util.HashTable</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-                <description>description_5</description>
-                <ejb-relationship-role-name>roleName_5</ejb-relationship-role-name>
-                <multiplicity>Many</multiplicity>
-                <relationship-role-source>
-                    <description>description_5</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_5</description>
-                    <cmr-field-name>name_5</cmr-field-name>
-                    <cmr-field-type>java.util.List</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-        </ejb-relation>
-        <ejb-relation>
-            <description>description_3</description>
-            <ejb-relation-name>name_3</ejb-relation-name>
-            <ejb-relationship-role>
-                <description>description_6</description>
-                <ejb-relationship-role-name>roleName_6</ejb-relationship-role-name>
-                <multiplicity>One</multiplicity>
-                <cascade-delete></cascade-delete>
-                <relationship-role-source>
-                    <description>description_6</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_6</description>
-                    <cmr-field-name>name_6</cmr-field-name>
-                    <cmr-field-type>java.sql.Data</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-                <description>description_7</description>
-                <ejb-relationship-role-name>roleName_7</ejb-relationship-role-name>
-                <multiplicity>Many</multiplicity>
-                <relationship-role-source>
-                    <description>description_7</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_7</description>
-                    <cmr-field-name>name_7</cmr-field-name>
-                    <cmr-field-type>java.lang.Integer</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-        </ejb-relation>
-        <ejb-relation>
-            <description>description_4</description>
-            <ejb-relation-name>name_4</ejb-relation-name>
-            <ejb-relationship-role>
-                <description>description_8</description>
-                <ejb-relationship-role-name>roleName_8</ejb-relationship-role-name>
-                <multiplicity>One</multiplicity>
-                <cascade-delete></cascade-delete>
-                <relationship-role-source>
-                    <description>description_8</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_8</description>
-                    <cmr-field-name>name_8</cmr-field-name>
-                    <cmr-field-type>java.lang.String</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-                <description>description_9</description>
-                <ejb-relationship-role-name>roleName_9</ejb-relationship-role-name>
-                <multiplicity>Many</multiplicity>
-                <relationship-role-source>
-                    <description>description_9</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_9</description>
-                    <cmr-field-name>name_9</cmr-field-name>
-                    <cmr-field-type>java.util.HashTable</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-        </ejb-relation>
-    </relationships>
-    <assembly-descriptor>
-        <security-role>
-            <description>description_5</description>
-            <role-name>roleName_5</role-name>
-        </security-role>
-        <security-role>
-            <description>description_6</description>
-            <role-name>roleName_6</role-name>
-        </security-role>
-        <security-role>
-            <description>description_7</description>
-            <role-name>roleName_7</role-name>
-        </security-role>
-        <security-role>
-            <description>description_8</description>
-            <role-name>roleName_8</role-name>
-        </security-role>
-        <security-role>
-            <description>description_9</description>
-            <role-name>roleName_9</role-name>
-        </security-role>
-        <method-permission>
-            <description>description_0</description>
-            <unchecked></unchecked>
-            <method>
-                <description>description_0</description>
-                <method-name>name_0</method-name>
-            </method>
-            <method>
-                <description>description_1</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_1</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_2</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_2</method-name>
-                <method-params>
-                    <method-param>parms_0</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_3</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_3</method-name>
-                <method-params>
-                    <method-param>parms_1</method-param>
-                    <method-param>parms_2</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_4</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_4</method-name>
-                <method-params>
-                    <method-param>parms_3</method-param>
-                    <method-param>parms_4</method-param>
-                    <method-param>parms_5</method-param>
-                </method-params>
-            </method>
-        </method-permission>
-        <method-permission>
-            <description>description_1</description>
-            <method>
-                <description>description_5</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_5</method-name>
-            </method>
-            <method>
-                <description>description_6</description>
-                <method-name>name_6</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_7</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_7</method-name>
-                <method-params>
-                    <method-param>parms_6</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_8</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_8</method-name>
-                <method-params>
-                    <method-param>parms_7</method-param>
-                    <method-param>parms_8</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_9</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_9</method-name>
-                <method-params>
-                    <method-param>parms_9</method-param>
-                    <method-param>parms_10</method-param>
-                    <method-param>parms_11</method-param>
-                </method-params>
-            </method>
-        </method-permission>
-        <method-permission>
-            <description>description_2</description>
-            <unchecked></unchecked>
-            <method>
-                <description>description_10</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_10</method-name>
-            </method>
-            <method>
-                <description>description_11</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_11</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_12</description>
-                <method-name>name_12</method-name>
-                <method-params>
-                    <method-param>parms_12</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_13</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_13</method-name>
-                <method-params>
-                    <method-param>parms_13</method-param>
-                    <method-param>parms_14</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_14</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_14</method-name>
-                <method-params>
-                    <method-param>parms_15</method-param>
-                    <method-param>parms_16</method-param>
-                    <method-param>parms_17</method-param>
-                </method-params>
-            </method>
-        </method-permission>
-        <method-permission>
-            <description>description_3</description>
-            <method>
-                <description>description_15</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_15</method-name>
-            </method>
-            <method>
-                <description>description_16</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_16</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_17</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_17</method-name>
-                <method-params>
-                    <method-param>parms_18</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_18</description>
-                <method-name>name_18</method-name>
-                <method-params>
-                    <method-param>parms_19</method-param>
-                    <method-param>parms_20</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_19</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_19</method-name>
-                <method-params>
-                    <method-param>parms_21</method-param>
-                    <method-param>parms_22</method-param>
-                    <method-param>parms_23</method-param>
-                </method-params>
-            </method>
-        </method-permission>
-        <method-permission>
-            <description>description_4</description>
-            <unchecked></unchecked>
-            <method>
-                <description>description_20</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_20</method-name>
-            </method>
-            <method>
-                <description>description_21</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_21</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_22</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_22</method-name>
-                <method-params>
-                    <method-param>parms_24</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_23</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_23</method-name>
-                <method-params>
-                    <method-param>parms_25</method-param>
-                    <method-param>parms_26</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_24</description>
-                <method-name>name_24</method-name>
-                <method-params>
-                    <method-param>parms_27</method-param>
-                    <method-param>parms_28</method-param>
-                    <method-param>parms_29</method-param>
-                </method-params>
-            </method>
-        </method-permission>
-        <container-transaction>
-            <description>description_0</description>
-            <method>
-                <description>description_25</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_25</method-name>
-            </method>
-            <method>
-                <description>description_26</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_26</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_27</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_27</method-name>
-                <method-params>
-                    <method-param>parms_30</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_28</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_28</method-name>
-                <method-params>
-                    <method-param>parms_31</method-param>
-                    <method-param>parms_32</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_29</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_29</method-name>
-                <method-params>
-                    <method-param>parms_33</method-param>
-                    <method-param>parms_34</method-param>
-                    <method-param>parms_35</method-param>
-                </method-params>
-            </method>
-            <trans-attribute>NotSupported</trans-attribute>
-        </container-transaction>
-        <container-transaction>
-            <description>description_1</description>
-            <method>
-                <description>description_30</description>
-                <method-name>name_30</method-name>
-            </method>
-            <method>
-                <description>description_31</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_31</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_32</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_32</method-name>
-                <method-params>
-                    <method-param>parms_36</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_33</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_33</method-name>
-                <method-params>
-                    <method-param>parms_37</method-param>
-                    <method-param>parms_38</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_34</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_34</method-name>
-                <method-params>
-                    <method-param>parms_39</method-param>
-                    <method-param>parms_40</method-param>
-                    <method-param>parms_41</method-param>
-                </method-params>
-            </method>
-            <trans-attribute>Supports</trans-attribute>
-        </container-transaction>
-        <container-transaction>
-            <description>description_2</description>
-            <method>
-                <description>description_35</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_35</method-name>
-            </method>
-            <method>
-                <description>description_36</description>
-                <method-name>name_36</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_37</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_37</method-name>
-                <method-params>
-                    <method-param>parms_42</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_38</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_38</method-name>
-                <method-params>
-                    <method-param>parms_43</method-param>
-                    <method-param>parms_44</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_39</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_39</method-name>
-                <method-params>
-                    <method-param>parms_45</method-param>
-                    <method-param>parms_46</method-param>
-                    <method-param>parms_47</method-param>
-                </method-params>
-            </method>
-            <trans-attribute>Required</trans-attribute>
-        </container-transaction>
-        <container-transaction>
-            <description>description_3</description>
-            <method>
-                <description>description_40</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_40</method-name>
-            </method>
-            <method>
-                <description>description_41</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_41</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_42</description>
-                <method-name>name_42</method-name>
-                <method-params>
-                    <method-param>parms_48</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_43</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_43</method-name>
-                <method-params>
-                    <method-param>parms_49</method-param>
-                    <method-param>parms_50</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_44</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_44</method-name>
-                <method-params>
-                    <method-param>parms_51</method-param>
-                    <method-param>parms_52</method-param>
-                    <method-param>parms_53</method-param>
-                </method-params>
-            </method>
-            <trans-attribute>RequiresNew</trans-attribute>
-        </container-transaction>
-        <container-transaction>
-            <description>description_4</description>
-            <method>
-                <description>description_45</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_45</method-name>
-            </method>
-            <method>
-                <description>description_46</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_46</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_47</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_47</method-name>
-                <method-params>
-                    <method-param>parms_54</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_48</description>
-                <method-name>name_48</method-name>
-                <method-params>
-                    <method-param>parms_55</method-param>
-                    <method-param>parms_56</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_49</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_49</method-name>
-                <method-params>
-                    <method-param>parms_57</method-param>
-                    <method-param>parms_58</method-param>
-                    <method-param>parms_59</method-param>
-                </method-params>
-            </method>
-            <trans-attribute>Mandatory</trans-attribute>
-        </container-transaction>
-        <exclude-list>
-            <description>description_0</description>
-            <method>
-                <description>description_50</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_50</method-name>
-            </method>
-            <method>
-                <description>description_51</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_51</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_52</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_52</method-name>
-                <method-params>
-                    <method-param>parms_60</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_53</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_53</method-name>
-                <method-params>
-                    <method-param>parms_61</method-param>
-                    <method-param>parms_62</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_54</description>
-                <method-name>name_54</method-name>
-                <method-params>
-                    <method-param>parms_63</method-param>
-                    <method-param>parms_64</method-param>
-                    <method-param>parms_65</method-param>
-                </method-params>
-            </method>
-        </exclude-list>
-    </assembly-descriptor>
-    <ejb-client-jar>ejbClientJar_0</ejb-client-jar>
-</ejb-jar>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/ejb-jar2-0sax.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/ejb-jar2-0sax.xml
deleted file mode 100644
index f597242..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/ejb-jar2-0sax.xml
+++ /dev/null
@@ -1,2859 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
-<ejb-jar id="ejb-jar_ID">
-    <description>description_0</description>
-    <display-name>displayName_0</display-name>
-    <small-icon>smallIcon_0</small-icon>
-    <large-icon>largeIcon_0</large-icon>
-    <enterprise-beans>
-        <entity id="CMP1">
-            <ejb-name>CMP1</ejb-name>
-            <local-home>ejbs.CMP1LocalHome</local-home>
-            <local>ejbs.CMP1Local</local>
-            <ejb-class>ejbs.CMP1Bean</ejb-class>
-            <persistence-type>Container</persistence-type>
-            <prim-key-class>ejbs.CMP1Key</prim-key-class>
-            <reentrant>False</reentrant>
-            <cmp-version>2.x</cmp-version>
-            <abstract-schema-name>CMP1</abstract-schema-name>
-            <cmp-field>
-                <field-name>id</field-name>
-            </cmp-field>
-        </entity>
-        <entity id="CMP2">
-            <ejb-name>CMP2</ejb-name>
-            <local-home>ejbs.CMP2LocalHome</local-home>
-            <local>ejbs.CMP2Local</local>
-            <ejb-class>ejbs.CMP2Bean</ejb-class>
-            <persistence-type>Container</persistence-type>
-            <prim-key-class>ejbs.CMP2Key</prim-key-class>
-            <reentrant>False</reentrant>
-            <cmp-version>2.x</cmp-version>
-            <abstract-schema-name>CMP2</abstract-schema-name>
-            <cmp-field>
-                <field-name>id</field-name>
-            </cmp-field>
-        </entity>
-        <entity>
-            <description>description_0</description>
-            <display-name>displayName_0</display-name>
-            <small-icon>smallIcon_0</small-icon>
-            <large-icon>largeIcon_0</large-icon>
-            <ejb-name>name_0</ejb-name>
-            <home>java.util.List</home>
-            <remote>java.sql.Data</remote>
-            <local-home>java.lang.Integer</local-home>
-            <local>java.lang.String</local>
-            <ejb-class>java.util.HashTable</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.util.HashTable</prim-key-class>
-            <reentrant>True</reentrant>
-            <env-entry>
-                <description>description_0</description>
-                <env-entry-name>name_0</env-entry-name>
-                <env-entry-type>java.lang.String</env-entry-type>
-                <env-entry-value>value_0</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_1</description>
-                <env-entry-name>name_1</env-entry-name>
-                <env-entry-type>java.lang.Integer</env-entry-type>
-                <env-entry-value>value_1</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_2</description>
-                <env-entry-name>name_2</env-entry-name>
-                <env-entry-type>java.lang.Boolean</env-entry-type>
-                <env-entry-value>value_2</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_3</description>
-                <env-entry-name>name_3</env-entry-name>
-                <env-entry-type>java.lang.Double</env-entry-type>
-                <env-entry-value>value_3</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_4</description>
-                <env-entry-name>name_4</env-entry-name>
-                <env-entry-type>java.lang.Byte</env-entry-type>
-                <env-entry-value>value_4</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_0</description>
-                <ejb-ref-name>name_0</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_0</home>
-                <remote>remote_0</remote>
-                <ejb-link>link_0</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_1</description>
-                <ejb-ref-name>name_1</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_1</home>
-                <remote>remote_1</remote>
-                <ejb-link>link_1</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_2</description>
-                <ejb-ref-name>name_2</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_2</home>
-                <remote>remote_2</remote>
-                <ejb-link>link_2</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_3</description>
-                <ejb-ref-name>name_3</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_3</home>
-                <remote>remote_3</remote>
-                <ejb-link>link_3</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_4</description>
-                <ejb-ref-name>name_4</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_4</home>
-                <remote>remote_4</remote>
-                <ejb-link>link_4</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_0</description>
-                <ejb-ref-name>name_0</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_1</local-home>
-                <local>remote_1</local>
-                <ejb-link>link_0</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_1</description>
-                <ejb-ref-name>name_1</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_3</local-home>
-                <local>remote_3</local>
-                <ejb-link>link_1</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_2</description>
-                <ejb-ref-name>name_2</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_5</local-home>
-                <local>remote_5</local>
-                <ejb-link>link_2</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_3</description>
-                <ejb-ref-name>name_3</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_7</local-home>
-                <local>remote_7</local>
-                <ejb-link>link_3</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_4</description>
-                <ejb-ref-name>name_4</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_9</local-home>
-                <local>remote_9</local>
-                <ejb-link>link_4</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <description>description_0</description>
-                <role-name>name_0</role-name>
-                <role-link>link_0</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_1</description>
-                <role-name>name_1</role-name>
-                <role-link>link_1</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_2</description>
-                <role-name>name_2</role-name>
-                <role-link>link_2</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_3</description>
-                <role-name>name_3</role-name>
-                <role-link>link_3</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_4</description>
-                <role-name>name_4</role-name>
-                <role-link>link_4</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_0</description>
-                <run-as>
-                    <description>description_0</description>
-                    <role-name>roleName_0</role-name>
-                </run-as>
-            </security-identity>
-            <resource-ref>
-                <description>description_0</description>
-                <res-ref-name>name_0</res-ref-name>
-                <res-type>type_0</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_1</description>
-                <res-ref-name>name_1</res-ref-name>
-                <res-type>type_1</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_2</description>
-                <res-ref-name>name_2</res-ref-name>
-                <res-type>type_2</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_3</description>
-                <res-ref-name>name_3</res-ref-name>
-                <res-type>type_3</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_4</description>
-                <res-ref-name>name_4</res-ref-name>
-                <res-type>type_4</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_0</description>
-                <resource-env-ref-name>name_0</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_1</description>
-                <resource-env-ref-name>name_1</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_2</description>
-                <resource-env-ref-name>name_2</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_3</description>
-                <resource-env-ref-name>name_3</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_4</description>
-                <resource-env-ref-name>name_4</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-        <entity>
-            <description>description_1</description>
-            <display-name>displayName_1</display-name>
-            <small-icon>smallIcon_1</small-icon>
-            <large-icon>largeIcon_1</large-icon>
-            <ejb-name>name_1</ejb-name>
-            <home>java.sql.Data</home>
-            <remote>java.lang.Integer</remote>
-            <local-home>java.lang.String</local-home>
-            <local>java.util.HashTable</local>
-            <ejb-class>java.util.List</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.util.List</prim-key-class>
-            <reentrant>False</reentrant>
-            <env-entry>
-                <description>description_5</description>
-                <env-entry-name>name_5</env-entry-name>
-                <env-entry-type>java.lang.Short</env-entry-type>
-                <env-entry-value>value_5</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_6</description>
-                <env-entry-name>name_6</env-entry-name>
-                <env-entry-type>java.lang.Long</env-entry-type>
-                <env-entry-value>value_6</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_7</description>
-                <env-entry-name>name_7</env-entry-name>
-                <env-entry-type>java.lang.Float</env-entry-type>
-                <env-entry-value>value_7</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_8</description>
-                <env-entry-name>name_8</env-entry-name>
-                <env-entry-type>java.lang.Character</env-entry-type>
-                <env-entry-value>value_8</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_9</description>
-                <env-entry-name>name_9</env-entry-name>
-                <env-entry-type>java.lang.String</env-entry-type>
-                <env-entry-value>value_9</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_5</description>
-                <ejb-ref-name>name_5</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_5</home>
-                <remote>remote_5</remote>
-                <ejb-link>link_5</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_6</description>
-                <ejb-ref-name>name_6</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_6</home>
-                <remote>remote_6</remote>
-                <ejb-link>link_6</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_7</description>
-                <ejb-ref-name>name_7</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_7</home>
-                <remote>remote_7</remote>
-                <ejb-link>link_7</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_8</description>
-                <ejb-ref-name>name_8</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_8</home>
-                <remote>remote_8</remote>
-                <ejb-link>link_8</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_9</description>
-                <ejb-ref-name>name_9</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_9</home>
-                <remote>remote_9</remote>
-                <ejb-link>link_9</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_5</description>
-                <ejb-ref-name>name_5</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_11</local-home>
-                <local>remote_11</local>
-                <ejb-link>link_5</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_6</description>
-                <ejb-ref-name>name_6</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_13</local-home>
-                <local>remote_13</local>
-                <ejb-link>link_6</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_7</description>
-                <ejb-ref-name>name_7</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_15</local-home>
-                <local>remote_15</local>
-                <ejb-link>link_7</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_8</description>
-                <ejb-ref-name>name_8</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_17</local-home>
-                <local>remote_17</local>
-                <ejb-link>link_8</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_9</description>
-                <ejb-ref-name>name_9</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_19</local-home>
-                <local>remote_19</local>
-                <ejb-link>link_9</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <description>description_5</description>
-                <role-name>name_5</role-name>
-                <role-link>link_5</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_6</description>
-                <role-name>name_6</role-name>
-                <role-link>link_6</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_7</description>
-                <role-name>name_7</role-name>
-                <role-link>link_7</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_8</description>
-                <role-name>name_8</role-name>
-                <role-link>link_8</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_9</description>
-                <role-name>name_9</role-name>
-                <role-link>link_9</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_0</description>
-                <use-caller-identity/>
-            </security-identity>
-            <resource-ref>
-                <description>description_5</description>
-                <res-ref-name>name_5</res-ref-name>
-                <res-type>type_5</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_6</description>
-                <res-ref-name>name_6</res-ref-name>
-                <res-type>type_6</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_7</description>
-                <res-ref-name>name_7</res-ref-name>
-                <res-type>type_7</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_8</description>
-                <res-ref-name>name_8</res-ref-name>
-                <res-type>type_8</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_9</description>
-                <res-ref-name>name_9</res-ref-name>
-                <res-type>type_9</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_5</description>
-                <resource-env-ref-name>name_5</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_6</description>
-                <resource-env-ref-name>name_6</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_7</description>
-                <resource-env-ref-name>name_7</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_8</description>
-                <resource-env-ref-name>name_8</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_9</description>
-                <resource-env-ref-name>name_9</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-        <entity>
-            <description>description_0</description>
-            <display-name>displayName_0</display-name>
-            <small-icon>smallIcon_0</small-icon>
-            <large-icon>largeIcon_0</large-icon>
-            <ejb-name>name_0</ejb-name>
-            <home>java.lang.Integer</home>
-            <remote>java.lang.String</remote>
-            <local-home>java.util.HashTable</local-home>
-            <local>java.util.List</local>
-            <ejb-class>java.sql.Data</ejb-class>
-            <persistence-type>Container</persistence-type>
-            <prim-key-class>java.sql.Data</prim-key-class>
-            <reentrant>True</reentrant>
-            <cmp-version>2.x</cmp-version>
-            <abstract-schema-name>abstractSchemaName_0</abstract-schema-name>
-            <cmp-field>
-                <description>description_1</description>
-                <field-name>name_1</field-name>
-            </cmp-field>
-            <cmp-field>
-                <description>description_3</description>
-                <field-name>name_3</field-name>
-            </cmp-field>
-            <env-entry>
-                <description>description_10</description>
-                <env-entry-name>name_10</env-entry-name>
-                <env-entry-type>java.lang.Integer</env-entry-type>
-                <env-entry-value>value_10</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_11</description>
-                <env-entry-name>name_11</env-entry-name>
-                <env-entry-type>java.lang.Boolean</env-entry-type>
-                <env-entry-value>value_11</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_12</description>
-                <env-entry-name>name_12</env-entry-name>
-                <env-entry-type>java.lang.Double</env-entry-type>
-                <env-entry-value>value_12</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_13</description>
-                <env-entry-name>name_13</env-entry-name>
-                <env-entry-type>java.lang.Byte</env-entry-type>
-                <env-entry-value>value_13</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_14</description>
-                <env-entry-name>name_14</env-entry-name>
-                <env-entry-type>java.lang.Short</env-entry-type>
-                <env-entry-value>value_14</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_10</description>
-                <ejb-ref-name>name_10</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_10</home>
-                <remote>remote_10</remote>
-                <ejb-link>link_10</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_11</description>
-                <ejb-ref-name>name_11</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_11</home>
-                <remote>remote_11</remote>
-                <ejb-link>link_11</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_12</description>
-                <ejb-ref-name>name_12</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_12</home>
-                <remote>remote_12</remote>
-                <ejb-link>link_12</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_13</description>
-                <ejb-ref-name>name_13</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_13</home>
-                <remote>remote_13</remote>
-                <ejb-link>link_13</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_14</description>
-                <ejb-ref-name>name_14</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_14</home>
-                <remote>remote_14</remote>
-                <ejb-link>link_14</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_10</description>
-                <ejb-ref-name>name_10</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_21</local-home>
-                <local>remote_21</local>
-                <ejb-link>link_10</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_11</description>
-                <ejb-ref-name>name_11</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_23</local-home>
-                <local>remote_23</local>
-                <ejb-link>link_11</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_12</description>
-                <ejb-ref-name>name_12</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_25</local-home>
-                <local>remote_25</local>
-                <ejb-link>link_12</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_13</description>
-                <ejb-ref-name>name_13</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_27</local-home>
-                <local>remote_27</local>
-                <ejb-link>link_13</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_14</description>
-                <ejb-ref-name>name_14</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_29</local-home>
-                <local>remote_29</local>
-                <ejb-link>link_14</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <description>description_10</description>
-                <role-name>name_10</role-name>
-                <role-link>link_10</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_11</description>
-                <role-name>name_11</role-name>
-                <role-link>link_11</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_12</description>
-                <role-name>name_12</role-name>
-                <role-link>link_12</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_13</description>
-                <role-name>name_13</role-name>
-                <role-link>link_13</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_14</description>
-                <role-name>name_14</role-name>
-                <role-link>link_14</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_1</description>
-                <run-as>
-                    <description>description_1</description>
-                    <role-name>roleName_1</role-name>
-                </run-as>
-            </security-identity>
-            <resource-ref>
-                <description>description_10</description>
-                <res-ref-name>name_10</res-ref-name>
-                <res-type>type_10</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_11</description>
-                <res-ref-name>name_11</res-ref-name>
-                <res-type>type_11</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_12</description>
-                <res-ref-name>name_12</res-ref-name>
-                <res-type>type_12</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_13</description>
-                <res-ref-name>name_13</res-ref-name>
-                <res-type>type_13</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_14</description>
-                <res-ref-name>name_14</res-ref-name>
-                <res-type>type_14</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_10</description>
-                <resource-env-ref-name>name_10</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_11</description>
-                <resource-env-ref-name>name_11</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_12</description>
-                <resource-env-ref-name>name_12</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_13</description>
-                <resource-env-ref-name>name_13</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_14</description>
-                <resource-env-ref-name>name_14</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <query>
-                <description>description_0</description>
-                <query-method>
-                    <method-name>name_0</method-name>
-                </query-method>
-                <result-type-mapping>Local</result-type-mapping>
-                <ejb-ql>ejbQL_0</ejb-ql>
-            </query>
-            <query>
-                <description>description_1</description>
-                <query-method>
-                    <method-name>name_1</method-name>
-                    <method-params/>
-                </query-method>
-                <result-type-mapping>Remote</result-type-mapping>
-                <ejb-ql>ejbQL_1</ejb-ql>
-            </query>
-            <query>
-                <description>description_2</description>
-                <query-method>
-                    <method-name>name_2</method-name>
-                    <method-params>
-                        <method-param>parms_0</method-param>
-                    </method-params>
-                </query-method>
-                <result-type-mapping>Local</result-type-mapping>
-                <ejb-ql>ejbQL_2</ejb-ql>
-            </query>
-            <query>
-                <description>description_3</description>
-                <query-method>
-                    <method-name>name_3</method-name>
-                    <method-params>
-                        <method-param>parms_1</method-param>
-                        <method-param>parms_2</method-param>
-                    </method-params>
-                </query-method>
-                <result-type-mapping>Remote</result-type-mapping>
-                <ejb-ql>ejbQL_3</ejb-ql>
-            </query>
-            <query>
-                <description>description_4</description>
-                <query-method>
-                    <method-name>name_4</method-name>
-                    <method-params>
-                        <method-param>parms_3</method-param>
-                        <method-param>parms_4</method-param>
-                        <method-param>parms_5</method-param>
-                    </method-params>
-                </query-method>
-                <result-type-mapping>Local</result-type-mapping>
-                <ejb-ql>ejbQL_4</ejb-ql>
-            </query>
-        </entity>
-        <session>
-            <description>description_0</description>
-            <display-name>displayName_0</display-name>
-            <small-icon>smallIcon_0</small-icon>
-            <large-icon>largeIcon_0</large-icon>
-            <ejb-name>name_0</ejb-name>
-            <home>java.lang.String</home>
-            <remote>java.util.HashTable</remote>
-            <local-home>java.util.List</local-home>
-            <local>java.sql.Data</local>
-            <ejb-class>java.lang.Integer</ejb-class>
-            <session-type>Stateful</session-type>
-            <transaction-type>Bean</transaction-type>
-            <env-entry>
-                <description>description_15</description>
-                <env-entry-name>name_15</env-entry-name>
-                <env-entry-type>java.lang.Long</env-entry-type>
-                <env-entry-value>value_15</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_16</description>
-                <env-entry-name>name_16</env-entry-name>
-                <env-entry-type>java.lang.Float</env-entry-type>
-                <env-entry-value>value_16</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_17</description>
-                <env-entry-name>name_17</env-entry-name>
-                <env-entry-type>java.lang.Character</env-entry-type>
-                <env-entry-value>value_17</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_18</description>
-                <env-entry-name>name_18</env-entry-name>
-                <env-entry-type>java.lang.String</env-entry-type>
-                <env-entry-value>value_18</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_19</description>
-                <env-entry-name>name_19</env-entry-name>
-                <env-entry-type>java.lang.Integer</env-entry-type>
-                <env-entry-value>value_19</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_15</description>
-                <ejb-ref-name>name_15</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_15</home>
-                <remote>remote_15</remote>
-                <ejb-link>link_15</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_16</description>
-                <ejb-ref-name>name_16</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_16</home>
-                <remote>remote_16</remote>
-                <ejb-link>link_16</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_17</description>
-                <ejb-ref-name>name_17</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_17</home>
-                <remote>remote_17</remote>
-                <ejb-link>link_17</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_18</description>
-                <ejb-ref-name>name_18</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_18</home>
-                <remote>remote_18</remote>
-                <ejb-link>link_18</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_19</description>
-                <ejb-ref-name>name_19</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_19</home>
-                <remote>remote_19</remote>
-                <ejb-link>link_19</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_15</description>
-                <ejb-ref-name>name_15</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_31</local-home>
-                <local>remote_31</local>
-                <ejb-link>link_15</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_16</description>
-                <ejb-ref-name>name_16</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_33</local-home>
-                <local>remote_33</local>
-                <ejb-link>link_16</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_17</description>
-                <ejb-ref-name>name_17</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_35</local-home>
-                <local>remote_35</local>
-                <ejb-link>link_17</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_18</description>
-                <ejb-ref-name>name_18</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_37</local-home>
-                <local>remote_37</local>
-                <ejb-link>link_18</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_19</description>
-                <ejb-ref-name>name_19</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_39</local-home>
-                <local>remote_39</local>
-                <ejb-link>link_19</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <description>description_15</description>
-                <role-name>name_15</role-name>
-                <role-link>link_15</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_16</description>
-                <role-name>name_16</role-name>
-                <role-link>link_16</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_17</description>
-                <role-name>name_17</role-name>
-                <role-link>link_17</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_18</description>
-                <role-name>name_18</role-name>
-                <role-link>link_18</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_19</description>
-                <role-name>name_19</role-name>
-                <role-link>link_19</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_1</description>
-                <use-caller-identity/>
-            </security-identity>
-            <resource-ref>
-                <description>description_15</description>
-                <res-ref-name>name_15</res-ref-name>
-                <res-type>type_15</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_16</description>
-                <res-ref-name>name_16</res-ref-name>
-                <res-type>type_16</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_17</description>
-                <res-ref-name>name_17</res-ref-name>
-                <res-type>type_17</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_18</description>
-                <res-ref-name>name_18</res-ref-name>
-                <res-type>type_18</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_19</description>
-                <res-ref-name>name_19</res-ref-name>
-                <res-type>type_19</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_15</description>
-                <resource-env-ref-name>name_15</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_16</description>
-                <resource-env-ref-name>name_16</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_17</description>
-                <resource-env-ref-name>name_17</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_18</description>
-                <resource-env-ref-name>name_18</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_19</description>
-                <resource-env-ref-name>name_19</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-        </session>
-        <entity>
-            <description>description_2</description>
-            <display-name>displayName_2</display-name>
-            <small-icon>smallIcon_2</small-icon>
-            <large-icon>largeIcon_2</large-icon>
-            <ejb-name>name_2</ejb-name>
-            <home>java.util.HashTable</home>
-            <remote>java.util.List</remote>
-            <local-home>java.sql.Data</local-home>
-            <local>java.lang.Integer</local>
-            <ejb-class>java.lang.String</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.lang.String</prim-key-class>
-            <reentrant>True</reentrant>
-            <env-entry>
-                <description>description_20</description>
-                <env-entry-name>name_20</env-entry-name>
-                <env-entry-type>java.lang.Boolean</env-entry-type>
-                <env-entry-value>value_20</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_21</description>
-                <env-entry-name>name_21</env-entry-name>
-                <env-entry-type>java.lang.Double</env-entry-type>
-                <env-entry-value>value_21</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_22</description>
-                <env-entry-name>name_22</env-entry-name>
-                <env-entry-type>java.lang.Byte</env-entry-type>
-                <env-entry-value>value_22</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_23</description>
-                <env-entry-name>name_23</env-entry-name>
-                <env-entry-type>java.lang.Short</env-entry-type>
-                <env-entry-value>value_23</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_24</description>
-                <env-entry-name>name_24</env-entry-name>
-                <env-entry-type>java.lang.Long</env-entry-type>
-                <env-entry-value>value_24</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_20</description>
-                <ejb-ref-name>name_20</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_20</home>
-                <remote>remote_20</remote>
-                <ejb-link>link_20</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_21</description>
-                <ejb-ref-name>name_21</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_21</home>
-                <remote>remote_21</remote>
-                <ejb-link>link_21</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_22</description>
-                <ejb-ref-name>name_22</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_22</home>
-                <remote>remote_22</remote>
-                <ejb-link>link_22</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_23</description>
-                <ejb-ref-name>name_23</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_23</home>
-                <remote>remote_23</remote>
-                <ejb-link>link_23</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_24</description>
-                <ejb-ref-name>name_24</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_24</home>
-                <remote>remote_24</remote>
-                <ejb-link>link_24</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_20</description>
-                <ejb-ref-name>name_20</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_41</local-home>
-                <local>remote_41</local>
-                <ejb-link>link_20</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_21</description>
-                <ejb-ref-name>name_21</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_43</local-home>
-                <local>remote_43</local>
-                <ejb-link>link_21</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_22</description>
-                <ejb-ref-name>name_22</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_45</local-home>
-                <local>remote_45</local>
-                <ejb-link>link_22</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_23</description>
-                <ejb-ref-name>name_23</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_47</local-home>
-                <local>remote_47</local>
-                <ejb-link>link_23</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_24</description>
-                <ejb-ref-name>name_24</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_49</local-home>
-                <local>remote_49</local>
-                <ejb-link>link_24</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <description>description_20</description>
-                <role-name>name_20</role-name>
-                <role-link>link_20</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_21</description>
-                <role-name>name_21</role-name>
-                <role-link>link_21</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_22</description>
-                <role-name>name_22</role-name>
-                <role-link>link_22</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_23</description>
-                <role-name>name_23</role-name>
-                <role-link>link_23</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_24</description>
-                <role-name>name_24</role-name>
-                <role-link>link_24</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_2</description>
-                <run-as>
-                    <description>description_2</description>
-                    <role-name>roleName_2</role-name>
-                </run-as>
-            </security-identity>
-            <resource-ref>
-                <description>description_20</description>
-                <res-ref-name>name_20</res-ref-name>
-                <res-type>type_20</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_21</description>
-                <res-ref-name>name_21</res-ref-name>
-                <res-type>type_21</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_22</description>
-                <res-ref-name>name_22</res-ref-name>
-                <res-type>type_22</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_23</description>
-                <res-ref-name>name_23</res-ref-name>
-                <res-type>type_23</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_24</description>
-                <res-ref-name>name_24</res-ref-name>
-                <res-type>type_24</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_20</description>
-                <resource-env-ref-name>name_20</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_21</description>
-                <resource-env-ref-name>name_21</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_22</description>
-                <resource-env-ref-name>name_22</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_23</description>
-                <resource-env-ref-name>name_23</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_24</description>
-                <resource-env-ref-name>name_24</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-        <entity>
-            <description>description_3</description>
-            <display-name>displayName_3</display-name>
-            <small-icon>smallIcon_3</small-icon>
-            <large-icon>largeIcon_3</large-icon>
-            <ejb-name>name_3</ejb-name>
-            <home>java.util.List</home>
-            <remote>java.sql.Data</remote>
-            <local-home>java.lang.Integer</local-home>
-            <local>java.lang.String</local>
-            <ejb-class>java.util.HashTable</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.util.HashTable</prim-key-class>
-            <reentrant>False</reentrant>
-            <env-entry>
-                <description>description_25</description>
-                <env-entry-name>name_25</env-entry-name>
-                <env-entry-type>java.lang.Float</env-entry-type>
-                <env-entry-value>value_25</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_26</description>
-                <env-entry-name>name_26</env-entry-name>
-                <env-entry-type>java.lang.Character</env-entry-type>
-                <env-entry-value>value_26</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_27</description>
-                <env-entry-name>name_27</env-entry-name>
-                <env-entry-type>java.lang.String</env-entry-type>
-                <env-entry-value>value_27</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_28</description>
-                <env-entry-name>name_28</env-entry-name>
-                <env-entry-type>java.lang.Integer</env-entry-type>
-                <env-entry-value>value_28</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_29</description>
-                <env-entry-name>name_29</env-entry-name>
-                <env-entry-type>java.lang.Boolean</env-entry-type>
-                <env-entry-value>value_29</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_25</description>
-                <ejb-ref-name>name_25</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_25</home>
-                <remote>remote_25</remote>
-                <ejb-link>link_25</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_26</description>
-                <ejb-ref-name>name_26</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_26</home>
-                <remote>remote_26</remote>
-                <ejb-link>link_26</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_27</description>
-                <ejb-ref-name>name_27</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_27</home>
-                <remote>remote_27</remote>
-                <ejb-link>link_27</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_28</description>
-                <ejb-ref-name>name_28</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_28</home>
-                <remote>remote_28</remote>
-                <ejb-link>link_28</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_29</description>
-                <ejb-ref-name>name_29</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_29</home>
-                <remote>remote_29</remote>
-                <ejb-link>link_29</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_25</description>
-                <ejb-ref-name>name_25</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_51</local-home>
-                <local>remote_51</local>
-                <ejb-link>link_25</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_26</description>
-                <ejb-ref-name>name_26</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_53</local-home>
-                <local>remote_53</local>
-                <ejb-link>link_26</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_27</description>
-                <ejb-ref-name>name_27</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_55</local-home>
-                <local>remote_55</local>
-                <ejb-link>link_27</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_28</description>
-                <ejb-ref-name>name_28</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_57</local-home>
-                <local>remote_57</local>
-                <ejb-link>link_28</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_29</description>
-                <ejb-ref-name>name_29</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_59</local-home>
-                <local>remote_59</local>
-                <ejb-link>link_29</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <description>description_25</description>
-                <role-name>name_25</role-name>
-                <role-link>link_25</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_26</description>
-                <role-name>name_26</role-name>
-                <role-link>link_26</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_27</description>
-                <role-name>name_27</role-name>
-                <role-link>link_27</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_28</description>
-                <role-name>name_28</role-name>
-                <role-link>link_28</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_29</description>
-                <role-name>name_29</role-name>
-                <role-link>link_29</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_2</description>
-                <use-caller-identity/>
-            </security-identity>
-            <resource-ref>
-                <description>description_25</description>
-                <res-ref-name>name_25</res-ref-name>
-                <res-type>type_25</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_26</description>
-                <res-ref-name>name_26</res-ref-name>
-                <res-type>type_26</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_27</description>
-                <res-ref-name>name_27</res-ref-name>
-                <res-type>type_27</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_28</description>
-                <res-ref-name>name_28</res-ref-name>
-                <res-type>type_28</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_29</description>
-                <res-ref-name>name_29</res-ref-name>
-                <res-type>type_29</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_25</description>
-                <resource-env-ref-name>name_25</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_26</description>
-                <resource-env-ref-name>name_26</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_27</description>
-                <resource-env-ref-name>name_27</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_28</description>
-                <resource-env-ref-name>name_28</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_29</description>
-                <resource-env-ref-name>name_29</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-        <message-driven>
-            <description>description_0</description>
-            <display-name>displayName_0</display-name>
-            <small-icon>smallIcon_0</small-icon>
-            <large-icon>largeIcon_0</large-icon>
-            <ejb-name>name_0</ejb-name>
-            <ejb-class>java.util.List</ejb-class>
-            <transaction-type>Bean</transaction-type>
-            <message-selector>messageSelector_0</message-selector>
-            <acknowledge-mode>Auto-acknowledge</acknowledge-mode>
-            <message-driven-destination>
-                <destination-type>javax.jms.Queue</destination-type>
-                <subscription-durability>Durable</subscription-durability>
-            </message-driven-destination>
-            <env-entry>
-                <description>description_30</description>
-                <env-entry-name>name_30</env-entry-name>
-                <env-entry-type>java.lang.Double</env-entry-type>
-                <env-entry-value>value_30</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_31</description>
-                <env-entry-name>name_31</env-entry-name>
-                <env-entry-type>java.lang.Byte</env-entry-type>
-                <env-entry-value>value_31</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_32</description>
-                <env-entry-name>name_32</env-entry-name>
-                <env-entry-type>java.lang.Short</env-entry-type>
-                <env-entry-value>value_32</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_33</description>
-                <env-entry-name>name_33</env-entry-name>
-                <env-entry-type>java.lang.Long</env-entry-type>
-                <env-entry-value>value_33</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_34</description>
-                <env-entry-name>name_34</env-entry-name>
-                <env-entry-type>java.lang.Float</env-entry-type>
-                <env-entry-value>value_34</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_30</description>
-                <ejb-ref-name>name_30</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_30</home>
-                <remote>remote_30</remote>
-                <ejb-link>link_30</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_31</description>
-                <ejb-ref-name>name_31</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_31</home>
-                <remote>remote_31</remote>
-                <ejb-link>link_31</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_32</description>
-                <ejb-ref-name>name_32</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_32</home>
-                <remote>remote_32</remote>
-                <ejb-link>link_32</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_33</description>
-                <ejb-ref-name>name_33</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_33</home>
-                <remote>remote_33</remote>
-                <ejb-link>link_33</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_34</description>
-                <ejb-ref-name>name_34</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_34</home>
-                <remote>remote_34</remote>
-                <ejb-link>link_34</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_30</description>
-                <ejb-ref-name>name_30</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_61</local-home>
-                <local>remote_61</local>
-                <ejb-link>link_30</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_31</description>
-                <ejb-ref-name>name_31</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_63</local-home>
-                <local>remote_63</local>
-                <ejb-link>link_31</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_32</description>
-                <ejb-ref-name>name_32</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_65</local-home>
-                <local>remote_65</local>
-                <ejb-link>link_32</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_33</description>
-                <ejb-ref-name>name_33</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_67</local-home>
-                <local>remote_67</local>
-                <ejb-link>link_33</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_34</description>
-                <ejb-ref-name>name_34</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_69</local-home>
-                <local>remote_69</local>
-                <ejb-link>link_34</ejb-link>
-            </ejb-local-ref>
-            <security-identity>
-                <description>description_3</description>
-                <run-as>
-                    <description>description_3</description>
-                    <role-name>roleName_3</role-name>
-                </run-as>
-            </security-identity>
-            <resource-ref>
-                <description>description_30</description>
-                <res-ref-name>name_30</res-ref-name>
-                <res-type>type_30</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_31</description>
-                <res-ref-name>name_31</res-ref-name>
-                <res-type>type_31</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_32</description>
-                <res-ref-name>name_32</res-ref-name>
-                <res-type>type_32</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_33</description>
-                <res-ref-name>name_33</res-ref-name>
-                <res-type>type_33</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_34</description>
-                <res-ref-name>name_34</res-ref-name>
-                <res-type>type_34</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_30</description>
-                <resource-env-ref-name>name_30</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_31</description>
-                <resource-env-ref-name>name_31</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_32</description>
-                <resource-env-ref-name>name_32</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_33</description>
-                <resource-env-ref-name>name_33</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_34</description>
-                <resource-env-ref-name>name_34</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-        </message-driven>
-        <session>
-            <description>description_1</description>
-            <display-name>displayName_1</display-name>
-            <small-icon>smallIcon_1</small-icon>
-            <large-icon>largeIcon_1</large-icon>
-            <ejb-name>name_1</ejb-name>
-            <home>java.lang.String</home>
-            <remote>java.util.HashTable</remote>
-            <local-home>java.util.List</local-home>
-            <local>java.sql.Data</local>
-            <ejb-class>java.lang.Integer</ejb-class>
-            <session-type>Stateless</session-type>
-            <transaction-type>Container</transaction-type>
-            <env-entry>
-                <description>description_35</description>
-                <env-entry-name>name_35</env-entry-name>
-                <env-entry-type>java.lang.Character</env-entry-type>
-                <env-entry-value>value_35</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_36</description>
-                <env-entry-name>name_36</env-entry-name>
-                <env-entry-type>java.lang.String</env-entry-type>
-                <env-entry-value>value_36</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_37</description>
-                <env-entry-name>name_37</env-entry-name>
-                <env-entry-type>java.lang.Integer</env-entry-type>
-                <env-entry-value>value_37</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_38</description>
-                <env-entry-name>name_38</env-entry-name>
-                <env-entry-type>java.lang.Boolean</env-entry-type>
-                <env-entry-value>value_38</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_39</description>
-                <env-entry-name>name_39</env-entry-name>
-                <env-entry-type>java.lang.Double</env-entry-type>
-                <env-entry-value>value_39</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_35</description>
-                <ejb-ref-name>name_35</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_35</home>
-                <remote>remote_35</remote>
-                <ejb-link>link_35</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_36</description>
-                <ejb-ref-name>name_36</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_36</home>
-                <remote>remote_36</remote>
-                <ejb-link>link_36</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_37</description>
-                <ejb-ref-name>name_37</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_37</home>
-                <remote>remote_37</remote>
-                <ejb-link>link_37</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_38</description>
-                <ejb-ref-name>name_38</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_38</home>
-                <remote>remote_38</remote>
-                <ejb-link>link_38</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_39</description>
-                <ejb-ref-name>name_39</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_39</home>
-                <remote>remote_39</remote>
-                <ejb-link>link_39</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_35</description>
-                <ejb-ref-name>name_35</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_71</local-home>
-                <local>remote_71</local>
-                <ejb-link>link_35</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_36</description>
-                <ejb-ref-name>name_36</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_73</local-home>
-                <local>remote_73</local>
-                <ejb-link>link_36</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_37</description>
-                <ejb-ref-name>name_37</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_75</local-home>
-                <local>remote_75</local>
-                <ejb-link>link_37</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_38</description>
-                <ejb-ref-name>name_38</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_77</local-home>
-                <local>remote_77</local>
-                <ejb-link>link_38</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_39</description>
-                <ejb-ref-name>name_39</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_79</local-home>
-                <local>remote_79</local>
-                <ejb-link>link_39</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <description>description_35</description>
-                <role-name>name_35</role-name>
-                <role-link>link_35</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_36</description>
-                <role-name>name_36</role-name>
-                <role-link>link_36</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_37</description>
-                <role-name>name_37</role-name>
-                <role-link>link_37</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_38</description>
-                <role-name>name_38</role-name>
-                <role-link>link_38</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_39</description>
-                <role-name>name_39</role-name>
-                <role-link>link_39</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_3</description>
-                <use-caller-identity/>
-            </security-identity>
-            <resource-ref>
-                <description>description_35</description>
-                <res-ref-name>name_35</res-ref-name>
-                <res-type>type_35</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_36</description>
-                <res-ref-name>name_36</res-ref-name>
-                <res-type>type_36</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_37</description>
-                <res-ref-name>name_37</res-ref-name>
-                <res-type>type_37</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_38</description>
-                <res-ref-name>name_38</res-ref-name>
-                <res-type>type_38</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_39</description>
-                <res-ref-name>name_39</res-ref-name>
-                <res-type>type_39</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_35</description>
-                <resource-env-ref-name>name_35</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_36</description>
-                <resource-env-ref-name>name_36</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_37</description>
-                <resource-env-ref-name>name_37</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_38</description>
-                <resource-env-ref-name>name_38</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_39</description>
-                <resource-env-ref-name>name_39</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-        </session>
-        <entity>
-            <description>description_4</description>
-            <display-name>displayName_4</display-name>
-            <small-icon>smallIcon_4</small-icon>
-            <large-icon>largeIcon_4</large-icon>
-            <ejb-name>name_4</ejb-name>
-            <home>java.util.HashTable</home>
-            <remote>java.util.List</remote>
-            <local-home>java.sql.Data</local-home>
-            <local>java.lang.Integer</local>
-            <ejb-class>java.lang.String</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.lang.String</prim-key-class>
-            <reentrant>True</reentrant>
-            <env-entry>
-                <description>description_40</description>
-                <env-entry-name>name_40</env-entry-name>
-                <env-entry-type>java.lang.Byte</env-entry-type>
-                <env-entry-value>value_40</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_41</description>
-                <env-entry-name>name_41</env-entry-name>
-                <env-entry-type>java.lang.Short</env-entry-type>
-                <env-entry-value>value_41</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_42</description>
-                <env-entry-name>name_42</env-entry-name>
-                <env-entry-type>java.lang.Long</env-entry-type>
-                <env-entry-value>value_42</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_43</description>
-                <env-entry-name>name_43</env-entry-name>
-                <env-entry-type>java.lang.Float</env-entry-type>
-                <env-entry-value>value_43</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_44</description>
-                <env-entry-name>name_44</env-entry-name>
-                <env-entry-type>java.lang.Character</env-entry-type>
-                <env-entry-value>value_44</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_40</description>
-                <ejb-ref-name>name_40</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_40</home>
-                <remote>remote_40</remote>
-                <ejb-link>link_40</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_41</description>
-                <ejb-ref-name>name_41</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_41</home>
-                <remote>remote_41</remote>
-                <ejb-link>link_41</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_42</description>
-                <ejb-ref-name>name_42</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_42</home>
-                <remote>remote_42</remote>
-                <ejb-link>link_42</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_43</description>
-                <ejb-ref-name>name_43</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_43</home>
-                <remote>remote_43</remote>
-                <ejb-link>link_43</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_44</description>
-                <ejb-ref-name>name_44</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_44</home>
-                <remote>remote_44</remote>
-                <ejb-link>link_44</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_40</description>
-                <ejb-ref-name>name_40</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_81</local-home>
-                <local>remote_81</local>
-                <ejb-link>link_40</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_41</description>
-                <ejb-ref-name>name_41</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_83</local-home>
-                <local>remote_83</local>
-                <ejb-link>link_41</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_42</description>
-                <ejb-ref-name>name_42</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_85</local-home>
-                <local>remote_85</local>
-                <ejb-link>link_42</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_43</description>
-                <ejb-ref-name>name_43</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_87</local-home>
-                <local>remote_87</local>
-                <ejb-link>link_43</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_44</description>
-                <ejb-ref-name>name_44</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_89</local-home>
-                <local>remote_89</local>
-                <ejb-link>link_44</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <description>description_40</description>
-                <role-name>name_40</role-name>
-                <role-link>link_40</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_41</description>
-                <role-name>name_41</role-name>
-                <role-link>link_41</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_42</description>
-                <role-name>name_42</role-name>
-                <role-link>link_42</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_43</description>
-                <role-name>name_43</role-name>
-                <role-link>link_43</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_44</description>
-                <role-name>name_44</role-name>
-                <role-link>link_44</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_4</description>
-                <run-as>
-                    <description>description_4</description>
-                    <role-name>roleName_4</role-name>
-                </run-as>
-            </security-identity>
-            <resource-ref>
-                <description>description_40</description>
-                <res-ref-name>name_40</res-ref-name>
-                <res-type>type_40</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_41</description>
-                <res-ref-name>name_41</res-ref-name>
-                <res-type>type_41</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_42</description>
-                <res-ref-name>name_42</res-ref-name>
-                <res-type>type_42</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_43</description>
-                <res-ref-name>name_43</res-ref-name>
-                <res-type>type_43</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_44</description>
-                <res-ref-name>name_44</res-ref-name>
-                <res-type>type_44</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_40</description>
-                <resource-env-ref-name>name_40</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_41</description>
-                <resource-env-ref-name>name_41</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_42</description>
-                <resource-env-ref-name>name_42</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_43</description>
-                <resource-env-ref-name>name_43</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_44</description>
-                <resource-env-ref-name>name_44</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-        <entity>
-            <description>description_5</description>
-            <display-name>displayName_5</display-name>
-            <small-icon>smallIcon_5</small-icon>
-            <large-icon>largeIcon_5</large-icon>
-            <ejb-name>name_5</ejb-name>
-            <home>java.util.List</home>
-            <remote>java.sql.Data</remote>
-            <local-home>java.lang.Integer</local-home>
-            <local>java.lang.String</local>
-            <ejb-class>java.util.HashTable</ejb-class>
-            <persistence-type>Bean</persistence-type>
-            <prim-key-class>java.util.HashTable</prim-key-class>
-            <reentrant>False</reentrant>
-            <env-entry>
-                <description>description_45</description>
-                <env-entry-name>name_45</env-entry-name>
-                <env-entry-type>java.lang.String</env-entry-type>
-                <env-entry-value>value_45</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_46</description>
-                <env-entry-name>name_46</env-entry-name>
-                <env-entry-type>java.lang.Integer</env-entry-type>
-                <env-entry-value>value_46</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_47</description>
-                <env-entry-name>name_47</env-entry-name>
-                <env-entry-type>java.lang.Boolean</env-entry-type>
-                <env-entry-value>value_47</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_48</description>
-                <env-entry-name>name_48</env-entry-name>
-                <env-entry-type>java.lang.Double</env-entry-type>
-                <env-entry-value>value_48</env-entry-value>
-            </env-entry>
-            <env-entry>
-                <description>description_49</description>
-                <env-entry-name>name_49</env-entry-name>
-                <env-entry-type>java.lang.Byte</env-entry-type>
-                <env-entry-value>value_49</env-entry-value>
-            </env-entry>
-            <ejb-ref>
-                <description>description_45</description>
-                <ejb-ref-name>name_45</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_45</home>
-                <remote>remote_45</remote>
-                <ejb-link>link_45</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_46</description>
-                <ejb-ref-name>name_46</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_46</home>
-                <remote>remote_46</remote>
-                <ejb-link>link_46</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_47</description>
-                <ejb-ref-name>name_47</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_47</home>
-                <remote>remote_47</remote>
-                <ejb-link>link_47</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_48</description>
-                <ejb-ref-name>name_48</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <home>home_48</home>
-                <remote>remote_48</remote>
-                <ejb-link>link_48</ejb-link>
-            </ejb-ref>
-            <ejb-ref>
-                <description>description_49</description>
-                <ejb-ref-name>name_49</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <home>home_49</home>
-                <remote>remote_49</remote>
-                <ejb-link>link_49</ejb-link>
-            </ejb-ref>
-            <ejb-local-ref>
-                <description>description_45</description>
-                <ejb-ref-name>name_45</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_91</local-home>
-                <local>remote_91</local>
-                <ejb-link>link_45</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_46</description>
-                <ejb-ref-name>name_46</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_93</local-home>
-                <local>remote_93</local>
-                <ejb-link>link_46</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_47</description>
-                <ejb-ref-name>name_47</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_95</local-home>
-                <local>remote_95</local>
-                <ejb-link>link_47</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_48</description>
-                <ejb-ref-name>name_48</ejb-ref-name>
-                <ejb-ref-type>Session</ejb-ref-type>
-                <local-home>home_97</local-home>
-                <local>remote_97</local>
-                <ejb-link>link_48</ejb-link>
-            </ejb-local-ref>
-            <ejb-local-ref>
-                <description>description_49</description>
-                <ejb-ref-name>name_49</ejb-ref-name>
-                <ejb-ref-type>Entity</ejb-ref-type>
-                <local-home>home_99</local-home>
-                <local>remote_99</local>
-                <ejb-link>link_49</ejb-link>
-            </ejb-local-ref>
-            <security-role-ref>
-                <description>description_45</description>
-                <role-name>name_45</role-name>
-                <role-link>link_45</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_46</description>
-                <role-name>name_46</role-name>
-                <role-link>link_46</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_47</description>
-                <role-name>name_47</role-name>
-                <role-link>link_47</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_48</description>
-                <role-name>name_48</role-name>
-                <role-link>link_48</role-link>
-            </security-role-ref>
-            <security-role-ref>
-                <description>description_49</description>
-                <role-name>name_49</role-name>
-                <role-link>link_49</role-link>
-            </security-role-ref>
-            <security-identity>
-                <description>description_4</description>
-                <use-caller-identity/>
-            </security-identity>
-            <resource-ref>
-                <description>description_45</description>
-                <res-ref-name>name_45</res-ref-name>
-                <res-type>type_45</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_46</description>
-                <res-ref-name>name_46</res-ref-name>
-                <res-type>type_46</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_47</description>
-                <res-ref-name>name_47</res-ref-name>
-                <res-type>type_47</res-type>
-                <res-auth>SERVLET</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_48</description>
-                <res-ref-name>name_48</res-ref-name>
-                <res-type>type_48</res-type>
-                <res-auth>Container</res-auth>
-                <res-sharing-scope>Shareable</res-sharing-scope>
-            </resource-ref>
-            <resource-ref>
-                <description>description_49</description>
-                <res-ref-name>name_49</res-ref-name>
-                <res-type>type_49</res-type>
-                <res-auth>Application</res-auth>
-                <res-sharing-scope>Unshareable</res-sharing-scope>
-            </resource-ref>
-            <resource-env-ref>
-                <description>description_45</description>
-                <resource-env-ref-name>name_45</resource-env-ref-name>
-                <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_46</description>
-                <resource-env-ref-name>name_46</resource-env-ref-name>
-                <resource-env-ref-type>java.util.List</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_47</description>
-                <resource-env-ref-name>name_47</resource-env-ref-name>
-                <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_48</description>
-                <resource-env-ref-name>name_48</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-            </resource-env-ref>
-            <resource-env-ref>
-                <description>description_49</description>
-                <resource-env-ref-name>name_49</resource-env-ref-name>
-                <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-            </resource-env-ref>
-        </entity>
-    </enterprise-beans>
-    <relationships>
-        <description>description_0</description>
-        <ejb-relation>
-            <description>description_0</description>
-            <ejb-relation-name>name_0</ejb-relation-name>
-            <ejb-relationship-role>
-                <description>description_0</description>
-                <ejb-relationship-role-name>roleName_0</ejb-relationship-role-name>
-                <multiplicity>One</multiplicity>
-                <cascade-delete/>
-                <relationship-role-source>
-                    <description>description_0</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_0</description>
-                    <cmr-field-name>name_0</cmr-field-name>
-                    <cmr-field-type>java.util.List</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-                <description>description_1</description>
-                <ejb-relationship-role-name>roleName_1</ejb-relationship-role-name>
-                <multiplicity>Many</multiplicity>
-                <relationship-role-source>
-                    <description>description_1</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_1</description>
-                    <cmr-field-name>name_1</cmr-field-name>
-                    <cmr-field-type>java.sql.Data</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-        </ejb-relation>
-        <ejb-relation>
-            <description>description_1</description>
-            <ejb-relation-name>name_1</ejb-relation-name>
-            <ejb-relationship-role>
-                <description>description_2</description>
-                <ejb-relationship-role-name>roleName_2</ejb-relationship-role-name>
-                <multiplicity>One</multiplicity>
-                <cascade-delete/>
-                <relationship-role-source>
-                    <description>description_2</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_2</description>
-                    <cmr-field-name>name_2</cmr-field-name>
-                    <cmr-field-type>java.lang.Integer</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-                <description>description_3</description>
-                <ejb-relationship-role-name>roleName_3</ejb-relationship-role-name>
-                <multiplicity>Many</multiplicity>
-                <relationship-role-source>
-                    <description>description_3</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_3</description>
-                    <cmr-field-name>name_3</cmr-field-name>
-                    <cmr-field-type>java.lang.String</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-        </ejb-relation>
-        <ejb-relation>
-            <description>description_2</description>
-            <ejb-relation-name>name_2</ejb-relation-name>
-            <ejb-relationship-role>
-                <description>description_4</description>
-                <ejb-relationship-role-name>roleName_4</ejb-relationship-role-name>
-                <multiplicity>One</multiplicity>
-                <cascade-delete/>
-                <relationship-role-source>
-                    <description>description_4</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_4</description>
-                    <cmr-field-name>name_4</cmr-field-name>
-                    <cmr-field-type>java.util.HashTable</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-                <description>description_5</description>
-                <ejb-relationship-role-name>roleName_5</ejb-relationship-role-name>
-                <multiplicity>Many</multiplicity>
-                <relationship-role-source>
-                    <description>description_5</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_5</description>
-                    <cmr-field-name>name_5</cmr-field-name>
-                    <cmr-field-type>java.util.List</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-        </ejb-relation>
-        <ejb-relation>
-            <description>description_3</description>
-            <ejb-relation-name>name_3</ejb-relation-name>
-            <ejb-relationship-role>
-                <description>description_6</description>
-                <ejb-relationship-role-name>roleName_6</ejb-relationship-role-name>
-                <multiplicity>One</multiplicity>
-                <cascade-delete/>
-                <relationship-role-source>
-                    <description>description_6</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_6</description>
-                    <cmr-field-name>name_6</cmr-field-name>
-                    <cmr-field-type>java.sql.Data</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-                <description>description_7</description>
-                <ejb-relationship-role-name>roleName_7</ejb-relationship-role-name>
-                <multiplicity>Many</multiplicity>
-                <relationship-role-source>
-                    <description>description_7</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_7</description>
-                    <cmr-field-name>name_7</cmr-field-name>
-                    <cmr-field-type>java.lang.Integer</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-        </ejb-relation>
-        <ejb-relation>
-            <description>description_4</description>
-            <ejb-relation-name>name_4</ejb-relation-name>
-            <ejb-relationship-role>
-                <description>description_8</description>
-                <ejb-relationship-role-name>roleName_8</ejb-relationship-role-name>
-                <multiplicity>One</multiplicity>
-                <cascade-delete/>
-                <relationship-role-source>
-                    <description>description_8</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_8</description>
-                    <cmr-field-name>name_8</cmr-field-name>
-                    <cmr-field-type>java.lang.String</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-            <ejb-relationship-role>
-                <description>description_9</description>
-                <ejb-relationship-role-name>roleName_9</ejb-relationship-role-name>
-                <multiplicity>Many</multiplicity>
-                <relationship-role-source>
-                    <description>description_9</description>
-                </relationship-role-source>
-                <cmr-field>
-                    <description>description_9</description>
-                    <cmr-field-name>name_9</cmr-field-name>
-                    <cmr-field-type>java.util.HashTable</cmr-field-type>
-                </cmr-field>
-            </ejb-relationship-role>
-        </ejb-relation>
-    </relationships>
-    <assembly-descriptor>
-        <security-role>
-            <description>description_5</description>
-            <role-name>roleName_5</role-name>
-        </security-role>
-        <security-role>
-            <description>description_6</description>
-            <role-name>roleName_6</role-name>
-        </security-role>
-        <security-role>
-            <description>description_7</description>
-            <role-name>roleName_7</role-name>
-        </security-role>
-        <security-role>
-            <description>description_8</description>
-            <role-name>roleName_8</role-name>
-        </security-role>
-        <security-role>
-            <description>description_9</description>
-            <role-name>roleName_9</role-name>
-        </security-role>
-        <method-permission>
-            <description>description_0</description>
-            <unchecked/>
-            <method>
-                <description>description_0</description>
-                <method-name>name_0</method-name>
-            </method>
-            <method>
-                <description>description_1</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_1</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_2</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_2</method-name>
-                <method-params>
-                    <method-param>parms_0</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_3</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_3</method-name>
-                <method-params>
-                    <method-param>parms_1</method-param>
-                    <method-param>parms_2</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_4</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_4</method-name>
-                <method-params>
-                    <method-param>parms_3</method-param>
-                    <method-param>parms_4</method-param>
-                    <method-param>parms_5</method-param>
-                </method-params>
-            </method>
-        </method-permission>
-        <method-permission>
-            <description>description_1</description>
-            <method>
-                <description>description_5</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_5</method-name>
-            </method>
-            <method>
-                <description>description_6</description>
-                <method-name>name_6</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_7</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_7</method-name>
-                <method-params>
-                    <method-param>parms_6</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_8</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_8</method-name>
-                <method-params>
-                    <method-param>parms_7</method-param>
-                    <method-param>parms_8</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_9</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_9</method-name>
-                <method-params>
-                    <method-param>parms_9</method-param>
-                    <method-param>parms_10</method-param>
-                    <method-param>parms_11</method-param>
-                </method-params>
-            </method>
-        </method-permission>
-        <method-permission>
-            <description>description_2</description>
-            <unchecked/>
-            <method>
-                <description>description_10</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_10</method-name>
-            </method>
-            <method>
-                <description>description_11</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_11</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_12</description>
-                <method-name>name_12</method-name>
-                <method-params>
-                    <method-param>parms_12</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_13</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_13</method-name>
-                <method-params>
-                    <method-param>parms_13</method-param>
-                    <method-param>parms_14</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_14</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_14</method-name>
-                <method-params>
-                    <method-param>parms_15</method-param>
-                    <method-param>parms_16</method-param>
-                    <method-param>parms_17</method-param>
-                </method-params>
-            </method>
-        </method-permission>
-        <method-permission>
-            <description>description_3</description>
-            <method>
-                <description>description_15</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_15</method-name>
-            </method>
-            <method>
-                <description>description_16</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_16</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_17</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_17</method-name>
-                <method-params>
-                    <method-param>parms_18</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_18</description>
-                <method-name>name_18</method-name>
-                <method-params>
-                    <method-param>parms_19</method-param>
-                    <method-param>parms_20</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_19</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_19</method-name>
-                <method-params>
-                    <method-param>parms_21</method-param>
-                    <method-param>parms_22</method-param>
-                    <method-param>parms_23</method-param>
-                </method-params>
-            </method>
-        </method-permission>
-        <method-permission>
-            <description>description_4</description>
-            <unchecked/>
-            <method>
-                <description>description_20</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_20</method-name>
-            </method>
-            <method>
-                <description>description_21</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_21</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_22</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_22</method-name>
-                <method-params>
-                    <method-param>parms_24</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_23</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_23</method-name>
-                <method-params>
-                    <method-param>parms_25</method-param>
-                    <method-param>parms_26</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_24</description>
-                <method-name>name_24</method-name>
-                <method-params>
-                    <method-param>parms_27</method-param>
-                    <method-param>parms_28</method-param>
-                    <method-param>parms_29</method-param>
-                </method-params>
-            </method>
-        </method-permission>
-        <container-transaction>
-            <description>description_0</description>
-            <method>
-                <description>description_25</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_25</method-name>
-            </method>
-            <method>
-                <description>description_26</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_26</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_27</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_27</method-name>
-                <method-params>
-                    <method-param>parms_30</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_28</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_28</method-name>
-                <method-params>
-                    <method-param>parms_31</method-param>
-                    <method-param>parms_32</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_29</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_29</method-name>
-                <method-params>
-                    <method-param>parms_33</method-param>
-                    <method-param>parms_34</method-param>
-                    <method-param>parms_35</method-param>
-                </method-params>
-            </method>
-            <trans-attribute>NotSupported</trans-attribute>
-        </container-transaction>
-        <container-transaction>
-            <description>description_1</description>
-            <method>
-                <description>description_30</description>
-                <method-name>name_30</method-name>
-            </method>
-            <method>
-                <description>description_31</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_31</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_32</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_32</method-name>
-                <method-params>
-                    <method-param>parms_36</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_33</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_33</method-name>
-                <method-params>
-                    <method-param>parms_37</method-param>
-                    <method-param>parms_38</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_34</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_34</method-name>
-                <method-params>
-                    <method-param>parms_39</method-param>
-                    <method-param>parms_40</method-param>
-                    <method-param>parms_41</method-param>
-                </method-params>
-            </method>
-            <trans-attribute>Supports</trans-attribute>
-        </container-transaction>
-        <container-transaction>
-            <description>description_2</description>
-            <method>
-                <description>description_35</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_35</method-name>
-            </method>
-            <method>
-                <description>description_36</description>
-                <method-name>name_36</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_37</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_37</method-name>
-                <method-params>
-                    <method-param>parms_42</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_38</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_38</method-name>
-                <method-params>
-                    <method-param>parms_43</method-param>
-                    <method-param>parms_44</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_39</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_39</method-name>
-                <method-params>
-                    <method-param>parms_45</method-param>
-                    <method-param>parms_46</method-param>
-                    <method-param>parms_47</method-param>
-                </method-params>
-            </method>
-            <trans-attribute>Required</trans-attribute>
-        </container-transaction>
-        <container-transaction>
-            <description>description_3</description>
-            <method>
-                <description>description_40</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_40</method-name>
-            </method>
-            <method>
-                <description>description_41</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_41</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_42</description>
-                <method-name>name_42</method-name>
-                <method-params>
-                    <method-param>parms_48</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_43</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_43</method-name>
-                <method-params>
-                    <method-param>parms_49</method-param>
-                    <method-param>parms_50</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_44</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_44</method-name>
-                <method-params>
-                    <method-param>parms_51</method-param>
-                    <method-param>parms_52</method-param>
-                    <method-param>parms_53</method-param>
-                </method-params>
-            </method>
-            <trans-attribute>RequiresNew</trans-attribute>
-        </container-transaction>
-        <container-transaction>
-            <description>description_4</description>
-            <method>
-                <description>description_45</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_45</method-name>
-            </method>
-            <method>
-                <description>description_46</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_46</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_47</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_47</method-name>
-                <method-params>
-                    <method-param>parms_54</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_48</description>
-                <method-name>name_48</method-name>
-                <method-params>
-                    <method-param>parms_55</method-param>
-                    <method-param>parms_56</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_49</description>
-                <method-intf>Remote</method-intf>
-                <method-name>name_49</method-name>
-                <method-params>
-                    <method-param>parms_57</method-param>
-                    <method-param>parms_58</method-param>
-                    <method-param>parms_59</method-param>
-                </method-params>
-            </method>
-            <trans-attribute>Mandatory</trans-attribute>
-        </container-transaction>
-        <exclude-list>
-            <description>description_0</description>
-            <method>
-                <description>description_50</description>
-                <method-intf>Home</method-intf>
-                <method-name>name_50</method-name>
-            </method>
-            <method>
-                <description>description_51</description>
-                <method-intf>Local</method-intf>
-                <method-name>name_51</method-name>
-                <method-params/>
-            </method>
-            <method>
-                <description>description_52</description>
-                <method-intf>LocalHome</method-intf>
-                <method-name>name_52</method-name>
-                <method-params>
-                    <method-param>parms_60</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_53</description>
-                <method-intf>ServiceEndpoint</method-intf>
-                <method-name>name_53</method-name>
-                <method-params>
-                    <method-param>parms_61</method-param>
-                    <method-param>parms_62</method-param>
-                </method-params>
-            </method>
-            <method>
-                <description>description_54</description>
-                <method-name>name_54</method-name>
-                <method-params>
-                    <method-param>parms_63</method-param>
-                    <method-param>parms_64</method-param>
-                    <method-param>parms_65</method-param>
-                </method-params>
-            </method>
-        </exclude-list>
-    </assembly-descriptor>
-    <ejb-client-jar>ejbClientJar_0</ejb-client-jar>
-</ejb-jar>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/ra.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/ra.xml
deleted file mode 100644
index e0816ae..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/ra.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE connector PUBLIC "-//Sun Microsystems, Inc.//DTD Connector 1.0//EN" "http://java.sun.com/dtd/connector_1_0.dtd">
-
-   <connector id="Connector_ID">
-      <display-name>displayName_0</display-name>
-      <description>description_0</description>
-      <icon>
-         <small-icon>smallIcon_0</small-icon>
-         <large-icon>largeIcon_0</large-icon>
-      </icon>
-      <vendor-name>vendorName_0</vendor-name>
-      <spec-version>1.0</spec-version>
-      <eis-type>eisType_0</eis-type>
-      <version>1.0</version>
-      <license>
-         <description>description_0</description>
-         <license-required>true</license-required>
-      </license>
-      <resourceadapter id="ResourceAdapter_1051639769087">
-         <managedconnectionfactory-class>managedConnectionFactoryClass_0</managedconnectionfactory-class>
-         <connectionfactory-interface>connectionFactoryInterface_0</connectionfactory-interface>
-         <connectionfactory-impl-class>connectionFactoryImplClass_0</connectionfactory-impl-class>
-         <connection-interface>connectionInterface_0</connection-interface>
-         <connection-impl-class>connectionImplClass_0</connection-impl-class>
-         <transaction-support>NoTransaction</transaction-support>
-         <config-property id="ConfigProperty_1051639769127">
-            <description>description_0</description>
-            <config-property-name>name_0</config-property-name>
-            <config-property-type>type_0</config-property-type>
-            <config-property-value>value_0</config-property-value>
-         </config-property>
-         <config-property id="ConfigProperty_1051639769128">
-            <description>description_1</description>
-            <config-property-name>name_1</config-property-name>
-            <config-property-type>type_1</config-property-type>
-            <config-property-value>value_1</config-property-value>
-         </config-property>
-         <config-property id="ConfigProperty_1051639769129">
-            <description>description_2</description>
-            <config-property-name>name_2</config-property-name>
-            <config-property-type>type_2</config-property-type>
-            <config-property-value>value_2</config-property-value>
-         </config-property>
-         <config-property id="ConfigProperty_1051639769130">
-            <description>description_3</description>
-            <config-property-name>name_3</config-property-name>
-            <config-property-type>type_3</config-property-type>
-            <config-property-value>value_3</config-property-value>
-         </config-property>
-         <config-property id="ConfigProperty_1051639769131">
-            <description>description_4</description>
-            <config-property-name>name_4</config-property-name>
-            <config-property-type>type_4</config-property-type>
-            <config-property-value>value_4</config-property-value>
-         </config-property>
-         <authentication-mechanism id="AuthenticationMechanism_1051639769147">
-            <description>description_0</description>
-            <authentication-mechanism-type>BasicPassword</authentication-mechanism-type>
-            <credential-interface>credentialInterface_0</credential-interface>
-         </authentication-mechanism>
-         <authentication-mechanism id="AuthenticationMechanism_1051639769148">
-            <description>description_1</description>
-            <authentication-mechanism-type>Kerbv5</authentication-mechanism-type>
-            <credential-interface>credentialInterface_1</credential-interface>
-         </authentication-mechanism>
-         <authentication-mechanism id="AuthenticationMechanism_1051639769149">
-            <description>description_2</description>
-            <authentication-mechanism-type>BasicPassword</authentication-mechanism-type>
-            <credential-interface>credentialInterface_2</credential-interface>
-         </authentication-mechanism>
-         <authentication-mechanism id="AuthenticationMechanism_1051639769150">
-            <description>description_3</description>
-            <authentication-mechanism-type>Kerbv5</authentication-mechanism-type>
-            <credential-interface>credentialInterface_3</credential-interface>
-         </authentication-mechanism>
-         <authentication-mechanism id="AuthenticationMechanism_1051639769151">
-            <description>description_4</description>
-            <authentication-mechanism-type>BasicPassword</authentication-mechanism-type>
-            <credential-interface>credentialInterface_4</credential-interface>
-         </authentication-mechanism>
-         <reauthentication-support>true</reauthentication-support>
-         <security-permission id="SecurityPermission_1051639769167">
-            <description>description_0</description>
-            <security-permission-spec>specification_0</security-permission-spec>
-         </security-permission>
-         <security-permission id="SecurityPermission_1051639769177">
-            <description>description_1</description>
-            <security-permission-spec>specification_1</security-permission-spec>
-         </security-permission>
-         <security-permission id="SecurityPermission_1051639769178">
-            <description>description_2</description>
-            <security-permission-spec>specification_2</security-permission-spec>
-         </security-permission>
-         <security-permission id="SecurityPermission_1051639769179">
-            <description>description_3</description>
-            <security-permission-spec>specification_3</security-permission-spec>
-         </security-permission>
-         <security-permission id="SecurityPermission_1051639769180">
-            <description>description_4</description>
-            <security-permission-spec>specification_4</security-permission-spec>
-         </security-permission>
-      </resourceadapter>
-   </connector>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/web.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/web.xml
deleted file mode 100644
index 27831b0..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/EMFTests/web.xml
+++ /dev/null
@@ -1,1285 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
-
-   <web-app id="WebApp_ID">
-      <icon>
-         <small-icon>smallIcon_0</small-icon>
-         <large-icon>largeIcon_0</large-icon>
-      </icon>
-      <display-name>displayName_0</display-name>
-      <description>description_0</description>
-      <distributable></distributable>
-      <context-param id="ContextParam_1051643499852">
-         <param-name>paramName_0</param-name>
-         <param-value>paramValue_0</param-value>
-         <description>description_0</description>
-      </context-param>
-      <context-param id="ContextParam_1051643499853">
-         <param-name>paramName_1</param-name>
-         <param-value>paramValue_1</param-value>
-         <description>description_1</description>
-      </context-param>
-      <context-param id="ContextParam_1051643499862">
-         <param-name>paramName_2</param-name>
-         <param-value>paramValue_2</param-value>
-         <description>description_2</description>
-      </context-param>
-      <context-param id="ContextParam_1051643499863">
-         <param-name>paramName_3</param-name>
-         <param-value>paramValue_3</param-value>
-         <description>description_3</description>
-      </context-param>
-      <context-param id="ContextParam_1051643499872">
-         <param-name>paramName_4</param-name>
-         <param-value>paramValue_4</param-value>
-         <description>description_4</description>
-      </context-param>
-      <filter id="Filter_1051643499902">
-         <icon>
-            <small-icon>smallIcon_0</small-icon>
-            <large-icon>largeIcon_0</large-icon>
-         </icon>
-         <filter-name>name_0</filter-name>
-         <display-name>displayName_0</display-name>
-         <description>description_0</description>
-         <filter-class>java.lang.Integer</filter-class>
-         <init-param id="InitParam_1051643500002">
-            <param-name>paramName_25</param-name>
-            <param-value>paramValue_25</param-value>
-            <description>description_25</description>
-         </init-param>
-         <init-param id="InitParam_1051643500003">
-            <param-name>paramName_26</param-name>
-            <param-value>paramValue_26</param-value>
-            <description>description_26</description>
-         </init-param>
-         <init-param id="InitParam_1051643500004">
-            <param-name>paramName_27</param-name>
-            <param-value>paramValue_27</param-value>
-            <description>description_27</description>
-         </init-param>
-         <init-param id="InitParam_1051643500005">
-            <param-name>paramName_28</param-name>
-            <param-value>paramValue_28</param-value>
-            <description>description_28</description>
-         </init-param>
-         <init-param id="InitParam_1051643500006">
-            <param-name>paramName_29</param-name>
-            <param-value>paramValue_29</param-value>
-            <description>description_29</description>
-         </init-param>
-      </filter>
-      <filter id="Filter_1051643500002">
-         <icon>
-            <small-icon>smallIcon_1</small-icon>
-            <large-icon>largeIcon_1</large-icon>
-         </icon>
-         <filter-name>name_1</filter-name>
-         <display-name>displayName_1</display-name>
-         <description>description_1</description>
-         <filter-class>java.lang.String</filter-class>
-         <init-param id="InitParam_1051643500007">
-            <param-name>paramName_30</param-name>
-            <param-value>paramValue_30</param-value>
-            <description>description_30</description>
-         </init-param>
-         <init-param id="InitParam_1051643500012">
-            <param-name>paramName_31</param-name>
-            <param-value>paramValue_31</param-value>
-            <description>description_31</description>
-         </init-param>
-         <init-param id="InitParam_1051643500013">
-            <param-name>paramName_32</param-name>
-            <param-value>paramValue_32</param-value>
-            <description>description_32</description>
-         </init-param>
-         <init-param id="InitParam_1051643500014">
-            <param-name>paramName_33</param-name>
-            <param-value>paramValue_33</param-value>
-            <description>description_33</description>
-         </init-param>
-         <init-param id="InitParam_1051643500015">
-            <param-name>paramName_34</param-name>
-            <param-value>paramValue_34</param-value>
-            <description>description_34</description>
-         </init-param>
-      </filter>
-      <filter id="Filter_1051643500012">
-         <icon>
-            <small-icon>smallIcon_2</small-icon>
-            <large-icon>largeIcon_2</large-icon>
-         </icon>
-         <filter-name>name_2</filter-name>
-         <display-name>displayName_2</display-name>
-         <description>description_2</description>
-         <filter-class>java.util.HashTable</filter-class>
-         <init-param id="InitParam_1051643500016">
-            <param-name>paramName_35</param-name>
-            <param-value>paramValue_35</param-value>
-            <description>description_35</description>
-         </init-param>
-         <init-param id="InitParam_1051643500017">
-            <param-name>paramName_36</param-name>
-            <param-value>paramValue_36</param-value>
-            <description>description_36</description>
-         </init-param>
-         <init-param id="InitParam_1051643500018">
-            <param-name>paramName_37</param-name>
-            <param-value>paramValue_37</param-value>
-            <description>description_37</description>
-         </init-param>
-         <init-param id="InitParam_1051643500019">
-            <param-name>paramName_38</param-name>
-            <param-value>paramValue_38</param-value>
-            <description>description_38</description>
-         </init-param>
-         <init-param id="InitParam_1051643500020">
-            <param-name>paramName_39</param-name>
-            <param-value>paramValue_39</param-value>
-            <description>description_39</description>
-         </init-param>
-      </filter>
-      <filter id="Filter_1051643500013">
-         <icon>
-            <small-icon>smallIcon_3</small-icon>
-            <large-icon>largeIcon_3</large-icon>
-         </icon>
-         <filter-name>name_3</filter-name>
-         <display-name>displayName_3</display-name>
-         <description>description_3</description>
-         <filter-class>java.util.List</filter-class>
-         <init-param id="InitParam_1051643500021">
-            <param-name>paramName_40</param-name>
-            <param-value>paramValue_40</param-value>
-            <description>description_40</description>
-         </init-param>
-         <init-param id="InitParam_1051643500022">
-            <param-name>paramName_41</param-name>
-            <param-value>paramValue_41</param-value>
-            <description>description_41</description>
-         </init-param>
-         <init-param id="InitParam_1051643500032">
-            <param-name>paramName_42</param-name>
-            <param-value>paramValue_42</param-value>
-            <description>description_42</description>
-         </init-param>
-         <init-param id="InitParam_1051643500033">
-            <param-name>paramName_43</param-name>
-            <param-value>paramValue_43</param-value>
-            <description>description_43</description>
-         </init-param>
-         <init-param id="InitParam_1051643500034">
-            <param-name>paramName_44</param-name>
-            <param-value>paramValue_44</param-value>
-            <description>description_44</description>
-         </init-param>
-      </filter>
-      <filter id="Filter_1051643500032">
-         <icon>
-            <small-icon>smallIcon_4</small-icon>
-            <large-icon>largeIcon_4</large-icon>
-         </icon>
-         <filter-name>name_4</filter-name>
-         <display-name>displayName_4</display-name>
-         <description>description_4</description>
-         <filter-class>java.sql.Data</filter-class>
-         <init-param id="InitParam_1051643500035">
-            <param-name>paramName_45</param-name>
-            <param-value>paramValue_45</param-value>
-            <description>description_45</description>
-         </init-param>
-         <init-param id="InitParam_1051643500036">
-            <param-name>paramName_46</param-name>
-            <param-value>paramValue_46</param-value>
-            <description>description_46</description>
-         </init-param>
-         <init-param id="InitParam_1051643500037">
-            <param-name>paramName_47</param-name>
-            <param-value>paramValue_47</param-value>
-            <description>description_47</description>
-         </init-param>
-         <init-param id="InitParam_1051643500038">
-            <param-name>paramName_48</param-name>
-            <param-value>paramValue_48</param-value>
-            <description>description_48</description>
-         </init-param>
-         <init-param id="InitParam_1051643500042">
-            <param-name>paramName_49</param-name>
-            <param-value>paramValue_49</param-value>
-            <description>description_49</description>
-         </init-param>
-      </filter>
-      <filter-mapping id="FilterMapping_1051643500082">
-         <filter-name>name_0</filter-name>
-         <url-pattern>urlPattern_0</url-pattern>
-      </filter-mapping>
-      <filter-mapping id="FilterMapping_1051643500083">
-         <filter-name>name_1</filter-name>
-         <url-pattern>urlPattern_1</url-pattern>
-      </filter-mapping>
-      <filter-mapping id="FilterMapping_1051643500084">
-         <filter-name>name_2</filter-name>
-         <url-pattern>urlPattern_2</url-pattern>
-      </filter-mapping>
-      <filter-mapping id="FilterMapping_1051643500085">
-         <filter-name>name_3</filter-name>
-         <url-pattern>urlPattern_3</url-pattern>
-      </filter-mapping>
-      <filter-mapping id="FilterMapping_1051643500086">
-         <filter-name>name_4</filter-name>
-         <url-pattern>urlPattern_4</url-pattern>
-      </filter-mapping>
-      <listener id="Listener_1051643500112">
-         <listener-class>java.lang.Integer</listener-class>
-      </listener>
-      <listener id="Listener_1051643500113">
-         <listener-class>java.lang.String</listener-class>
-      </listener>
-      <listener id="Listener_1051643500114">
-         <listener-class>java.util.HashTable</listener-class>
-      </listener>
-      <listener id="Listener_1051643500115">
-         <listener-class>java.util.List</listener-class>
-      </listener>
-      <listener id="Listener_1051643500116">
-         <listener-class>java.sql.Data</listener-class>
-      </listener>
-      <servlet id="Servlet_1051643500212">
-         <icon>
-            <small-icon>smallIcon_0</small-icon>
-            <large-icon>largeIcon_0</large-icon>
-         </icon>
-         <servlet-name>servletName_0</servlet-name>
-         <display-name>displayName_0</display-name>
-         <description>description_0</description>
-         <jsp-file>jspFile_0</jsp-file>
-         <init-param id="InitParam_1051643500232">
-            <param-name>paramName_0</param-name>
-            <param-value>paramValue_0</param-value>
-            <description>description_0</description>
-         </init-param>
-         <init-param id="InitParam_1051643500233">
-            <param-name>paramName_1</param-name>
-            <param-value>paramValue_1</param-value>
-            <description>description_1</description>
-         </init-param>
-         <init-param id="InitParam_1051643500234">
-            <param-name>paramName_2</param-name>
-            <param-value>paramValue_2</param-value>
-            <description>description_2</description>
-         </init-param>
-         <init-param id="InitParam_1051643500235">
-            <param-name>paramName_3</param-name>
-            <param-value>paramValue_3</param-value>
-            <description>description_3</description>
-         </init-param>
-         <init-param id="InitParam_1051643500236">
-            <param-name>paramName_4</param-name>
-            <param-value>paramValue_4</param-value>
-            <description>description_4</description>
-         </init-param>
-         <load-on-startup>0</load-on-startup>
-         <run-as id="RunAsSpecifiedIdentity_1051643500232">
-            <description>description_0</description>
-            <role-name>roleName_0</role-name>
-         </run-as>
-         <security-role-ref id="SecurityRoleRef_1051643500272">
-            <description>description_0</description>
-            <role-name>name_0</role-name>
-            <role-link>link_0</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500273">
-            <description>description_1</description>
-            <role-name>name_1</role-name>
-            <role-link>link_1</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500274">
-            <description>description_2</description>
-            <role-name>name_2</role-name>
-            <role-link>link_2</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500275">
-            <description>description_3</description>
-            <role-name>name_3</role-name>
-            <role-link>link_3</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500276">
-            <description>description_4</description>
-            <role-name>name_4</role-name>
-            <role-link>link_4</role-link>
-         </security-role-ref>
-      </servlet>
-      <servlet id="Servlet_1051643500272">
-         <icon>
-            <small-icon>smallIcon_1</small-icon>
-            <large-icon>largeIcon_1</large-icon>
-         </icon>
-         <servlet-name>servletName_1</servlet-name>
-         <display-name>displayName_1</display-name>
-         <description>description_1</description>
-         <servlet-class>className_0</servlet-class>
-         <init-param id="InitParam_1051643500272">
-            <param-name>paramName_5</param-name>
-            <param-value>paramValue_5</param-value>
-            <description>description_5</description>
-         </init-param>
-         <init-param id="InitParam_1051643500273">
-            <param-name>paramName_6</param-name>
-            <param-value>paramValue_6</param-value>
-            <description>description_6</description>
-         </init-param>
-         <init-param id="InitParam_1051643500274">
-            <param-name>paramName_7</param-name>
-            <param-value>paramValue_7</param-value>
-            <description>description_7</description>
-         </init-param>
-         <init-param id="InitParam_1051643500275">
-            <param-name>paramName_8</param-name>
-            <param-value>paramValue_8</param-value>
-            <description>description_8</description>
-         </init-param>
-         <init-param id="InitParam_1051643500276">
-            <param-name>paramName_9</param-name>
-            <param-value>paramValue_9</param-value>
-            <description>description_9</description>
-         </init-param>
-         <load-on-startup>1</load-on-startup>
-         <run-as id="RunAsSpecifiedIdentity_1051643500272">
-            <description>description_1</description>
-            <role-name>roleName_1</role-name>
-         </run-as>
-         <security-role-ref id="SecurityRoleRef_1051643500277">
-            <description>description_5</description>
-            <role-name>name_5</role-name>
-            <role-link>link_5</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500278">
-            <description>description_6</description>
-            <role-name>name_6</role-name>
-            <role-link>link_6</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500282">
-            <description>description_7</description>
-            <role-name>name_7</role-name>
-            <role-link>link_7</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500283">
-            <description>description_8</description>
-            <role-name>name_8</role-name>
-            <role-link>link_8</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500284">
-            <description>description_9</description>
-            <role-name>name_9</role-name>
-            <role-link>link_9</role-link>
-         </security-role-ref>
-      </servlet>
-      <servlet id="Servlet_1051643500282">
-         <icon>
-            <small-icon>smallIcon_2</small-icon>
-            <large-icon>largeIcon_2</large-icon>
-         </icon>
-         <servlet-name>servletName_2</servlet-name>
-         <display-name>displayName_2</display-name>
-         <description>description_2</description>
-         <jsp-file>jspFile_1</jsp-file>
-         <init-param id="InitParam_1051643500282">
-            <param-name>paramName_10</param-name>
-            <param-value>paramValue_10</param-value>
-            <description>description_10</description>
-         </init-param>
-         <init-param id="InitParam_1051643500283">
-            <param-name>paramName_11</param-name>
-            <param-value>paramValue_11</param-value>
-            <description>description_11</description>
-         </init-param>
-         <init-param id="InitParam_1051643500284">
-            <param-name>paramName_12</param-name>
-            <param-value>paramValue_12</param-value>
-            <description>description_12</description>
-         </init-param>
-         <init-param id="InitParam_1051643500285">
-            <param-name>paramName_13</param-name>
-            <param-value>paramValue_13</param-value>
-            <description>description_13</description>
-         </init-param>
-         <init-param id="InitParam_1051643500286">
-            <param-name>paramName_14</param-name>
-            <param-value>paramValue_14</param-value>
-            <description>description_14</description>
-         </init-param>
-         <load-on-startup>2</load-on-startup>
-         <run-as id="RunAsSpecifiedIdentity_1051643500282">
-            <description>description_2</description>
-            <role-name>roleName_2</role-name>
-         </run-as>
-         <security-role-ref id="SecurityRoleRef_1051643500285">
-            <description>description_10</description>
-            <role-name>name_10</role-name>
-            <role-link>link_10</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500286">
-            <description>description_11</description>
-            <role-name>name_11</role-name>
-            <role-link>link_11</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500287">
-            <description>description_12</description>
-            <role-name>name_12</role-name>
-            <role-link>link_12</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500288">
-            <description>description_13</description>
-            <role-name>name_13</role-name>
-            <role-link>link_13</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500289">
-            <description>description_14</description>
-            <role-name>name_14</role-name>
-            <role-link>link_14</role-link>
-         </security-role-ref>
-      </servlet>
-      <servlet id="Servlet_1051643500283">
-         <icon>
-            <small-icon>smallIcon_3</small-icon>
-            <large-icon>largeIcon_3</large-icon>
-         </icon>
-         <servlet-name>servletName_3</servlet-name>
-         <display-name>displayName_3</display-name>
-         <description>description_3</description>
-         <servlet-class>className_1</servlet-class>
-         <init-param id="InitParam_1051643500287">
-            <param-name>paramName_15</param-name>
-            <param-value>paramValue_15</param-value>
-            <description>description_15</description>
-         </init-param>
-         <init-param id="InitParam_1051643500288">
-            <param-name>paramName_16</param-name>
-            <param-value>paramValue_16</param-value>
-            <description>description_16</description>
-         </init-param>
-         <init-param id="InitParam_1051643500292">
-            <param-name>paramName_17</param-name>
-            <param-value>paramValue_17</param-value>
-            <description>description_17</description>
-         </init-param>
-         <init-param id="InitParam_1051643500293">
-            <param-name>paramName_18</param-name>
-            <param-value>paramValue_18</param-value>
-            <description>description_18</description>
-         </init-param>
-         <init-param id="InitParam_1051643500294">
-            <param-name>paramName_19</param-name>
-            <param-value>paramValue_19</param-value>
-            <description>description_19</description>
-         </init-param>
-         <load-on-startup>3</load-on-startup>
-         <run-as id="RunAsSpecifiedIdentity_1051643500292">
-            <description>description_3</description>
-            <role-name>roleName_3</role-name>
-         </run-as>
-         <security-role-ref id="SecurityRoleRef_1051643500292">
-            <description>description_15</description>
-            <role-name>name_15</role-name>
-            <role-link>link_15</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500293">
-            <description>description_16</description>
-            <role-name>name_16</role-name>
-            <role-link>link_16</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500294">
-            <description>description_17</description>
-            <role-name>name_17</role-name>
-            <role-link>link_17</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500295">
-            <description>description_18</description>
-            <role-name>name_18</role-name>
-            <role-link>link_18</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500296">
-            <description>description_19</description>
-            <role-name>name_19</role-name>
-            <role-link>link_19</role-link>
-         </security-role-ref>
-      </servlet>
-      <servlet id="Servlet_1051643500292">
-         <icon>
-            <small-icon>smallIcon_4</small-icon>
-            <large-icon>largeIcon_4</large-icon>
-         </icon>
-         <servlet-name>servletName_4</servlet-name>
-         <display-name>displayName_4</display-name>
-         <description>description_4</description>
-         <jsp-file>jspFile_2</jsp-file>
-         <init-param id="InitParam_1051643500295">
-            <param-name>paramName_20</param-name>
-            <param-value>paramValue_20</param-value>
-            <description>description_20</description>
-         </init-param>
-         <init-param id="InitParam_1051643500296">
-            <param-name>paramName_21</param-name>
-            <param-value>paramValue_21</param-value>
-            <description>description_21</description>
-         </init-param>
-         <init-param id="InitParam_1051643500297">
-            <param-name>paramName_22</param-name>
-            <param-value>paramValue_22</param-value>
-            <description>description_22</description>
-         </init-param>
-         <init-param id="InitParam_1051643500298">
-            <param-name>paramName_23</param-name>
-            <param-value>paramValue_23</param-value>
-            <description>description_23</description>
-         </init-param>
-         <init-param id="InitParam_1051643500299">
-            <param-name>paramName_24</param-name>
-            <param-value>paramValue_24</param-value>
-            <description>description_24</description>
-         </init-param>
-         <load-on-startup>4</load-on-startup>
-         <run-as id="RunAsSpecifiedIdentity_1051643500293">
-            <description>description_4</description>
-            <role-name>roleName_4</role-name>
-         </run-as>
-         <security-role-ref id="SecurityRoleRef_1051643500297">
-            <description>description_20</description>
-            <role-name>name_20</role-name>
-            <role-link>link_20</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500298">
-            <description>description_21</description>
-            <role-name>name_21</role-name>
-            <role-link>link_21</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500299">
-            <description>description_22</description>
-            <role-name>name_22</role-name>
-            <role-link>link_22</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500300">
-            <description>description_23</description>
-            <role-name>name_23</role-name>
-            <role-link>link_23</role-link>
-         </security-role-ref>
-         <security-role-ref id="SecurityRoleRef_1051643500301">
-            <description>description_24</description>
-            <role-name>name_24</role-name>
-            <role-link>link_24</role-link>
-         </security-role-ref>
-      </servlet>
-      <servlet-mapping id="ServletMapping_1051643500312">
-         <servlet-name>servletName_0</servlet-name>
-         <url-pattern>urlPattern_0</url-pattern>
-      </servlet-mapping>
-      <servlet-mapping id="ServletMapping_1051643500313">
-         <servlet-name>servletName_1</servlet-name>
-         <url-pattern>urlPattern_1</url-pattern>
-      </servlet-mapping>
-      <servlet-mapping id="ServletMapping_1051643500314">
-         <servlet-name>servletName_2</servlet-name>
-         <url-pattern>urlPattern_2</url-pattern>
-      </servlet-mapping>
-      <servlet-mapping id="ServletMapping_1051643500315">
-         <servlet-name>servletName_3</servlet-name>
-         <url-pattern>urlPattern_3</url-pattern>
-      </servlet-mapping>
-      <servlet-mapping id="ServletMapping_1051643500316">
-         <servlet-name>servletName_4</servlet-name>
-         <url-pattern>urlPattern_4</url-pattern>
-      </servlet-mapping>
-      <session-config id="SessionConfig_1051643500312">
-         <session-timeout>0</session-timeout>
-      </session-config>
-      <mime-mapping id="MimeMapping_1051643500332">
-         <extension>extension_0</extension>
-         <mime-type>mimeType_0</mime-type>
-      </mime-mapping>
-      <mime-mapping id="MimeMapping_1051643500333">
-         <extension>extension_1</extension>
-         <mime-type>mimeType_1</mime-type>
-      </mime-mapping>
-      <mime-mapping id="MimeMapping_1051643500334">
-         <extension>extension_2</extension>
-         <mime-type>mimeType_2</mime-type>
-      </mime-mapping>
-      <mime-mapping id="MimeMapping_1051643500335">
-         <extension>extension_3</extension>
-         <mime-type>mimeType_3</mime-type>
-      </mime-mapping>
-      <mime-mapping id="MimeMapping_1051643500336">
-         <extension>extension_4</extension>
-         <mime-type>mimeType_4</mime-type>
-      </mime-mapping>
-      <welcome-file-list id="WelcomeFileList_1051643500332">
-         <welcome-file>welcomeFile_0</welcome-file>
-         <welcome-file>welcomeFile_1</welcome-file>
-         <welcome-file>welcomeFile_2</welcome-file>
-         <welcome-file>welcomeFile_3</welcome-file>
-         <welcome-file>welcomeFile_4</welcome-file>
-      </welcome-file-list>
-      <error-page id="ExceptionTypeErrorPage_1051643500342">
-         <exception-type>java.util.HashTable</exception-type>
-         <location>location_0</location>
-      </error-page>
-      <error-page id="ErrorCodeErrorPage_1051643500342">
-         <error-code>errorCode_0</error-code>
-         <location>location_1</location>
-      </error-page>
-      <error-page id="ExceptionTypeErrorPage_1051643500343">
-         <exception-type>java.util.List</exception-type>
-         <location>location_2</location>
-      </error-page>
-      <error-page id="ErrorCodeErrorPage_1051643500343">
-         <error-code>errorCode_1</error-code>
-         <location>location_3</location>
-      </error-page>
-      <error-page id="ExceptionTypeErrorPage_1051643500352">
-         <exception-type>java.sql.Data</exception-type>
-         <location>location_4</location>
-      </error-page>
-      <taglib id="TagLibRef_1051643500362">
-         <taglib-uri>taglibURI_0</taglib-uri>
-         <taglib-location>taglibLocation_0</taglib-location>
-      </taglib>
-      <taglib id="TagLibRef_1051643500363">
-         <taglib-uri>taglibURI_1</taglib-uri>
-         <taglib-location>taglibLocation_1</taglib-location>
-      </taglib>
-      <taglib id="TagLibRef_1051643500364">
-         <taglib-uri>taglibURI_2</taglib-uri>
-         <taglib-location>taglibLocation_2</taglib-location>
-      </taglib>
-      <taglib id="TagLibRef_1051643500365">
-         <taglib-uri>taglibURI_3</taglib-uri>
-         <taglib-location>taglibLocation_3</taglib-location>
-      </taglib>
-      <taglib id="TagLibRef_1051643500366">
-         <taglib-uri>taglibURI_4</taglib-uri>
-         <taglib-location>taglibLocation_4</taglib-location>
-      </taglib>
-      <resource-env-ref id="ResourceEnvRef_1051643500382">
-         <description>description_0</description>
-         <resource-env-ref-name>name_0</resource-env-ref-name>
-         <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-      </resource-env-ref>
-      <resource-env-ref id="ResourceEnvRef_1051643500383">
-         <description>description_1</description>
-         <resource-env-ref-name>name_1</resource-env-ref-name>
-         <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-      </resource-env-ref>
-      <resource-env-ref id="ResourceEnvRef_1051643500384">
-         <description>description_2</description>
-         <resource-env-ref-name>name_2</resource-env-ref-name>
-         <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-      </resource-env-ref>
-      <resource-env-ref id="ResourceEnvRef_1051643500385">
-         <description>description_3</description>
-         <resource-env-ref-name>name_3</resource-env-ref-name>
-         <resource-env-ref-type>java.util.List</resource-env-ref-type>
-      </resource-env-ref>
-      <resource-env-ref id="ResourceEnvRef_1051643500386">
-         <description>description_4</description>
-         <resource-env-ref-name>name_4</resource-env-ref-name>
-         <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-      </resource-env-ref>
-      <resource-ref id="ResourceRef_1051643500402">
-         <description>description_0</description>
-         <res-ref-name>name_0</res-ref-name>
-         <res-type>type_0</res-type>
-         <res-auth>Container</res-auth>
-         <res-sharing-scope>Shareable</res-sharing-scope>
-      </resource-ref>
-      <resource-ref id="ResourceRef_1051643500403">
-         <description>description_1</description>
-         <res-ref-name>name_1</res-ref-name>
-         <res-type>type_1</res-type>
-         <res-auth>Application</res-auth>
-         <res-sharing-scope>Unshareable</res-sharing-scope>
-      </resource-ref>
-      <resource-ref id="ResourceRef_1051643500404">
-         <description>description_2</description>
-         <res-ref-name>name_2</res-ref-name>
-         <res-type>type_2</res-type>
-         <res-auth>Container</res-auth>
-         <res-sharing-scope>Shareable</res-sharing-scope>
-      </resource-ref>
-      <resource-ref id="ResourceRef_1051643500405">
-         <description>description_3</description>
-         <res-ref-name>name_3</res-ref-name>
-         <res-type>type_3</res-type>
-         <res-auth>Application</res-auth>
-         <res-sharing-scope>Unshareable</res-sharing-scope>
-      </resource-ref>
-      <resource-ref id="ResourceRef_1051643500406">
-         <description>description_4</description>
-         <res-ref-name>name_4</res-ref-name>
-         <res-type>type_4</res-type>
-         <res-auth>Container</res-auth>
-         <res-sharing-scope>Shareable</res-sharing-scope>
-      </resource-ref>
-      <security-constraint id="SecurityConstraint_1051643500432">
-         <display-name>displayName_0</display-name>
-         <web-resource-collection id="WebResourceCollection_1051643500452">
-            <web-resource-name>webResourceName_0</web-resource-name>
-            <description>description_0</description>
-            <url-pattern>urlPattern_0</url-pattern>
-            <url-pattern>urlPattern_1</url-pattern>
-            <url-pattern>urlPattern_2</url-pattern>
-            <url-pattern>urlPattern_3</url-pattern>
-            <url-pattern>urlPattern_4</url-pattern>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500453">
-            <web-resource-name>webResourceName_1</web-resource-name>
-            <description>description_1</description>
-            <url-pattern>urlPattern_5</url-pattern>
-            <url-pattern>urlPattern_6</url-pattern>
-            <url-pattern>urlPattern_7</url-pattern>
-            <url-pattern>urlPattern_8</url-pattern>
-            <url-pattern>urlPattern_9</url-pattern>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500454">
-            <web-resource-name>webResourceName_2</web-resource-name>
-            <description>description_2</description>
-            <url-pattern>urlPattern_10</url-pattern>
-            <url-pattern>urlPattern_11</url-pattern>
-            <url-pattern>urlPattern_12</url-pattern>
-            <url-pattern>urlPattern_13</url-pattern>
-            <url-pattern>urlPattern_14</url-pattern>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500455">
-            <web-resource-name>webResourceName_3</web-resource-name>
-            <description>description_3</description>
-            <url-pattern>urlPattern_15</url-pattern>
-            <url-pattern>urlPattern_16</url-pattern>
-            <url-pattern>urlPattern_17</url-pattern>
-            <url-pattern>urlPattern_18</url-pattern>
-            <url-pattern>urlPattern_19</url-pattern>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500462">
-            <web-resource-name>webResourceName_4</web-resource-name>
-            <description>description_4</description>
-            <url-pattern>urlPattern_20</url-pattern>
-            <url-pattern>urlPattern_21</url-pattern>
-            <url-pattern>urlPattern_22</url-pattern>
-            <url-pattern>urlPattern_23</url-pattern>
-            <url-pattern>urlPattern_24</url-pattern>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-         </web-resource-collection>
-         <auth-constraint id="AuthConstraint_1051643500462">
-            <description>description_0</description>
-            <role-name>roles_0</role-name>
-            <role-name>roles_1</role-name>
-            <role-name>roles_2</role-name>
-            <role-name>roles_3</role-name>
-            <role-name>roles_4</role-name>
-         </auth-constraint>
-         <user-data-constraint id="UserDataConstraint_1051643500462">
-            <description>description_0</description>
-            <transport-guarantee>NONE</transport-guarantee>
-         </user-data-constraint>
-      </security-constraint>
-      <security-constraint id="SecurityConstraint_1051643500462">
-         <display-name>displayName_1</display-name>
-         <web-resource-collection id="WebResourceCollection_1051643500463">
-            <web-resource-name>webResourceName_5</web-resource-name>
-            <description>description_5</description>
-            <url-pattern>urlPattern_25</url-pattern>
-            <url-pattern>urlPattern_26</url-pattern>
-            <url-pattern>urlPattern_27</url-pattern>
-            <url-pattern>urlPattern_28</url-pattern>
-            <url-pattern>urlPattern_29</url-pattern>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500464">
-            <web-resource-name>webResourceName_6</web-resource-name>
-            <description>description_6</description>
-            <url-pattern>urlPattern_30</url-pattern>
-            <url-pattern>urlPattern_31</url-pattern>
-            <url-pattern>urlPattern_32</url-pattern>
-            <url-pattern>urlPattern_33</url-pattern>
-            <url-pattern>urlPattern_34</url-pattern>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500465">
-            <web-resource-name>webResourceName_7</web-resource-name>
-            <description>description_7</description>
-            <url-pattern>urlPattern_35</url-pattern>
-            <url-pattern>urlPattern_36</url-pattern>
-            <url-pattern>urlPattern_37</url-pattern>
-            <url-pattern>urlPattern_38</url-pattern>
-            <url-pattern>urlPattern_39</url-pattern>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500466">
-            <web-resource-name>webResourceName_8</web-resource-name>
-            <description>description_8</description>
-            <url-pattern>urlPattern_40</url-pattern>
-            <url-pattern>urlPattern_41</url-pattern>
-            <url-pattern>urlPattern_42</url-pattern>
-            <url-pattern>urlPattern_43</url-pattern>
-            <url-pattern>urlPattern_44</url-pattern>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500467">
-            <web-resource-name>webResourceName_9</web-resource-name>
-            <description>description_9</description>
-            <url-pattern>urlPattern_45</url-pattern>
-            <url-pattern>urlPattern_46</url-pattern>
-            <url-pattern>urlPattern_47</url-pattern>
-            <url-pattern>urlPattern_48</url-pattern>
-            <url-pattern>urlPattern_49</url-pattern>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-         </web-resource-collection>
-         <auth-constraint id="AuthConstraint_1051643500463">
-            <description>description_1</description>
-            <role-name>roles_5</role-name>
-            <role-name>roles_6</role-name>
-            <role-name>roles_7</role-name>
-            <role-name>roles_8</role-name>
-            <role-name>roles_9</role-name>
-         </auth-constraint>
-         <user-data-constraint id="UserDataConstraint_1051643500463">
-            <description>description_1</description>
-            <transport-guarantee>INTEGRAL</transport-guarantee>
-         </user-data-constraint>
-      </security-constraint>
-      <security-constraint id="SecurityConstraint_1051643500463">
-         <display-name>displayName_2</display-name>
-         <web-resource-collection id="WebResourceCollection_1051643500468">
-            <web-resource-name>webResourceName_10</web-resource-name>
-            <description>description_10</description>
-            <url-pattern>urlPattern_50</url-pattern>
-            <url-pattern>urlPattern_51</url-pattern>
-            <url-pattern>urlPattern_52</url-pattern>
-            <url-pattern>urlPattern_53</url-pattern>
-            <url-pattern>urlPattern_54</url-pattern>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500469">
-            <web-resource-name>webResourceName_11</web-resource-name>
-            <description>description_11</description>
-            <url-pattern>urlPattern_55</url-pattern>
-            <url-pattern>urlPattern_56</url-pattern>
-            <url-pattern>urlPattern_57</url-pattern>
-            <url-pattern>urlPattern_58</url-pattern>
-            <url-pattern>urlPattern_59</url-pattern>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500470">
-            <web-resource-name>webResourceName_12</web-resource-name>
-            <description>description_12</description>
-            <url-pattern>urlPattern_60</url-pattern>
-            <url-pattern>urlPattern_61</url-pattern>
-            <url-pattern>urlPattern_62</url-pattern>
-            <url-pattern>urlPattern_63</url-pattern>
-            <url-pattern>urlPattern_64</url-pattern>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500471">
-            <web-resource-name>webResourceName_13</web-resource-name>
-            <description>description_13</description>
-            <url-pattern>urlPattern_65</url-pattern>
-            <url-pattern>urlPattern_66</url-pattern>
-            <url-pattern>urlPattern_67</url-pattern>
-            <url-pattern>urlPattern_68</url-pattern>
-            <url-pattern>urlPattern_69</url-pattern>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500472">
-            <web-resource-name>webResourceName_14</web-resource-name>
-            <description>description_14</description>
-            <url-pattern>urlPattern_70</url-pattern>
-            <url-pattern>urlPattern_71</url-pattern>
-            <url-pattern>urlPattern_72</url-pattern>
-            <url-pattern>urlPattern_73</url-pattern>
-            <url-pattern>urlPattern_74</url-pattern>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-         </web-resource-collection>
-         <auth-constraint id="AuthConstraint_1051643500464">
-            <description>description_2</description>
-            <role-name>roles_10</role-name>
-            <role-name>roles_11</role-name>
-            <role-name>roles_12</role-name>
-            <role-name>roles_13</role-name>
-            <role-name>roles_14</role-name>
-         </auth-constraint>
-         <user-data-constraint id="UserDataConstraint_1051643500464">
-            <description>description_2</description>
-            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
-         </user-data-constraint>
-      </security-constraint>
-      <security-constraint id="SecurityConstraint_1051643500464">
-         <display-name>displayName_3</display-name>
-         <web-resource-collection id="WebResourceCollection_1051643500473">
-            <web-resource-name>webResourceName_15</web-resource-name>
-            <description>description_15</description>
-            <url-pattern>urlPattern_75</url-pattern>
-            <url-pattern>urlPattern_76</url-pattern>
-            <url-pattern>urlPattern_77</url-pattern>
-            <url-pattern>urlPattern_78</url-pattern>
-            <url-pattern>urlPattern_79</url-pattern>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500474">
-            <web-resource-name>webResourceName_16</web-resource-name>
-            <description>description_16</description>
-            <url-pattern>urlPattern_80</url-pattern>
-            <url-pattern>urlPattern_81</url-pattern>
-            <url-pattern>urlPattern_82</url-pattern>
-            <url-pattern>urlPattern_83</url-pattern>
-            <url-pattern>urlPattern_84</url-pattern>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500475">
-            <web-resource-name>webResourceName_17</web-resource-name>
-            <description>description_17</description>
-            <url-pattern>urlPattern_85</url-pattern>
-            <url-pattern>urlPattern_86</url-pattern>
-            <url-pattern>urlPattern_87</url-pattern>
-            <url-pattern>urlPattern_88</url-pattern>
-            <url-pattern>urlPattern_89</url-pattern>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500476">
-            <web-resource-name>webResourceName_18</web-resource-name>
-            <description>description_18</description>
-            <url-pattern>urlPattern_90</url-pattern>
-            <url-pattern>urlPattern_91</url-pattern>
-            <url-pattern>urlPattern_92</url-pattern>
-            <url-pattern>urlPattern_93</url-pattern>
-            <url-pattern>urlPattern_94</url-pattern>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500477">
-            <web-resource-name>webResourceName_19</web-resource-name>
-            <description>description_19</description>
-            <url-pattern>urlPattern_95</url-pattern>
-            <url-pattern>urlPattern_96</url-pattern>
-            <url-pattern>urlPattern_97</url-pattern>
-            <url-pattern>urlPattern_98</url-pattern>
-            <url-pattern>urlPattern_99</url-pattern>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-         </web-resource-collection>
-         <auth-constraint id="AuthConstraint_1051643500472">
-            <description>description_3</description>
-            <role-name>roles_15</role-name>
-            <role-name>roles_16</role-name>
-            <role-name>roles_17</role-name>
-            <role-name>roles_18</role-name>
-            <role-name>roles_19</role-name>
-         </auth-constraint>
-         <user-data-constraint id="UserDataConstraint_1051643500472">
-            <description>description_3</description>
-            <transport-guarantee>NONE</transport-guarantee>
-         </user-data-constraint>
-      </security-constraint>
-      <security-constraint id="SecurityConstraint_1051643500472">
-         <display-name>displayName_4</display-name>
-         <web-resource-collection id="WebResourceCollection_1051643500478">
-            <web-resource-name>webResourceName_20</web-resource-name>
-            <description>description_20</description>
-            <url-pattern>urlPattern_100</url-pattern>
-            <url-pattern>urlPattern_101</url-pattern>
-            <url-pattern>urlPattern_102</url-pattern>
-            <url-pattern>urlPattern_103</url-pattern>
-            <url-pattern>urlPattern_104</url-pattern>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500479">
-            <web-resource-name>webResourceName_21</web-resource-name>
-            <description>description_21</description>
-            <url-pattern>urlPattern_105</url-pattern>
-            <url-pattern>urlPattern_106</url-pattern>
-            <url-pattern>urlPattern_107</url-pattern>
-            <url-pattern>urlPattern_108</url-pattern>
-            <url-pattern>urlPattern_109</url-pattern>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500480">
-            <web-resource-name>webResourceName_22</web-resource-name>
-            <description>description_22</description>
-            <url-pattern>urlPattern_110</url-pattern>
-            <url-pattern>urlPattern_111</url-pattern>
-            <url-pattern>urlPattern_112</url-pattern>
-            <url-pattern>urlPattern_113</url-pattern>
-            <url-pattern>urlPattern_114</url-pattern>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500481">
-            <web-resource-name>webResourceName_23</web-resource-name>
-            <description>description_23</description>
-            <url-pattern>urlPattern_115</url-pattern>
-            <url-pattern>urlPattern_116</url-pattern>
-            <url-pattern>urlPattern_117</url-pattern>
-            <url-pattern>urlPattern_118</url-pattern>
-            <url-pattern>urlPattern_119</url-pattern>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-            <http-method>TRACE</http-method>
-            <http-method>GET</http-method>
-         </web-resource-collection>
-         <web-resource-collection id="WebResourceCollection_1051643500482">
-            <web-resource-name>webResourceName_24</web-resource-name>
-            <description>description_24</description>
-            <url-pattern>urlPattern_120</url-pattern>
-            <url-pattern>urlPattern_121</url-pattern>
-            <url-pattern>urlPattern_122</url-pattern>
-            <url-pattern>urlPattern_123</url-pattern>
-            <url-pattern>urlPattern_124</url-pattern>
-            <http-method>POST</http-method>
-            <http-method>PUT</http-method>
-            <http-method>DELETE</http-method>
-            <http-method>HEAD</http-method>
-            <http-method>OPTIONS</http-method>
-         </web-resource-collection>
-         <auth-constraint id="AuthConstraint_1051643500473">
-            <description>description_4</description>
-            <role-name>roles_20</role-name>
-            <role-name>roles_21</role-name>
-            <role-name>roles_22</role-name>
-            <role-name>roles_23</role-name>
-            <role-name>roles_24</role-name>
-         </auth-constraint>
-         <user-data-constraint id="UserDataConstraint_1051643500473">
-            <description>description_4</description>
-            <transport-guarantee>INTEGRAL</transport-guarantee>
-         </user-data-constraint>
-      </security-constraint>
-      <login-config id="LoginConfig_1051643500482">
-         <auth-method>BASIC</auth-method>
-         <realm-name>realmName_0</realm-name>
-         <form-login-config id="FormLoginConfig_1051643500482">
-            <form-login-page>formLoginPage_0</form-login-page>
-            <form-error-page>formErrorPage_0</form-error-page>
-         </form-login-config>
-      </login-config>
-      <security-role id="SecurityRole_1051643500492">
-         <description>description_0</description>
-         <role-name>roleName_0</role-name>
-      </security-role>
-      <security-role id="SecurityRole_1051643500493">
-         <description>description_1</description>
-         <role-name>roleName_1</role-name>
-      </security-role>
-      <security-role id="SecurityRole_1051643500494">
-         <description>description_2</description>
-         <role-name>roleName_2</role-name>
-      </security-role>
-      <security-role id="SecurityRole_1051643500495">
-         <description>description_3</description>
-         <role-name>roleName_3</role-name>
-      </security-role>
-      <security-role id="SecurityRole_1051643500496">
-         <description>description_4</description>
-         <role-name>roleName_4</role-name>
-      </security-role>
-      <env-entry id="EnvEntry_1051643500513">
-         <description>description_0</description>
-         <env-entry-name>name_0</env-entry-name>
-         <env-entry-value>value_0</env-entry-value>
-         <env-entry-type>java.lang.String</env-entry-type>
-      </env-entry>
-      <env-entry id="EnvEntry_1051643500514">
-         <description>description_1</description>
-         <env-entry-name>name_1</env-entry-name>
-         <env-entry-value>value_1</env-entry-value>
-         <env-entry-type>java.lang.Integer</env-entry-type>
-      </env-entry>
-      <env-entry id="EnvEntry_1051643500515">
-         <description>description_2</description>
-         <env-entry-name>name_2</env-entry-name>
-         <env-entry-value>value_2</env-entry-value>
-         <env-entry-type>java.lang.Boolean</env-entry-type>
-      </env-entry>
-      <env-entry id="EnvEntry_1051643500516">
-         <description>description_3</description>
-         <env-entry-name>name_3</env-entry-name>
-         <env-entry-value>value_3</env-entry-value>
-         <env-entry-type>java.lang.Double</env-entry-type>
-      </env-entry>
-      <env-entry id="EnvEntry_1051643500517">
-         <description>description_4</description>
-         <env-entry-name>name_4</env-entry-name>
-         <env-entry-value>value_4</env-entry-value>
-         <env-entry-type>java.lang.Byte</env-entry-type>
-      </env-entry>
-      <ejb-ref id="EjbRef_1051643500533">
-         <description>description_0</description>
-         <ejb-ref-name>name_0</ejb-ref-name>
-         <ejb-ref-type>Session</ejb-ref-type>
-         <home>home_0</home>
-         <remote>remote_0</remote>
-         <ejb-link>link_0</ejb-link>
-      </ejb-ref>
-      <ejb-ref id="EjbRef_1051643500534">
-         <description>description_1</description>
-         <ejb-ref-name>name_1</ejb-ref-name>
-         <ejb-ref-type>Entity</ejb-ref-type>
-         <home>home_1</home>
-         <remote>remote_1</remote>
-         <ejb-link>link_1</ejb-link>
-      </ejb-ref>
-      <ejb-ref id="EjbRef_1051643500535">
-         <description>description_2</description>
-         <ejb-ref-name>name_2</ejb-ref-name>
-         <ejb-ref-type>Session</ejb-ref-type>
-         <home>home_2</home>
-         <remote>remote_2</remote>
-         <ejb-link>link_2</ejb-link>
-      </ejb-ref>
-      <ejb-ref id="EjbRef_1051643500536">
-         <description>description_3</description>
-         <ejb-ref-name>name_3</ejb-ref-name>
-         <ejb-ref-type>Entity</ejb-ref-type>
-         <home>home_3</home>
-         <remote>remote_3</remote>
-         <ejb-link>link_3</ejb-link>
-      </ejb-ref>
-      <ejb-ref id="EjbRef_1051643500537">
-         <description>description_4</description>
-         <ejb-ref-name>name_4</ejb-ref-name>
-         <ejb-ref-type>Session</ejb-ref-type>
-         <home>home_4</home>
-         <remote>remote_4</remote>
-         <ejb-link>link_4</ejb-link>
-      </ejb-ref>
-      <ejb-local-ref id="EJBLocalRef_1051643500553">
-         <description>description_5</description>
-         <ejb-ref-name>name_5</ejb-ref-name>
-         <ejb-ref-type>Entity</ejb-ref-type>
-         <local-home>home_5</local-home>
-         <local>remote_5</local>
-         <ejb-link>link_5</ejb-link>
-      </ejb-local-ref>
-      <ejb-local-ref id="EJBLocalRef_1051643500554">
-         <description>description_6</description>
-         <ejb-ref-name>name_6</ejb-ref-name>
-         <ejb-ref-type>Session</ejb-ref-type>
-         <local-home>home_6</local-home>
-         <local>remote_6</local>
-         <ejb-link>link_6</ejb-link>
-      </ejb-local-ref>
-      <ejb-local-ref id="EJBLocalRef_1051643500555">
-         <description>description_7</description>
-         <ejb-ref-name>name_7</ejb-ref-name>
-         <ejb-ref-type>Entity</ejb-ref-type>
-         <local-home>home_7</local-home>
-         <local>remote_7</local>
-         <ejb-link>link_7</ejb-link>
-      </ejb-local-ref>
-      <ejb-local-ref id="EJBLocalRef_1051643500556">
-         <description>description_8</description>
-         <ejb-ref-name>name_8</ejb-ref-name>
-         <ejb-ref-type>Session</ejb-ref-type>
-         <local-home>home_8</local-home>
-         <local>remote_8</local>
-         <ejb-link>link_8</ejb-link>
-      </ejb-local-ref>
-      <ejb-local-ref id="EJBLocalRef_1051643500557">
-         <description>description_9</description>
-         <ejb-ref-name>name_9</ejb-ref-name>
-         <ejb-ref-type>Entity</ejb-ref-type>
-         <local-home>home_9</local-home>
-         <local>remote_9</local>
-         <ejb-link>link_9</ejb-link>
-      </ejb-local-ref>
-   </web-app>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/.metadata/.plugins/com.ibm.etools.j2ee/looseApp.xmi b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/.metadata/.plugins/com.ibm.etools.j2ee/looseApp.xmi
deleted file mode 100644
index be55b37..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/.metadata/.plugins/com.ibm.etools.j2ee/looseApp.xmi
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<com.ibm.etools.j2ee.commonarchivecore.looseconfig:LooseApplication xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:com.ibm.etools.j2ee.commonarchivecore.looseconfig="commonarchive.looseconfig.xmi" uri="D:\Development\workspaces\Corona_c3_fvt\com.ibm.etools.j2ee.core.tests\commonArchiveResources\loose_module_workspace\LooseEAR" binariesPath="D:\Development\workspaces\Corona_c3_fvt\com.ibm.etools.j2ee.core.tests\commonArchiveResources\loose_module_workspace\LooseEAR" resourcesPath="D:\Development\workspaces\Corona_c3_fvt\com.ibm.etools.j2ee.core.tests\commonArchiveResources\loose_module_workspace\LooseEAR">
-  <looseArchives xsi:type="com.ibm.etools.j2ee.commonarchivecore.looseconfig:LooseModule" uri="LooseEAREjb.jar" binariesPath="D:\Development\workspaces\Corona_c3_fvt\com.ibm.etools.j2ee.core.tests\commonArchiveResources\loose_module_workspace\LooseEAREjb\bin" resourcesPath="D:\Development\workspaces\Corona_c3_fvt\com.ibm.etools.j2ee.core.tests\commonArchiveResources\loose_module_workspace\LooseEAREjb\bin"/>
-  <looseArchives xsi:type="com.ibm.etools.j2ee.commonarchivecore.looseconfig:LooseWARFile" uri="LooseEARWeb.war" binariesPath="D:\Development\workspaces\Corona_c3_fvt\com.ibm.etools.j2ee.core.tests\commonArchiveResources\loose_module_workspace\LooseEARWeb\webApplication" resourcesPath="D:\Development\workspaces\Corona_c3_fvt\com.ibm.etools.j2ee.core.tests\commonArchiveResources\loose_module_workspace\LooseEARWeb\webApplication">
-    <looseLibs uri="WEB-INF/lib/library.jar" binariesPath="D:\Development\workspaces\Corona_c3_fvt\com.ibm.etools.j2ee.core.tests\commonArchiveResources\loose_module_workspace\LooseJavaWebLib\bin" resourcesPath="D:\Development\workspaces\Corona_c3_fvt\com.ibm.etools.j2ee.core.tests\commonArchiveResources\loose_module_workspace\LooseJavaWebLib\bin"/>
-  </looseArchives>
-  <looseArchives xsi:type="com.ibm.etools.j2ee.commonarchivecore.looseconfig:LooseLibrary" uri="util.jar" binariesPath="D:\Development\workspaces\Corona_c3_fvt\com.ibm.etools.j2ee.core.tests\commonArchiveResources\loose_module_workspace\LooseJavaUtil\bin" resourcesPath="D:\Development\workspaces\Corona_c3_fvt\com.ibm.etools.j2ee.core.tests\commonArchiveResources\loose_module_workspace\LooseJavaUtil\bin"/>
-</com.ibm.etools.j2ee.commonarchivecore.looseconfig:LooseApplication>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/.metadata/.plugins/com.ibm.etools.j2ee/looseConfig.xmi b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/.metadata/.plugins/com.ibm.etools.j2ee/looseConfig.xmi
deleted file mode 100644
index c761a85..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/.metadata/.plugins/com.ibm.etools.j2ee/looseConfig.xmi
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<com.ibm.etools.j2ee.commonarchivecore.looseconfig:LooseConfiguration xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:com.ibm.etools.j2ee.commonarchivecore.looseconfig="commonarchive.looseconfig.xmi">
-  <applications uri="\D:\Development\workspaces\Corona_v6_fvt\com.ibm.etools.j2ee.core.tests\commonArchiveResources\loose_module_workspace\LooseEAR" binariesPath="\D:\Development\workspaces\Corona_v6_fvt\com.ibm.etools.j2ee.core.tests\commonArchiveResources\loose_module_workspace\LooseEAR" resourcesPath="\D:\Development\workspaces\Corona_v6_fvt\com.ibm.etools.j2ee.core.tests\commonArchiveResources\loose_module_workspace\LooseEAR">
-    <looseArchives xsi:type="com.ibm.etools.j2ee.commonarchivecore.looseconfig:LooseModule" uri="LooseEAREjb.jar" binariesPath="/D:/Development/workspaces/Corona_v6_fvt/com.ibm.etools.j2ee.core.tests/commonArchiveResources\loose_module_workspace\LooseEAREjb\bin" resourcesPath="/D:/Development/workspaces/Corona_v6_fvt/com.ibm.etools.j2ee.core.tests/commonArchiveResources\loose_module_workspace\LooseEAREjb\bin"/>
-    <looseArchives xsi:type="com.ibm.etools.j2ee.commonarchivecore.looseconfig:LooseWARFile" uri="LooseEARWeb.war" binariesPath="/D:/Development/workspaces/Corona_v6_fvt/com.ibm.etools.j2ee.core.tests/commonArchiveResources\loose_module_workspace\LooseEARWeb\webApplication" resourcesPath="/D:/Development/workspaces/Corona_v6_fvt/com.ibm.etools.j2ee.core.tests/commonArchiveResources\loose_module_workspace\LooseEARWeb\webApplication">
-      <looseLibs uri="WEB-INF/lib/library.jar" binariesPath="/D:/Development/workspaces/Corona_v6_fvt/com.ibm.etools.j2ee.core.tests/commonArchiveResources\loose_module_workspace\LooseJavaWebLib\bin" resourcesPath="/D:/Development/workspaces/Corona_v6_fvt/com.ibm.etools.j2ee.core.tests/commonArchiveResources\loose_module_workspace\LooseJavaWebLib\bin"/>
-    </looseArchives>
-    <looseArchives xsi:type="com.ibm.etools.j2ee.commonarchivecore.looseconfig:LooseLibrary" uri="util.jar" binariesPath="/D:/Development/workspaces/Corona_v6_fvt/com.ibm.etools.j2ee.core.tests/commonArchiveResources\loose_module_workspace\LooseJavaUtil\bin" resourcesPath="/D:/Development/workspaces/Corona_v6_fvt/com.ibm.etools.j2ee.core.tests/commonArchiveResources\loose_module_workspace\LooseJavaUtil\bin"/>
-  </applications>
-</com.ibm.etools.j2ee.commonarchivecore.looseconfig:LooseConfiguration>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseConnector/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseConnector/META-INF/MANIFEST.MF
deleted file mode 100644
index 59499bc..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseConnector/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseConnector/META-INF/application.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseConnector/META-INF/application.xml
deleted file mode 100644
index 6a1cd6f..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseConnector/META-INF/application.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<application id="Application_ID"
-    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">
-    <module>
-        <connector>fooRAR</connector>
-    </module>
-</application>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseConnector/fooRAR/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseConnector/fooRAR/META-INF/MANIFEST.MF
deleted file mode 100644
index 59499bc..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseConnector/fooRAR/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseConnector/fooRAR/META-INF/ra.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseConnector/fooRAR/META-INF/ra.xml
deleted file mode 100644
index b341c53..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseConnector/fooRAR/META-INF/ra.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE connector PUBLIC "-//Sun Microsystems, Inc.//DTD Connector 1.0//EN"
-                           "http://java.sun.com/dtd/connector_1_0.dtd">
-<connector>
-    <display-name>displayName_0</display-name>
-    <description>description_0</description>
-    <icon>
-        <small-icon>smallIcon_0</small-icon>
-        <large-icon>largeIcon_0</large-icon>
-    </icon>
-    <vendor-name>vendorName_0</vendor-name>
-    <spec-version>1.0</spec-version>
-    <eis-type>eisType_0</eis-type>
-    <version>1.0</version>
-    <license>
-        <description>description_0</description>
-        <license-required>true</license-required>
-    </license>
-    <resourceadapter>
-        <managedconnectionfactory-class>managedConnectionFactoryClass_0</managedconnectionfactory-class>
-        <connectionfactory-interface>connectionFactoryInterface_0</connectionfactory-interface>
-        <connectionfactory-impl-class>connectionFactoryImplClass_0</connectionfactory-impl-class>
-        <connection-interface>connectionInterface_0</connection-interface>
-        <connection-impl-class>connectionImplClass_0</connection-impl-class>
-        <transaction-support>NoTransaction</transaction-support>
-        <config-property>
-            <description>description_0</description>
-            <config-property-name>name_0</config-property-name>
-            <config-property-type>type_0</config-property-type>
-            <config-property-value>value_0</config-property-value>
-        </config-property>
-        <config-property>
-            <description>description_1</description>
-            <config-property-name>name_1</config-property-name>
-            <config-property-type>type_1</config-property-type>
-            <config-property-value>value_1</config-property-value>
-        </config-property>
-        <config-property>
-            <description>description_2</description>
-            <config-property-name>name_2</config-property-name>
-            <config-property-type>type_2</config-property-type>
-            <config-property-value>value_2</config-property-value>
-        </config-property>
-        <config-property>
-            <description>description_3</description>
-            <config-property-name>name_3</config-property-name>
-            <config-property-type>type_3</config-property-type>
-            <config-property-value>value_3</config-property-value>
-        </config-property>
-        <config-property>
-            <description>description_4</description>
-            <config-property-name>name_4</config-property-name>
-            <config-property-type>type_4</config-property-type>
-            <config-property-value>value_4</config-property-value>
-        </config-property>
-        <authentication-mechanism>
-            <description>description_0</description>
-            <authentication-mechanism-type>BasicPassword</authentication-mechanism-type>
-            <credential-interface>credentialInterface_0</credential-interface>
-        </authentication-mechanism>
-        <authentication-mechanism>
-            <description>description_1</description>
-            <authentication-mechanism-type>Kerbv5</authentication-mechanism-type>
-            <credential-interface>credentialInterface_1</credential-interface>
-        </authentication-mechanism>
-        <authentication-mechanism>
-            <description>description_2</description>
-            <authentication-mechanism-type>BasicPassword</authentication-mechanism-type>
-            <credential-interface>credentialInterface_2</credential-interface>
-        </authentication-mechanism>
-        <authentication-mechanism>
-            <description>description_3</description>
-            <authentication-mechanism-type>Kerbv5</authentication-mechanism-type>
-            <credential-interface>credentialInterface_3</credential-interface>
-        </authentication-mechanism>
-        <authentication-mechanism>
-            <description>description_4</description>
-            <authentication-mechanism-type>BasicPassword</authentication-mechanism-type>
-            <credential-interface>credentialInterface_4</credential-interface>
-        </authentication-mechanism>
-        <reauthentication-support>true</reauthentication-support>
-        <security-permission>
-            <description>description_0</description>
-            <security-permission-spec>specification_0</security-permission-spec>
-        </security-permission>
-        <security-permission>
-            <description>description_1</description>
-            <security-permission-spec>specification_1</security-permission-spec>
-        </security-permission>
-        <security-permission>
-            <description>description_2</description>
-            <security-permission-spec>specification_2</security-permission-spec>
-        </security-permission>
-        <security-permission>
-            <description>description_3</description>
-            <security-permission-spec>specification_3</security-permission-spec>
-        </security-permission>
-        <security-permission>
-            <description>description_4</description>
-            <security-permission-spec>specification_4</security-permission-spec>
-        </security-permission>
-    </resourceadapter>
-</connector>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAR/META-INF/.modulemaps b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAR/META-INF/.modulemaps
deleted file mode 100644
index aa20a97..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAR/META-INF/.modulemaps
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<modulemap:EARProjectMap xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:modulemap="modulemap.xmi" xmlns:application="application.xmi" xmi:id="EARProjectMap_1">
-  <mappings xmi:id="ModuleMapping_1" projectName="LooseEAREjb">
-    <module xmi:type="application:EjbModule" href="META-INF/application.xml#EjbModule_1"/>
-  </mappings>
-  <mappings xmi:id="ModuleMapping_2" projectName="LooseEARWeb">
-    <module xmi:type="application:WebModule" href="META-INF/application.xml#WebModule_1"/>
-  </mappings>
-</modulemap:EARProjectMap>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAR/META-INF/application.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAR/META-INF/application.xml
deleted file mode 100644
index 56067f6..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAR/META-INF/application.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.2//EN" "http://java.sun.com/j2ee/dtds/application_1_2.dtd">
-<application id="Application_ID">
-	<display-name>LooseEAR</display-name>
-	<module id="EjbModule_1">
-		<ejb>LooseEAREjb.jar</ejb>
-	</module>
-	<module id="WebModule_1">
-		<web>
-			<web-uri>LooseEARWeb.war</web-uri>
-			<context-root>LooseEARWeb</context-root></web>
-	</module>
-</application>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAR/META-INF/ibm-application-ext.xmi b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAR/META-INF/ibm-application-ext.xmi
deleted file mode 100644
index f3fbd0d..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAR/META-INF/ibm-application-ext.xmi
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<applicationext:ApplicationExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:applicationext="applicationext.xmi" xmlns:application="application.xmi" xmi:id="Application_ID_Ext">
-  <moduleExtensions xmi:type="applicationext:EjbModuleExtension" xmi:id="EjbModule_1_Ext" absolutePath="D:\WSAD_DEV\eclipse\workspace\LooseEAREjb\bin">
-    <module xmi:type="application:EjbModule" href="META-INF/application.xml#EjbModule_1"/>
-  </moduleExtensions>
-  <moduleExtensions xmi:type="applicationext:WebModuleExtension" xmi:id="WebModule_1_Ext" absolutePath="D:\WSAD_DEV\eclipse\workspace\LooseEARWeb\webApplication">
-    <module xmi:type="application:WebModule" href="META-INF/application.xml#WebModule_1"/>
-  </moduleExtensions>
-  <application href="META-INF/application.xml#Application_ID"/>
-</applicationext:ApplicationExtension>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARApp/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARApp/META-INF/MANIFEST.MF
deleted file mode 100644
index 59499bc..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARApp/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARApp/META-INF/application.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARApp/META-INF/application.xml
deleted file mode 100644
index b44d91e..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARApp/META-INF/application.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<application id="Application_ID"
-    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">
-    <module>
-        <java>fooAPP</java>
-    </module>
-</application>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARApp/fooAPP/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARApp/fooAPP/META-INF/MANIFEST.MF
deleted file mode 100644
index 59499bc..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARApp/fooAPP/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARApp/fooAPP/META-INF/application-client.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARApp/fooAPP/META-INF/application-client.xml
deleted file mode 100644
index c8bed76..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARApp/fooAPP/META-INF/application-client.xml
+++ /dev/null
@@ -1,272 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE application-client PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application Client 1.3//EN"
-                                    "http://java.sun.com/dtd/application-client_1_3.dtd">
-<application-client id="Application-client_ID">
-    <icon>
-        <small-icon>smallIcon_0</small-icon>
-        <large-icon>largeIcon_0</large-icon>
-    </icon>
-    <display-name>displayName_0</display-name>
-    <description>description_0</description>
-    <env-entry>
-        <description>description_0</description>
-        <env-entry-name>name_0</env-entry-name>
-        <env-entry-type>java.lang.String</env-entry-type>
-        <env-entry-value>value_0</env-entry-value>
-    </env-entry>
-    <env-entry>
-        <description>description_1</description>
-        <env-entry-name>name_1</env-entry-name>
-        <env-entry-type>java.lang.Integer</env-entry-type>
-        <env-entry-value>value_1</env-entry-value>
-    </env-entry>
-    <env-entry>
-        <description>description_2</description>
-        <env-entry-name>name_2</env-entry-name>
-        <env-entry-type>java.lang.Boolean</env-entry-type>
-        <env-entry-value>value_2</env-entry-value>
-    </env-entry>
-    <env-entry>
-        <description>description_3</description>
-        <env-entry-name>name_3</env-entry-name>
-        <env-entry-type>java.lang.Double</env-entry-type>
-        <env-entry-value>value_3</env-entry-value>
-    </env-entry>
-    <env-entry>
-        <description>description_4</description>
-        <env-entry-name>name_4</env-entry-name>
-        <env-entry-type>java.lang.Byte</env-entry-type>
-        <env-entry-value>value_4</env-entry-value>
-    </env-entry>
-    <env-entry>
-        <description>description_0</description>
-        <env-entry-name>name_0</env-entry-name>
-        <env-entry-type>java.lang.String</env-entry-type>
-        <env-entry-value>value_0</env-entry-value>
-    </env-entry>
-    <env-entry>
-        <description>description_1</description>
-        <env-entry-name>name_1</env-entry-name>
-        <env-entry-type>java.lang.Integer</env-entry-type>
-        <env-entry-value>value_1</env-entry-value>
-    </env-entry>
-    <env-entry>
-        <description>description_2</description>
-        <env-entry-name>name_2</env-entry-name>
-        <env-entry-type>java.lang.Boolean</env-entry-type>
-        <env-entry-value>value_2</env-entry-value>
-    </env-entry>
-    <env-entry>
-        <description>description_3</description>
-        <env-entry-name>name_3</env-entry-name>
-        <env-entry-type>java.lang.Double</env-entry-type>
-        <env-entry-value>value_3</env-entry-value>
-    </env-entry>
-    <env-entry>
-        <description>description_4</description>
-        <env-entry-name>name_4</env-entry-name>
-        <env-entry-type>java.lang.Byte</env-entry-type>
-        <env-entry-value>value_4</env-entry-value>
-    </env-entry>
-    <ejb-ref>
-        <description>description_0</description>
-        <ejb-ref-name>name_0</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <home>home_0</home>
-        <remote>remote_0</remote>
-        <ejb-link>link_0</ejb-link>
-    </ejb-ref>
-    <ejb-ref>
-        <description>description_1</description>
-        <ejb-ref-name>name_1</ejb-ref-name>
-        <ejb-ref-type>Entity</ejb-ref-type>
-        <home>home_1</home>
-        <remote>remote_1</remote>
-        <ejb-link>link_1</ejb-link>
-    </ejb-ref>
-    <ejb-ref>
-        <description>description_2</description>
-        <ejb-ref-name>name_2</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <home>home_2</home>
-        <remote>remote_2</remote>
-        <ejb-link>link_2</ejb-link>
-    </ejb-ref>
-    <ejb-ref>
-        <description>description_3</description>
-        <ejb-ref-name>name_3</ejb-ref-name>
-        <ejb-ref-type>Entity</ejb-ref-type>
-        <home>home_3</home>
-        <remote>remote_3</remote>
-        <ejb-link>link_3</ejb-link>
-    </ejb-ref>
-    <ejb-ref>
-        <description>description_4</description>
-        <ejb-ref-name>name_4</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <home>home_4</home>
-        <remote>remote_4</remote>
-        <ejb-link>link_4</ejb-link>
-    </ejb-ref>
-    <ejb-ref>
-        <description>description_0</description>
-        <ejb-ref-name>name_0</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <home>home_0</home>
-        <remote>remote_0</remote>
-        <ejb-link>link_0</ejb-link>
-    </ejb-ref>
-    <ejb-ref>
-        <description>description_1</description>
-        <ejb-ref-name>name_1</ejb-ref-name>
-        <ejb-ref-type>Entity</ejb-ref-type>
-        <home>home_1</home>
-        <remote>remote_1</remote>
-        <ejb-link>link_1</ejb-link>
-    </ejb-ref>
-    <ejb-ref>
-        <description>description_2</description>
-        <ejb-ref-name>name_2</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <home>home_2</home>
-        <remote>remote_2</remote>
-        <ejb-link>link_2</ejb-link>
-    </ejb-ref>
-    <ejb-ref>
-        <description>description_3</description>
-        <ejb-ref-name>name_3</ejb-ref-name>
-        <ejb-ref-type>Entity</ejb-ref-type>
-        <home>home_3</home>
-        <remote>remote_3</remote>
-        <ejb-link>link_3</ejb-link>
-    </ejb-ref>
-    <ejb-ref>
-        <description>description_4</description>
-        <ejb-ref-name>name_4</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <home>home_4</home>
-        <remote>remote_4</remote>
-        <ejb-link>link_4</ejb-link>
-    </ejb-ref>
-    <resource-ref>
-        <description>description_0</description>
-        <res-ref-name>name_0</res-ref-name>
-        <res-type>type_0</res-type>
-        <res-auth>Container</res-auth>
-        <res-sharing-scope>Shareable</res-sharing-scope>
-    </resource-ref>
-    <resource-ref>
-        <description>description_1</description>
-        <res-ref-name>name_1</res-ref-name>
-        <res-type>type_1</res-type>
-        <res-auth>Container</res-auth>
-        <res-sharing-scope>Unshareable</res-sharing-scope>
-    </resource-ref>
-    <resource-ref>
-        <description>description_2</description>
-        <res-ref-name>name_2</res-ref-name>
-        <res-type>type_2</res-type>
-        <res-auth>Application</res-auth>
-        <res-sharing-scope>Shareable</res-sharing-scope>
-    </resource-ref>
-    <resource-ref>
-        <description>description_3</description>
-        <res-ref-name>name_3</res-ref-name>
-        <res-type>type_3</res-type>
-        <res-auth>Application</res-auth>
-        <res-sharing-scope>Unshareable</res-sharing-scope>
-    </resource-ref>
-    <resource-ref>
-        <description>description_4</description>
-        <res-ref-name>name_4</res-ref-name>
-        <res-type>type_4</res-type>
-        <res-auth>Application</res-auth>
-        <res-sharing-scope>Shareable</res-sharing-scope>
-    </resource-ref>
-    <resource-ref>
-        <description>description_0</description>
-        <res-ref-name>name_0</res-ref-name>
-        <res-type>type_0</res-type>
-        <res-auth>Container</res-auth>
-        <res-sharing-scope>Shareable</res-sharing-scope>
-    </resource-ref>
-    <resource-ref>
-        <description>description_1</description>
-        <res-ref-name>name_1</res-ref-name>
-        <res-type>type_1</res-type>
-        <res-auth>Application</res-auth>
-        <res-sharing-scope>Unshareable</res-sharing-scope>
-    </resource-ref>
-    <resource-ref>
-        <description>description_2</description>
-        <res-ref-name>name_2</res-ref-name>
-        <res-type>type_2</res-type>
-        <res-auth>SERVLET</res-auth>
-        <res-sharing-scope>Shareable</res-sharing-scope>
-    </resource-ref>
-    <resource-ref>
-        <description>description_3</description>
-        <res-ref-name>name_3</res-ref-name>
-        <res-type>type_3</res-type>
-        <res-auth>Container</res-auth>
-        <res-sharing-scope>Unshareable</res-sharing-scope>
-    </resource-ref>
-    <resource-ref>
-        <description>description_4</description>
-        <res-ref-name>name_4</res-ref-name>
-        <res-type>type_4</res-type>
-        <res-auth>Application</res-auth>
-        <res-sharing-scope>Shareable</res-sharing-scope>
-    </resource-ref>
-    <resource-env-ref>
-        <description>description_0</description>
-        <resource-env-ref-name>name_0</resource-env-ref-name>
-        <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-    </resource-env-ref>
-    <resource-env-ref>
-        <description>description_1</description>
-        <resource-env-ref-name>name_1</resource-env-ref-name>
-        <resource-env-ref-type>java.util.List</resource-env-ref-type>
-    </resource-env-ref>
-    <resource-env-ref>
-        <description>description_2</description>
-        <resource-env-ref-name>name_2</resource-env-ref-name>
-        <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-    </resource-env-ref>
-    <resource-env-ref>
-        <description>description_3</description>
-        <resource-env-ref-name>name_3</resource-env-ref-name>
-        <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-    </resource-env-ref>
-    <resource-env-ref>
-        <description>description_4</description>
-        <resource-env-ref-name>name_4</resource-env-ref-name>
-        <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-    </resource-env-ref>
-    <resource-env-ref>
-        <description>description_0</description>
-        <resource-env-ref-name>name_0</resource-env-ref-name>
-        <resource-env-ref-type>java.util.HashTable</resource-env-ref-type>
-    </resource-env-ref>
-    <resource-env-ref>
-        <description>description_1</description>
-        <resource-env-ref-name>name_1</resource-env-ref-name>
-        <resource-env-ref-type>java.util.List</resource-env-ref-type>
-    </resource-env-ref>
-    <resource-env-ref>
-        <description>description_2</description>
-        <resource-env-ref-name>name_2</resource-env-ref-name>
-        <resource-env-ref-type>java.sql.Data</resource-env-ref-type>
-    </resource-env-ref>
-    <resource-env-ref>
-        <description>description_3</description>
-        <resource-env-ref-name>name_3</resource-env-ref-name>
-        <resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
-    </resource-env-ref>
-    <resource-env-ref>
-        <description>description_4</description>
-        <resource-env-ref-name>name_4</resource-env-ref-name>
-        <resource-env-ref-type>java.lang.String</resource-env-ref-type>
-    </resource-env-ref>
-    <callback-handler>java.util.HashTable</callback-handler>
-</application-client>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/.classpath b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/.classpath
deleted file mode 100644
index b25cae2..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="ejbModule"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere Application Server v6.0 JRE"/>
-	<classpathentry kind="con" path="com.ibm.wtp.server.java.core.container/com.ibm.ws.ast.st.runtime.core.runtimeTarget.v60/WebSphere Application Server v6.0"/>
-	<classpathentry kind="output" path="ejbModule"/>
-</classpath>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/.j2ee b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/.j2ee
deleted file mode 100644
index 659969d..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/.j2ee
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<j2eesettings version="600">
-<moduleversion>20</moduleversion>
-</j2eesettings>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/.project b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/.project
deleted file mode 100644
index a84f751..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/.project
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>LooseEAREjb</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>com.ibm.wtp.migration.MigrationBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>com.ibm.etools.validation.validationbuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>com.ibm.wtp.j2ee.LibCopyBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>com.ibm.etools.j2ee.LibCopyBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
-		<nature>com.ibm.etools.j2ee.EJB2_0Nature</nature>
-		<nature>com.ibm.wtp.ejb.EJBNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.jem.beaninfo.BeanInfoNature</nature>
-	</natures>
-</projectDescription>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/.runtime b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/.runtime
deleted file mode 100644
index ddc5d41..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/.runtime
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<runtime runtime-id="WebSphere Application Server v6.0"/>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/META-INF/MANIFEST.MF
deleted file mode 100644
index 7ebad27..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Class-Path: util.jar ../boo.jar
-
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/META-INF/ejb-jar.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/META-INF/ejb-jar.xml
deleted file mode 100644
index bdce1e4..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/META-INF/ejb-jar.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd">
-<ejb-jar id="ejb-jar_ID">
-	<display-name>LooseEAREjb</display-name>
-	<enterprise-beans>
-		<entity id="MyCMP">
-			<ejb-name>MyCMP</ejb-name>
-			<home>com.ibm.test.ejb.MyCMPHome</home>
-			<remote>com.ibm.test.ejb.MyCMP</remote>
-			<ejb-class>com.ibm.test.ejb.MyCMPBean</ejb-class>
-			<persistence-type>Container</persistence-type>
-			<prim-key-class>com.ibm.test.ejb.MyCMPKey</prim-key-class>
-			<reentrant>False</reentrant>
-			<cmp-field>
-				<field-name>k1</field-name>
-			</cmp-field>
-		</entity>
-	</enterprise-beans>
-</ejb-jar>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/META-INF/ibm-ejb-jar-bnd.xmi b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/META-INF/ibm-ejb-jar-bnd.xmi
deleted file mode 100644
index 573af4e..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/META-INF/ibm-ejb-jar-bnd.xmi
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ejbbnd:EJBJarBinding xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ejbbnd="ejbbnd.xmi" xmlns:ejb="ejb.xmi" xmi:id="ejb-jar_ID_Bnd">
-  <ejbJar href="META-INF/ejb-jar.xml#ejb-jar_ID"/>
-  <ejbBindings xmi:id="MyCMP_Bnd" jndiName="ejb/com/ibm/test/ejb/MyCMPHome">
-    <enterpriseBean xmi:type="ejb:ContainerManagedEntity" href="META-INF/ejb-jar.xml#MyCMP"/>
-  </ejbBindings>
-</ejbbnd:EJBJarBinding>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/META-INF/ibm-ejb-jar-ext.xmi b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/META-INF/ibm-ejb-jar-ext.xmi
deleted file mode 100644
index 46e70a8..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/META-INF/ibm-ejb-jar-ext.xmi
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ejbext:EJBJarExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ejbext="ejbext.xmi" xmlns:ejb="ejb.xmi" xmi:id="ejb-jar_ID">
-  <ejbJar href="META-INF/ejb-jar.xml#ejb-jar_ID"/>
-</ejbext:EJBJarExtension>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/com/ibm/test/ejb/MyCMP.class b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/com/ibm/test/ejb/MyCMP.class
deleted file mode 100644
index 51f7277..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/com/ibm/test/ejb/MyCMP.class
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/com/ibm/test/ejb/MyCMPBean.class b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/com/ibm/test/ejb/MyCMPBean.class
deleted file mode 100644
index 78ced2f..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/com/ibm/test/ejb/MyCMPBean.class
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/com/ibm/test/ejb/MyCMPHome.class b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/com/ibm/test/ejb/MyCMPHome.class
deleted file mode 100644
index 0492590..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/com/ibm/test/ejb/MyCMPHome.class
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/com/ibm/test/ejb/MyCMPKey.class b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/com/ibm/test/ejb/MyCMPKey.class
deleted file mode 100644
index 91b6702..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/bin/com/ibm/test/ejb/MyCMPKey.class
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/META-INF/MANIFEST.MF
deleted file mode 100644
index 59499bc..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/META-INF/ejb-jar.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/META-INF/ejb-jar.xml
deleted file mode 100644
index 46bae90..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/META-INF/ejb-jar.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
-<ejb-jar id="ejb-jar_ID">
-	<display-name>LooseEAREjb</display-name>
-	<enterprise-beans>
-		<entity id="CMP1">
-			<ejb-name>CMP1</ejb-name>
-			<local-home>ejbs.CMP1LocalHome</local-home>
-			<local>ejbs.CMP1Local</local>
-			<ejb-class>ejbs.CMP1Bean</ejb-class>
-			<persistence-type>Container</persistence-type>
-			<prim-key-class>ejbs.CMP1Key</prim-key-class>
-			<reentrant>False</reentrant>
-			<cmp-version>2.x</cmp-version>
-			<abstract-schema-name>CMP1</abstract-schema-name>
-			<cmp-field>
-				<field-name>id</field-name>
-			</cmp-field>
-		</entity>
-		<entity id="CMP2">
-			<ejb-name>CMP2</ejb-name>
-			<local-home>ejbs.CMP2LocalHome</local-home>
-			<local>ejbs.CMP2Local</local>
-			<ejb-class>ejbs.CMP2Bean</ejb-class>
-			<persistence-type>Container</persistence-type>
-			<prim-key-class>ejbs.CMP2Key</prim-key-class>
-			<reentrant>False</reentrant>
-			<cmp-version>2.x</cmp-version>
-			<abstract-schema-name>CMP2</abstract-schema-name>
-			<cmp-field>
-				<field-name>id</field-name>
-			</cmp-field>
-		</entity>
-	</enterprise-beans>
-</ejb-jar>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/META-INF/ibm-ejb-jar-bnd.xmi b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/META-INF/ibm-ejb-jar-bnd.xmi
deleted file mode 100644
index a08df99..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/META-INF/ibm-ejb-jar-bnd.xmi
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ejbbnd:EJBJarBinding xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ejb="ejb.xmi" xmlns:ejbbnd="ejbbnd.xmi" xmi:id="EJBJarBinding_1099076698481">
-  <ejbJar href="META-INF/ejb-jar.xml#ejb-jar_ID"/>
-  <ejbBindings xmi:id="EnterpriseBeanBinding_1099076698491" jndiName="ejb/ejbs/CMP1LocalHome">
-    <enterpriseBean xmi:type="ejb:ContainerManagedEntity" href="META-INF/ejb-jar.xml#CMP1"/>
-  </ejbBindings>
-  <ejbBindings xmi:id="EnterpriseBeanBinding_1099076729295" jndiName="ejb/ejbs/CMP2LocalHome">
-    <enterpriseBean xmi:type="ejb:ContainerManagedEntity" href="META-INF/ejb-jar.xml#CMP2"/>
-  </ejbBindings>
-  <defaultCMPConnectionFactory xmi:id="CMPConnectionFactoryBinding_1099076698491" jndiName="jdbc/Default" resAuth="Per_Connection_Factory"/>
-</ejbbnd:EJBJarBinding>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/META-INF/ibm-ejb-jar-ext.xmi b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/META-INF/ibm-ejb-jar-ext.xmi
deleted file mode 100644
index 46e70a8..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/META-INF/ibm-ejb-jar-ext.xmi
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ejbext:EJBJarExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ejbext="ejbext.xmi" xmlns:ejb="ejb.xmi" xmi:id="ejb-jar_ID">
-  <ejbJar href="META-INF/ejb-jar.xml#ejb-jar_ID"/>
-</ejbext:EJBJarExtension>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/com/ibm/test/ejb/MyCMP.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/com/ibm/test/ejb/MyCMP.java
deleted file mode 100644
index 12b8b7c..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/com/ibm/test/ejb/MyCMP.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.ibm.test.ejb;
-/**
- * Remote interface for Enterprise Bean: MyCMP
- */
-public interface MyCMP extends javax.ejb.EJBObject {
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/com/ibm/test/ejb/MyCMPBean.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/com/ibm/test/ejb/MyCMPBean.java
deleted file mode 100644
index bcdb044..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/com/ibm/test/ejb/MyCMPBean.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.ibm.test.ejb;
-/**
- * Bean implementation class for Enterprise Bean: MyCMP
- */
-public class MyCMPBean extends com.ibm.test.A implements javax.ejb.EntityBean {
-	private javax.ejb.EntityContext myEntityCtx;
-	/**
-	 * Implemetation field for persistent attribute: k1
-	 */
-	public java.lang.String k1;
-	/**
-	 * getEntityContext
-	 */
-	public javax.ejb.EntityContext getEntityContext() {
-		return myEntityCtx;
-	}
-	/**
-	 * setEntityContext
-	 */
-	public void setEntityContext(javax.ejb.EntityContext ctx) {
-		myEntityCtx = ctx;
-	}
-	/**
-	 * unsetEntityContext
-	 */
-	public void unsetEntityContext() {
-		myEntityCtx = null;
-	}
-	/**
-	 * ejbActivate
-	 */
-	public void ejbActivate() {
-		_initLinks();
-	}
-	/**
-	 * ejbCreate method for a CMP entity bean.
-	 */
-	public com.ibm.test.ejb.MyCMPKey ejbCreate(java.lang.String k1) throws javax.ejb.CreateException {
-		_initLinks();
-		this.k1 = k1;
-		return null;
-	}
-	/**
-	 * ejbLoad
-	 */
-	public void ejbLoad() {
-		_initLinks();
-	}
-	/**
-	 * ejbPassivate
-	 */
-	public void ejbPassivate() {
-	}
-	/**
-	 * ejbPostCreate
-	 */
-	public void ejbPostCreate(java.lang.String k1) throws javax.ejb.CreateException {
-	}
-	/**
-	 * ejbRemove
-	 */
-	public void ejbRemove() throws javax.ejb.RemoveException {
-		try {
-			_removeLinks();
-		} catch (java.rmi.RemoteException e) {
-			throw new javax.ejb.RemoveException(e.getMessage());
-		}
-	}
-	/**
-	 * ejbStore
-	 */
-	public void ejbStore() {
-	}
-	/**
-	 * This method was generated for supporting the associations.
-	 */
-	protected void _initLinks() {
-	}
-	/**
-	 * This method was generated for supporting the associations.
-	 */
-	protected java.util.Vector _getLinks() {
-		java.util.Vector links = new java.util.Vector();
-		return links;
-	}
-	/**
-	 * This method was generated for supporting the associations.
-	 */
-	protected void _removeLinks() throws java.rmi.RemoteException, javax.ejb.RemoveException {
-		java.util.List links = _getLinks();
-		for (int i = 0; i < links.size() ; i++) {
-			try {
-				((com.ibm.ivj.ejb.associations.interfaces.Link) links.get(i)).remove();
-			} catch (javax.ejb.FinderException e) {} //Consume Finder error since I am going away
-		}
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/com/ibm/test/ejb/MyCMPHome.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/com/ibm/test/ejb/MyCMPHome.java
deleted file mode 100644
index 7c09f21..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/com/ibm/test/ejb/MyCMPHome.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.ibm.test.ejb;
-/**
- * Home interface for Enterprise Bean: MyCMP
- */
-public interface MyCMPHome extends javax.ejb.EJBHome {
-	/**
-	 * Creates an instance from a key for Entity Bean: MyCMP
-	 */
-	public com.ibm.test.ejb.MyCMP create(java.lang.String k1) throws javax.ejb.CreateException, java.rmi.RemoteException;
-	/**
-	 * Finds an instance using a key for Entity Bean: MyCMP
-	 */
-	public com.ibm.test.ejb.MyCMP findByPrimaryKey(com.ibm.test.ejb.MyCMPKey primaryKey) throws javax.ejb.FinderException, java.rmi.RemoteException;
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/com/ibm/test/ejb/MyCMPKey.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/com/ibm/test/ejb/MyCMPKey.java
deleted file mode 100644
index 7aa6f79..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/com/ibm/test/ejb/MyCMPKey.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.ibm.test.ejb;
-/**
- * Key class for Entity Bean: MyCMP
- */
-public class MyCMPKey extends com.ibm.test.A implements java.io.Serializable {
-
-	static final long serialVersionUID = 3206093459760846163L;
-	/**
-	 * Implemetation field for persistent attribute: k1
-	 */
-	public java.lang.String k1;
-	/**
-	 * Creates an empty key for Entity Bean: MyCMP
-	 */
-	public MyCMPKey() {
-	}
-	/**
-	 * Returns true if both keys are equal.
-	 */
-	public boolean equals(java.lang.Object otherKey) {
-		if (otherKey instanceof com.ibm.test.ejb.MyCMPKey) {
-			com.ibm.test.ejb.MyCMPKey o = (com.ibm.test.ejb.MyCMPKey)otherKey;
-			return ((this.k1.equals(o.k1)));
-		}
-		return false;
-	}
-	/**
-	 * Returns the hash code for the key.
-	 */
-	public int hashCode() {
-		return (k1.hashCode());
-	}
-	/**
-	 * Creates a key for Entity Bean: MyCMP
-	 */
-	public MyCMPKey(java.lang.String k1) {
-		this.k1 = k1;
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP1Bean.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP1Bean.java
deleted file mode 100644
index 7972747..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP1Bean.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package ejbs;
-/**
- * Bean implementation class for Enterprise Bean: CMP1
- */
-public abstract class CMP1Bean implements javax.ejb.EntityBean {
-	private javax.ejb.EntityContext myEntityCtx;
-	/**
-	 * setEntityContext
-	 */
-	public void setEntityContext(javax.ejb.EntityContext ctx) {
-		myEntityCtx = ctx;
-	}
-	/**
-	 * getEntityContext
-	 */
-	public javax.ejb.EntityContext getEntityContext() {
-		return myEntityCtx;
-	}
-	/**
-	 * unsetEntityContext
-	 */
-	public void unsetEntityContext() {
-		myEntityCtx = null;
-	}
-	/**
-	 * ejbCreate
-	 */
-	public ejbs.CMP1Key ejbCreate(java.lang.Integer id)
-		throws javax.ejb.CreateException {
-		setId(id);
-		return null;
-	}
-	/**
-	 * ejbPostCreate
-	 */
-	public void ejbPostCreate(java.lang.Integer id)
-		throws javax.ejb.CreateException {
-	}
-	/**
-	 * ejbActivate
-	 */
-	public void ejbActivate() {
-	}
-	/**
-	 * ejbLoad
-	 */
-	public void ejbLoad() {
-	}
-	/**
-	 * ejbPassivate
-	 */
-	public void ejbPassivate() {
-	}
-	/**
-	 * ejbRemove
-	 */
-	public void ejbRemove() throws javax.ejb.RemoveException {
-	}
-	/**
-	 * ejbStore
-	 */
-	public void ejbStore() {
-	}
-	/**
-	 * Get accessor for persistent attribute: id
-	 */
-	public abstract java.lang.Integer getId();
-	/**
-	 * Set accessor for persistent attribute: id
-	 */
-	public abstract void setId(java.lang.Integer newId);
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP1Key.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP1Key.java
deleted file mode 100644
index 6924016..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP1Key.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package ejbs;
-/**
- * Key class for Entity Bean: CMP1
- */
-public class CMP1Key implements java.io.Serializable {
-	static final long serialVersionUID = 3206093459760846163L;
-	/**
-	 * Implementation field for persistent attribute: id
-	 */
-	public java.lang.Integer id;
-	/**
-	 * Creates an empty key for Entity Bean: CMP1
-	 */
-	public CMP1Key() {
-	}
-	/**
-	 * Creates a key for Entity Bean: CMP1
-	 */
-	public CMP1Key(java.lang.Integer id) {
-		this.id = id;
-	}
-	/**
-	 * Returns true if both keys are equal.
-	 */
-	public boolean equals(java.lang.Object otherKey) {
-		if (otherKey instanceof ejbs.CMP1Key) {
-			ejbs.CMP1Key o = (ejbs.CMP1Key) otherKey;
-			return ((this.id.equals(o.id)));
-		}
-		return false;
-	}
-	/**
-	 * Returns the hash code for the key.
-	 */
-	public int hashCode() {
-		return (id.hashCode());
-	}
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP1Local.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP1Local.java
deleted file mode 100644
index bdfdb59..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP1Local.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package ejbs;
-/**
- * Local interface for Enterprise Bean: CMP1
- */
-public interface CMP1Local extends javax.ejb.EJBLocalObject {
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP1LocalHome.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP1LocalHome.java
deleted file mode 100644
index d856a30..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP1LocalHome.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package ejbs;
-/**
- * Local Home interface for Enterprise Bean: CMP1
- */
-public interface CMP1LocalHome extends javax.ejb.EJBLocalHome {
-	/**
-	 * Creates an instance from a key for Entity Bean: CMP1
-	 */
-	public ejbs.CMP1Local create(java.lang.Integer id)
-		throws javax.ejb.CreateException;
-	/**
-	 * Finds an instance using a key for Entity Bean: CMP1
-	 */
-	public ejbs.CMP1Local findByPrimaryKey(ejbs.CMP1Key primaryKey)
-		throws javax.ejb.FinderException;
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP2Bean.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP2Bean.java
deleted file mode 100644
index b69abe1..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP2Bean.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package ejbs;
-/**
- * Bean implementation class for Enterprise Bean: CMP2
- */
-public abstract class CMP2Bean implements javax.ejb.EntityBean {
-	private javax.ejb.EntityContext myEntityCtx;
-	/**
-	 * setEntityContext
-	 */
-	public void setEntityContext(javax.ejb.EntityContext ctx) {
-		myEntityCtx = ctx;
-	}
-	/**
-	 * getEntityContext
-	 */
-	public javax.ejb.EntityContext getEntityContext() {
-		return myEntityCtx;
-	}
-	/**
-	 * unsetEntityContext
-	 */
-	public void unsetEntityContext() {
-		myEntityCtx = null;
-	}
-	/**
-	 * ejbCreate
-	 */
-	public ejbs.CMP2Key ejbCreate(java.lang.Integer id)
-		throws javax.ejb.CreateException {
-		setId(id);
-		return null;
-	}
-	/**
-	 * ejbPostCreate
-	 */
-	public void ejbPostCreate(java.lang.Integer id)
-		throws javax.ejb.CreateException {
-	}
-	/**
-	 * ejbActivate
-	 */
-	public void ejbActivate() {
-	}
-	/**
-	 * ejbLoad
-	 */
-	public void ejbLoad() {
-	}
-	/**
-	 * ejbPassivate
-	 */
-	public void ejbPassivate() {
-	}
-	/**
-	 * ejbRemove
-	 */
-	public void ejbRemove() throws javax.ejb.RemoveException {
-	}
-	/**
-	 * ejbStore
-	 */
-	public void ejbStore() {
-	}
-	/**
-	 * Get accessor for persistent attribute: id
-	 */
-	public abstract java.lang.Integer getId();
-	/**
-	 * Set accessor for persistent attribute: id
-	 */
-	public abstract void setId(java.lang.Integer newId);
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP2Key.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP2Key.java
deleted file mode 100644
index 38e9bc7..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP2Key.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package ejbs;
-/**
- * Key class for Entity Bean: CMP2
- */
-public class CMP2Key implements java.io.Serializable {
-	static final long serialVersionUID = 3206093459760846163L;
-	/**
-	 * Implementation field for persistent attribute: id
-	 */
-	public java.lang.Integer id;
-	/**
-	 * Creates an empty key for Entity Bean: CMP2
-	 */
-	public CMP2Key() {
-	}
-	/**
-	 * Creates a key for Entity Bean: CMP2
-	 */
-	public CMP2Key(java.lang.Integer id) {
-		this.id = id;
-	}
-	/**
-	 * Returns true if both keys are equal.
-	 */
-	public boolean equals(java.lang.Object otherKey) {
-		if (otherKey instanceof ejbs.CMP2Key) {
-			ejbs.CMP2Key o = (ejbs.CMP2Key) otherKey;
-			return ((this.id.equals(o.id)));
-		}
-		return false;
-	}
-	/**
-	 * Returns the hash code for the key.
-	 */
-	public int hashCode() {
-		return (id.hashCode());
-	}
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP2Local.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP2Local.java
deleted file mode 100644
index f6ac730..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP2Local.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package ejbs;
-/**
- * Local interface for Enterprise Bean: CMP2
- */
-public interface CMP2Local extends javax.ejb.EJBLocalObject {
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP2LocalHome.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP2LocalHome.java
deleted file mode 100644
index 8a1bdf9..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEAREjb/ejbModule/ejbs/CMP2LocalHome.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package ejbs;
-/**
- * Local Home interface for Enterprise Bean: CMP2
- */
-public interface CMP2LocalHome extends javax.ejb.EJBLocalHome {
-	/**
-	 * Creates an instance from a key for Entity Bean: CMP2
-	 */
-	public ejbs.CMP2Local create(java.lang.Integer id)
-		throws javax.ejb.CreateException;
-	/**
-	 * Finds an instance using a key for Entity Bean: CMP2
-	 */
-	public ejbs.CMP2Local findByPrimaryKey(ejbs.CMP2Key primaryKey)
-		throws javax.ejb.FinderException;
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/.classpath b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/.classpath
deleted file mode 100644
index 71bb38b..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/.classpath
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-    <classpathentry kind="var" path="SERVERJDK_PLUGINDIR/jre/lib/rt.jar"
-        rootpath="src" sourcepath="SERVERJDK_PLUGINDIR/src.jar"/>
-    <classpathentry kind="src" path="source"/>
-    <classpathentry kind="var" path="WAS_PLUGINDIR/lib/j2ee.jar"/>
-    <classpathentry kind="var" path="WAS_PLUGINDIR/lib/webcontainer.jar"/>
-    <classpathentry kind="var" path="WAS_PLUGINDIR/lib/ivjejb35.jar"/>
-    <classpathentry kind="var" path="WAS_PLUGINDIR/lib/websphere.jar"/>
-    <classpathentry kind="output" path="webApplication\WEB-INF\classes"/>
-</classpath>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/.websettings b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/.websettings
deleted file mode 100644
index 0e5b9a8..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/.websettings
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<websettings>
-	<context-root>LooseEARWeb</context-root>
-</websettings>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/source/com/ibm/test/web/C.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/source/com/ibm/test/web/C.java
deleted file mode 100644
index b71b394..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/source/com/ibm/test/web/C.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.ibm.test.web;
-public class C {
-
-	/**
-	 * Constructor for C
-	 */
-	public C() {
-		super();
-	}
-
-	public static void main(String[] args) {
-	}
-}
-
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/webApplication/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/webApplication/META-INF/MANIFEST.MF
deleted file mode 100644
index 735160a..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/webApplication/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Class-Path: LooseEAREjb.jar
-
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/webApplication/WEB-INF/classes/com/ibm/test/web/C.class b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/webApplication/WEB-INF/classes/com/ibm/test/web/C.class
deleted file mode 100644
index 4051131..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/webApplication/WEB-INF/classes/com/ibm/test/web/C.class
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/webApplication/WEB-INF/ibm-web-bnd.xmi b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/webApplication/WEB-INF/ibm-web-bnd.xmi
deleted file mode 100644
index d74844b..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/webApplication/WEB-INF/ibm-web-bnd.xmi
+++ /dev/null
@@ -1,3 +0,0 @@
-<webappbnd:WebAppBinding xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:webappbnd="webappbnd.xmi" xmlns:webapplication="webapplication.xmi" xmi:id="WebAppBinding_1" virtualHostName="default_host">
-	<webapp href="WEB-INF/web.xml#WebApp"/>
-</webappbnd:WebAppBinding>
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/webApplication/WEB-INF/ibm-web-ext.xmi b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/webApplication/WEB-INF/ibm-web-ext.xmi
deleted file mode 100644
index 82ec262..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/webApplication/WEB-INF/ibm-web-ext.xmi
+++ /dev/null
@@ -1,10 +0,0 @@
-<webappext:WebAppExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:webappext="webappext.xmi" xmlns:webapplication="webapplication.xmi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmi:id="WebAppExtension_1"
-  reloadInterval="3"
-  reloadingEnabled="true"
-  defaultErrorPage="error.jsp"
-  additionalClassPath=""
-  fileServingEnabled="true"
-  directoryBrowsingEnabled="false"
-  serveServletsByClassnameEnabled="true">
-	<webApp href="WEB-INF/web.xml#WebApp"/>
-</webappext:WebAppExtension>
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/webApplication/WEB-INF/web.xml b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/webApplication/WEB-INF/web.xml
deleted file mode 100644
index 1412efd..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseEARWeb/webApplication/WEB-INF/web.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
-<web-app id="WebApp">
-	<display-name>LooseEARWeb</display-name>
-	<welcome-file-list>
-		<welcome-file>index.html</welcome-file>
-		<welcome-file>index.htm</welcome-file>
-		<welcome-file>index.jsp</welcome-file>
-		<welcome-file>default.html</welcome-file>
-		<welcome-file>default.htm</welcome-file>
-		<welcome-file>default.jsp</welcome-file>
-	</welcome-file-list>
-</web-app>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseJavaUtil/.classpath b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseJavaUtil/.classpath
deleted file mode 100644
index d8b3fa0..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseJavaUtil/.classpath
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-    <classpathentry kind="src" path="src"/>
-    <classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/>
-    <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseJavaUtil/bin/com/ibm/test/A.class b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseJavaUtil/bin/com/ibm/test/A.class
deleted file mode 100644
index bfcfff0..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseJavaUtil/bin/com/ibm/test/A.class
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseJavaUtil/src/com/ibm/test/A.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseJavaUtil/src/com/ibm/test/A.java
deleted file mode 100644
index 07f09c1..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseJavaUtil/src/com/ibm/test/A.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.ibm.test;
-public class A {
-
-	/**
-	 * Constructor for A
-	 */
-	public A() {
-		super();
-	}
-
-	public static void main(String[] args) {
-	}
-}
-
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseJavaWebLib/.classpath b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseJavaWebLib/.classpath
deleted file mode 100644
index d8b3fa0..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseJavaWebLib/.classpath
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-    <classpathentry kind="src" path="src"/>
-    <classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/>
-    <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseJavaWebLib/bin/com/ibm/web/test/B.class b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseJavaWebLib/bin/com/ibm/web/test/B.class
deleted file mode 100644
index e3ee564..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseJavaWebLib/bin/com/ibm/web/test/B.class
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseJavaWebLib/src/com/ibm/web/test/B.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseJavaWebLib/src/com/ibm/web/test/B.java
deleted file mode 100644
index ab18533..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/LooseJavaWebLib/src/com/ibm/web/test/B.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.ibm.web.test;
-public class B {
-
-	/**
-	 * Constructor for B
-	 */
-	public B() {
-		super();
-	}
-
-	public static void main(String[] args) {
-	}
-}
-
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/boo.jar/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/boo.jar/META-INF/MANIFEST.MF
deleted file mode 100644
index 1743e3d..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/boo.jar/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,4 +0,0 @@
-Manifest-Version: 1.0
-Class-Path: util.jar LooseEAREjb/bin foobar.jar 
-
-
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/foobar.jar b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/foobar.jar
deleted file mode 100644
index e69de29..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/foobar.jar
+++ /dev/null
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/readme.txt b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/readme.txt
deleted file mode 100644
index 7b195b4..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveResources/loose_module_workspace/readme.txt
+++ /dev/null
@@ -1 +0,0 @@
-This is not a full WSAD workspace; it is just the files necessary to emulate one, for unit testing the runtime
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/AllDOMTests.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/AllDOMTests.java
deleted file mode 100644
index 3049b94..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/AllDOMTests.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Created on Sep 5, 2003
- *
- */
-package org.eclipse.jst.j2ee.archive.emftests;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.wst.common.internal.emf.resource.EMF2DOMRendererFactory;
-import org.eclipse.wst.common.internal.emf.resource.RendererFactory;
-
-/**
- * @author Administrator
- */
-public class AllDOMTests extends TestCase{
-	
-	private RendererFactory defaultRendererFactory;
-
-    public AllDOMTests(String name) {
-		super(name);
-	}
-	
-	public AllDOMTests(String name, RendererFactory rf) {
-		super(name);
-		this.defaultRendererFactory = rf;
-	}
-	
-	public static Test suite() {
-		TestSuite suite = new TestSuite("Test for com.ibm.etools.archive.emftest");
-		//$JUnit-BEGIN$
-		suite.addTest(new AllDOMTests("testSwitchRenderer", RendererFactory.getDefaultRendererFactory()));
-		suite.addTest(AppClientEMFEditTest.suite());
-		suite.addTest(AppClientEMFTest.suite());
-		suite.addTest(EarEMFEditTest.suite());
-		suite.addTest(EarEMFTest.suite()); //
-		suite.addTest(EjbEMFEditTest.suite());
-		suite.addTest(EjbEMFTest.suite());
-		suite.addTest(RarEMFEditTest.suite());
-		suite.addTest(RarEMFTest.suite());
-		suite.addTest(WarEMFEditTest.suite());
-		suite.addTest(WarEMFTest.suite());
-		suite.addTest(WebServicesEMFTest.suite());
-		suite.addTest(new AllDOMTests("testSwitchRendererBack", RendererFactory.getDefaultRendererFactory()));
- 
-		//$JUnit-END$
-		return suite;
-	}
-	
-	public static void main(java.lang.String[] args) {
-		 junit.textui.TestRunner.main(new String[] { AllDOMTests.class.getName() });
-	}	
-	
-	public void testSwitchRenderer() {
-		RendererFactory.setDefaultRendererFactory(EMF2DOMRendererFactory.INSTANCE);
-	
-	}
-
-	public void testSwitchRendererBack() {
-		RendererFactory.setDefaultRendererFactory(defaultRendererFactory);
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/AllSAXTests.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/AllSAXTests.java
deleted file mode 100644
index 74c326f..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/AllSAXTests.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Created on Sep 5, 2003
- *
- */
-package org.eclipse.jst.j2ee.archive.emftests;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.wst.common.internal.emf.resource.EMF2SAXRendererFactory;
-import org.eclipse.wst.common.internal.emf.resource.RendererFactory;
-
-/**
- * @author Administrator
- */
-public class AllSAXTests extends TestCase{
-
-	private RendererFactory defaultRendererFactory;
-	
-	AllTests tests = new AllTests(); // force the class to load if this test is loaded 
-  
-	public AllSAXTests(String name) {
-		super(name);
-	} 
-
-	public AllSAXTests(String name, RendererFactory rf) {
-		super(name);
-		this.defaultRendererFactory = rf;
-	}
-	
-	public static Test suite() {
-		TestSuite suite = new TestSuite("Test for com.ibm.etools.archive.emftest");
-		//$JUnit-BEGIN$
-		suite.addTest(new AllSAXTests("testSwitchRenderer", RendererFactory.getDefaultRendererFactory()));
-		suite.addTest(AppClientEMFEditTest.suite());
-		suite.addTest(AppClientEMFTest.suite());
-		suite.addTest(EarEMFEditTest.suite());
-		suite.addTest(EarEMFTest.suite()); //
-		suite.addTest(EjbEMFEditTest.suite());
-		suite.addTest(EjbEMFTest.suite());
-		suite.addTest(RarEMFEditTest.suite());
-		suite.addTest(RarEMFTest.suite());
-		suite.addTest(WarEMFEditTest.suite());
-		suite.addTest(WarEMFTest.suite());
-		suite.addTest(WebServicesEMFTest.suite());
-		suite.addTest(new AllSAXTests("testSwitchRendererBack", RendererFactory.getDefaultRendererFactory()));
-
-		//$JUnit-END$
-		return suite;
-	}
-	
-	public static void main(java.lang.String[] args) {
-		 junit.textui.TestRunner.main(new String[] { AllSAXTests.class.getName() });
-	}	
-	
-	public void testSwitchRenderer() {
-		RendererFactory.setDefaultRendererFactory(EMF2SAXRendererFactory.INSTANCE); 
-	}
-	
-	public void testSwitchRendererBack() {
-		RendererFactory.setDefaultRendererFactory(defaultRendererFactory);
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/AllTests.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/AllTests.java
deleted file mode 100644
index b7fd21d..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/AllTests.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Created on Apr 1, 2003
- *
- * To change this generated comment go to 
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.jst.j2ee.archive.emftests;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * @author jsholl
- *
- * To change this generated comment go to 
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-public class AllTests {
-
-    public static Test suite() {
-        TestSuite suite = new TestSuite("Test for com.ibm.etools.archive.emftest");
-        //$JUnit-BEGIN$
-
-		suite.addTest(AllDOMTests.suite());
-		suite.addTest(AllSAXTests.suite());
-
-		//$JUnit-END$
-		return suite;
-	}
-	
-	public static void main(java.lang.String[] args) {
-		junit.textui.TestRunner.main(new String[] { AllTests.class.getName() });
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/AppClientEMFEditTest.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/AppClientEMFEditTest.java
deleted file mode 100644
index 029f061..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/AppClientEMFEditTest.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package org.eclipse.jst.j2ee.archive.emftests;
-
-import java.util.HashSet;
-
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.jst.j2ee.application.ApplicationFactory;
-import org.eclipse.jst.j2ee.application.ApplicationPackage;
-import org.eclipse.jst.j2ee.client.ApplicationClientResource;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.ApplicationClientFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.DuplicateObjectException;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.jst.j2ee.ejb.EjbFactory;
-import org.eclipse.jst.j2ee.ejb.EjbPackage;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationFactory;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationPackage;
-
-
-public class AppClientEMFEditTest extends GeneralEMFEditingTest {
-    EARFile earFile;
-    ApplicationClientFile appClientFile;
-
-    public AppClientEMFEditTest(String name) {
-        super(name);
-    }
-
-    public CommonarchiveFactory getArchiveFactory() {
-        return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-    }
-
-    public EjbFactory getEjbFactory() {
-        return EjbPackage.eINSTANCE.getEjbFactory();
-    }
-
-    public ApplicationFactory getApplicationFactory() {
-        return ApplicationPackage.eINSTANCE.getApplicationFactory();
-    }
-
-    public WebapplicationFactory getWebAppFactory() {
-        return WebapplicationPackage.eINSTANCE.getWebapplicationFactory();
-    }
-
-    public static void main(java.lang.String[] args) {
-        String[] className = { "com.ibm.etools.archive.test.AppClientEMFEditTest", "-noloading" };
-        TestRunner.main(className);
-    }
-    public static junit.framework.Test suite() {
-        TestSuite suite = new TestSuite();
-        suite.addTest(new AppClientEMFEditTest("testApplicationClientEdit"));
-        return suite;
-    }
-
-    public void testApplicationClientEdit() throws Exception {
-        getAppClient();
-        assertEquals("1.3", appClientFile.getDeploymentDescriptor().getVersion());
-
-        ApplicationClientResource DD = (ApplicationClientResource) appClientFile.getDeploymentDescriptorResource();
-		setVersion(VERSION_1_3);
-		setModuleType(APP_CLIENT);
-        editRoot(DD.getRootObject());
-        String curDir = AutomatedBVT.baseDirectory;
-        String out = curDir + "testOutput/EMFModelCreationTests/EditAppEAR";
-        appClientFile.extractTo(out, Archive.EXPAND_ALL);
-        appClientFile.close();
-
-        //Compare
-        
-        String exampleDeploymentDesURI = curDir + "EMFTests/application-client.xml";
-        String curDeploymentDesURI = curDir + out + "/AppClientfoo/META-INF/application-client.xml";
-		setIgnoreAtt(ignorableAttributes());
-        //compareContents(curDeploymentDesURI, exampleDeploymentDesURI);
-    }
-
-    public void getAppClient() throws DuplicateObjectException, OpenFailureException {
-        String in = AutomatedBVT.baseDirectory + "loose_module_workspace/LooseEARApp/fooAPP/";
-        appClientFile = getArchiveFactory().openApplicationClientFile(in);
-    }
-    
-	public HashSet ignorableAttributes(){
-		HashSet set = new HashSet();
-		set.add("id");
-		return set;
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/AppClientEMFTest.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/AppClientEMFTest.java
deleted file mode 100644
index ad3edc4..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/AppClientEMFTest.java
+++ /dev/null
@@ -1,141 +0,0 @@
-package org.eclipse.jst.j2ee.archive.emftests;
-
-import java.util.HashSet;
-
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.jst.j2ee.application.ApplicationFactory;
-import org.eclipse.jst.j2ee.application.ApplicationPackage;
-import org.eclipse.jst.j2ee.archive.testutilities.EMFAttributeFeatureGenerator;
-import org.eclipse.jst.j2ee.client.ApplicationClientResource;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.ApplicationClientFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.DuplicateObjectException;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.impl.CommonarchiveFactoryImpl;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.jst.j2ee.ejb.EjbFactory;
-import org.eclipse.jst.j2ee.ejb.EjbPackage;
-import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationFactory;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationPackage;
-
-
-public class AppClientEMFTest extends GeneralEMFPopulationTest {
-    EARFile earFile;
-    ApplicationClientFile appClientFile;
-	EARFile earFile14;
-	ApplicationClientFile appClientFile14;
-
-    public AppClientEMFTest(String name) {
-        super(name);
-    }
-
-    public CommonarchiveFactory getArchiveFactory() {
-        return CommonarchiveFactoryImpl.getActiveFactory();
-    }
-
-    public EjbFactory getEjbFactory() {
-        return EjbPackage.eINSTANCE.getEjbFactory();
-    }
-
-    public ApplicationFactory getApplicationFactory() {
-        return ApplicationPackage.eINSTANCE.getApplicationFactory();
-    }
-
-    public WebapplicationFactory getWebAppFactory() {
-        return WebapplicationPackage.eINSTANCE.getWebapplicationFactory();
-    }
-
-    public static void main(java.lang.String[] args) {
-        String[] className = { "com.ibm.etools.archive.test.AppClientEMFTest", "-noloading" };
-        TestRunner.main(className);
-    }
-    public static junit.framework.Test suite() {
-        TestSuite suite = new TestSuite();
-        suite.addTest(new AppClientEMFTest("testApplicationClientPopulation"));
-        suite.addTest(new AppClientEMFTest("test14ApplicationClientPopulation"));
-        return suite;
-    }
-
-    public void testApplicationClientPopulation() throws Exception {
-		EMFAttributeFeatureGenerator.reset();
-        createEAR();
-        createAppClient();
-
-        ApplicationClientResource DD = (ApplicationClientResource) appClientFile.getDeploymentDescriptorResource();
-        DD.setVersionID(J2EEVersionConstants.J2EE_1_3_ID);
-        setVersion(VERSION_1_3);
-        setModuleType(APP_CLIENT);
-        populateRoot(DD.getRootObject());
-
-		String out = AutomatedBVT.baseDirectory +"testOutput/TestAppEAR";
-        earFile.extractTo(out, Archive.EXPAND_ALL);
-        earFile.close();
-
-        //Compare
-        String curDir = AutomatedBVT.baseDirectory;
-        String exampleDeploymentDesURI = curDir + "EMFTestNoID/application-client.xml";
-        String curDeploymentDesURI = curDir + "testOutput/TestAppEAR/fooAPP/META-INF/application-client.xml";
-		setIgnoreAtt(ignorableAttributes());
-		compareContentsIgnoreWhitespace(curDeploymentDesURI, exampleDeploymentDesURI, null);
-    }
-
-	public void test14ApplicationClientPopulation() throws Exception {
-			EMFAttributeFeatureGenerator.reset();
-			createEAR();
-			createAppClient();
-
-			ApplicationClientResource DD = (ApplicationClientResource) appClientFile.getDeploymentDescriptorResource();
-			DD.setVersionID(J2EEVersionConstants.J2EE_1_4_ID);
-			setVersion(VERSION_1_4);
-			setModuleType(APP_CLIENT);
-			populateRoot(DD.getRootObject());
-
-			String out = AutomatedBVT.baseDirectory +"testOutput/TestAppEAR14";
-			earFile.extractTo(out, Archive.EXPAND_ALL);
-			earFile.close();
-
-			getApp14Client();
-			assertEquals("1.4", appClientFile14.getDeploymentDescriptor().getVersion());
-			out = AutomatedBVT.baseDirectory +"testOutput/TestAppEAR14_2";
-			appClientFile14.extractTo(out, Archive.EXPAND_ALL);
-			appClientFile14.close();
-			
-			//Compare
-			String curDir = AutomatedBVT.baseDirectory;
-			String curDeploymentDesURI = curDir + "testOutput/TestAppEAR14/fooAPP/META-INF/application-client.xml";
-			String secondDeploymentDesURI = out + "/META-INF/application-client.xml";
-			setIgnoreAtt(ignorableAttributes());
-			compareContentsIgnoreWhitespace(curDeploymentDesURI, secondDeploymentDesURI, null);
-	}
-	
-    public void createAppClient() throws DuplicateObjectException {
-        appClientFile = getArchiveFactory().createApplicationClientFileInitialized("fooAPP");
-        appClientFile = (ApplicationClientFile) earFile.addCopy(appClientFile);
-        appClientFile.getDeploymentDescriptor().setDisplayName("fooAPP");
-        assertTrue(appClientFile.getDeploymentDescriptor() != null);
-    }
-
-    public void createEAR() {
-        String earName = "Test.ear";
-        earFile = getArchiveFactory().createEARFileInitialized(earName);
-        assertTrue(earFile.getDeploymentDescriptor() != null);
-    }
-    
-    
-	public void getApp14Client() throws DuplicateObjectException, OpenFailureException {
-		String in = AutomatedBVT.baseDirectory + "testOutput/TestAppEAR14/fooAPP";
-		appClientFile14 = getArchiveFactory().openApplicationClientFile(in);
-	}
-    
-    public HashSet ignorableAttributes(){
-    	HashSet set = new HashSet();
-    	set.add("id");
-    	return set;
-    }
-    
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/EarEMFEditTest.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/EarEMFEditTest.java
deleted file mode 100644
index f41160e..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/EarEMFEditTest.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package org.eclipse.jst.j2ee.archive.emftests;
-
-import java.util.HashSet;
-
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.jst.j2ee.application.ApplicationFactory;
-import org.eclipse.jst.j2ee.application.ApplicationPackage;
-import org.eclipse.jst.j2ee.application.ApplicationResource;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.jst.j2ee.ejb.EjbFactory;
-import org.eclipse.jst.j2ee.ejb.EjbPackage;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationFactory;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationPackage;
-
-
-public class EarEMFEditTest extends GeneralEMFEditingTest {
-    EARFile earFile;
-    int createdModules = 0;
-
-    private int NUM_MODULES = 4;
-
-    public EarEMFEditTest(String name) {
-        super(name);
-    }
-
-    public CommonarchiveFactory getArchiveFactory() {
-        return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-    }
-
-    public EjbFactory getEjbFactory() {
-        return EjbPackage.eINSTANCE.getEjbFactory();
-    }
-
-    public ApplicationFactory getApplicationFactory() {
-        return ApplicationPackage.eINSTANCE.getApplicationFactory();
-    }
-
-    public WebapplicationFactory getWebAppFactory() {
-        return WebapplicationPackage.eINSTANCE.getWebapplicationFactory();
-    }
-
-    public static void main(java.lang.String[] args) {
-        String[] className = { "com.ibm.etools.archive.test.EarEMFEditTest", "-noloading" };
-        TestRunner.main(className);
-    }
-    public static junit.framework.Test suite() {
-        TestSuite suite = new TestSuite();
-        suite.addTest(new EarEMFEditTest("testEAREdit"));
-        return suite;
-    }
-
-    public void testEAREdit() throws Exception {
-        getEAR();
-
-		assertEquals("1.2", earFile.getDeploymentDescriptor().getVersion());
-
-        ApplicationResource DD = (ApplicationResource) earFile.getDeploymentDescriptorResource();
-		setVersion(VERSION_1_3);
-		setModuleType(APPICATION); 
-        editRoot(DD.getRootObject());
-        String curDir = AutomatedBVT.baseDirectory;
-        
-        String out = curDir +"testOutput/EditOutput/EMFModelCreationTests/EditEAR";
-        earFile.extractTo(out, Archive.EXPAND_ALL);
-        earFile.close();
-
-        //Compare work in progress
-       
-        String exampleDeploymentDesURI = curDir + "EMFTests/application.xml";
-        String curDeploymentDesURI = curDir + out + "/META-INF/application.xml";
-        //compareContents(curDeploymentDesURI, exampleDeploymentDesURI);
-    }
-
-    public void getEAR() throws OpenFailureException {
-        String in = AutomatedBVT.baseDirectory + "loose_module_workspace/LooseEAR/";
-        earFile = getArchiveFactory().openEARFile(in);
-        assertTrue(earFile.getDeploymentDescriptor() != null);
-    }
-    
-	public HashSet ignorableAttributes(){
-		HashSet set = new HashSet();
-		set.add("id");
-		return set;
-	}
-
-	public EObject createInstance(EClass eClassifier) {
-		if (eClassifier.getName().equals("Module")) {
-			createdModules++;
-			switch (createdModules) {
-				case (1) :
-					return createJavaModuleInstance(eClassifier);
-				case (2) :
-					return createEJBModuleInstance(eClassifier);
-				case (3) :
-					return createWebModuleInstance(eClassifier);
-				case (4) :
-					return createConnetorModuleInstance(eClassifier);
-				default :
-					return createJavaModuleInstance(eClassifier);
-			}
-		}
-		return super.createInstance(eClassifier);
-	}
-
-	private EObject createConnetorModuleInstance(EClass eClassifier) {
-		return ((ApplicationFactory) eClassifier.getEPackage().getEFactoryInstance()).createConnectorModule();
-	}
-
-	private EObject createWebModuleInstance(EClass eClassifier) {
-		return ((ApplicationFactory) eClassifier.getEPackage().getEFactoryInstance()).createWebModule();
-	}
-
-	private EObject createEJBModuleInstance(EClass eClassifier) {
-		return ((ApplicationFactory) eClassifier.getEPackage().getEFactoryInstance()).createEjbModule();
-	}
-
-	private EObject createJavaModuleInstance(EClass eClassifier) {
-		return ((ApplicationFactory) eClassifier.getEPackage().getEFactoryInstance()).createJavaClientModule();
-	}
-
-	public Object getSharedObjectByType(EObject owner, EReference ref) {
-		if (ref.getName().equals("module"))
-			return createJavaModuleInstance((EClass) ref.getEType());
-		return super.getSharedObjectByType(owner, ref);
-	}
-
-	public int getDepthForAttribute(EReference ref) {
-		if (ref.getName().equals("modules"))
-			return NUM_MODULES;
-		return super.getDepthForAttribute(ref);
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/EarEMFTest.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/EarEMFTest.java
deleted file mode 100644
index 0ceeb46..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/EarEMFTest.java
+++ /dev/null
@@ -1,186 +0,0 @@
-package org.eclipse.jst.j2ee.archive.emftests;
-
-import java.util.HashSet;
-
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.jst.j2ee.application.ApplicationFactory;
-import org.eclipse.jst.j2ee.application.ApplicationPackage;
-import org.eclipse.jst.j2ee.application.ApplicationResource;
-import org.eclipse.jst.j2ee.archive.testutilities.EMFAttributeFeatureGenerator;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.jst.j2ee.ejb.EjbFactory;
-import org.eclipse.jst.j2ee.ejb.EjbPackage;
-import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationFactory;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationPackage;
-
-
-public class EarEMFTest extends GeneralEMFPopulationTest {
-    EARFile earFile;
-    int createdModules = 0;
-
-    private int NUM_MODULES = 5;
-
-    public EarEMFTest(String name) {
-        super(name);
-    }
-
-    public CommonarchiveFactory getArchiveFactory() {
-        return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-    }
-
-    public EjbFactory getEjbFactory() {
-        return EjbPackage.eINSTANCE.getEjbFactory();
-    }
-
-    public ApplicationFactory getApplicationFactory() {
-        return ApplicationPackage.eINSTANCE.getApplicationFactory();
-    }
-
-    public WebapplicationFactory getWebAppFactory() {
-        return WebapplicationPackage.eINSTANCE.getWebapplicationFactory();
-    }
-
-    public static void main(java.lang.String[] args) {
-        String[] className = { "com.ibm.etools.archive.test.EarEMFTest", "-noloading" };
-        TestRunner.main(className);
-    }
-    public static junit.framework.Test suite() {
-        TestSuite suite = new TestSuite();
-        suite.addTest(new EarEMFTest("testEARPopulation"));
-		suite.addTest(new EarEMFTest("test14EARPopulation"));
-        return suite;
-    }
-
-    public void testEARPopulation() throws Exception {
-		EMFAttributeFeatureGenerator.reset();
-        createEAR();
-        //createAppClient();
-
-        ApplicationResource DD = (ApplicationResource) earFile.getDeploymentDescriptorResource();
-		//TODO: individual test for each version
-		DD.setVersionID(J2EEVersionConstants.J2EE_1_3_ID);
-		setVersion(VERSION_1_3);
-		setModuleType(APPICATION);
-        populateRoot(DD.getRootObject());
-
-		String out = AutomatedBVT.baseDirectory +"testOutput/TestEAR";
-        earFile.extractTo(out, Archive.EXPAND_ALL);
-        earFile.close();
-
-        //Compare work in progress
-        String curDir = AutomatedBVT.baseDirectory;
-        String exampleDeploymentDesURI = curDir + "EMFTestNoID/application.xml";
-        String curDeploymentDesURI = curDir + "testOutput/TestEAR/META-INF/application.xml";
-		setIgnoreAtt(ignorableAttributes());
-		compareContentsIgnoreWhitespace(curDeploymentDesURI, exampleDeploymentDesURI, null);
-    }
-    
-	public void test14EARPopulation() throws Exception {
-		EMFAttributeFeatureGenerator.reset();
-		createEAR();
-		//createAppClient();
-
-		ApplicationResource DD = (ApplicationResource) earFile.getDeploymentDescriptorResource();
-		//TODO: individual test for each version
-		DD.setVersionID(J2EEVersionConstants.J2EE_1_4_ID);
-		setVersion(VERSION_1_4);
-		setModuleType(APPICATION);
-		populateRoot(DD.getRootObject());
-
-		String out = AutomatedBVT.baseDirectory +"testOutput/TestEAR14";
-		earFile.extractTo(out, Archive.EXPAND_ALL);
-		earFile.close();
-
-		getEAR();
-		assertEquals("1.4", earFile.getDeploymentDescriptor().getVersion());
-		out = AutomatedBVT.baseDirectory +"testOutput/TestEAR14_2";
-		earFile.extractTo(out, Archive.EXPAND_ALL);
-		
-		earFile.close();
-
-		//Compare work in progress
-		String curDir = AutomatedBVT.baseDirectory;
-		String exampleDeploymentDesURI = out + "/META-INF/application.xml";
-		String curDeploymentDesURI = curDir + "testOutput/TestEAR14/META-INF/application.xml";
-		setIgnoreAtt(ignorableAttributes());
-		compareContentsIgnoreWhitespace(curDeploymentDesURI, exampleDeploymentDesURI, null);
-	}
-    public void createEAR() {
-        String earName = "Test.ear";
-        earFile = getArchiveFactory().createEARFileInitialized(earName);
-        assertTrue(earFile.getDeploymentDescriptor() != null);
-    }
-
-	public void getEAR() throws OpenFailureException {
-		String in =AutomatedBVT.baseDirectory +"testOutput/TestEAR14";
-		earFile = getArchiveFactory().openEARFile(in);
-		assertTrue(earFile.getDeploymentDescriptor() != null);
-	}
-	
-	public HashSet ignorableAttributes(){
-		HashSet set = new HashSet();
-		set.add("id");
-		return set;
-	}
-
-    public EObject createInstance(EReference ref, EObject eObject) {
-		EClass eClassifier = (EClass)ref.getEType();
-        if (eClassifier.getName().equals("Module")) {
-            createdModules++;
-            switch (createdModules) {
-                case (1) :
-                    return createJavaModuleInstance(eClassifier);
-                case (2) :
-                    return createEJBModuleInstance(eClassifier);
-                case (3) :
-                    return createWebModuleInstance(eClassifier);
-                case (4) :
-                    return createConnetorModuleInstance(eClassifier);
-                default :
-                    return createJavaModuleInstance(eClassifier);
-            }
-        }
-        return super.createInstance(ref,eObject);
-    }
-
-    private EObject createConnetorModuleInstance(EClass eClassifier) {
-        return ((ApplicationFactory) eClassifier.getEPackage().getEFactoryInstance()).createConnectorModule();
-    }
-
-    private EObject createWebModuleInstance(EClass eClassifier) {
-        return ((ApplicationFactory) eClassifier.getEPackage().getEFactoryInstance()).createWebModule();
-    }
-
-    private EObject createEJBModuleInstance(EClass eClassifier) {
-        return ((ApplicationFactory) eClassifier.getEPackage().getEFactoryInstance()).createEjbModule();
-    }
-
-    private EObject createJavaModuleInstance(EClass eClassifier) {
-        return ((ApplicationFactory) eClassifier.getEPackage().getEFactoryInstance()).createJavaClientModule();
-    }
-
-    public Object getSharedObjectByType(EObject owner, EReference ref) {
-        if (ref.getName().equals("module"))
-            return createJavaModuleInstance((EClass) ref.getEType());
-        return super.getSharedObjectByType(owner, ref);
-    }
-
-    public int getDepthForAttribute(EStructuralFeature ref) {
-        if (ref.getName().equals("modules"))
-            return NUM_MODULES;
-        return super.getDepthForAttribute(ref);
-    }
-
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/EjbEMFEditTest.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/EjbEMFEditTest.java
deleted file mode 100644
index 7207626..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/EjbEMFEditTest.java
+++ /dev/null
@@ -1,341 +0,0 @@
-package org.eclipse.jst.j2ee.archive.emftests;
-
-import java.util.HashSet;
-import java.util.List;
-
-import junit.framework.TestSuite;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EClassifier;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EcorePackage;
-import org.eclipse.jst.j2ee.application.ApplicationFactory;
-import org.eclipse.jst.j2ee.application.ApplicationPackage;
-import org.eclipse.jst.j2ee.archive.testutilities.EMFAttributeFeatureGenerator;
-import org.eclipse.jst.j2ee.common.CommonFactory;
-import org.eclipse.jst.j2ee.common.SecurityIdentity;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EJBJarFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.DuplicateObjectException;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveOptions;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.jst.j2ee.ejb.CMPAttribute;
-import org.eclipse.jst.j2ee.ejb.EJBResource;
-import org.eclipse.jst.j2ee.ejb.EjbFactory;
-import org.eclipse.jst.j2ee.ejb.EjbPackage;
-import org.eclipse.jst.j2ee.ejb.RoleSource;
-import org.eclipse.jst.j2ee.internal.ejb.impl.MethodPermissionImpl;
-import org.eclipse.jst.j2ee.internal.ejb.impl.QueryMethodImpl;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationFactory;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationPackage;
-import org.eclipse.wst.common.internal.emf.resource.EMF2SAXRendererFactory;
-import org.eclipse.wst.common.internal.emf.resource.RendererFactory;
-
-
-public class EjbEMFEditTest extends GeneralEMFEditingTest {
-
-	protected static final EjbPackage EJB_PKG = EjbPackage.eINSTANCE;
-	EARFile earFile;
-	EJBJarFile ejbFile;
-	EObject mesBean, entityBean;
-	SecurityIdentity secID;
-	RoleSource roleSource;
-	int NUM_BEANS = 10;
-	final int NUM_RELATION_ROLES = 2;
-	int createdBeans = 0;
-	int createdSecRoles = 0;
-	protected int createdSecurityIdentities = 0;
-	boolean mpFlag = false;
-
-    public EjbEMFEditTest(String name) {
-        super(name);
-    }
-
-    public CommonarchiveFactory getArchiveFactory() {
-        return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-    }
-
-    public EjbFactory getEjbFactory() {
-        return EjbPackage.eINSTANCE.getEjbFactory();
-    }
-
-    public ApplicationFactory getApplicationFactory() {
-        return ApplicationPackage.eINSTANCE.getApplicationFactory();
-    }
-
-    public WebapplicationFactory getWebAppFactory() {
-        return WebapplicationPackage.eINSTANCE.getWebapplicationFactory();
-    }
-
-    public static void main(java.lang.String[] args) {
-		junit.textui.TestRunner.main(new String[] { EjbEMFEditTest.class.getName() }); 
-    }
-    public static junit.framework.Test suite() {
-        TestSuite suite = new TestSuite();
-        
-        /*System.out.println("Switching to SAX Renderer in " + EjbEMFEditTest.class.getName());
-		suite.addTest(new AllSAXTests("testSwitchRenderer"));*/
-		
-        suite.addTest(new EjbEMFEditTest("testEJBJarEdit"));
-        suite.addTest(new EjbEMFEditTest("testWCCMJar"));
-        /*suite.addTest(new EjbEMFEditTest("testWCCMProvidedCase"));*/
-        
-        return suite;
-    }
-
-    public void testEJBJarEdit() throws Exception {
-        getEJB();
-
-		assertEquals("2.0", ejbFile.getDeploymentDescriptor().getVersion());
-        EJBResource DD = (EJBResource) ejbFile.getDeploymentDescriptorResource();
-		setVersion(VERSION_1_3);
-		setModuleType(EJB); 
-        editRoot(DD.getRootObject());
-        String curDir = AutomatedBVT.baseDirectory;
-        String out = curDir + "testOutput/EMFModelCreationTests/EditEjbEAR";
-        ejbFile.extractTo(out, Archive.EXPAND_ALL);
-        ejbFile.close();
-        
-        
-        //Compare work in progress
-        
-        String exampleDeploymentDesURI = null;
-        //System.out.println(RendererFactory.getDefaultRendererFactory());
-        if (RendererFactory.getDefaultRendererFactory() instanceof EMF2SAXRendererFactory){
-            exampleDeploymentDesURI = curDir + "EMFTests/ejb-jar2-0sax.xml";
-        }
-        else
-            exampleDeploymentDesURI = curDir + "EMFTests/ejb-jar2-0.xml";
-        //System.out.println("File: " + exampleDeploymentDesURI);
-        String curDeploymentDesURI = out + "/META-INF/ejb-jar.xml";
-        compareContentsIgnoreWhitespace(curDeploymentDesURI, exampleDeploymentDesURI, "");
-    }
-
-    public void testWCCMJar() throws Exception {
-		String in = AutomatedBVT.baseDirectory + "../testData/ejb";
-		ArchiveOptions options = new ArchiveOptions();
-		options.setIsReadOnly(true);
-		ejbFile = getArchiveFactory().openEJBJarFile(options, in); 
-		 
-        EJBResource DD = (EJBResource) ejbFile.getDeploymentDescriptorResource();
-		DD.getRootObject();
-
-        String out = AutomatedBVT.baseDirectory + "../testData/testOutput";
-        ejbFile.extractTo(out, Archive.EXPAND_ALL);
-        ejbFile.close();
-
-        /*DD.save(System.out, null); */
-        
-        //Compare work in progress
-        String curDir = AutomatedBVT.baseDirectory;
-        String exampleDeploymentDesURI = in + "/META-INF/ejb-jar.xml";
-        String curDeploymentDesURI = out + "/META-INF/ejb-jar.xml";
-
-        compareContents(curDeploymentDesURI, exampleDeploymentDesURI);
-    }
-    
-    /**
-     * Requires j2ee.core.ws.ext to be on the classpath
-     * @throws DuplicateObjectException
-     * @throws OpenFailureException
-     */
-/*    public void testWCCMProvidedCase() throws Exception {
-
-		String in = AutomatedBVT.baseDirectory + "../wccm/ear";
-        EARFile earFile = null;
-        try {
- 
-            CommonarchiveFactory factory =
-                    CommonarchiveFactoryImpl.getActiveFactory();
-            ArchiveOptions opt = new ArchiveOptions();
-            opt.setIsReadOnly (true);
-            opt.setUseJavaReflection (false);
- 
-            earFile = factory.openEARFile (opt, in);
-            System.out.println ("uri: " + earFile.getURI());
-            System.out.println ("origuri: " + earFile.getOriginalURI());
- 
-            Application application = earFile.getDeploymentDescriptor();
-            ApplicationBinding appBindings = earFile.getBindings();
-            ApplicationExtension appExtensions = earFile.getExtensions();
- 
-
-        Iterator rs = earFile.getLoadedMofResources().iterator();
-        while (rs.hasNext())
-        {
-            Resource r = (Resource) rs.next();
- 
-            FileOutputStream fo = new FileOutputStream (r.getURI().toString().replace('/', '-'));
-            r.save (fo, new HashMap());
-            fo.flush();
-            fo.close();
-        }
- 
-            System.out.println("==========<Done App DD>==========");
-            System.out.println ("");
- 
-
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-        }
-        finally {
-            if(earFile != null)
-            earFile.close();
-        }
-
-    }*/
-
-    public void getEJB() throws DuplicateObjectException, OpenFailureException {
-		String in = AutomatedBVT.baseDirectory + "loose_module_workspace/LooseEAREjb/ejbModule/";
-		 ejbFile = getArchiveFactory().openEJBJarFile(in);
-        assertTrue(ejbFile.getDeploymentDescriptor() != null);
-    }
-
-	public EObject createInstance(EClass eClassifier) {
-		if (eClassifier.getName().equals("EnterpriseBean")) {
-			createdBeans++;
-			switch (createdBeans) {
-				case (3) :
-					return createContainerManagedEntityInstance(eClassifier);
-				case (7) :
-					return createMessageBeanInstance(eClassifier);
-				case (4) :
-				case (8) :
-					return createSessionBeanInstance(eClassifier);
-				default :
-					return createEntityBeanInstance(eClassifier);
-			}
-		} else if (eClassifier.getName().equals("SecurityIdentity"))
-			return createSecurityIdentitiyInstance(eClassifier);
-		else if (eClassifier.getName().equals("RoleSource"))
-			return createRoleSourceInstance(eClassifier);
-		else if (eClassifier == EcorePackage.eINSTANCE.getEAttribute())
-			return getEjbFactory().createCMPAttribute();
-		return super.createInstance(eClassifier);
-	}
-
-	private EObject createSecurityIdentitiyInstance(EClass eClassifier) {
-		/* Alternate types */
-		createdSecRoles++;
-		if ((createdSecRoles & 1) == 0)
-			return CommonFactory.eINSTANCE.createUseCallerIdentity();
-		else
-			return CommonFactory.eINSTANCE.createRunAsSpecifiedIdentity();
-	}
-
-	private EObject createRoleSourceInstance(EClass eClassifier) {
-		return ((EjbFactory) eClassifier.getEPackage().getEFactoryInstance()).createRoleSource();
-	}
-
-	private EObject createMessageBeanInstance(EClass eClassifier) {
-		return ((EjbFactory) eClassifier.getEPackage().getEFactoryInstance()).createMessageDriven();
-	}
-
-	private EObject createSessionBeanInstance(EClass eClassifier) {
-		return ((EjbFactory) eClassifier.getEPackage().getEFactoryInstance()).createSession();
-	}
-
-	private EObject createEntityBeanInstance(EClass eClassifier) {
-		return ((EjbFactory) eClassifier.getEPackage().getEFactoryInstance()).createEntity();
-	}
-
-	private EObject createContainerManagedEntityInstance(EClass eClassifier) {
-		return EjbFactory.eINSTANCE.createContainerManagedEntity();
-	}
-
-	/**
-	 * @see org.eclipse.jst.j2ee.archive.test.GeneralEMFTest#getDepthForAttribute(EReference)
-	 */
-	public int getDepthForAttribute(EReference ref) {
-		if (ref.getName().equals("enterpriseBeans"))
-			return NUM_BEANS;
-		else if (ref.getName().equals("entityBeans"))
-			return NUM_BEANS;
-		else if (ref.getName().equals("relationshipRoles"))
-			return NUM_RELATION_ROLES;
-		return super.getDepthForAttribute(ref);
-	}
-
-	/* (non-Javadoc)
-	* @see com.ibm.etools.archive.emftest.GeneralEMFPopulationTest#populateFeatures(org.eclipse.emf.ecore.EObject)
-	*/
-	public void populateFeatures(EObject eObject) {
-		if (eObject.eClass() == EJB_PKG.getCMPAttribute()) {
-			((CMPAttribute) eObject).setName((String) EMFAttributeFeatureGenerator.createAttribute(EcorePackage.eINSTANCE.getENamedElement_Name(),eObject));
-			((CMPAttribute) eObject).setEType((EClassifier) createJavaClassProxy(null));
-		} else
-			super.editFeatures(eObject);
-	}
-
-	/* (non-Javadoc)
-	 * @see com.ibm.etools.archive.emftest.GeneralEMFPopulationTest#populateAttributes(org.eclipse.emf.ecore.EObject)
-	 */
-	protected void populateAttributes(EObject eObject) {
-		if (eObject instanceof QueryMethodImpl) {
-			List attributes = eObject.eClass().getEAllAttributes();
-			for (int i = 0; i < attributes.size(); i++) {
-				EAttribute att = (EAttribute) attributes.get(i);
-				Object value = createAttributeValue(att, eObject);
-				if (att.getName().equals("parms") && value == null){
-					value = createAttributeValue(att, eObject);
-				}
-				if (att.isChangeable())
-					eObject.eSet(att, value);
-			}
-		} else if (eObject instanceof MethodPermissionImpl) {
-			List attributes = eObject.eClass().getEAllAttributes();
-			for (int i = 0; i < attributes.size(); i++) {
-				EAttribute att = (EAttribute) attributes.get(i);
-				if(att.getName().equals("unchecked") && mpFlag){
-					continue;					
-				}	
-				
-				Object value = createAttributeValue(att, eObject);
-				if (att.isChangeable())
-					eObject.eSet(att, value);
-			} 
-			mpFlag = !mpFlag;
-		} else
-			super.editAttributes(eObject);
-	}
-	
-
-	protected void populateSharedReference(EObject eObject, EReference ref) {
-		if(eObject instanceof MethodPermissionImpl && ref.getName().equals("roles")){
-			mpFlag = !mpFlag;
-			//if method permission unchecked ignore roles
-			if(!mpFlag){
-				return;
-			}
-		}
-		super.populateSharedReference(eObject, ref);
-	}
-
-	public HashSet ignorableAttributes(){
-		HashSet set = new HashSet();
-		set.add("id");
-		return set;
-	}
-
-	/* (non-Javadoc)
-	 * @see junit.framework.TestCase#tearDown()
-	 */
-	protected void tearDown() throws Exception {
-		earFile = null;
-		ejbFile = null;
-		mesBean = null;
-		entityBean = null;
-		secID  = null;
-		roleSource = null;
-
-		super.tearDown();
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/EjbEMFTest.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/EjbEMFTest.java
deleted file mode 100644
index 010f603..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/EjbEMFTest.java
+++ /dev/null
@@ -1,364 +0,0 @@
-package org.eclipse.jst.j2ee.archive.emftests;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-
-import junit.framework.TestSuite;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EClassifier;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.EcorePackage;
-import org.eclipse.jem.java.impl.JavaClassImpl;
-import org.eclipse.jst.j2ee.application.ApplicationFactory;
-import org.eclipse.jst.j2ee.application.ApplicationPackage;
-import org.eclipse.jst.j2ee.archive.testutilities.EMFAttributeFeatureGenerator;
-import org.eclipse.jst.j2ee.common.CommonFactory;
-import org.eclipse.jst.j2ee.common.SecurityIdentity;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EJBJarFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.DuplicateObjectException;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.jst.j2ee.ejb.CMPAttribute;
-import org.eclipse.jst.j2ee.ejb.CMRField;
-import org.eclipse.jst.j2ee.ejb.EJBResource;
-import org.eclipse.jst.j2ee.ejb.EjbFactory;
-import org.eclipse.jst.j2ee.ejb.EjbPackage;
-import org.eclipse.jst.j2ee.ejb.MethodPermission;
-import org.eclipse.jst.j2ee.ejb.RoleSource;
-import org.eclipse.jst.j2ee.internal.J2EEInit;
-import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
-import org.eclipse.jst.j2ee.internal.ejb.impl.EJBRelationshipRoleImpl;
-import org.eclipse.jst.j2ee.internal.ejb.impl.MethodPermissionImpl;
-import org.eclipse.jst.j2ee.internal.ejb.impl.QueryMethodImpl;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationFactory;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationPackage;
-
-
-public class EjbEMFTest extends GeneralEMFPopulationTest {
-	static {
-		//Temporary workaround to keep packages from being registered twice
-		J2EEInit.init();
-	}
-	protected static final EjbPackage EJB_PKG = EjbPackage.eINSTANCE;
-	EARFile earFile;
-	EJBJarFile ejbFile;
-	EObject mesBean, entityBean;
-	SecurityIdentity secID;
-	RoleSource roleSource;
-	int NUM_BEANS = 10;
-	final int NUM_RELATION_ROLES = 2;
-	int createdBeans = 0;
-	int createdSecRoles = 0;
-	protected int createdSecurityIdentities = 0;
-	boolean mpFlag = false;
-	boolean firstReturnTypeMapping = true;
-	public EjbEMFTest(String name) {
-		super(name);
-	}
-
-	public CommonarchiveFactory getArchiveFactory() {
-		return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-	}
-
-	public EjbFactory getEjbFactory() {
-		return EJB_PKG.getEjbFactory();
-	}
-
-	public ApplicationFactory getApplicationFactory() {
-		return ApplicationPackage.eINSTANCE.getApplicationFactory();
-	}
-
-	public WebapplicationFactory getWebAppFactory() {
-		return WebapplicationPackage.eINSTANCE.getWebapplicationFactory();
-	}
-
-	public static void main(java.lang.String[] args) {
-		junit.textui.TestRunner.main(new String[] { EjbEMFTest.class.getName()});
-	}
-	public static junit.framework.Test suite() {
-		TestSuite suite = new TestSuite();
-
-		/*System.out.println("Switching to SAX Renderer in " + EjbEMFTest.class.getName());
-		suite.addTest(new AllSAXTests("testSwitchRenderer"));*/
-		suite.addTest(new EjbEMFTest("testEJBJarPopulation"));
-		suite.addTest(new EjbEMFTest("test14EJBJarPopulation"));
-		return suite;
-	}
-
-	public void testEJBJarPopulation() throws Exception {
-		EMFAttributeFeatureGenerator.reset();
-		createEAR();
-		createEJB();
-
-		EJBResource DD = (EJBResource) ejbFile.getDeploymentDescriptorResource();
-		//TODO: individual test for each version
-		DD.setVersionID(J2EEVersionConstants.J2EE_1_3_ID);
-		setVersion(VERSION_1_3);
-		setModuleType(EJB);
-		populateRoot(DD.getRootObject());
-
-		String out = AutomatedBVT.baseDirectory +"testOutput/TestEJBEAR";
-		earFile.extractTo(out, Archive.EXPAND_ALL);
-		earFile.close();
-		setEquivalentLines(getEquivalentLinesMap());
-		//Compare work in progress
-		String curDir = AutomatedBVT.baseDirectory;
-		String exampleDeploymentDesURI = curDir + "/EMFTestNoID/ejb-jar.xml";
-		String curDeploymentDesURI = curDir + "testOutput/TestEJBEAR/fooEJB/META-INF/ejb-jar.xml";
-		setIgnoreAtt(ignorableAttributes());
-		compareContentsIgnoreWhitespace(curDeploymentDesURI, exampleDeploymentDesURI, null);
-//		DD.unload();
-//		DD.load(new HashMap());
-	}
-	
-	public void test14EJBJarPopulation() throws Exception {
-		EMFAttributeFeatureGenerator.reset();
-		createEAR();
-		createEJB();
-
-		EJBResource DD = (EJBResource) ejbFile.getDeploymentDescriptorResource();
-		//TODO: individual test for each version
-		DD.setVersionID(J2EEVersionConstants.J2EE_1_4_ID);
-		setVersion(VERSION_1_4);
-		setModuleType(EJB);
-		//setGeneralDepth(2);
-		populateRoot(DD.getRootObject());
-		String out = AutomatedBVT.baseDirectory +"testOutput/TestEJBEAR14";
-		earFile.extractTo(out, Archive.EXPAND_ALL);
-		earFile.close();
-		
-		setEquivalentLines(getEquivalentLinesMap());
-		getEJB();
-		assertEquals("2.1", ejbFile.getDeploymentDescriptor().getVersion());
-		out = AutomatedBVT.baseDirectory +"testOutput/TestEJBEAR14_2";
-		ejbFile.extractTo(out, Archive.EXPAND_ALL);
-		ejbFile.close();
-
-		//Compare work in progress
-		String curDir = AutomatedBVT.baseDirectory;
-		String exampleDeploymentDesURI = out + "/META-INF/ejb-jar.xml";
-		String curDeploymentDesURI = curDir + "testOutput/TestEJBEAR14/fooEJB/META-INF/ejb-jar.xml";
-		setIgnoreAtt(ignorableAttributes());
-		compareContentsIgnoreWhitespace(curDeploymentDesURI, exampleDeploymentDesURI, null);
-	}
-	
-	/**
-	 * @return
-	 */
-	private Map getEquivalentLinesMap() {
-		Map lines = new HashMap();
-		lines.put("<cascade-delete></cascade-delete>", "<cascade-delete/>");
-		lines.put("<method-params></method-params>","<method-params/>");
-		lines.put("<unchecked></unchecked>","<unchecked/>"); 
-		lines.put("<use-caller-identity></use-caller-identity>","<use-caller-identity/>");
-		return lines;
-	}
-
-	public void getEJB() throws DuplicateObjectException, OpenFailureException {
-		String in = AutomatedBVT.baseDirectory +"testOutput/TestEJBEAR14/fooEJB";
-		ejbFile = getArchiveFactory().openEJBJarFile(in);
-		assertTrue(ejbFile.getDeploymentDescriptor() != null);
-	}
-
-	public void createEJB() throws DuplicateObjectException {
-		ejbFile = getArchiveFactory().createEJBJarFileInitialized("fooEJB");
-		ejbFile = (EJBJarFile) earFile.addCopy(ejbFile);
-		ejbFile.getDeploymentDescriptor().setDisplayName("fooEJB");
-		assertTrue(ejbFile.getDeploymentDescriptor() != null);
-	}
-
-	public void createEAR() {
-		String earName = "Test.ear";
-		earFile = getArchiveFactory().createEARFileInitialized(earName);
-		assertTrue(earFile.getDeploymentDescriptor() != null);
-	}
-
-	public EObject createInstance(EReference ref, EObject eObject) {
-		EClass eClassifier = (EClass)ref.getEType();
-		if (eClassifier.getName().equals("EnterpriseBean")) {
-			createdBeans++;
-			switch (createdBeans) {
-				case (3) :
-					return createContainerManagedEntityInstance(eClassifier);
-				case (7) :
-					return createMessageBeanInstance(eClassifier);
-				case (4) :
-				case (8) :
-					return createSessionBeanInstance(eClassifier);
-				default :
-					return createEntityBeanInstance(eClassifier);
-			}
-		} else if (eClassifier.getName().equals("SecurityIdentity"))
-			return createSecurityIdentitiyInstance(eClassifier);
-		else if (eClassifier.getName().equals("RoleSource"))
-			return createRoleSourceInstance(eClassifier);
-		else if (eClassifier == EcorePackage.eINSTANCE.getEAttribute())
-			return getEjbFactory().createCMPAttribute();
-		return super.createInstance(ref,eObject);
-	}
-
-	private EObject createSecurityIdentitiyInstance(EClass eClassifier) {
-		/* Alternate types */
-		createdSecRoles++;
-		if ((createdSecRoles & 1) == 0)
-			return CommonFactory.eINSTANCE.createUseCallerIdentity();
-		else
-			return CommonFactory.eINSTANCE.createRunAsSpecifiedIdentity();
-	}
-
-	private EObject createRoleSourceInstance(EClass eClassifier) {
-		return ((EjbFactory) eClassifier.getEPackage().getEFactoryInstance()).createRoleSource();
-	}
-
-	private EObject createMessageBeanInstance(EClass eClassifier) {
-		return ((EjbFactory) eClassifier.getEPackage().getEFactoryInstance()).createMessageDriven();
-	}
-
-	private EObject createSessionBeanInstance(EClass eClassifier) {
-		return ((EjbFactory) eClassifier.getEPackage().getEFactoryInstance()).createSession();
-	}
-
-	private EObject createEntityBeanInstance(EClass eClassifier) {
-		return ((EjbFactory) eClassifier.getEPackage().getEFactoryInstance()).createEntity();
-	}
-
-	private EObject createContainerManagedEntityInstance(EClass eClassifier) {
-		return EjbFactory.eINSTANCE.createContainerManagedEntity();
-	}
-
-	/**
-	 * @see org.eclipse.jst.j2ee.archive.test.GeneralEMFTest#getDepthForAttribute(EReference)
-	 */
-	public int getDepthForAttribute(EStructuralFeature ref) {
-		if (ref.getName().equals("enterpriseBeans"))
-			return NUM_BEANS;
-		else if (ref.getName().equals("entityBeans"))
-			return NUM_BEANS;
-		else if (ref.getName().equals("relationshipRoles"))
-			return NUM_RELATION_ROLES;
-		return super.getDepthForAttribute(ref);
-	}
-
-	/* (non-Javadoc)
-	* @see com.ibm.etools.archive.emftest.GeneralEMFPopulationTest#populateFeatures(org.eclipse.emf.ecore.EObject)
-	*/
-	public void populateFeatures(EObject eObject) {
-		if (eObject.eClass() == EJB_PKG.getCMPAttribute()) {
-			((CMPAttribute) eObject).setName((String) EMFAttributeFeatureGenerator.createAttribute(EcorePackage.eINSTANCE.getENamedElement_Name(),eObject));
-			((CMPAttribute) eObject).setEType((EClassifier) EMFAttributeFeatureGenerator.createJavaClassProxy(EcorePackage.eINSTANCE.getETypedElement_EType(),eObject));
-		} else if (eObject.eClass() == EJB_PKG.getCMRField()) {
-			((CMRField) eObject).setName((String) EMFAttributeFeatureGenerator.createAttribute(EcorePackage.eINSTANCE.getENamedElement_Name(),eObject));
-			populateSharedReference(eObject, EJB_PKG.getCMRField_CollectionType());
-			populateSharedReference(eObject, EJB_PKG.getCMRField_Role());		
-		} else
-			super.populateFeatures(eObject);
-	}
-
-	/* (non-Javadoc)
-	 * @see com.ibm.etools.archive.emftest.GeneralEMFPopulationTest#populateAttributes(org.eclipse.emf.ecore.EObject)
-	 */
-	protected void populateAttributes(EObject eObject) {
-		if (eObject instanceof QueryMethodImpl) {
-			List attributes = eObject.eClass().getEAllAttributes();
-			for (int i = 0; i < attributes.size(); i++) { 
-				EAttribute att = (EAttribute) attributes.get(i);
-				if (att.equals(EJB_PKG.getMethodElement_Description()) || att.equals(EJB_PKG.getMethodElement_EnterpriseBean()) || att.equals(EJB_PKG.getMethodElement_Type()) )
-					continue;
-				Object value = createAttributeValue(att, eObject);
-				if (att.getName().equals("parms") && value == null){
-					value = createAttributeValue(att, eObject);
-				}
-				if (att.isChangeable())
-					eObject.eSet(att, value);
-			}
-		} else if (eObject instanceof MethodPermissionImpl) {
-			List attributes = eObject.eClass().getEAllAttributes();
-			for (int i = 0; i < attributes.size(); i++) {
-				EAttribute att = (EAttribute) attributes.get(i);
-				if(att.getName().equals("unchecked") && mpFlag){
-					continue;					
-				}	
-				
-				Object value = createAttributeValue(att, eObject);
-				if (att.isChangeable())
-					eObject.eSet(att, value);
-			} 
-			mpFlag = !mpFlag;
-		} else if (eObject instanceof EJBRelationshipRoleImpl) {
-			List attributes = eObject.eClass().getEAllAttributes();
-			EAttribute lastAttr = null;
-			Object value = null;
-			for (int i = 0; i < attributes.size(); i++) {
-				EAttribute att = (EAttribute) attributes.get(i);
-				if (att.getName().equals("cascadeDelete") && (lastAttr.getName().equals("multiplicity") && !value.toString().equals("Many")))
-					continue;
-
-				value = createAttributeValue(att, eObject);
-				if (att.isChangeable())
-					eObject.eSet(att, value);
-				lastAttr = att;
-		}
-			mpFlag = !mpFlag;
-		} else
-			super.populateAttributes(eObject);
-	}
-	
-
-	protected void populateSharedReference(EObject eObject, EReference ref) {
-		if (ref == EJB_PKG.getCMRField_CollectionType()) {
-			setReferenceValue(eObject, ref, JavaClassImpl.createClassRef("java.util.Collection"));
-			return;
-		} else if(eObject instanceof MethodPermission && ref.getName().equals("roles")){
-			//if method permission unchecked ignore roles
-			if(mpFlag){
-				return;
-			}
-			mpFlag = !mpFlag;
-		}
-		super.populateSharedReference(eObject, ref);
-	}
-
-	public HashSet ignorableAttributes(){
-		HashSet set = new HashSet();
-		set.add("id");
-		return set;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.ibm.etools.archive.emftest.GeneralEMFPopulationTest#createAttributeValue(org.eclipse.emf.ecore.EAttribute, org.eclipse.emf.ecore.EObject)
-	 */
-	protected Object createAttributeValue(EAttribute att, EObject eObject) {
-		//eat the first return type mapping because the order was changed.
-		if (firstReturnTypeMapping && att.equals(EJB_PKG.getQuery_ReturnTypeMapping())){
-			super.createAttributeValue(att,eObject);
-			firstReturnTypeMapping = false;
-		} else if (att.equals(EJB_PKG.getEnterpriseBean_Name()))
-			return EMFAttributeFeatureGenerator.createAttribute(att,EJB_PKG.getEntity());
-		return super.createAttributeValue(att, eObject);
-	}
-
-	/* (non-Javadoc)
-	 * @see junit.framework.TestCase#tearDown()
-	 */
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		earFile = null;
-		ejbFile = null;
-		mesBean = null;
-		entityBean = null;
-		secID = null;
-		roleSource = null;
-
-		
-}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/GeneralEMFEditingTest.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/GeneralEMFEditingTest.java
deleted file mode 100644
index 7c687ea..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/GeneralEMFEditingTest.java
+++ /dev/null
@@ -1,459 +0,0 @@
-package org.eclipse.jst.j2ee.archive.emftests;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.LineNumberReader;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.InternalEObject;
-import org.eclipse.jem.java.JavaRefPackage;
-import org.eclipse.jem.java.impl.JavaClassImpl;
-import org.eclipse.jst.j2ee.archive.testutilities.EMFAttributeFeatureGenerator;
-import org.eclipse.jst.j2ee.archive.testutilities.J2EEVersionCheck;
-import org.eclipse.jst.j2ee.archive.testutilities.TestUtilities;
-import org.eclipse.jst.j2ee.common.CommonPackage;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.wst.common.tests.BaseTestCase;
-
-
-public class GeneralEMFEditingTest extends BaseTestCase {
-	//inner class to handle deffered shared references
-	protected class DeferredSharedReferenceAction {
-		EObject owner;
-		EReference ref;
-
-		public DeferredSharedReferenceAction(EObject owner, EReference ref) {
-			this.owner = owner;
-			this.ref = ref;
-		}
-
-		public void performAction() {
-			Object value = getSharedObjectByType(owner, ref);
-			setReferenceValue(owner, ref, value);
-		}
-	}
-
-	protected Map equivalentLines;
-	public List deferedReferences;
-	public static int genDepth = 5;
-	public static Object sharedValue;
-	public int classIndex = 0;
-	public static String avClass[];
-	public static HashSet ignoreAtt;
-
-	public int version;
-	public int moduleType;
-	//static versions
-	public static final int VERSION_1_2 = 0;
-	public static final int VERSION_1_3 = 1;
-	public static final int VERSION_1_4 = 2;
-
-	public static final int APPICATION = 0;
-	public static final int APP_CLIENT = 1;
-	public static final int CONNECTOR = 2;
-	public static final int EJB = 3;
-	public static final int WEB = 4;
-
-	public GeneralEMFEditingTest(String name) {
-		super(name);
-	}
-
-	public void editRoot(EObject eObject) {
-		editFeatures(eObject);
-		//if (deferedReferences != null) {
-		//	for (int i = 0; i < deferedReferences.size(); i++) {
-		//		((DeferredSharedReferenceAction) deferedReferences.get(i)).performAction();
-		//	}
-		//}
-	}
-
-	public void editFeatures(EObject eObject) {
-		if (eObject == null)
-			return;
-		else {
-			editAttributes(eObject);
-			editReferences(eObject);
-		}
-	}
-
-	protected void editReferences(EObject eObject) {
-		List references = eObject.eClass().getEAllReferences();
-		for (int i = 0; i < references.size(); i++) {
-			EReference ref = (EReference) references.get(i);
-			if (!ref.isMany() && eObject.eGet(ref) != null)
-				continue;
-			if (ref.isContainment())
-				populateContainmentReference(eObject, ref);
-			else
-				populateSharedReference(eObject, ref);
-		}
-	}
-
-	protected void populateSharedReference(EObject eObject, EReference ref) {
-		if (ref.getEType() == JavaRefPackage.eINSTANCE.getJavaClass())
-			setReferenceValue(eObject, ref, createJavaClassProxy((EClass) ref.getEType()));
-		else {
-			EPackage pkg = ref.getEType().getEPackage();
-			if (pkg == eObject.eClass().getEPackage() || pkg == CommonPackage.eINSTANCE) {
-				if (eObject.eClass().getName().equals("EAnnotation") || eObject.eClass().getName().equals("EAnnotationImpl") || !J2EEVersionCheck.checkReferenceVersion(ref, version, moduleType))
-					return;
-				if (deferedReferences == null)
-					deferedReferences = new ArrayList();
-				deferedReferences.add(new DeferredSharedReferenceAction(eObject, ref));
-			}
-		}
-	}
-
-	protected void populateContainmentReference(EObject eObject, EReference ref) {
-		for (int i = 0; i < getDepthForAttribute(ref); i++) {
-			EObject instance = createInstance((EClass) ref.getEType());
-			if (instance == null)
-				return;
-			if (!J2EEVersionCheck.checkReferenceVersion(ref, version, moduleType))
-				continue;
-			setReferenceValue(eObject, ref, instance);
-			if (((InternalEObject) instance).eIsProxy())
-				return;
-			if (ref.getEType() == eObject.eClass())
-				editAttributes(instance);
-			else
-				editFeatures(instance);
-		}
-	}
-
-	protected void setReferenceValue(EObject eObject, EReference ref, Object value) {
-		if (ref.getName().equals("EAnnotation") || ref.getName().equals("EAnnotationImpl") || !J2EEVersionCheck.checkReferenceVersion(ref, version, moduleType))
-			return;
-		if (ref.isMany()) {
-			List list = (List) eObject.eGet(ref);
-			if (value instanceof Collection)
-				list.addAll((Collection) value);
-			else
-				list.add(value);
-		} else {
-			eObject.eSet(ref, value);
-		}
-	}
-
-	public EObject createInstance(EClass eClassifier) {
-		if (eClassifier == JavaRefPackage.eINSTANCE.getJavaClass())
-			return createJavaClassProxy(eClassifier);
-		return eClassifier.getEPackage().getEFactoryInstance().create(eClassifier);
-	}
-
-	protected void editAttributes(EObject eObject) {
-		List attributes = eObject.eClass().getEAllAttributes();
-		for (int i = 0; i < attributes.size(); i++) {
-			EAttribute att = (EAttribute) attributes.get(i);
-			if (att.isChangeable() && J2EEVersionCheck.checkAttributeVersion(att, version, moduleType)) {
-				Object value = createAttributeValue(att, eObject);
-				eObject.eSet(att, value);
-			}
-		}
-	}
-
-	protected Object createAttributeValue(EAttribute att, EObject eObject) {
-		if (att.getEType() == JavaRefPackage.eINSTANCE.getJavaClass()) {
-			return createJavaClassProxy(att.eClass()).getClass();
-		} 
-		// if (moduleType == WEB)
-			return EMFAttributeFeatureGenerator.createAttribute(att, eObject, true, version, moduleType);
-		//return EMFAttributeFeatureGenerator.createAttribute(att);
-	}
-
-	protected EObject createJavaClassProxy(EClass metaClass) {
-		if (avClass == null) {
-			avClass = new String[] { "java.util.HashTable", "java.util.List", "java.sql.Data", "java.lang.Integer", "java.lang.String" };
-		}
-		String name = avClass[classIndex];
-		classIndex++;
-		if (classIndex == 5)
-			classIndex = 0;
-		return JavaClassImpl.createClassRef(name);
-	}
-
-	// Old Compare method....now using DOMComparator...remove once stable
-	public void compareContents(String file1, String file2) throws Exception {
-	    BufferedReader reader1 = null;
-	    BufferedReader reader2 = null;
-		try {
-			int lineno = 1;
-			reader1 = new BufferedReader(new InputStreamReader(getFileInputStream(file1)));
-			reader2 = new BufferedReader(new InputStreamReader(getFileInputStream(file2)));
-			String line1 = "", line2 = "";
-			while (reader1.ready() && reader2.ready()) {
-				line1 = readLineTrimComments(reader1); 
-				line2 = readLineTrimComments(reader2);
-				if (line1 == null && line2 == null && lineno != 0)
-					return;
-							    
-				if (!line1.trim().equals(line2.trim())) {
-					String message = "Error at line #: " + lineno + '\n' + line1 + '\n' + line2 + '\n';
-					System.out.println(message);
-					//assertTrue(message, false);
-				}
-				lineno++;
-			}
-			assertTrue("The files have a different number of lines:" + lineno + '\n' + line1 + '\n' + line2 + '\n', (!reader1.ready() && !reader2.ready()));
-		} catch (IOException ex) {
-		    ex.printStackTrace();
-			assertTrue("IO failed", false);
-		} finally {
-		    if(reader1 != null)
-		        reader1.close();
-		    if(reader2 != null)
-		        reader2.close();
-		}
-	} 
-
-    /**
-     * @param string
-     * @return
-     */
-    private String readLineTrimComments(BufferedReader reader) throws IOException {
-        String result = reader.readLine(); 
-        if(result.indexOf("<!--") < 0)
-            return result;
-        else {
-            int endCommentIndx = 0;
-            while(reader.ready()) {
-                if( (endCommentIndx = result.indexOf("-->")) >= 0) 
-                    result = reader.readLine();
-                else 
-                    return result;
-            }
-        }
-        return result;
-    }
-
-    public void compareContentsIgnoreWhitespace(String file1, String file2, String identifier) throws Exception {
-
-		LineNumberReader reader1 = new LineNumberReader(new InputStreamReader(getFileInputStream(file1)));
-		LineNumberReader reader2 = new LineNumberReader(new InputStreamReader(getFileInputStream(file2)));
-		compareContentsIgnoreWhitespace(reader1, reader2, identifier);
-
-	}
-
-	public void compareContentsIgnoreWhitespace(LineNumberReader reader1, LineNumberReader reader2, String identifier) throws Exception {
-
-		while (reader1.ready() || reader2.ready()) {
-			String line1 = "", line2 = "";
-			while (reader1.ready() && line1.equals("")) {
-				line1 = reader1.readLine().trim();
-			}
-			while (reader2.ready() && line2.equals("")) {
-				line2 = reader2.readLine().trim();
-			}
-			if (!isEquivalentLines(line1, line2)) {
-				StringBuffer buff = new StringBuffer();
-				buff.append("Difference found in test ");
-
-				buff.append(identifier);
-				buff.append("\nSource line #: ");
-				buff.append(reader1.getLineNumber());
-				buff.append('\n');
-				buff.append(line1);
-				buff.append("\nDestination line #: ");
-				buff.append(reader2.getLineNumber());
-				buff.append('\n');
-				buff.append(line2);
-				assertTrue(buff.toString(), false);
-			}
-		}
-
-	}
-
-	public boolean lineEquals(String line1, String line2) {
-		return line1.equals(line2);
-	}
-
-	public boolean isEquivalentLines(String line1, String line2) {
-		if (lineEquals(line1, line2))
-			return true;
-		if (equalTags(line1, line2))
-			return true;
-		String equiv = (String) getEquivalentLines().get(line1);
-		return equiv != null && equiv.equals(line2);
-	}
-	
-	public boolean equalTags(String line1, String line2){
-		//data check, there should be no data for this test to return true
-		int shortEndIndex1 = line1.indexOf("/>");
-		int shortEndIndex2 = line2.indexOf("/>");
-		if (shortEndIndex1 == -1 && shortEndIndex2 == -1)
-			return false;
-		else if (shortEndIndex1 != -1){
-			String tagName1 = line1.substring(1,shortEndIndex1);
-			String tagName2 = extractTagName(line2);
-			if (checkNoData(line2) && tagName1.equals(tagName2)){
-				return true;
-			}
-		}
-		else if (shortEndIndex2 != -1){
-			String tagName1 = extractTagName(line1); 
-			String tagName2 = line2.substring(1,shortEndIndex2);
-			if (checkNoData(line1) && tagName1.equals(tagName2)){
-				return true;
-			}
-		}
-		return false;
-	}
-	/**
-	 * @param line2
-	 * @return
-	 */
-	private String extractTagName(String line) {
-		int endOpenTag = line.indexOf(">");
-		return line.substring(1,endOpenTag);
-	}
-
-	/**
-	 * @param line2
-	 * @return
-	 */
-	private boolean checkNoData(String line) {
-		int endOpenTag = line.indexOf(">");
-		int startEndTag = line.lastIndexOf("<");
-		if (endOpenTag == line.length())
-			return true;
-		else if (endOpenTag+1 == startEndTag)
-			return true;
-		return false;
-	}
-
-	public Map getEquivalentLines() {
-		if (equivalentLines == null)
-			equivalentLines = new HashMap();
-		return equivalentLines;
-	}
-
-	public void setEquivalentLines(Map equivalentLines) {
-		this.equivalentLines = equivalentLines;
-	}
-	/*
-		public void compareContents(String file1, String file2) throws Exception {
-			InputStream is1, is2;
-			is1 = getFileInputStream(file1);
-			is2 = getFileInputStream(file2);
-			InputSource input1 = new InputSource(is1);
-			InputSource input2 = new InputSource(is2);
-			try {
-				String results;
-				if(ignoreAtt == null)
-					results = DomComparitor.compareDoms(input1, input2);
-				else
-					results = DomComparitor.compareDoms(input1, input2, ignoreAtt);
-				if (results != null) {
-					assertTrue("Unequal doms compared as equal " + file1 + " " + file2 + "Details: " + results, false);
-				}
-			} finally {
-				try {
-					is1.close();
-				} catch (Exception e) {
-					Assert.fail(e.getMessage());
-				}
-				try {
-					is2.close();
-				} catch (Exception e) {
-					Assert.fail(e.getMessage());
-				}
-			}
-		}
-	*/
-	public InputStream getFileInputStream(String path) throws FileNotFoundException {
-		return new FileInputStream(path);
-	}
-
-	public InputStream getResourceAsStream(String fileName) {
-		InputStream in = null;
-		ClassLoader loader = getClass().getClassLoader();
-		if (loader == null) {
-			in = ClassLoader.getSystemResourceAsStream(fileName);
-		} else {
-			in = loader.getResourceAsStream(fileName);
-		}
-		assertTrue("Unable to find resource: " + fileName, in != null);
-		return in;
-	}
-
-	public void setGeneralDepth(int depth) {
-		GeneralEMFPopulationTest.genDepth = depth;
-	}
-
-	public void setModuleType(int type) {
-		moduleType = type;
-	}
-
-	public void setVersion(int version) {
-		this.version = version;
-	}
-
-	public int getDepthForAttribute(EReference ref) {
-		if (ref.isMany())
-			return genDepth;
-		else
-			return 1;
-	}
-
-	public Object getSharedObjectByType(EObject owner, EReference ref) {
-		sharedValue = TestUtilities.getObjectByType(owner.eResource(), ref.getEType(), ref.isMany());
-		return sharedValue;
-	}
-
-	/**
-	 * @param set
-	 */
-	public static void setIgnoreAtt(HashSet set) {
-		ignoreAtt = set;
-	}
-	
-	/* (non-Javadoc)
-	 * @see junit.framework.TestCase#tearDown()
-	 */
-	protected void tearDown() throws Exception {
-		try {
-			String out = AutomatedBVT.baseDirectory + "testOutput/";
-			File del = new File(out);
-			deleteDirectory(del);
-			del.delete();
-			out = AutomatedBVT.baseDirectory + "../testData/testOutput/";
-			del = new File(out);
-			deleteDirectory(del);
-			del.delete();
-		}
-		catch (Exception e){
-			e.printStackTrace();
-		}
-		super.tearDown();
-	}
-	
-	protected void deleteDirectory(File directory)
-	   throws IOException
-	{
-		if (directory.exists()){
-		   File[] delFiles = directory.listFiles();
-	
-		   for(int i=0; i<delFiles.length; ++i)
-		   {
-		      if(delFiles[i].isDirectory())
-		         deleteDirectory(delFiles[i]);
-		      delFiles[i].delete();
-		   }  
-		}
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/GeneralEMFPopulationTest.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/GeneralEMFPopulationTest.java
deleted file mode 100644
index fb1e311..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/GeneralEMFPopulationTest.java
+++ /dev/null
@@ -1,457 +0,0 @@
-package org.eclipse.jst.j2ee.archive.emftests;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.LineNumberReader;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.InternalEObject;
-import org.eclipse.jem.java.JavaRefPackage;
-import org.eclipse.jst.j2ee.archive.testutilities.EMFAttributeFeatureGenerator;
-import org.eclipse.jst.j2ee.archive.testutilities.J2EEVersionCheck;
-import org.eclipse.jst.j2ee.archive.testutilities.TestUtilities;
-import org.eclipse.jst.j2ee.common.CommonPackage;
-import org.eclipse.jst.j2ee.common.EJBLocalRef;
-import org.eclipse.jst.j2ee.common.QName;
-import org.eclipse.jst.j2ee.common.ResAuthTypeBase;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.jst.j2ee.ejb.EjbPackage;
-import org.eclipse.jst.j2ee.ejb.MessageDriven;
-import org.eclipse.jst.j2ee.ejb.MethodElementKind;
-import org.eclipse.wst.common.tests.BaseTestCase;
-
-
-public class GeneralEMFPopulationTest extends BaseTestCase {
-    //inner class to handle deffered shared references
-    protected class DeferredSharedReferenceAction {
-        EObject owner;
-        EReference ref;
-
-        public DeferredSharedReferenceAction(EObject owner, EReference ref) {
-            this.owner = owner;
-            this.ref = ref;
-        }
-
-        public void performAction() {
-            Object value = getSharedObjectByType(owner, ref);
-            setReferenceValue(owner, ref, value);
-        }
-    }
-
-    protected Map equivalentLines;
-    public List deferedReferences;
-    public static int genDepth = 5;
-    public static Object sharedValue;
-    public static HashSet ignoreAtt;
-
-    public int version;
-    public int moduleType;
-    //static versions
-    public static final int VERSION_1_2 = 0;
-    public static final int VERSION_1_3 = 1;
-    public static final int VERSION_1_4 = 2;
-
-    public static final int APPICATION = 0;
-    public static final int APP_CLIENT = 1;
-    public static final int CONNECTOR = 2;
-    public static final int EJB = 3;
-    public static final int WEB = 4;
-
-    public GeneralEMFPopulationTest(String name) {
-        super(name);
-    }
-
-    public void populateRoot(EObject eObject) {
-        populateFeatures(eObject);
-        if (deferedReferences != null) {
-            for (int i = 0; i < deferedReferences.size(); i++) {
-                ((DeferredSharedReferenceAction) deferedReferences.get(i)).performAction();
-            }
-        }
-    }
-
-    public void populateFeatures(EObject eObject) {
-        if (eObject == null)
-            return;
-        else {
-            populateAttributes(eObject);
-            populateReferences(eObject);
-        }
-    }
-
-    protected void populateReferences(EObject eObject) {
-        List references = eObject.eClass().getEAllReferences();
-        for (int i = 0; i < references.size(); i++) {
-            EReference ref = (EReference) references.get(i);
-            if (!ref.isMany() && eObject.eGet(ref) != null)
-                continue;
-			if (eObject instanceof MessageDriven && (ref.equals(EjbPackage.eINSTANCE.getEnterpriseBean_HomeInterface()) || ref.equals(EjbPackage.eINSTANCE.getEnterpriseBean_RemoteInterface()) || ref.equals(EjbPackage.eINSTANCE.getEnterpriseBean_LocalInterface()) || ref.equals(EjbPackage.eINSTANCE.getEnterpriseBean_LocalHomeInterface()) || ref.equals(EjbPackage.eINSTANCE.getEnterpriseBean_SecurityRoleRefs())))
-				continue;
-            if (ref.isContainment())
-                populateContainmentReference(eObject, ref);
-            else
-                populateSharedReference(eObject, ref);
-        }
-    }
-
-    protected void populateSharedReference(EObject eObject, EReference ref) {
-        if (ref.getEType() == JavaRefPackage.eINSTANCE.getJavaClass())
-            setReferenceValue(eObject, ref, EMFAttributeFeatureGenerator.createJavaClassProxy(ref,eObject));
-        else {
-            EPackage pkg = ref.getEType().getEPackage();
-            //if (pkg == eObject.eClass().getEPackage() || pkg == CommonPackage.eINSTANCE) {
-                if (eObject.eClass().getName().equals("EAnnotation") || eObject.eClass().getName().equals("EAnnotationImpl") || !J2EEVersionCheck.checkReferenceVersion(ref, version, moduleType))
-                    return;
-                if (deferedReferences == null)
-                    deferedReferences = new ArrayList();
-                deferedReferences.add(new DeferredSharedReferenceAction(eObject, ref));
-            //}
-        }
-    }
-
-    protected void populateContainmentReference(EObject eObject, EReference ref) {
-        for (int i = 0; i < getDepthForAttribute(ref); i++) {
-            EObject instance = createInstance(ref,eObject);
-            if (instance == null)
-                return;
-            if (!J2EEVersionCheck.checkReferenceVersion(ref, version, moduleType))
-                continue;
-            setReferenceValue(eObject, ref, instance);
-            if (((InternalEObject) instance).eIsProxy())
-                return;
-            if (ref.getEType() == eObject.eClass())
-                populateAttributes(instance);
-            else
-                populateFeatures(instance);
-        }
-    }
-
-    protected void setReferenceValue(EObject eObject, EStructuralFeature ref, Object value) {
-        if (ref.getName().equals("EAnnotation") || ref.getName().equals("EAnnotationImpl") || !J2EEVersionCheck.checkReferenceVersion(ref, version, moduleType))
-            return;
-        if (ref.isMany()) {
-            List list = (List) eObject.eGet(ref);
-            if (value instanceof Collection)
-                list.addAll((Collection) value);
-            else
-                list.add(value);
-        } else {
-            eObject.eSet(ref, value);
-        }
-    }
-
-    public EObject createInstance(EReference ref, EObject eObject) {
-        if (ref.getEType() == JavaRefPackage.eINSTANCE.getJavaClass())
-            return EMFAttributeFeatureGenerator.createJavaClassProxy(ref, eObject);
-        return ref.getEType().getEPackage().getEFactoryInstance().create((EClass)ref.getEType());
-    }
-
-    protected void populateAttributes(EObject eObject) {
-    	if (eObject.eClass() == CommonPackage.eINSTANCE.getQName()) {
-    		populateAttributesQName(eObject);
-    		return;
-    	}
-        List attributes = eObject.eClass().getEAllAttributes();
-        for (int i = 0; i < attributes.size(); i++) {
-            EAttribute att = (EAttribute) attributes.get(i);
-            if (eObject instanceof EJBLocalRef && (att.equals(CommonPackage.eINSTANCE.getEjbRef_Home()) || att.equals(CommonPackage.eINSTANCE.getEjbRef_Remote())))
-            	continue;
-            primPopulateAttrbute(eObject, att);
-        }
-    }
-
-	private void primPopulateAttrbute(EObject eObject, EAttribute att) {
-            if (att.isChangeable() && J2EEVersionCheck.checkAttributeVersion(att, version, moduleType)) {
-                for (int j = 0 ; j < getDepthForAttribute(att);j++){
-	                Object value = createAttributeValue(att, eObject);
-	                setReferenceValue(eObject,att,value);
-                }
-            }
-        }
-    
-    
-
-    /**
-	 * @param eObject
-	 */
-	private void populateAttributesQName(EObject eObject) {
-		String prefix = (String)createAttributeValue(CommonPackage.eINSTANCE.getQName_InternalPrefixOrNsURI(), eObject);
-		String localPart = (String)createAttributeValue(CommonPackage.eINSTANCE.getQName_LocalPart(), eObject);
-		((QName)eObject).setValues(prefix, "http://www.ibm.com", localPart);
-    }
-
-    protected Object createAttributeValue(EAttribute att, EObject eObject) {
-        if (att.getEType() == JavaRefPackage.eINSTANCE.getJavaClass()) {
-            return EMFAttributeFeatureGenerator.createJavaClassProxy(att,eObject).getClass();
-        } else if (att == CommonPackage.eINSTANCE.getResourceRef_Auth())
-			return createResAuth(att, eObject);
-		else if (att == EjbPackage.eINSTANCE.getMethodElement_Type())
-			return createMethodElementType(att, eObject);
-        else
-            return primCreateAttributeValue(att, eObject);
-        //return EMFAttributeFeatureGenerator.createAttribute(att);
-    }
-    
-    protected Object primCreateAttributeValue(EAttribute att, EObject eObject) {
-		return EMFAttributeFeatureGenerator.createAttribute(att, eObject, true, version, moduleType);
-    }
-
-    // Old Compare method....now using DOMComparator...remove once stable
-    public void compareContents(String file1, String file2) throws Exception {
-        try {
-            int lineno = 1;
-            BufferedReader reader1 = new BufferedReader(new InputStreamReader(getFileInputStream(file1)));
-            BufferedReader reader2 = new BufferedReader(new InputStreamReader(getFileInputStream(file2)));
-            String line1 = "", line2 = "";
-            while (reader1.ready() && reader2.ready()) {
-                line1 = reader1.readLine();
-                line2 = reader2.readLine();
-                if (line1 == null && line2 == null && lineno != 0)
-                    return;
-                if (!line1.equals(line2)) {
-                    String message = "Error at line #: " + lineno + '\n' + line1 + '\n' + line2 + '\n';
-                    assertTrue(message, false);
-                    break; // added to escape compare 
-                }
-                lineno++;
-            }
-            assertTrue("The files have a different number of lines:" + lineno + '\n' + line1 + '\n' + line2 + '\n', (!reader1.ready() && !reader2.ready()));
-        } catch (IOException ex) {
-            assertTrue("IO failed", false);
-        }
-    }
-    public void compareContentsIgnoreWhitespace(String file1, String file2, String identifier) throws Exception {
-
-        LineNumberReader reader1 = new LineNumberReader(new InputStreamReader(getFileInputStream(file1)));
-        LineNumberReader reader2 = new LineNumberReader(new InputStreamReader(getFileInputStream(file2)));
-        compareContentsIgnoreWhitespace(reader1, reader2, identifier);
-
-    }
-
-    public void compareContentsIgnoreWhitespace(LineNumberReader reader1, LineNumberReader reader2, String identifier) throws Exception {
-		List errors = new ArrayList();
-		String msg = null;
-        while (reader1.ready() || reader2.ready()) {
-            String line1 = "", line2 = "";
-            while (reader1.ready() && line1 != null && line1.equals("")) {
-                line1 = reader1.readLine();
-                if (line1 != null)
-                	line1 = line1.trim();
-            }
-            while (reader2.ready() && line2 != null && line2.equals("")) {
-                line2 = reader2.readLine();
-                if (line2 != null)
-                	line2 = line2.trim();
-            }
-            if (line1 != null && line2 != null && !isEquivalentLines(line1, line2)) {
-                StringBuffer buff = new StringBuffer();
-                buff.append("------------------------------ ");
-                buff.append("\nSource line #: ");
-                buff.append(reader1.getLineNumber());
-                buff.append('\n');
-                buff.append(line1);
-                buff.append("\nDestination line #: ");
-                buff.append(reader2.getLineNumber());
-                buff.append('\n');
-                buff.append(line2);
-                System.out.println(buff.toString());
-                errors.add(buff);
-                break;
-            }
-        }
-        if (!errors.isEmpty())
-			assertTrue("Errors Found, Check Console.", false);
-    }
-
-    public boolean lineEquals(String line1, String line2) {
-        return line1 != null && line1.equals(line2);
-    }
-
-    public boolean isEquivalentLines(String line1, String line2) {
-        if (lineEquals(line1, line2))
-            return true;
-
-        String equiv = (String) getEquivalentLines().get(line1);
-        if (equiv == null){
-        	equiv = (String)getEquivalentLines().get(line2);
-        	if (equiv != null)
-        		return equiv.equals(line1);
-        }
-        return equiv != null && equiv.equals(line2);
-    }
-    public Map getEquivalentLines() {
-        if (equivalentLines == null)
-            equivalentLines = new HashMap();
-        return equivalentLines;
-    }
-
-    public void setEquivalentLines(Map equivalentLines) {
-        this.equivalentLines = equivalentLines;
-    }
-    /*
-    	public void compareContents(String file1, String file2) throws Exception {
-    		InputStream is1, is2;
-    		is1 = getFileInputStream(file1);
-    		is2 = getFileInputStream(file2);
-    		InputSource input1 = new InputSource(is1);
-    		InputSource input2 = new InputSource(is2);
-    		try {
-    			String results;
-    			if(ignoreAtt == null)
-    				results = DomComparitor.compareDoms(input1, input2);
-    			else
-    				results = DomComparitor.compareDoms(input1, input2, ignoreAtt);
-    			if (results != null) {
-    				assertTrue("Unequal doms compared as equal " + file1 + " " + file2 + "Details: " + results, false);
-    			}
-    		} finally {
-    			try {
-    				is1.close();
-    			} catch (Exception e) {
-    				Assert.fail(e.getMessage());
-    			}
-    			try {
-    				is2.close();
-    			} catch (Exception e) {
-    				Assert.fail(e.getMessage());
-    			}
-    		}
-    	}
-    */
-    public InputStream getFileInputStream(String path) throws FileNotFoundException {
-        return new FileInputStream(path);
-    }
-
-    public InputStream getResourceAsStream(String fileName) {
-        InputStream in = null;
-        ClassLoader loader = getClass().getClassLoader();
-        if (loader == null) {
-            in = ClassLoader.getSystemResourceAsStream(fileName);
-        } else {
-            in = loader.getResourceAsStream(fileName);
-        }
-        assertTrue("Unable to find resource: " + fileName, in != null);
-        return in;
-    }
-
-    public void setGeneralDepth(int depth) {
-        GeneralEMFPopulationTest.genDepth = depth;
-    }
-
-    public void setModuleType(int type) {
-        moduleType = type;
-    }
-
-    public void setVersion(int version) {
-        this.version = version;
-    }
-
-    public int getDepthForAttribute(EStructuralFeature feature) {
-        if (feature.isMany())
-            return genDepth;
-        else
-            return 1;
-    }
-
-    public Object getSharedObjectByType(EObject owner, EReference ref) {
-        sharedValue = TestUtilities.getObjectByType(owner.eResource(), ref.getEType(), ref.isMany());
-        return sharedValue;
-    }
-
-    /**
-     * @param set
-     */
-    public static void setIgnoreAtt(HashSet set) {
-        ignoreAtt = set;
-    }
-    
-	
-	
-	protected Object createResAuth(EAttribute att, EObject eObject) {
-		Object auth = null;
-		do {
-			auth = primCreateAttributeValue(att, eObject);
-		} while (!isValidAuth((ResAuthTypeBase)auth));
-		return auth;
-	}
-	
-	/**
-	 * Web will need to override  for J2EE 1.2/1/3
-	 * @param auth
-	 * @return
-	 */
-	protected boolean isValidAuth(ResAuthTypeBase auth) {
-		return auth == ResAuthTypeBase.APPLICATION_LITERAL || auth == ResAuthTypeBase.CONTAINER_LITERAL;
-	}
-	
-	protected Object createMethodElementType(EAttribute att, EObject eObject) {
-		Object type = null;
-		do {
-			type = primCreateAttributeValue(att, eObject);
-		} while (!isValidMethodElementType((MethodElementKind)type));
-		return type;
-	}
-
-	/**
-	 * Web will need to override  for J2EE 1.2/1/3
-	 * @param auth
-	 * @return
-	 */
-	protected boolean isValidMethodElementType(MethodElementKind type) {
-		if  (version == VERSION_1_4)
-			return true;
-		return version != VERSION_1_4 && type != MethodElementKind.SERVICE_ENDPOINT_LITERAL;
-	}
-	
-	/* (non-Javadoc)
-	 * @see junit.framework.TestCase#tearDown()
-	 */
-	protected void tearDown() throws Exception {
-		try {
-			String out = AutomatedBVT.baseDirectory + "testOutput/";
-			File del = new File(out);
-			deleteDirectory(del);
-			del.delete();
-			out = AutomatedBVT.baseDirectory + "../testData/testOutput/";
-			del = new File(out);
-			deleteDirectory(del);
-			del.delete();
-		}
-		catch (Exception e){
-			e.printStackTrace();
-		}
-		super.tearDown();
-	}
-	
-	protected void deleteDirectory(File directory)
-	   throws IOException
-	{
-		if (directory.exists()){
-		   File[] delFiles = directory.listFiles();
-	
-		   for(int i=0; i<delFiles.length; ++i)
-		   {
-		      if(delFiles[i].isDirectory())
-		         deleteDirectory(delFiles[i]);
-		      delFiles[i].delete();
-		   }  
-		}
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/RarEMFEditTest.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/RarEMFEditTest.java
deleted file mode 100644
index 58a6ce0..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/RarEMFEditTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.eclipse.jst.j2ee.archive.emftests;
-
-import java.util.HashSet;
-
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.jst.j2ee.application.ApplicationFactory;
-import org.eclipse.jst.j2ee.application.ApplicationPackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.RARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.DuplicateObjectException;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.jst.j2ee.ejb.EjbFactory;
-import org.eclipse.jst.j2ee.ejb.EjbPackage;
-import org.eclipse.jst.j2ee.jca.ConnectorResource;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationFactory;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationPackage;
-
-
-public class RarEMFEditTest extends GeneralEMFEditingTest {
-    RARFile rarFile;
-
-    public RarEMFEditTest(String name) {
-        super(name);
-    }
-
-    public CommonarchiveFactory getArchiveFactory() {
-        return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-    }
-
-    public EjbFactory getEjbFactory() {
-        return EjbPackage.eINSTANCE.getEjbFactory();
-    }
-
-    public ApplicationFactory getApplicationFactory() {
-        return ApplicationPackage.eINSTANCE.getApplicationFactory();
-    }
-
-    public WebapplicationFactory getWebAppFactory() {
-        return WebapplicationPackage.eINSTANCE.getWebapplicationFactory();
-    }
-
-    public static void main(java.lang.String[] args) {
-        String[] className = { "com.ibm.etools.archive.test.RarEMFEditTest", "-noloading" };
-        TestRunner.main(className);
-    }
-    public static junit.framework.Test suite() {
-        TestSuite suite = new TestSuite();
-        suite.addTest(new RarEMFEditTest("testRAREdit"));
-        return suite;
-    }
-
-    public void testRAREdit() throws Exception {
-        getRar();
-		assertEquals("1.0", rarFile.getDeploymentDescriptor().getSpecVersion());
-
-		ConnectorResource DD = (ConnectorResource) rarFile.getDeploymentDescriptorResource();
-       	setVersion(VERSION_1_3);
-       	setModuleType(CONNECTOR);       
-        editRoot(DD.getRootObject());
-        String curDir = AutomatedBVT.baseDirectory;
-        
-        String out = curDir + "testOutput/EMFModelCreationTests/EditRarEAR";
-        rarFile.extractTo(out, Archive.EXPAND_ALL);
-        rarFile.close();
-
-        //Compare work in progress
-        
-        String exampleDeploymentDesURI = curDir + "EMFTests/ra.xml";
-        String curDeploymentDesURI = curDir + out + "/fooRAR/META-INF/ra.xml";
-        //compareContents(curDeploymentDesURI, exampleDeploymentDesURI);
-    }
-
-    public void getRar() throws DuplicateObjectException, OpenFailureException {
-        String in = AutomatedBVT.baseDirectory + "loose_module_workspace/LooseConnector/fooRAR/";
-        rarFile = getArchiveFactory().openRARFile(in);
-        assertTrue(rarFile.getDeploymentDescriptor() != null);
-    }
-	public HashSet ignorableAttributes(){
-		HashSet set = new HashSet();
-		set.add("id");
-		return set;
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/RarEMFTest.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/RarEMFTest.java
deleted file mode 100644
index 7d73cf7..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/RarEMFTest.java
+++ /dev/null
@@ -1,158 +0,0 @@
-package org.eclipse.jst.j2ee.archive.emftests;
-
-import java.util.HashSet;
-
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jst.j2ee.application.ApplicationFactory;
-import org.eclipse.jst.j2ee.application.ApplicationPackage;
-import org.eclipse.jst.j2ee.archive.testutilities.EMFAttributeFeatureGenerator;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.RARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.DuplicateObjectException;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.jst.j2ee.ejb.EjbFactory;
-import org.eclipse.jst.j2ee.ejb.EjbPackage;
-import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
-import org.eclipse.jst.j2ee.jca.ConnectorResource;
-import org.eclipse.jst.j2ee.jca.JcaPackage;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationFactory;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationPackage;
-
-
-public class RarEMFTest extends GeneralEMFPopulationTest {
-	EARFile earFile;
-	RARFile rarFile;
-
-	public RarEMFTest(String name) {
-		super(name);
-	}
-
-	public CommonarchiveFactory getArchiveFactory() {
-		return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-	}
-
-	public EjbFactory getEjbFactory() {
-		return EjbPackage.eINSTANCE.getEjbFactory();
-	}
-
-	public ApplicationFactory getApplicationFactory() {
-		return ApplicationPackage.eINSTANCE.getApplicationFactory();
-	}
-
-	public WebapplicationFactory getWebAppFactory() {
-		return WebapplicationPackage.eINSTANCE.getWebapplicationFactory();
-	}
-
-	public static void main(java.lang.String[] args) {
-		String[] className = { "com.ibm.etools.archive.test.RarEMFTest", "-noloading" };
-		TestRunner.main(className);
-	}
-	public static junit.framework.Test suite() {
-		TestSuite suite = new TestSuite();
-		suite.addTest(new RarEMFTest("testRARPopulation"));
-		suite.addTest(new RarEMFTest("test14RARPopulation"));
-		return suite;
-	}
-
-	public void testRARPopulation() throws Exception {
-		EMFAttributeFeatureGenerator.reset();
-		createEAR();
-		createRAR();
-
-		ConnectorResource DD = (ConnectorResource) rarFile.getDeploymentDescriptorResource();
-		//TODO: individual test for each version
-		DD.setVersionID(J2EEVersionConstants.J2EE_1_3_ID);
-		setVersion(VERSION_1_3);
-		setModuleType(CONNECTOR);
-		populateRoot(DD.getRootObject());
-
-		String out = AutomatedBVT.baseDirectory + "testOutput/TestRarEAR";
-		earFile.extractTo(out, Archive.EXPAND_ALL);
-		earFile.close();
-
-		//Compare work in progress
-		String curDir = AutomatedBVT.baseDirectory;
-		String exampleDeploymentDesURI = curDir + "EMFTestNoID/ra.xml";
-		String curDeploymentDesURI = curDir + "testOutput/TestRarEAR/fooRAR/META-INF/ra.xml";
-		setIgnoreAtt(ignorableAttributes());
-		compareContentsIgnoreWhitespace(curDeploymentDesURI, exampleDeploymentDesURI, null);
-	}
-	public void test14RARPopulation() throws Exception {
-		EMFAttributeFeatureGenerator.reset();
-		createEAR();
-		createRAR();
-
-		ConnectorResource DD = (ConnectorResource) rarFile.getDeploymentDescriptorResource();
-		//TODO: individual test for each version
-		DD.setVersionID(J2EEVersionConstants.J2EE_1_4_ID);
-		setVersion(VERSION_1_4);
-		setModuleType(CONNECTOR);
-		populateRoot(DD.getRootObject());
-
-		String out = AutomatedBVT.baseDirectory + "testOutput/Test14RarEAR";
-		earFile.extractTo(out, Archive.EXPAND_ALL);
-		earFile.close();
-
-		getRar();
-		assertTrue("1.5".equals(rarFile.getDeploymentDescriptor().getSpecVersion()));
-		out = AutomatedBVT.baseDirectory + "testOutput/Test14RarEAR2";
-		rarFile.extractTo(out, Archive.EXPAND_ALL);
-		rarFile.close();
-
-		//Compare work in progress
-		String curDir = AutomatedBVT.baseDirectory;
-		String exampleDeploymentDesURI = curDir + "testOutput/Test14RarEAR2/META-INF/ra.xml";
-		String curDeploymentDesURI = curDir + "testOutput/Test14RarEAR/fooRAR/META-INF/ra.xml";
-		setIgnoreAtt(ignorableAttributes());
-		compareContentsIgnoreWhitespace(curDeploymentDesURI, exampleDeploymentDesURI, null);
-	}
-
-	public void getRar() throws DuplicateObjectException, OpenFailureException {
-		String in = AutomatedBVT.baseDirectory + "testOutput/Test14RarEAR/fooRAR";
-		rarFile = getArchiveFactory().openRARFile(in);
-		assertTrue(rarFile.getDeploymentDescriptor() != null);
-	}
-
-	public void createRAR() throws DuplicateObjectException {
-		rarFile = getArchiveFactory().createRARFileInitialized("fooRAR");
-		rarFile = (RARFile) earFile.addCopy(rarFile);
-		rarFile.getDeploymentDescriptor().setDisplayName("fooRAR");
-		assertTrue(rarFile.getDeploymentDescriptor() != null);
-	}
-
-	public void createEAR() {
-		String earName = "Test.ear";
-		earFile = getArchiveFactory().createEARFileInitialized(earName);
-		assertTrue(earFile.getDeploymentDescriptor() != null);
-	}
-
-	public HashSet ignorableAttributes() {
-		HashSet set = new HashSet();
-		set.add("id");
-		return set;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.ibm.etools.archive.emftest.GeneralEMFPopulationTest#createAttributeValue(org.eclipse.emf.ecore.EAttribute)
-	 */
-	protected Object createAttributeValue(EAttribute att, EObject eObject) {
-		//TODO: delete this after the model is fixed
-		if (att == JcaPackage.eINSTANCE.getConfigProperty_Type())
-			return "java.lang.String";
-		else if (att == JcaPackage.eINSTANCE.getAuthenticationMechanism_CredentialInterface())
-			return "javax.resource.spi.security.PasswordCredential";
-		else if (att == JcaPackage.eINSTANCE.getConnector_SpecVersion() && version == VERSION_1_3)
-			return "1.0";
-		else
-			return super.createAttributeValue(att, eObject);
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/ResolverTest.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/ResolverTest.java
deleted file mode 100644
index 68c280d..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/ResolverTest.java
+++ /dev/null
@@ -1,290 +0,0 @@
-package org.eclipse.jst.j2ee.archive.emftests;
-
-import java.util.HashSet;
-import java.util.List;
-
-import junit.framework.TestSuite;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EClassifier;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EcorePackage;
-import org.eclipse.jst.j2ee.application.ApplicationFactory;
-import org.eclipse.jst.j2ee.application.ApplicationPackage;
-import org.eclipse.jst.j2ee.archive.testutilities.EMFAttributeFeatureGenerator;
-import org.eclipse.jst.j2ee.common.CommonFactory;
-import org.eclipse.jst.j2ee.common.SecurityIdentity;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EJBJarFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.DuplicateObjectException;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.jst.j2ee.ejb.CMPAttribute;
-import org.eclipse.jst.j2ee.ejb.EJBResource;
-import org.eclipse.jst.j2ee.ejb.EjbFactory;
-import org.eclipse.jst.j2ee.ejb.EjbPackage;
-import org.eclipse.jst.j2ee.ejb.RoleSource;
-import org.eclipse.jst.j2ee.internal.ejb.impl.MethodPermissionImpl;
-import org.eclipse.jst.j2ee.internal.ejb.impl.QueryMethodImpl;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationFactory;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationPackage;
-import org.eclipse.wst.common.internal.emf.resource.RendererFactory;
-
-
-public class ResolverTest extends GeneralEMFEditingTest {
-
-    protected static final String _META_INF_EJB_JAR_XML = "/META-INF/ejb-jar.xml";
-
-    protected static final EjbPackage EJB_PKG = EjbPackage.eINSTANCE;
-
-    EARFile earFile;
-
-    EJBJarFile ejbFile;
-
-    EObject mesBean, entityBean;
-
-    SecurityIdentity secID;
-
-    RoleSource roleSource;
-
-    int NUM_BEANS = 10;
-
-    final int NUM_RELATION_ROLES = 2;
-
-    int createdBeans = 0;
-
-    int createdSecRoles = 0;
-
-    protected int createdSecurityIdentities = 0;
-
-    boolean mpFlag = false;
-
-    public ResolverTest(String name) {
-        super(name);
-    }
-
-    public CommonarchiveFactory getArchiveFactory() {
-        return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-    }
-
-    public EjbFactory getEjbFactory() {
-        return EjbPackage.eINSTANCE.getEjbFactory();
-    }
-
-    public ApplicationFactory getApplicationFactory() {
-        return ApplicationPackage.eINSTANCE.getApplicationFactory();
-    }
-
-    public WebapplicationFactory getWebAppFactory() {
-        return WebapplicationPackage.eINSTANCE.getWebapplicationFactory();
-    }
-
-    public static void main(java.lang.String[] args) {
-        junit.textui.TestRunner.main(new String[] { ResolverTest.class.getName()});
-    }
-
-    public static junit.framework.Test suite() {
-        TestSuite suite = new TestSuite();
-        /*suite.addTest(new AllSAXTests("testSwitchRenderer"));*/
-        suite.addTest(new ResolverTest("testResolver"));
-        suite.addTest(new ResolverTest("testResolverNoSchemaLocation"));
-        return suite;
-    }
-
-    public void testResolver() throws Exception {
-        String in = AutomatedBVT.baseDirectory + "../testData/sl";
-        getEJB(in);
-
-        assertEquals("2.1", ejbFile.getDeploymentDescriptor().getVersion());
-        EJBResource DD = (EJBResource) ejbFile.getDeploymentDescriptorResource();
-        setVersion(VERSION_1_4);
-        setModuleType(EJB);
-
-        String out = AutomatedBVT.baseDirectory + "../testData/testOutput/sl";
-        ejbFile.extractTo(out, Archive.EXPAND_ALL);
-        ejbFile.close();
-
-        String exampleDeploymentDesURI = in + _META_INF_EJB_JAR_XML;
-        String curDeploymentDesURI = out + _META_INF_EJB_JAR_XML;
-        compareContents(curDeploymentDesURI, exampleDeploymentDesURI);
-    }
-
-    public void testResolverNoSchemaLocation() throws Exception {
-
-        boolean validating = RendererFactory.getDefaultRendererFactory().isValidating();
-        try { 
-            RendererFactory.getDefaultRendererFactory().setValidating(false);
-            
-            String in = AutomatedBVT.baseDirectory + "../testData/no-sl";
-            getEJB(in);
-
-            assertEquals("2.1", ejbFile.getDeploymentDescriptor().getVersion());
-            EJBResource DD = (EJBResource) ejbFile.getDeploymentDescriptorResource();
-            setVersion(VERSION_1_4);
-            setModuleType(EJB);
-
-            String out = AutomatedBVT.baseDirectory + "../testData/testOutput/no-sl";
-            ejbFile.extractTo(out, Archive.EXPAND_ALL);
-            ejbFile.close();
-
-            String exampleDeploymentDesURI = in + _META_INF_EJB_JAR_XML;
-            String curDeploymentDesURI = out + _META_INF_EJB_JAR_XML;
-            compareContents(curDeploymentDesURI, exampleDeploymentDesURI);
-        } catch (RuntimeException re) {
-            re.printStackTrace();
-        } finally {
-            RendererFactory.getDefaultRendererFactory().setValidating(validating);
-        }
-    }
-
-    public void getEJB(String in) throws DuplicateObjectException, OpenFailureException {
-        ejbFile = getArchiveFactory().openEJBJarFile(in);
-        assertTrue(ejbFile.getDeploymentDescriptor() != null);
-    }
-
-    public EObject createInstance(EClass eClassifier) {
-        if (eClassifier.getName().equals("EnterpriseBean")) {
-            createdBeans++;
-            switch (createdBeans) {
-            case (3):
-                return createContainerManagedEntityInstance(eClassifier);
-            case (7):
-                return createMessageBeanInstance(eClassifier);
-            case (4):
-            case (8):
-                return createSessionBeanInstance(eClassifier);
-            default:
-                return createEntityBeanInstance(eClassifier);
-            }
-        } else if (eClassifier.getName().equals("SecurityIdentity"))
-            return createSecurityIdentitiyInstance(eClassifier);
-        else if (eClassifier.getName().equals("RoleSource"))
-            return createRoleSourceInstance(eClassifier);
-        else if (eClassifier == EcorePackage.eINSTANCE.getEAttribute()) return getEjbFactory().createCMPAttribute();
-        return super.createInstance(eClassifier);
-    }
-
-    private EObject createSecurityIdentitiyInstance(EClass eClassifier) {
-        /* Alternate types */
-        createdSecRoles++;
-        if ((createdSecRoles & 1) == 0)
-            return CommonFactory.eINSTANCE.createUseCallerIdentity();
-        else
-            return CommonFactory.eINSTANCE.createRunAsSpecifiedIdentity();
-    }
-
-    private EObject createRoleSourceInstance(EClass eClassifier) {
-        return ((EjbFactory) eClassifier.getEPackage().getEFactoryInstance()).createRoleSource();
-    }
-
-    private EObject createMessageBeanInstance(EClass eClassifier) {
-        return ((EjbFactory) eClassifier.getEPackage().getEFactoryInstance()).createMessageDriven();
-    }
-
-    private EObject createSessionBeanInstance(EClass eClassifier) {
-        return ((EjbFactory) eClassifier.getEPackage().getEFactoryInstance()).createSession();
-    }
-
-    private EObject createEntityBeanInstance(EClass eClassifier) {
-        return ((EjbFactory) eClassifier.getEPackage().getEFactoryInstance()).createEntity();
-    }
-
-    private EObject createContainerManagedEntityInstance(EClass eClassifier) {
-        return EjbFactory.eINSTANCE.createContainerManagedEntity();
-    }
-
-    /**
-     * @see org.eclipse.jst.j2ee.archive.test.GeneralEMFTest#getDepthForAttribute(EReference)
-     */
-    public int getDepthForAttribute(EReference ref) {
-        if (ref.getName().equals("enterpriseBeans"))
-            return NUM_BEANS;
-        else if (ref.getName().equals("entityBeans"))
-            return NUM_BEANS;
-        else if (ref.getName().equals("relationshipRoles")) return NUM_RELATION_ROLES;
-        return super.getDepthForAttribute(ref);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.ibm.etools.archive.emftest.GeneralEMFPopulationTest#populateFeatures(org.eclipse.emf.ecore.EObject)
-     */
-    public void populateFeatures(EObject eObject) {
-        if (eObject.eClass() == EJB_PKG.getCMPAttribute()) {
-            ((CMPAttribute) eObject).setName((String) EMFAttributeFeatureGenerator.createAttribute(
-                    EcorePackage.eINSTANCE.getENamedElement_Name(), eObject));
-            ((CMPAttribute) eObject).setEType((EClassifier) createJavaClassProxy(null));
-        } else
-            super.editFeatures(eObject);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.ibm.etools.archive.emftest.GeneralEMFPopulationTest#populateAttributes(org.eclipse.emf.ecore.EObject)
-     */
-    protected void populateAttributes(EObject eObject) {
-        if (eObject instanceof QueryMethodImpl) {
-            List attributes = eObject.eClass().getEAllAttributes();
-            for (int i = 0; i < attributes.size(); i++) {
-                EAttribute att = (EAttribute) attributes.get(i);
-                Object value = createAttributeValue(att, eObject);
-                if (att.getName().equals("parms") && value == null) {
-                    value = createAttributeValue(att, eObject);
-                }
-                if (att.isChangeable()) eObject.eSet(att, value);
-            }
-        } else if (eObject instanceof MethodPermissionImpl) {
-            List attributes = eObject.eClass().getEAllAttributes();
-            for (int i = 0; i < attributes.size(); i++) {
-                EAttribute att = (EAttribute) attributes.get(i);
-                if (att.getName().equals("unchecked") && mpFlag) {
-                    continue;
-                }
-
-                Object value = createAttributeValue(att, eObject);
-                if (att.isChangeable()) eObject.eSet(att, value);
-            }
-            mpFlag = !mpFlag;
-        } else
-            super.editAttributes(eObject);
-    }
-
-    protected void populateSharedReference(EObject eObject, EReference ref) {
-        if (eObject instanceof MethodPermissionImpl && ref.getName().equals("roles")) {
-            mpFlag = !mpFlag;
-            //if method permission unchecked ignore roles
-            if (!mpFlag) { return; }
-        }
-        super.populateSharedReference(eObject, ref);
-    }
-
-    public HashSet ignorableAttributes() {
-        HashSet set = new HashSet();
-        set.add("id");
-        return set;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see junit.framework.TestCase#tearDown()
-     */
-    protected void tearDown() throws Exception {
-        earFile = null;
-        ejbFile = null;
-        mesBean = null;
-        entityBean = null;
-        secID = null;
-        roleSource = null;
-
-        super.tearDown();
-    }
-
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/WarEMFEditTest.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/WarEMFEditTest.java
deleted file mode 100644
index 26b1964..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/WarEMFEditTest.java
+++ /dev/null
@@ -1,163 +0,0 @@
-package org.eclipse.jst.j2ee.archive.emftests;
-
-import java.util.HashSet;
-import java.util.List;
-
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.jst.j2ee.application.ApplicationFactory;
-import org.eclipse.jst.j2ee.application.ApplicationPackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.WARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.DuplicateObjectException;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.jst.j2ee.ejb.EjbFactory;
-import org.eclipse.jst.j2ee.ejb.EjbPackage;
-import org.eclipse.jst.j2ee.internal.webapplication.impl.FilterMappingImpl;
-import org.eclipse.jst.j2ee.webapplication.ErrorPage;
-import org.eclipse.jst.j2ee.webapplication.WebAppResource;
-import org.eclipse.jst.j2ee.webapplication.WebType;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationFactory;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationPackage;
-
-
-public class WarEMFEditTest extends GeneralEMFEditingTest {
-	protected EARFile earFile;	
-	protected WARFile warFile;
-	protected int createdWebTypes = 0;
-	protected int createdErrorPages = 0;
-	protected boolean fmFlag = false;
-
-    public WarEMFEditTest(String name) {
-        super(name);
-    }
-
-    public CommonarchiveFactory getArchiveFactory() {
-        return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-    }
-
-    public EjbFactory getEjbFactory() {
-        return EjbPackage.eINSTANCE.getEjbFactory();
-    }
-
-    public ApplicationFactory getApplicationFactory() {
-        return ApplicationPackage.eINSTANCE.getApplicationFactory();
-    }
-
-    public WebapplicationFactory getWebAppFactory() {
-        return WebapplicationPackage.eINSTANCE.getWebapplicationFactory();
-    }
-
-    public static void main(java.lang.String[] args) {
-        String[] className = { "com.ibm.etools.archive.test.WarEMFTest", "-noloading" };
-        TestRunner.main(className);
-    }
-    public static junit.framework.Test suite() {
-        TestSuite suite = new TestSuite();
-        suite.addTest(new WarEMFEditTest("testWAREdit"));
-        return suite;
-    }
-
-    public void testWAREdit() throws Exception {
-        getWARClient();
-
-        WebAppResource DD = (WebAppResource) warFile.getDeploymentDescriptorResource();
-		setVersion(VERSION_1_3);
-		setModuleType(WEB); 
-        editRoot(DD.getRootObject());
-        String curDir = AutomatedBVT.baseDirectory;
-        String out = curDir + "testOutput/EMFModelCreationTests/EditWarEAR";
-        warFile.extractTo(out, Archive.EXPAND_ALL);
-        warFile.close();
-
-        //Compare work in progress
-       
-        String exampleDeploymentDesURI = curDir + "EMFTests/web.xml";
-        String curDeploymentDesURI = curDir + out + "/fooWAR/WEB-INF/web.xml";
-        //compareContents(curDeploymentDesURI, exampleDeploymentDesURI);
-    }
-
-    public void getWARClient() throws DuplicateObjectException, OpenFailureException {
-        String in = AutomatedBVT.baseDirectory + "loose_module_workspace/LooseEARWeb/webApplication/";
-        warFile = getArchiveFactory().openWARFile(in);
-        assertTrue(warFile.getDeploymentDescriptor() != null);
-    }
-	public EObject createInstance(EClass eClassifier) {
-
-		if (WebapplicationPackage.eINSTANCE.getWebType().equals(eClassifier))
-			return createWebType();
-		else if (WebapplicationPackage.eINSTANCE.getErrorPage().equals(eClassifier))
-			return createErrorPage();
-
-		return super.createInstance(eClassifier);
-	}
-	/* The web type is abstract.  Alternate between servlet-class
-	 * and jsp-file
-	 */
-	public WebType createWebType() {
-		createdWebTypes++;
-		if ((createdWebTypes & 1) == 0)
-			return WebapplicationFactory.eINSTANCE.createServletType();
-		else
-			return WebapplicationFactory.eINSTANCE.createJSPType();
-
-	}
-	/* The error page is abstract.  Alternate between exceptiontype
-	 * and error code
-	 */
-	public ErrorPage createErrorPage() {
-		createdErrorPages++;
-		if ((createdErrorPages & 1) == 0)
-			return WebapplicationFactory.eINSTANCE.createErrorCodeErrorPage();
-		else
-			return WebapplicationFactory.eINSTANCE.createExceptionTypeErrorPage();
-	}
-	/* (non-Javadoc)
-	 * @see com.ibm.etools.archive.emftest.GeneralEMFPopulationTest#populateAttributes(org.eclipse.emf.ecore.EObject)
-	 */
-	protected void populateAttributes(EObject eObject) {
-		if (eObject instanceof FilterMappingImpl){
-			List attributes = eObject.eClass().getEAllAttributes();
-			for (int i = 0; i < attributes.size(); i++) {
-				EAttribute att = (EAttribute) attributes.get(i);
-				if(att.getName().equals("urlPattern") && fmFlag){
-					continue;					
-				}	
-				
-				Object value = createAttributeValue(att, eObject);
-				if (att.isChangeable())
-					eObject.eSet(att, value);
-			} 
-			fmFlag = !fmFlag;
-		}
-		else 
-			super.editAttributes(eObject);
-	}
-	
-
-	protected void populateSharedReference(EObject eObject, EReference ref) {
-		if(eObject instanceof FilterMappingImpl && ref.getName().equals("servlet")){
-			fmFlag = !fmFlag;
-			//if method permission unchecked ignore roles
-			if(!fmFlag){
-				return;
-			}
-		}
-		super.populateSharedReference(eObject, ref);
-	}
-	
-	public HashSet ignorableAttributes(){
-		HashSet set = new HashSet();
-		set.add("id");
-		return set;
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/WarEMFTest.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/WarEMFTest.java
deleted file mode 100644
index 97902da..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/WarEMFTest.java
+++ /dev/null
@@ -1,235 +0,0 @@
-package org.eclipse.jst.j2ee.archive.emftests;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-
-import junit.framework.TestSuite;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.jst.j2ee.application.ApplicationFactory;
-import org.eclipse.jst.j2ee.application.ApplicationPackage;
-import org.eclipse.jst.j2ee.archive.testutilities.EMFAttributeFeatureGenerator;
-import org.eclipse.jst.j2ee.common.ResAuthTypeBase;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.WARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.DuplicateObjectException;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.jst.j2ee.ejb.EjbFactory;
-import org.eclipse.jst.j2ee.ejb.EjbPackage;
-import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
-import org.eclipse.jst.j2ee.internal.webapplication.impl.FilterMappingImpl;
-import org.eclipse.jst.j2ee.webapplication.ErrorPage;
-import org.eclipse.jst.j2ee.webapplication.WebAppResource;
-import org.eclipse.jst.j2ee.webapplication.WebType;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationFactory;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationPackage;
-
-
-public class WarEMFTest extends GeneralEMFPopulationTest {
-    protected EARFile earFile;
-    protected WARFile warFile;
-    protected int createdWebTypes = 0;
-    protected int createdErrorPages = 0;
-	protected boolean fmFlag = false;
-    public WarEMFTest(String name) {
-        super(name);
-    }
-    public CommonarchiveFactory getArchiveFactory() {
-        return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-    }
-
-    public EjbFactory getEjbFactory() {
-        return EjbPackage.eINSTANCE.getEjbFactory();
-    }
-
-    public ApplicationFactory getApplicationFactory() {
-        return ApplicationPackage.eINSTANCE.getApplicationFactory();
-    }
-
-    public WebapplicationFactory getWebAppFactory() {
-        return WebapplicationPackage.eINSTANCE.getWebapplicationFactory();
-    }
-
-    public static void main(java.lang.String[] args) {
-        
-        junit.textui.TestRunner.main(new String[]{ WarEMFTest.class.getName() });
-    }
-    public static junit.framework.Test suite() {
-        TestSuite suite = new TestSuite();
-        suite.addTest(new WarEMFTest("testWARPopulation"));
-		suite.addTest(new WarEMFTest("test14WARPopulation"));
-        return suite;
-    }
-
-    public void testWARPopulation() throws Exception {
-        EMFAttributeFeatureGenerator.reset();
-        createEAR();
-        createWARClient();
-
-        WebAppResource DD = (WebAppResource) warFile.getDeploymentDescriptorResource();
-        DD.setVersionID(J2EEVersionConstants.J2EE_1_3_ID);
-		//TODO: individual test for each version
-		setVersion(VERSION_1_3);
-		setModuleType(WEB);
-        populateRoot(DD.getRootObject());
-
-		String out = AutomatedBVT.baseDirectory +"testOutput/TestWarEAR";
-        earFile.extractTo(out, Archive.EXPAND_ALL);
-        earFile.close();
-
-        //Compare work in progress
-        String curDir = AutomatedBVT.baseDirectory;
-        String exampleDeploymentDesURI = curDir + "EMFTestNoID/web.xml";
-        String curDeploymentDesURI = curDir + "testOutput/TestWarEAR/fooWAR/WEB-INF/web.xml";
-		setIgnoreAtt(ignorableAttributes());
-		setEquivalentLines(getEquivalentLinesMap());
-		compareContentsIgnoreWhitespace(curDeploymentDesURI, exampleDeploymentDesURI, null);
-    }
-    
-	public void test14WARPopulation() throws Exception {
-		EMFAttributeFeatureGenerator.reset();
-		createEAR();
-		createWARClient();
-
-		WebAppResource DD = (WebAppResource) warFile.getDeploymentDescriptorResource();
-		DD.setVersionID(J2EEVersionConstants.J2EE_1_4_ID);
-		//TODO: individual test for each version
-		setVersion(VERSION_1_4);
-		setModuleType(WEB);
-		//setGeneralDepth(2);
-		populateRoot(DD.getRootObject());
-
-		String out = AutomatedBVT.baseDirectory +"testOutput/TestWarEAR14";
-		earFile.extractTo(out, Archive.EXPAND_ALL);
-		earFile.close();
-		
-		getWARClient();
-		assertEquals("2.4", warFile.getDeploymentDescriptor().getVersion());
-		out = AutomatedBVT.baseDirectory +"testOutput/TestWarEAR14_2";
-		warFile.extractTo(out, Archive.EXPAND_ALL);
-		warFile.close();
-
-		//Compare work in progress
-		String curDir = AutomatedBVT.baseDirectory;
-		String exampleDeploymentDesURI = out + "/WEB-INF/web.xml";
-		String curDeploymentDesURI = curDir + "testOutput/TestWarEAR14/fooWAR/WEB-INF/web.xml";
-		setIgnoreAtt(ignorableAttributes());
-		compareContentsIgnoreWhitespace(curDeploymentDesURI, exampleDeploymentDesURI, null);
-	}
-	
-	/**
-	 * @return
-	 */
-	private Map getEquivalentLinesMap() {
-		Map lines = new HashMap();
-		lines.put("<distributable></distributable>", "<distributable/>"); 
-		return lines;
-	}
-
-    public void createWARClient() throws DuplicateObjectException {
-        warFile = getArchiveFactory().createWARFileInitialized("fooWAR");
-        warFile = (WARFile) earFile.addCopy(warFile);
-        warFile.getDeploymentDescriptor().setDisplayName("fooWAR");
-        assertTrue(warFile.getDeploymentDescriptor() != null);
-    }
-
-    public void createEAR() {
-        String earName = "Test.ear";
-        earFile = getArchiveFactory().createEARFileInitialized(earName);
-        assertTrue(earFile.getDeploymentDescriptor() != null);
-    }
-    
-	public void getWARClient() throws DuplicateObjectException, OpenFailureException {
-		String in = AutomatedBVT.baseDirectory + "testOutput/TestWarEAR14/fooWAR";
-		warFile = getArchiveFactory().openWARFile(in);
-		assertTrue(warFile.getDeploymentDescriptor() != null);
-	}
-
-    public EObject createInstance(EReference ref,EObject eObject) {
-
-        if (WebapplicationPackage.eINSTANCE.getWebType().equals((EClass)ref.getEType()))
-            return createWebType();
-        else if (WebapplicationPackage.eINSTANCE.getErrorPage().equals((EClass)ref.getEType()))
-            return createErrorPage();
-
-        return super.createInstance(ref, eObject);
-    }
-    /* The web type is abstract.  Alternate between servlet-class
-     * and jsp-file
-     */
-    public WebType createWebType() {
-        createdWebTypes++;
-        if ((createdWebTypes & 1) == 0)
-            return WebapplicationFactory.eINSTANCE.createServletType();
-        else
-            return WebapplicationFactory.eINSTANCE.createJSPType();
-
-    }
-    /* The error page is abstract.  Alternate between exceptiontype
-     * and error code
-     */
-    public ErrorPage createErrorPage() {
-        createdErrorPages++;
-        if ((createdErrorPages & 1) == 0)
-            return WebapplicationFactory.eINSTANCE.createErrorCodeErrorPage();
-        else
-            return WebapplicationFactory.eINSTANCE.createExceptionTypeErrorPage();
-    }
-	/* (non-Javadoc)
-	 * @see com.ibm.etools.archive.emftest.GeneralEMFPopulationTest#populateAttributes(org.eclipse.emf.ecore.EObject)
-	 */
-	protected void populateAttributes(EObject eObject) {
-		if (eObject instanceof FilterMappingImpl){
-			List attributes = eObject.eClass().getEAllAttributes();
-			for (int i = 0; i < attributes.size(); i++) {
-				EAttribute att = (EAttribute) attributes.get(i);
-				if(att.getName().equals("urlPattern") && fmFlag){
-					continue;					
-				}	
-				
-				Object value = createAttributeValue(att, eObject);
-				if (att.isChangeable())
-					eObject.eSet(att, value);
-			} 
-			fmFlag = !fmFlag;
-		}
-		else 
-			super.populateAttributes(eObject);
-	}
-	
-
-	protected void populateSharedReference(EObject eObject, EReference ref) {
-		if(eObject instanceof FilterMappingImpl && ref.getName().equals("servlet")){
-			fmFlag = !fmFlag;
-			//if method permission unchecked ignore roles
-			if(!fmFlag){
-				return;
-			}
-		}
-		super.populateSharedReference(eObject, ref);
-	}
-	
-	public HashSet ignorableAttributes(){
-		HashSet set = new HashSet();
-		set.add("id");
-		return set;
-	}
-
-
-	protected boolean isValidAuth(ResAuthTypeBase auth) {
-		if (version == VERSION_1_2)
-			return auth == ResAuthTypeBase.SERVLET_LITERAL || auth == ResAuthTypeBase.CONTAINER_LITERAL;
-		else
-			return super.isValidAuth(auth);
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/WebServicesEMFTest.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/WebServicesEMFTest.java
deleted file mode 100644
index d13bad6..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/emftests/WebServicesEMFTest.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Created on Aug 6, 2003
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.jst.j2ee.archive.emftests;
-
-import java.util.HashSet;
-
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.jst.j2ee.application.ApplicationFactory;
-import org.eclipse.jst.j2ee.application.ApplicationPackage;
-import org.eclipse.jst.j2ee.archive.testutilities.EMFAttributeFeatureGenerator;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EJBJarFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.DuplicateObjectException;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.jst.j2ee.ejb.EjbFactory;
-import org.eclipse.jst.j2ee.ejb.EjbPackage;
-import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationFactory;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationPackage;
-import org.eclipse.jst.j2ee.webservice.wsclient.WebServicesResource;
-import org.eclipse.jst.j2ee.webservice.wsclient.Webservice_clientPackage;
-import org.eclipse.jst.j2ee.webservice.wsdd.WsddFactory;
-import org.eclipse.jst.j2ee.webservice.wsdd.WsddResource;
-
-
-/**
- * @author dfholttp
- *
- * To change the template for this generated type comment go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-public class WebServicesEMFTest extends GeneralEMFPopulationTest {
-	EARFile earFile;
-	EJBJarFile ejbFile;
-	int currentVersion = J2EEVersionConstants.J2EE_1_3_ID;
-
-	public WebServicesEMFTest(String name) {
-		super(name);
-	}
-
-	public CommonarchiveFactory getArchiveFactory() {
-		return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-	}
-
-	public EjbFactory getEjbFactory() {
-		return EjbPackage.eINSTANCE.getEjbFactory();
-	}
-
-	public ApplicationFactory getApplicationFactory() {
-		return ApplicationPackage.eINSTANCE.getApplicationFactory();
-	}
-
-	public WebapplicationFactory getWebAppFactory() {
-		return WebapplicationPackage.eINSTANCE.getWebapplicationFactory();
-	}
-
-	public static void main(java.lang.String[] args) {
-		String[] className = { "com.ibm.etools.archive.test.WebServicesEMFTest", "-noloading" };
-		TestRunner.main(className);
-	}
-	public static junit.framework.Test suite() {
-		TestSuite suite = new TestSuite();
-		suite.addTest(new WebServicesEMFTest("test13WebServicesClientPopulation"));
-		suite.addTest(new WebServicesEMFTest("test13WebServicesDDPopulation"));
-		suite.addTest(new WebServicesEMFTest("test14WebServicesDDPopulation"));
-		return suite;
-	}
-	
-	public void test13WebServicesClientPopulation() throws Exception {
-		currentVersion = J2EEVersionConstants.J2EE_1_3_ID;
-		EMFAttributeFeatureGenerator.reset();
-		createEAR();
-		createEJB();
-		
-
-		WebServicesResource webserDD = (WebServicesResource)ejbFile.getResourceSet().createResource(URI.createURI("META-INF/webservicesclient.xml"));
-		webserDD.getContents().add(Webservice_clientPackage.eINSTANCE.getWebservice_clientFactory().createWebServicesClient());
-		//TODO: individual test for each version
-		webserDD.setVersionID(currentVersion);
-		populateRoot(webserDD.getRootObject());
-		
-		String out = AutomatedBVT.baseDirectory +getProjectLocation();
-		earFile.extractTo(out, Archive.EXPAND_ALL);
-		earFile.close();
-
-	}
-	
-	public void test13WebServicesDDPopulation() throws Exception {
-		EMFAttributeFeatureGenerator.reset();
-		currentVersion = J2EEVersionConstants.J2EE_1_3_ID;
-		createEAR();
-		createEJB();
-
-		WsddResource webserDD = (WsddResource)ejbFile.getResourceSet().createResource(URI.createURI("META-INF/webservices.xml"));
-		webserDD.getContents().add(WsddFactory.eINSTANCE.createWebServices());
-		//TODO: individual test for each version
-		webserDD.setVersionID(currentVersion);
-		populateRoot(webserDD.getRootObject());
-		
-		String out = AutomatedBVT.baseDirectory +getProjectLocation();
-		earFile.extractTo(out, Archive.EXPAND_ALL);
-		earFile.close();
-
-	}
-	public void test14WebServicesDDPopulation() throws Exception {
-		EMFAttributeFeatureGenerator.reset();
-		currentVersion = J2EEVersionConstants.J2EE_1_4_ID;
-		createEAR();
-		createEJB();
-
-		WsddResource webserDD = (WsddResource)ejbFile.getResourceSet().createResource(URI.createURI("META-INF/webservices.xml"));
-		webserDD.getContents().add(WsddFactory.eINSTANCE.createWebServices());
-		//TODO: individual test for each version
-		webserDD.setVersionID(currentVersion);
-		populateRoot(webserDD.getRootObject());
-		
-		String out = AutomatedBVT.baseDirectory +getProjectLocation();
-		earFile.extractTo(out, Archive.EXPAND_ALL);
-		earFile.close();
-
-	}
-	public String getProjectLocation() {
-		if (currentVersion == J2EEVersionConstants.J2EE_1_3_ID)
-			return "testOutput/TestWebServices";
-		else
-			return "testOutput/TestWebServices14";
-	}
-	public void getEJB() throws DuplicateObjectException, OpenFailureException {
-		String in = AutomatedBVT.baseDirectory +getProjectLocation() +"/fooWebServices";
-		ejbFile = getArchiveFactory().openEJBJarFile(in);
-		assertTrue(ejbFile.getDeploymentDescriptor() != null);
-	}
-	public void createEJB() throws DuplicateObjectException {
-		ejbFile = getArchiveFactory().createEJBJarFileInitialized("fooWebServices");
-		ejbFile = (EJBJarFile) earFile.addCopy(ejbFile);
-		ejbFile.getDeploymentDescriptor().setDisplayName("fooWebServices");
-		assertTrue(ejbFile.getDeploymentDescriptor() != null);
-	}
-	public void createEAR() {
-		String earName = "Test.ear";
-		earFile = getArchiveFactory().createEARFileInitialized(earName);
-		assertTrue(earFile.getDeploymentDescriptor() != null);
-	}
-    
-	public HashSet ignorableAttributes(){
-		HashSet set = new HashSet();
-		set.add("id");
-		return set;
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/AbstractArchiveTest.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/AbstractArchiveTest.java
deleted file mode 100644
index 491a319..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/AbstractArchiveTest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package org.eclipse.jst.j2ee.archive.test;
-
- /*
- * Licensed Material - Property of IBM
- * (C) Copyright IBM Corp. 2001 - All Rights Reserved.
- * US Government Users Restricted Rights - Use, duplication or disclosure
- * restricted by GSA ADP Schedule Contract with IBM Corp.
- */
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-/**
- * Insert the type's description here.
- * Creation date: (02/07/01 1:48:18 PM)
- * @author: Administrator
- */
-public class AbstractArchiveTest extends junit.framework.TestCase {
-	private final static String copyright = "(c) Copyright IBM Corporation 2001.";//$NON-NLS-1$
-/**
- * AbstractArchiveTest constructor comment.
- * @param name java.lang.String
- */
-public AbstractArchiveTest(String name) {
-	super(name);
-}
-public Set getAllUnresolvedProxies(EObject root) {
-	Set visited = new HashSet();
-	Set proxies = new HashSet();
-	getAllUnresolvedProxies(root, proxies, visited, root.eResource());
-	return proxies;
-}
-public void getAllUnresolvedProxies(EObject object, Set proxies, Set visitedObjects, Resource originalResource) {
-
-	if (visitedObjects.contains(object))
-		return;
-	else
-		visitedObjects.add(object);
-
-	if (object.eResource() != originalResource) {
-		if (((org.eclipse.emf.ecore.InternalEObject )object).eIsProxy()) {
-			proxies.add(object);
-		}
-		return;
-	}
-
-	List refs = object.eClass().getEAllReferences();
-	if (refs != null) {
-		Iterator ir = refs.iterator();
-		while (ir.hasNext()) {
-			EReference r = (EReference) ir.next();
-			Object value = object.eGet(r);
-			if (value == null)
-				continue;
-
-			if (r.isMany()) {
-				Collection c = (Collection) value;
-				Iterator ir2 = c.iterator();
-				while (ir2.hasNext()) {
-					EObject refObj = (EObject) ir2.next();
-					getAllUnresolvedProxies(refObj, proxies, visitedObjects, originalResource);
-				}
-			} else
-				getAllUnresolvedProxies((EObject) value, proxies, visitedObjects, originalResource);
-		}
-	}
-}
-public static CommonarchiveFactory getArchiveFactory() {
-	return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-}
-public void verifyProxies(EObject root) {
-
-	Set proxies = getAllUnresolvedProxies(root);
-	assertTrue("Some proxies could not be resolved", proxies.isEmpty());
-}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/AllArchiveTestsEclipse.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/AllArchiveTestsEclipse.java
deleted file mode 100644
index 449fc6e..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/AllArchiveTestsEclipse.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Created on Apr 18, 2003
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.jst.j2ee.archive.test;
-
-/**
- * @author jsholl
- *
- * To change the template for this generated type comment go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-public class AllArchiveTestsEclipse extends AllArchiveTestsJava {
-
-    public AllArchiveTestsEclipse(String name) {
-        super(name);
-    }
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/AllArchiveTestsJava.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/AllArchiveTestsJava.java
deleted file mode 100644
index 1a6c8eb..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/AllArchiveTestsJava.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package org.eclipse.jst.j2ee.archive.test;
-
- /*
- * Licensed Material - Property of IBM
- * (C) Copyright IBM Corp. 2001 - All Rights Reserved.
- * US Government Users Restricted Rights - Use, duplication or disclosure
- * restricted by GSA ADP Schedule Contract with IBM Corp.
- */
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-/**
- * Insert the type's description here.
- * Creation date: (12/19/00 4:44:04 PM)
- * @author: Administrator
- */
-public class AllArchiveTestsJava extends TestCase {
-	private final static String copyright = "(c) Copyright IBM Corporation 2001.";//$NON-NLS-1$
-/**
- * AllTests constructor comment.
- * @param name java.lang.String
- */
-public AllArchiveTestsJava(String name) {
-	super(name);
-}
-/**
- * Starts the application.
- * @param args an array of command-line arguments
- */
-public static void main(java.lang.String[] args) {
-	String[] className = {"com.ibm.etools.archive.test.AllTests", "-noloading"};
-	TestRunner.main(className);
-}
-public static junit.framework.Test suite() {
-	TestSuite suite = new TestSuite("Test for com.ibm.etools.archive.test");
-	suite.addTest(DiscriminatorTest.suite());
-	suite.addTest(LooseArchiveTests.suite());
-	suite.addTest(InitializationTests.suite());
-	suite.addTest(SimpleTests.suite());
-	suite.addTest(CopyTests.suite());
-//	suite.addTest(EJBJarConversionTests.suite());
-	suite.addTest(WARFileTests.suite());
-	suite.addTest(SaveTests.suite());
-	suite.addTest(JavaTests.suite());
-//	suite.addTest(IDTests.suite());
-	//suite.addTest(AltDDTests.suite());
-	suite.addTest(SecurityRoleTests.suite());
-	suite.addTest(RarFileTests.suite());
-	suite.addTest(ResourceTests.suite());
-	suite.addTest(ClientContainerResourceLoadTest.suite());
-	suite.addTest(TestModuleClassLoading.suite());
-	suite.addTest(TestInvalidXmlMultiplicity.suite());
-	suite.addTest(DefectVerificationTests.suite());
-	
-	return suite;
-}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/ClientContainerResourceLoadTest.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/ClientContainerResourceLoadTest.java
deleted file mode 100644
index 5ed8198..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/ClientContainerResourceLoadTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package org.eclipse.jst.j2ee.archive.test;
-
-import java.io.FileNotFoundException;
-import java.util.List;
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.ApplicationClientFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.ResourceLoadException;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveInit;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.impl.CommonarchiveFactoryImpl;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-
-
-
-public class ClientContainerResourceLoadTest extends TestCase{
-	public static EARFile earFile = null;
-	
-	private final static String copyright = "(c) Copyright IBM Corporation 2001."; //$NON-NLS-1$
-	/**
-	 * SimpleTests constructor comment.
-	 * @param name java.lang.String
-	 */
-	public ClientContainerResourceLoadTest(String name) {
-		super(name);
-	}
-
-	protected void setUp() throws Exception {
-		// TODO Auto-generated method stub
-		super.setUp();
-		ArchiveInit.init();
-	}
-
-	
-	public static junit.framework.Test suite() {
-		return new TestSuite(ClientContainerResourceLoadTest.class);
-	}
-	/**
-	 * Starts the application.
-	 * @param args an array of command-line arguments
-	 */
-	public static void main(java.lang.String[] args) {
-		String[] className = { "com.ibm.etools.archive.test.ClientContainerResourceLoadTest", "-noloading" };
-		TestRunner.main(className);
-	}
-	
-	public void testClientContainerLoad () throws Exception {
-
-		try {
-
-			CommonarchiveFactory factory = CommonarchiveFactoryImpl.getActiveFactory();
-			String in = AutomatedBVT.baseDirectory + "mtapp2.ear";
-			String out = AutomatedBVT.baseDirectory + "mtapp2Finished.ear";
-			earFile = factory.openEARFile (in);
-			System.out.println ("uri: " + earFile.getURI());
-
-			List appClients = earFile.getApplicationClientFiles();
-			boolean exFound1 = false;
-			boolean exFound2 = false;
-			
-			for(int i = 0; i<appClients.size(); i++){
-				ApplicationClientFile file = (ApplicationClientFile)appClients.get(0);
-				Resource res;
-
-				try{
-					res = file.getMofResource("META-INF/FOOclient-resource.xmi");
-				} catch(Exception e){	
-					exFound1 = true;
-					if(!(e instanceof FileNotFoundException)){
-						assertTrue("Expected FileNotFoundException", false);
-					}		
-				}
-				
-				try {
-					res = file.getMofResource("META-INF/client-resource.xmi");
-				} catch (Exception e) {
-					exFound2 = true;
-					if(!(e instanceof ResourceLoadException)){
-						assertTrue("Expected ResourceLoadException", false);
-					}	
-				}
-			}
-			assertTrue("No exception logged for non-existing file", exFound1);
-			assertTrue("No exception logged for existing", exFound2);
-
-			
-			earFile.saveAs(out);
-			earFile.close();
-		}
-		catch (Exception e) {
-			e.printStackTrace();
-		}
-	}
-	/* (non-Javadoc)
-	 * @see junit.framework.TestCase#tearDown()
-	 */
-	protected void tearDown() throws Exception {
-		super.tearDown();
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/CopyTests.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/CopyTests.java
deleted file mode 100644
index 37da367..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/CopyTests.java
+++ /dev/null
@@ -1,234 +0,0 @@
-package org.eclipse.jst.j2ee.archive.test;
-
-/*
-* Licensed Material - Property of IBM
-* (C) Copyright IBM Corp. 2001 - All Rights Reserved.
-* US Government Users Restricted Rights - Use, duplication or disclosure
-* restricted by GSA ADP Schedule Contract with IBM Corp.
-*/
-
-import java.util.Iterator;
-import java.util.List;
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.jst.j2ee.application.Module;
-import org.eclipse.jst.j2ee.application.WebModule;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EJBJarFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EJBModuleRef;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.File;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.ReadOnlyDirectory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.WARFile;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.jst.j2ee.ejb.EjbFactory;
-import org.eclipse.jst.j2ee.ejb.EjbPackage;
-import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationFactory;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationPackage;
-
-
-/**
- * Insert the type's description here.
- * Creation date: (12/14/00 12:10:36 PM)
- * @author: Administrator
- */
-public class CopyTests extends TestCase {
-	private final static String copyright = "(c) Copyright IBM Corporation 2001."; //$NON-NLS-1$
-	/**
-	 * CopyTests constructor comment.
-	 * @param name java.lang.String
-	 */
-	public CopyTests(String name) {
-		super(name);
-	}
-	public CommonarchiveFactory getArchiveFactory() {
-		return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-	}
-	public EjbFactory getEJBFactory() {
-		return EjbPackage.eINSTANCE.getEjbFactory();
-	}
-
-	public EjbPackage getEJBPackage() {
-		return getEJBFactory().getEjbPackage();
-	}
-	public WebapplicationFactory getWebFactory() {
-		return WebapplicationPackage.eINSTANCE.getWebapplicationFactory();
-	}
-	/**
-	 * Starts the application.
-	 * @param args an array of command-line arguments
-	 */
-	public static void main(java.lang.String[] args) {
-		String[] className = { "com.ibm.etools.archive.test.CopyTests", "-noloading" };
-		TestRunner.main(className);
-	}
-	public static junit.framework.Test suite() {
-		return new TestSuite(CopyTests.class);
-	}
-	/**
-	 * Tests the addCopy(ReadOnlyDirectory) api on archive
-	 */
-	public void testAddCopyDirectory() throws Exception {
-
-		WARFile aWarFile = (WARFile) getArchiveFactory().openArchive(AutomatedBVT.baseDirectory + "example2.war");
-
-		ReadOnlyDirectory sampleDirectory = getArchiveFactory().openReadOnlyDirectory(AutomatedBVT.baseDirectory + "WarTestClasses");
-		
-		int initialSize = aWarFile.getFiles().size();
-
-		aWarFile.addCopy(sampleDirectory);
-		Iterator iter = aWarFile.getFiles().iterator();
-		//For running inside eclipse
-		while (iter.hasNext()) {
-			String uri = ((File)iter.next()).getURI();
-			if (uri.indexOf("CVS") >= 0) 
-				iter.remove();
-		}
-		assertTrue("Wrong number of files ", aWarFile.getFiles().size() == initialSize + 7);
-		aWarFile.saveAsNoReopen(AutomatedBVT.baseDirectory + "testOutput/CopyTests/addCopyDir.war");
-
-	}
-
-	public void testAddCopyModule() throws Exception {
-
-		String in = AutomatedBVT.baseDirectory + "sample.ear";
-		EARFile earFile = (EARFile) getArchiveFactory().openArchive(in);
-		List modules = earFile.getDeploymentDescriptor().getModules();
-		EJBJarFile ejbJarFile = null;
-
-		for (int i = 0; i < modules.size(); i++) {
-			Module aModule = (Module) modules.get(i);
-			if (aModule.isEjbModule()) {
-				ejbJarFile = (EJBJarFile) earFile.getFile(aModule.getUri());
-				break;
-			}
-		}
-
-		assertTrue("EJBJarFile should not be null", ejbJarFile != null);
-		ejbJarFile.getDeploymentDescriptor();
-
-		EARFile newEarFile = getArchiveFactory().createEARFileInitialized(AutomatedBVT.baseDirectory + "testOutput/CopyTests/newEarWithCopiedModule.ear");
-		newEarFile.addCopy(ejbJarFile);
-		EJBJarFile copied = (EJBJarFile) newEarFile.getModuleFiles().get(0);
-		assertTrue(copied.isDeploymentDescriptorSet());
-		assertTrue(copied.getDeploymentDescriptor() == copied.getDeploymentDescriptorResource().getContents().get(0));
-		assertTrue(copied.getDeploymentDescriptor() != ejbJarFile.getDeploymentDescriptor());
-		assertTrue(ejbJarFile.getFiles().size() == copied.getFiles().size());
-
-		newEarFile.saveNoReopen();
-	}
-
-	/**
-	 * Test per CMVC defect report 96197
-	 * Create a new application, open ejb jar file, use addcopy to add the module, and save
-	 * using original ear, get the ejb jar, and modify bindings
-	 * save again
-	 * Result:  bindings not updated
-	 */
-	public void testAddCopyModuleFilesToEAR() throws Exception {
-		String uri = AutomatedBVT.baseDirectory + "testOutput/CopyTests/testAddCopyModuleFilesToEAR.ear";
-		//Create a new ear file, add a standalone ejb jar file and standalone war file, and save
-		EARFile earFile = getArchiveFactory().createEARFileInitialized(uri);
-		earFile.setJ2EEVersion(J2EEVersionConstants.J2EE_1_3_ID);
-		earFile.getDeploymentDescriptor().setDisplayName(uri);
-		EJBJarFile ejbJarFile = getArchiveFactory().openEJBJarFile(AutomatedBVT.baseDirectory + "bankejbs.jar");
-		earFile.addCopy(ejbJarFile);
-		WARFile warFile = getArchiveFactory().openWARFile(AutomatedBVT.baseDirectory + "example2.war");
-		earFile.addCopy(warFile);
-		((WebModule) earFile.getDeploymentDescriptor().getFirstModule(warFile.getURI())).setContextRoot("/");
-		earFile.save();
-
-		ejbJarFile = (EJBJarFile) earFile.getEJBJarFiles().get(0);
-		assertTrue("ejb dd resource not right", ejbJarFile.getDeploymentDescriptor().eResource() == ejbJarFile.getDeploymentDescriptorResource());
-
-		
-
-		warFile = (WARFile) earFile.getWARFiles().get(0);
-		assertTrue("war dd resource not right", warFile.getDeploymentDescriptor().eResource() == warFile.getDeploymentDescriptorResource());
-
-		
-		earFile.saveNoReopen();
-
-		
-		earFile.close();
-
-	}
-	/**
-	 * Tests opening a standalone module with an absolute path, and adding that to a new ear file, per defect report
-	 */
-	public void testAddCopyStandaloneModule() throws Exception {
-		String fileName = AutomatedBVT.baseDirectory + "bankejbs.jar";
-
-		EJBJarFile ejbJarFile = (EJBJarFile) getArchiveFactory().openArchive(fileName);
-		ejbJarFile.getDeploymentDescriptor();
-
-		EARFile newEarFile = getArchiveFactory().createEARFileInitialized(AutomatedBVT.baseDirectory + "testOutput/CopyTests/newEarWithStandAloneModule-out.ear");
-		newEarFile.addCopy(ejbJarFile);
-		EJBJarFile copied = (EJBJarFile) newEarFile.getModuleFiles().get(0);
-		assertTrue(copied.isDeploymentDescriptorSet());
-		assertTrue(copied.getDeploymentDescriptor() == copied.getDeploymentDescriptorResource().getContents().get(0));
-		assertTrue(copied.getDeploymentDescriptor() != ejbJarFile.getDeploymentDescriptor());
-		assertTrue(ejbJarFile.getFiles().size() == copied.getFiles().size());
-
-		newEarFile.saveNoReopen();
-	}
-
-	public void testAddRenameAndDelete() throws Exception {
-
-		String in = AutomatedBVT.baseDirectory + "sample.ear";
-		EARFile earFile = (EARFile) getArchiveFactory().openArchive(in);
-		List modules = earFile.getDeploymentDescriptor().getModules();
-		EJBJarFile ejbJarFile = null;
-
-		for (int i = 0; i < modules.size(); i++) {
-			Module aModule = (Module) modules.get(i);
-			if (aModule.isEjbModule()) {
-				ejbJarFile = (EJBJarFile) earFile.getFile(aModule.getUri());
-				break;
-			}
-		}
-
-		assertTrue("EJBJarFile should not be null", ejbJarFile != null);
-		ejbJarFile.getDeploymentDescriptor();
-
-		EARFile newEarFile = getArchiveFactory().createEARFileInitialized(AutomatedBVT.baseDirectory + "testOutput/CopyTests/newEarWithCopiedModule.ear");
-		EJBModuleRef addedCopy = (EJBModuleRef) newEarFile.addCopyRef(ejbJarFile);
-		assertTrue("Module files should not be empty", !newEarFile.getModuleFiles().isEmpty());
-		assertTrue("Modules should not be empty", !newEarFile.getDeploymentDescriptor().getModules().isEmpty());
-		assertTrue("Module should be accessible and have the same uri as file", addedCopy.getModule().getUri().equals(addedCopy.getModuleFile().getURI()));
-
-		String newURI = "temp/foobar.jar";
-		addedCopy.setURI(newURI);
-		assertTrue("Module should be accessible and have the new renamed uri as well as the file", addedCopy.getModule().getUri().equals(addedCopy.getModuleFile().getURI()) && addedCopy.getModule().getUri().equals(newURI));
-		newEarFile.remove(addedCopy);
-		assertTrue("Module files should be empty", newEarFile.getModuleFiles().isEmpty());
-		assertTrue("Modules should be empty", newEarFile.getDeploymentDescriptor().getModules().isEmpty());
-
-	}
-
-	public void testAddRenameAndDeleteStandalone() throws Exception {
-
-		String fileName = AutomatedBVT.baseDirectory + "bankejbs.jar";
-
-		EJBJarFile ejbJarFile = (EJBJarFile) getArchiveFactory().openArchive(fileName);
-
-		EARFile newEarFile = getArchiveFactory().createEARFileInitialized(AutomatedBVT.baseDirectory + "testOutput/CopyTests/newEarWithCopiedModule.ear");
-		EJBModuleRef addedCopy = (EJBModuleRef) newEarFile.addCopyRef(ejbJarFile);
-		assertTrue("Module files should not be empty", !newEarFile.getModuleFiles().isEmpty());
-		assertTrue("Modules should not be empty", !newEarFile.getDeploymentDescriptor().getModules().isEmpty());
-		assertTrue("Module should be accessible and have the same uri as file", addedCopy.getModule().getUri().equals(addedCopy.getModuleFile().getURI()));
-
-		String newURI = "temp/foobar.jar";
-		addedCopy.setURI(newURI);
-		assertTrue("Module should be accessible and have the new renamed uri as well as the file", addedCopy.getModule().getUri().equals(addedCopy.getModuleFile().getURI()) && addedCopy.getModule().getUri().equals(newURI));
-		newEarFile.remove(addedCopy);
-		assertTrue("Module files should be empty", newEarFile.getModuleFiles().isEmpty());
-		assertTrue("Modules should be empty", newEarFile.getDeploymentDescriptor().getModules().isEmpty());
-
-	}
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/DefectVerificationTests.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/DefectVerificationTests.java
deleted file mode 100644
index 35628c0..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/DefectVerificationTests.java
+++ /dev/null
@@ -1,390 +0,0 @@
-/*
- * Created on May 20, 2004
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.jst.j2ee.archive.test;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Iterator;
-import java.util.List;
-import java.util.zip.ZipInputStream;
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.jst.j2ee.application.Application;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Container;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EJBModuleRef;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.File;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.ModuleRef;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.WebModuleRef;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveOptions;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.jst.j2ee.internal.WrappedException;
-import org.eclipse.jst.j2ee.webapplication.FilterMapping;
-import org.eclipse.jst.j2ee.webapplication.WebApp;
-
-import com.ibm.wtp.common.logger.proxy.Logger;
-
-/**
- * @author mdelder
- * 
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Generation - Code and Comments
- */
-public class DefectVerificationTests extends TestCase {
-
-	/**
-	 *  
-	 */
-	public DefectVerificationTests() {
-		super();
-	}
-
-	/**
-	 * @param name
-	 */
-	public DefectVerificationTests(String name) {
-		super(name);
-	}
-
-	public static junit.framework.Test suite() {
-	    /*TestSuite suite = new TestSuite();
-	    suite.addTest(new DefectVerificationTests("testFilterMappingTranslator"));
-	    return suite;*/
-		return new TestSuite(DefectVerificationTests.class); 
-	}
-	
-
-	public void testFilterMappingTranslator() throws Exception {
-/*		ArchiveOptions options = new ArchiveOptions();
-		options.setRendererType(ArchiveOptions.DOM);
-		final String earPath = AutomatedBVT.baseDirectory + "sample.ear";
-		CommonarchivePackage pkg = CommonarchivePackage.eINSTANCE;
-		EARFile earFile = pkg.getCommonarchiveFactory().openEARFile(options,
-				earPath);
-		// open the ear
-		System.out.println("opening " + archive + " ... ");*/
-	    
-	    String archive = AutomatedBVT.baseDirectory + "QIDefectsNew.ear";
-	    String name = "QIDefects.war";
-		  /*
-		   * crack open the ear file using the common archive:
-		   */
-		  CommonarchiveFactory archiveFactory = (CommonarchiveFactory) CommonarchivePackage.eINSTANCE.getEFactoryInstance();
-		  ArchiveOptions options = new ArchiveOptions();
-		  options.setRendererType(ArchiveOptions.SAX);
-		  options.setUseJavaReflection(false);
-		  //   options.setDiscriminateNestedArchives(extraProcessing);
-		  		
-		  		EARFile earFile = archiveFactory.openEARFile(options, archive);
-				WebModuleRef warFile = null;
-				for (Iterator i = earFile.getModuleRefs().iterator(); i.hasNext();) {
-				    ModuleRef mref = (ModuleRef) i.next();
-				    if (name.equals(mref.getUri())) { 
-				        warFile =  (WebModuleRef) mref;
-				    }
-				}
-   
-				WebApp dd = (WebApp)warFile.getDeploymentDescriptor();
-   
-				EList filterMappings = dd.getFilterMappings();
-				assertTrue("The test requires two filter mappings.", filterMappings.size() == 2); 
-				FilterMapping filterMapping1 = (FilterMapping)filterMappings.get(0);
-				assertNotNull("A URL Pattern was not found for filter with name " + filterMapping1.getFilter().getName(),filterMapping1.getUrlPattern());
-				FilterMapping filterMapping2 = (FilterMapping)filterMappings.get(1);
-				assertNotNull("A Servlet name was not found for filter with name " + filterMapping2.getFilter().getName(),filterMapping2.getServletName());
-				assertNotNull("A Servlet was not found for filter with name " + filterMapping2.getFilter().getName(),filterMapping2.getServlet());
-				      
-	}
-
-	public void testFormerDefect297() throws Exception {
-		ArchiveOptions options = new ArchiveOptions();
-		options.setRendererType(ArchiveOptions.DOM);
-		final String earPath = AutomatedBVT.baseDirectory + "sample.ear";
-		CommonarchivePackage pkg = CommonarchivePackage.eINSTANCE;
-		EARFile earFile = pkg.getCommonarchiveFactory().openEARFile(options,
-				earPath);
-		earFile.extractNoReopen(Archive.EXPAND_ALL);
-	}
-
-	public void testFormerDefect1459() throws Exception {
-		ArchiveOptions options = new ArchiveOptions();
-		options.setRendererType(ArchiveOptions.DOM);
-		CommonarchivePackage pkg = CommonarchivePackage.eINSTANCE;
-		CommonarchiveFactory factory = pkg.getCommonarchiveFactory();
-
-		EARFile earFile = factory.createEARFileInitialized(options, "Test.ear");
-		earFile.saveAs("C:\\Test.ear");
-	}
-
-	/*
-	 * public void testCorruptedEAR() throws Exception { ArchiveOptions options =
-	 * new ArchiveOptions(); options.setRendererType(ArchiveOptions.DOM); final
-	 * String earPath = AutomatedBVT.baseDirectory + "occam.ear";
-	 * CommonarchivePackage pkg = CommonarchivePackage.eINSTANCE;
-	 * CommonarchiveFactory factory = pkg.getCommonarchiveFactory();
-	 * 
-	 * EARFile earFile = factory.openEARFile(options, earPath);
-	 * 
-	 * List files = earFile.getFiles();
-	 * 
-	 * for(int i=0; i <files.size(); i++) { System.err.println(files.get(i));
-	 * readFile( (File) files.get(i)); if(files.get(i) instanceof WARFile) {
-	 * WARFile war = (WARFile) files.get(i); List warFiles = war.getFiles();
-	 * for(int j=0; j <warFiles.size(); j++) {
-	 * System.err.println(warFiles.get(j)); readFile((File)warFiles.get(j)); } } }
-	 * System.out.println("Done"); }
-	 */
-
-	/**
-	 * @param file
-	 * @throws FileNotFoundException
-	 * @throws IOException
-	 */
-	private void readFile(File file) throws FileNotFoundException, IOException {
-		InputStream is = file.getInputStream();
-		ZipInputStream zis = new ZipInputStream(is);
-		try {
-			while (zis.getNextEntry() != null);
-
-		} finally {
-			if (is != null)
-				is.close();
-			if (zis != null)
-				zis.close();
-			is = null;
-			zis = null;
-		}
-	}
-
-	public void testSavingEARWhileDeploying() throws Exception {
-		try {
-			ArchiveOptions options = new ArchiveOptions();
-			options.setRendererType(ArchiveOptions.SAX);
-			options.setUseJavaReflection(true);
-			final String earPath = AutomatedBVT.baseDirectory
-					+ "AuctionApp.ear";
-			CommonarchivePackage pkg = CommonarchivePackage.eINSTANCE;
-			EARFile earFile = pkg.getCommonarchiveFactory().openEARFile(
-					options, earPath);
-			printFiles(earFile);
-			earFile.save();
-
-			earFile.reopen();
-		} catch (WrappedException we) {
-			Logger.getLogger().logError(we);
-			Logger.getLogger().logError(we.getMessage());
-			if (we.getCause() != null)
-				Logger.getLogger().logError(we.getCause());
-			if (we.getNestedException() != null)
-				Logger.getLogger().logError(we.getNestedException());
-			if (we.getNestedException() != null)
-				Logger.getLogger().logError(we.getConcatenatedMessages());
-			throw we;
-		}
-	}
-
-	public void testCreatingEARFile() throws Exception {
-
-		CommonarchivePackage pkg = CommonarchivePackage.eINSTANCE;
-		CommonarchiveFactory factory = pkg.getCommonarchiveFactory();
-		final String earPath = AutomatedBVT.baseDirectory
-				+ "InitializedEAR.ear";
-
-		ArchiveOptions options = new ArchiveOptions();
-		options.setIsReadOnly(true);
-		options.setRendererType(ArchiveOptions.DOM);
-
-		// new ear file
-		EARFile earFile = factory.createEARFileInitialized(options, earPath);
-
-		Application appl = earFile.getDeploymentDescriptor();
-
-	}
-
-	public void testServiceQNameTranslator() throws Exception {
-        try {
-			ArchiveOptions options = new ArchiveOptions();
-			options.setRendererType(ArchiveOptions.SAX); 
-			final String earPath = AutomatedBVT.baseDirectory + "WSSecured_InsuranceServices_EJB_WS.ear";
-			CommonarchivePackage pkg = CommonarchivePackage.eINSTANCE;
-			CommonarchiveFactory factory = pkg.getCommonarchiveFactory();
-			EARFile earFile = factory.openEARFile(options, earPath);
-			printFiles(earFile);
-			String tmp = "C:\\temp\\"+System.currentTimeMillis();
-			earFile.extractTo(tmp, 0);  
-				
-			List ejbModuleRefs = earFile.getEJBModuleRefs();
-
-			for(int i=0; i<ejbModuleRefs.size(); i++) {
-				EJBModuleRef ejbmodref = (EJBModuleRef) ejbModuleRefs.get(i);
-				if(ejbmodref.getUri().equals("WSInsSession20EJB.jar")) {
-					Resource res = ejbmodref.getMofResource("META-INF/webservicesclient.xml"); 
-					System.err.println(res.getURI());
-					 
-				}
-			}
-			/*
-			 * Application app = earFile.getDeploymentDescriptor(); List modules =
-			 * app.getModules(); for(int i=0; i <modules.size(); i++) {
-			 * System.err.println(modules.get(i)); Module
-			 * mod=(Module)modules.get(i); if( mod.isEjbModule() ) { EjbModule
-			 * ejbModule = (EjbModule) mod; EJBJarFile ejbJarFile =
-			 * factory.openEJBJarFile(options, "WSInsSession20EJB.jar"); EJBJar
-			 * ejbjar = ejbJarFile.getDeploymentDescriptor(); }
-			 *  }
-			 */
-		} catch (WrappedException we) {
-			Logger.getLogger().logError(we);
-			Logger.getLogger().logError(we.getMessage());
-			if(we.getCause() != null) 
-				Logger.getLogger().logError(we.getCause());
-			if(we.getNestedException() != null)
-				Logger.getLogger().logError(we.getNestedException());
-			if(we.getNestedException() != null)
-				Logger.getLogger().logError(we.getConcatenatedMessages());
-			throw we;
-		}  
-    }	
-	
-	public void testReadCrimsonCase() throws Exception {
-		try {
-			ArchiveOptions options = new ArchiveOptions();
-			options.setRendererType(ArchiveOptions.DOM); 
-			final String earPath = AutomatedBVT.baseDirectory
-					+ "ejb_sam_Hello.ear";
-			CommonarchivePackage pkg = CommonarchivePackage.eINSTANCE;
-			EARFile earFile = pkg.getCommonarchiveFactory().openEARFile(
-					options, earPath);
-			Application app = earFile.getDeploymentDescriptor();
-			assertNotNull("Could not read deployment descriptor.", app);
-			System.err.println("\n\n******************Printing files from " + app.getDisplayName());
-			assertNotNull("Could not read display name from deployment descriptor.", app.getDisplayName());
-			printFiles(earFile);
-			earFile.extractTo(AutomatedBVT.baseDirectory + "testOutput/temp", 0);
-			earFile.reopen();
-		} catch (WrappedException we) {
-			Logger.getLogger().logError(we);
-			Logger.getLogger().logError(we.getMessage());
-			if (we.getCause() != null)
-				Logger.getLogger().logError(we.getCause());
-			if (we.getNestedException() != null)
-				Logger.getLogger().logError(we.getNestedException());
-			if (we.getNestedException() != null)
-				Logger.getLogger().logError(we.getConcatenatedMessages());
-			throw we;
-		}
-	}
-	
-	/*public void testReadInitParms13() throws Exception {
-	    readInitParms(true);
-	}
-	public void testReadInitParms14() throws Exception{
-	    readInitParms(false);
-	}	*/
-	
-	/*public void readInitParms(boolean is13) throws Exception {
-		try { 
-		    System.out.println("Using J2EE " + (is13?"1.3" :"1.4") );
-			ArchiveOptions options = new ArchiveOptions();
-			options.setRendererType(ArchiveOptions.DOM); 
-			final String earPath = AutomatedBVT.baseDirectory
-					+ ((is13) ? "filter13war.ear" :  "servlet_js_filter.ear");
-			CommonarchivePackage pkg = CommonarchivePackage.eINSTANCE;
-			EARFile earFile = pkg.getCommonarchiveFactory().openEARFile(
-					options, earPath);
-			WARFile warFile = (WARFile) (is13 ? earFile.getFile("FilterWar.war") :earFile.getFile("servlet_js_filter_web.war"));
-			WebApp webapp = warFile.getDeploymentDescriptor(); 
-			assertNotNull("The web app DD could not be located", webapp);
-			EList filters = webapp.getFilters();
-			Filter f = null;
-			EList parms, paramValues;
-			for(int i=0; i<filters.size(); i++) {
-			    f = (Filter) filters.get(i);
-			    System.out.println(f);
-			    EList parms = f.getInitParams();
-			    System.out.println("There are " + parms.size() + " InitParams");
-			    for(int j=0; j<parms.size(); j++) {
-			        InitParam p = (InitParam) parms.get(j);
-			        System.out.println(p);
-			    }
-			    EList paramValues = f.getInitParamValues();
-			    System.out.println("There are " + paramValues.size() + " InitParamValues");
-			    for(int j=0; j<paramValues.size(); j++) {
-			        ParamValue p = (ParamValue) paramValues.get(j);
-			        System.out.println(p);
-			    }
-			    
-			    System.out.println("Demo version case");
-			    
-			    
-			    WebApp container = (WebApp) f.eContainer();
-			    switch(container.getJ2EEVersionID()) {
-			        case J2EEVersionConstants.J2EE_1_2_ID: 
-			        case J2EEVersionConstants.J2EE_1_3_ID:
-
-					    parms = f.getInitParams();
-					    System.out.println("There are " + parms.size() + " InitParams");
-					    assertEquals("There must be 2 Filter Init Params", parms.size(), 2);
-					    for(int j=0; j<parms.size(); j++) {
-					        InitParam ip = (InitParam) parms.get(j);
-					        System.out.println(p);
-					        assertTrue("The param names much match", ("param"+j+"name").equals(ip.getParamName()));
-					        assertTrue("The param values much match", ("param"+j+"value").equals(ip.getParamValue()));
-					    }
-					    break;
-			        case J2EEVersionConstants.J2EE_1_4_ID: default: {
-
-					    paramValues = f.getInitParamValues();
-			        	assertEquals("There must be 1 Filter Init Param Values", paramValues.size(), 1);
-					    System.out.println("There are " + paramValues.size() + " InitParamValues");
-					    
-				        ParamValue pv = (ParamValue) paramValues.get(0); 
-				        System.out.println(pv); 
-				        assertTrue("The param names much match", ("attribute").equals(pv.getName()));
-				        String expectedValue = (i == 0) ? "com.sun.ts.tests.servlet.api.javax_servlet.filter.DoFilter_Filter.SERVLET_MAPPED" : "com.sun.ts.tests.servlet.api.javax_servlet.filter.InitFilter_Filter.SERVLET_MAPPED"; 
-				        assertEquals("The param values much match", expectedValue , pv.getValue());
-			        }
-					    break;
-			    }
-			}
-			
-			    
-		} catch (WrappedException we) {
-			Logger.getLogger().logError(we);
-			Logger.getLogger().logError(we.getMessage());
-			if (we.getCause() != null)
-				Logger.getLogger().logError(we.getCause());
-			if (we.getNestedException() != null)
-				Logger.getLogger().logError(we.getNestedException());
-			if (we.getNestedException() != null)
-				Logger.getLogger().logError(we.getConcatenatedMessages());
-			throw we;
-		}
-	}*/
-	 
-	
-	private void printFiles(Container ar) {
-		List files = ar.getFiles();
-
-		for (int i = 0; i < files.size(); i++) {
-			System.err.println(files.get(i));
-			if (files.get(i) instanceof Container) {
-				Container tainer = (Container) files.get(i);
-				printFiles(tainer);
-			}
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/DiscriminatorTest.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/DiscriminatorTest.java
deleted file mode 100644
index 734786d..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/DiscriminatorTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.eclipse.jst.j2ee.archive.test;
-
-import java.io.File;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.ArchiveTypeDiscriminatorRegistry;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.GenericArchiveTypeDiscriminator;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-
-
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2001, 2002 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- */
-
-/**
- * @author mdelder
- *  
- */
-public class DiscriminatorTest
-        extends TestCase {
-
-    public boolean assertBarFile = false;
-
-    public DiscriminatorTest(String name) {
-        super(name);
-    }
-
-    public static Test suite() {
-        TestSuite suite = new TestSuite("DiscriminatorTest");
-        suite.addTest(new DiscriminatorTest("testDiscriminator"));
-        return suite;
-    }
-
-    // TODO Implement unit test for discriminator framework
-    public void testDiscriminator() throws Exception {
-        assertBarFile = true;
-        try {
-            ArchiveTypeDiscriminatorRegistry.registorDiscriminator(new BeverageArchiveDiscriminator());
-            Archive archive = CommonarchiveFactory.eINSTANCE.openArchive( AutomatedBVT.baseDirectory + File.separator + "my.bar");
-            assertNotNull("The archive was not found!", archive);
-
-            assertTrue("The archive extension (.bar) was not recognized as a custom extension!", archive.isNestedArchive("my.bar"));
-
-            boolean typeContributedSuccessfully = false;
-            EList types = archive.getTypes();
-            for (int i = 0; i < types.size(); i++) {
-                if (types.get(i).equals(BeverageArchiveDiscriminator.BEVERAGE_ARCHIVE_TYPE_KEY)) {
-                    typeContributedSuccessfully = true;
-                    break;
-                }
-            }
-            assertTrue("The BEVERAGE_ARCHIVE_TYPE_KEY was not found in the list of types of the archive!", typeContributedSuccessfully);
-        } finally {
-            assertBarFile = false;
-        }
-    }
-
-    public class BeverageArchiveDiscriminator
-            extends TestCase implements GenericArchiveTypeDiscriminator {
-
-        public static final String BEVERAGE_ARCHIVE_TYPE_KEY = "com.ibm.beverage.archive";
-
-        /*
-         * (non-Javadoc)
-         * 
-         * @see com.ibm.etools.j2ee.commonarchivecore.GenericArchiveTypeDiscriminator#discriminate(com.ibm.etools.j2ee.commonarchivecore.Archive)
-         */
-        public boolean discriminate(Archive anArchive) {
-            boolean result = anArchive.containsFile("META-INF/adult-beverage-imbibement-options.xml");
-            if (assertBarFile)
-                    assertTrue(
-                            "The BeverageArchiveDiscriminator did not recogniZe the file! (Ensure it contains a file named META-INF/adult-beverage-imbibement-venues.xml)",
-                            result);
-            return result;
-        }
-
-        /*
-         * (non-Javadoc)
-         * 
-         * @see com.ibm.etools.j2ee.commonarchivecore.GenericArchiveTypeDiscriminator#getCustomFileExtensions()
-         */
-        public String[] getCustomFileExtensions() {
-
-            return new String[] { "bar"};
-
-        }
-
-        /*
-         * (non-Javadoc)
-         * 
-         * @see com.ibm.etools.j2ee.commonarchivecore.GenericArchiveTypeDiscriminator#getTypeKey()
-         */
-        public String getTypeKey() {
-
-            return BEVERAGE_ARCHIVE_TYPE_KEY;
-        }
-    }
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/DomComparitor.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/DomComparitor.java
deleted file mode 100644
index 454c1e3..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/DomComparitor.java
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * Created on Mar 17, 2003
- *
- * To change this generated comment go to 
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.jst.j2ee.archive.test;
-
-import java.util.HashSet;
-
-import org.w3c.dom.Attr;
-import org.w3c.dom.CharacterData;
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentFragment;
-import org.w3c.dom.DocumentType;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.ProcessingInstruction;
-import org.xml.sax.EntityResolver;
-
-/**
- * THE MASTER COPY of this class is in com.ibm.etools.commontests
- * Please update the copy in commontests and then copy this class to
- * where you need it if you are looking at a different copy
- * 
- * @author jsholl
- *
- * To change this generated comment go to 
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-public class DomComparitor {
-	private static EntityResolver entityResolver;
-	private static HashSet attributeList;
-// TODO replace this with non xerces	
-//    public static String compareDoms(InputSource source1, InputSource source2, HashSet ignorableAtts) throws Exception {
-//    	attributeList = ignorableAtts;
-//    	DOMParser parser = new DOMParser();
-//    	if (entityResolver == null) {
-//         parser.setEntityResolver(new EntityResolver() {
-//	            public InputSource resolveEntity(String arg0, String arg1) throws SAXException, IOException {
-//	                return null;
-//	            }
-//	
-//	        });
-//    	} else {
-//    		parser.setEntityResolver(entityResolver);
-//    	}
-//        parser.parse(source1);
-//        Document doc1 = parser.getDocument();
-//        parser.parse(source2);
-//        Document doc2 = parser.getDocument();
-//        return compareNodes(doc1, doc2);
-//    }
-
-//	public static String compareDoms(InputSource source1, InputSource source2) throws Exception {
-//		return compareDoms(source1, source2, null);
-//	}
-
-
-    public static String compareNodes(Node node1, Node node2) throws Exception {
-        //        System.out.println("checking A:" + node1);
-        //        System.out.println("checking B:" + node2);
-        //        System.out.println("nodeType=" + node1.getNodeType());
-        //        System.out.println("getNodeName=" + node1.getNodeName());
-        //        System.out.println("getNodeValue=" + node1.getNodeValue());
-
-        //Generic Node Testing 
-        if (node1 == null && node2 == null)
-        	return null; 
-        else if ((node1 != null && node2 == null) || node1 == null && node2 != null)
-        	return nullNodeEncountered(node1, node2);                        
-        else if (node1.getNodeType() != node2.getNodeType()) {
-            return mismatch("Node.getNodeType() " + node1.getNodeType() + " " + node2.getNodeType(), node1, node2);
-        } else if (node1.getNodeName() != node2.getNodeName()) {
-            return mismatch("Node.getNodeName() <" + node1.getNodeName() + "> <" + node2.getNodeName() + ">", node1, node2);
-        } else if (!(node1.getNodeValue() == null && node2.getNodeValue() == null)) {
-            if (node1.getNodeValue() == null) {
-                return mismatch("Node.getNodeValue() node A is null", node1, node2);
-            } else if (node2.getNodeValue() == null) {
-                return mismatch("Node.getNodeValue() node B is null", node1, node2);
-            } else if (!node1.getNodeValue().equals(node2.getNodeValue())) {
-                return mismatch("Node.getNodeValue() <" + node1.getNodeValue() + "> <" + node2.getNodeValue() + ">", node1, node2);
-            }
-        } else if (node1.hasAttributes() != node2.hasAttributes()) {
-            return mismatch("Node.hasAttributes() " + node1.hasAttributes() + " " + node2.hasAttributes(), node1, node2);
-        } else if (node1.hasChildNodes() != node2.hasChildNodes()) {
-            return mismatch("Node.hasChildNodes() " + node1.hasChildNodes() + " " + node2.hasChildNodes(), node1, node2);
-        }
-		//TODO strengthen node comparisons as necessary
-        //Specialized Node Testing
-        switch (node1.getNodeType()) {
-            case Node.TEXT_NODE :
-            case Node.CDATA_SECTION_NODE :
-                CharacterData cdata1 = (CharacterData) node1;
-                CharacterData cdata2 = (CharacterData) node2;
-                if (!cdata1.getData().equals(cdata2.getData())) {
-                    return mismatch("CharacterData.getData() " + cdata1.getData() + " " + cdata2.getData(), node1, node2);
-                }
-                break;
-            case Node.ATTRIBUTE_NODE :
-                Attr attr1 = (Attr) node1;
-                Attr attr2 = (Attr) node2;
-                	if (!attr1.getName().equals(attr2.getName())) {
-	                    return mismatch("Attr.getName() " + attr1.getName() + " " + attr2.getName(), node1, node2);
-	                } 
-	                else if( attributeList != null && !attributeList.contains(attr1.getName()) && !attributeList.contains(attr2.getName())) {
-						if (!attr1.getValue().equals(attr2.getValue())) {
-		                    return mismatch("Attr.getValue() " + attr1.getValue() + " " + attr2.getValue(), node1, node2);
-		                } else if (attr1.getSpecified() != attr2.getSpecified()) {
-		                    return mismatch("Attr.getSpecified() " + attr1.getSpecified() + " " + attr2.getSpecified(), node1, node2);
-		                }
-	                }
-                break;
-            case Node.DOCUMENT_NODE :
-            	Document doc1 = (Document)node1;
-				Document doc2 = (Document)node2;
-				String result = compareNodes(doc1.getDoctype(), doc2.getDoctype());
-				if(result != null){
-					return result;
-				}
-				break;
-			case Node.DOCUMENT_TYPE_NODE:
-				DocumentType docType1 = (DocumentType)node1;
-				DocumentType docType2 = (DocumentType)node2;
-				if(!docType1.getPublicId().equals(docType2.getPublicId())){
-					return mismatch("DocumentType.getPublicId() "+docType1.getPublicId()+ " "+docType2.getPublicId(), node1, node2);
-				}
-				break;
-            case Node.PROCESSING_INSTRUCTION_NODE :
-            	ProcessingInstruction pInst1 = (ProcessingInstruction)node1;
-				ProcessingInstruction pInst2 = (ProcessingInstruction)node2;
-				//System.out.println("ProcessingInstruction todo");
-            	break;
-			case Node.DOCUMENT_FRAGMENT_NODE :
-				DocumentFragment frag1 = (DocumentFragment)node1;
-				DocumentFragment frag2 = (DocumentFragment)node2;
-				//System.out.println("DocumentFragment todo");
-            	break;
-			
-			case Node.ELEMENT_NODE :
-			case Node.COMMENT_NODE :
-            case Node.ENTITY_NODE :
-			case Node.NOTATION_NODE :
-				break;
-
-        }
-
-        //Recursion
-        NamedNodeMap attributes1 = node1.getAttributes();
-        NamedNodeMap attributes2 = node2.getAttributes();
-
-        if (attributes1 != null && attributes2 != null) {
-            if (attributes1.getLength() != attributes2.getLength()) {
-                return mismatch("getAttributes().getLength() " + attributes1.getLength() + " " + attributes2.getLength(), node1, node2);
-            }
-            for (int i = 0; i < attributes1.getLength(); i++) {
-				Attr attr1 = (Attr) attributes1.item(i);
-				Attr attr2 = (Attr) attributes2.item(i);
-				if(!attr1.getName().equals(attr2.getName())){
-					return mismatch("Attr.getName() " + attr1.getName() + " " + attr2.getName(), attr1, attr2);
-				}
-				if(attributeList != null && !attributeList.contains(attr1.getName()) && !attributeList.contains(attr2.getName())) {
-	                String results = compareNodes(attr1, attr2);
-	                if (null != results) {
-	                    return results;
-	                }
-				}
-            }
-
-        } else if (attributes1 != null || attributes2 != null) {
-            return mismatch("getAttributes() null", node1, node2);
-        }
-
-        NodeList children1 = node1.getChildNodes();
-        NodeList children2 = node2.getChildNodes();
-
-        //        if (children1.getLength() != children2.getLength()) {
-        //            return mismatch("getChildNodes().getLength() "+children1.getLength()+" "+children2.getLength(), node1, node2);
-        //        }
-
-        int count1 = 0;
-        int count2 = 0;
-
-        //compare all children, skipping empty text nodes
-        while (count1 < children1.getLength() && count2 < children2.getLength()) {
-            Node child1 = children1.item(count1);
-            Node child2 = children2.item(count2);
-            if (child1.getNodeType() != child2.getNodeType()) {
-                if (child1.getNodeType() == Node.TEXT_NODE && (child1.getNodeValue() == null || child1.getNodeValue().trim().equals(""))) {
-                    count1++;
-                    continue;
-                } else if (child2.getNodeType() == Node.TEXT_NODE && (child2.getNodeValue() != null || child2.getNodeValue().trim().equals(""))) {
-                    count2++;
-                    continue;
-                }
-            }
-            count1++;
-            count2++;
-            String results = compareNodes(child1, child2);
-            if (null != results) {
-                return results;
-            }
-        }
-        //TODO there must be a way to tell the parser to ignore whitespace.
-        //be sure skip any empty text nodes at the end
-        while (count1 < children1.getLength()) {
-            Node child1 = children1.item(count1);
-            if (child1.getNodeType() == Node.TEXT_NODE && child1.getNodeValue() == null || child1.getNodeValue().trim().equals("")) {
-                count1++;
-                continue;
-            }
-            return nodeNotCompared(child1);
-        }
-
-        while (count2 < children2.getLength()) {
-            Node child2 = children2.item(count2);
-            if (child2.getNodeType() == Node.TEXT_NODE && child2.getNodeValue() == null || child2.getNodeValue().trim().equals("")) {
-                count2++;
-                continue;
-            }
-            return nodeNotCompared(child2);
-        }
-
-        //        for (int i = 0; i < children1.getLength(); i++) {
-        //            Node child1 = children1.item(i);
-        //            Node child2 = children2.item(i);
-        //        }
-
-        return null;
-    }
-
-    
-	public static String nullNodeEncountered(Node node1, Node node2) {
-		String message = "Null node encountered";
-		Node nonNullNode = node1 == null ? node2 : node1;
-		char source = node1 == null ? 'B' : 'A';
-		while (nonNullNode != null) {
-			message += source + nonNullNode.getNodeName() + "\n";
-			nonNullNode = nonNullNode.getParentNode();
-		}
-		return message;
-
-		
-	}
-
-	public static String nodeNotCompared(Node node) {
-        String message = "Node node compared:";
-        while (node != null) {
-            message += node.getNodeName() + "\n";
-            node = node.getParentNode();
-        }
-
-        return message;
-    }
-
-    public static String mismatch(String mismatchtype, Node node1, Node node2) throws Exception {
-        String message = "Nodes A and B do not match because of node." + mismatchtype + "\n";
-        while (node1 != null && node2 != null) {
-            message += "A:" + node1.getNodeName() + "\n";
-            message += "B:" + node2.getNodeName() + "\n";
-            node1 = node1.getParentNode();
-            node2 = node2.getParentNode();
-        }
-
-        return message;
-    }
-
-    public static void main(String[] args) {
-    }
-	/**
-	 * @return
-	 */
-	public static EntityResolver getEntityResolver() {
-		return entityResolver;
-	}
-
-	/**
-	 * @param resolver
-	 */
-	public static void setEntityResolver(EntityResolver resolver) {
-		entityResolver = resolver;
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/InitializationTests.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/InitializationTests.java
deleted file mode 100644
index 354c4f8..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/InitializationTests.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package org.eclipse.jst.j2ee.archive.test;
-
- /*
- * Licensed Material - Property of IBM
- * (C) Copyright IBM Corp. 2001 - All Rights Reserved.
- * US Government Users Restricted Rights - Use, duplication or disclosure
- * restricted by GSA ADP Schedule Contract with IBM Corp.
- */
-
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.jst.j2ee.commonarchivecore.internal.ApplicationClientFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EJBJarFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EJBModuleRef;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.WARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.WebModuleRef;
-/**
- * Insert the type's description here.
- * Creation date: (12/18/00 7:41:39 PM)
- * @author: Administrator
- */
-public class InitializationTests extends TestCase {
-	private final static String copyright = "(c) Copyright IBM Corporation 2001.";//$NON-NLS-1$
-/**
- * InitializationTests constructor comment.
- * @param name java.lang.String
- */
-public InitializationTests(String name) {
-	super(name);
-}
-public CommonarchiveFactory getArchiveFactory() {
-	return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-}
-/**
- * Starts the application.
- * @param args an array of command-line arguments
- */
-public static void main(java.lang.String[] args) {
-	String[] className = {"com.ibm.etools.archive.test.InitializationTests", "-noloading"};
-	TestRunner.main(className);
-}
-public static junit.framework.Test suite() {
-	return new TestSuite(InitializationTests.class);
-}
-public void testNewArchives() throws Exception {
-
-//        Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("*", new XMIResourceFactoryImpl());
-	ApplicationClientFile clientFile = getArchiveFactory().createApplicationClientFileInitialized("foo");
-	assertTrue(clientFile.getDeploymentDescriptor() != null);
-	
-
-	clientFile = getArchiveFactory().createApplicationClientFileInitialized("foo");
-
-	EJBJarFile ejbJarFile = getArchiveFactory().createEJBJarFileInitialized("foo");
-	assertTrue(ejbJarFile.getDeploymentDescriptor() != null);
-	
-	//The next piece is to verify no exceptions occur
-	ejbJarFile = getArchiveFactory().createEJBJarFileInitialized("foo");
-	EJBModuleRef ejbModuleRef = getArchiveFactory().createEJBModuleRef();
-	ejbModuleRef.setModuleFile(ejbJarFile);
-	
-
-	EARFile earFile = getArchiveFactory().createEARFileInitialized("foo");
-	
-	assertTrue(earFile.getDeploymentDescriptor() != null);
-	
-
-	WARFile warFile = getArchiveFactory().createWARFileInitialized("foo");
-	
-	assertTrue(warFile.getDeploymentDescriptor() != null);
-	
-
-	warFile = getArchiveFactory().createWARFileInitialized("foo");
-	WebModuleRef webModuleRef = getArchiveFactory().createWebModuleRef();
-	webModuleRef.setModuleFile(warFile);
-	
-
-}
-	
-	
-
-
-	
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/JavaTests.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/JavaTests.java
deleted file mode 100644
index 7133bd8..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/JavaTests.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package org.eclipse.jst.j2ee.archive.test;
-
- /*
- * Licensed Material - Property of IBM
- * (C) Copyright IBM Corp. 2001 - All Rights Reserved.
- * US Government Users Restricted Rights - Use, duplication or disclosure
- * restricted by GSA ADP Schedule Contract with IBM Corp.
- */
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-/**
- * Insert the type's description here.
- * Creation date: (1/17/2001 10:17:29 AM)
- * @author: Administrator
- */
-public class JavaTests extends TestCase {
-	private final static String copyright = "(c) Copyright IBM Corporation 2001.";//$NON-NLS-1$
-/**
- * JavaTests constructor comment.
- * @param name java.lang.String
- */
-public JavaTests(String name) {
-	super(name);
-}
-public CommonarchiveFactory getArchiveFactory() {
-	return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-}
-/**
- * Starts the application.
- * @param args an array of command-line arguments
- */
-public static void main(java.lang.String[] args) {
-	String[] className = {"com.ibm.etools.archive.test.JavaTests", "-noloading"};
-	TestRunner.main(className);
-}
-public static junit.framework.Test suite() {
-	return new TestSuite(JavaTests.class);
-}
-/**
- * This method verifies that java reflection works on archives, and that
- * class loading and java reflection is dynamic with changes to the class
- * path of the archive
- */
-public void testJavaReflection() throws Exception {
-/*
-	Archive anArchive = getArchiveFactory().primOpenArchive("bank35deployed.jar");
-	JavaClass cls = (JavaClass)org.eclipse.jem.internal.java.impl.JavaClassImpl.reflect("com.ibm.ejb.bank.VapAccountBean", anArchive.getContext());
-	//Ignore the constructor
-	assertTrue("Should not have been able to reflect methods" ,cls.getMethods().size() == 1 && ((Method)cls.getMethods().get(0)).getName().equals(cls.getName()));
-
-	anArchive.setExtraClasspath("ivjejb35.jar");
-
-	assertTrue("Methods should have been reflected", cls.getMethods().size() > 1);
-*/	
-}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/LooseArchiveTests.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/LooseArchiveTests.java
deleted file mode 100644
index 1c47cff..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/LooseArchiveTests.java
+++ /dev/null
@@ -1,283 +0,0 @@
-package org.eclipse.jst.j2ee.archive.test;
-
-
-import java.util.List;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.jst.j2ee.application.Module;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Container;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.File;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.ModuleRef;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveInit;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.RuntimeClasspathEntry;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.looseconfig.LooseApplication;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.looseconfig.LooseConfigRegister;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.looseconfig.LooseConfiguration;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.looseconfig.LooseLibrary;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.looseconfig.LooseModule;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.looseconfig.LooseWARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.looseconfig.LooseconfigFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.looseconfig.LooseconfigPackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.util.ArchiveUtil;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-
-
-public class LooseArchiveTests extends AbstractArchiveTest {
-
-	/** The current working directory */
-	protected String cwd;
-	protected URI looseConfigLoc;
-	protected URI looseAppLoc;
-	protected String looseModuleWorkspace;
-	protected String looseEARUri;
-	
-	protected static final String EJB_JAR_URI = "LooseEAREjb.jar";
-	protected static final String WAR_URI = "LooseEARWeb.war";
-	protected static final String UTIL_JAR_URI = "util.jar";
-	protected static final String WEBLIB_URI = "WEB-INF/lib/library.jar";
-	protected static final String WEBLIB_FULL_URI = "WEB-INF/lib/library.jar";
-	protected static final String OUTPUT_EAR_FILE_URI = AutomatedBVT.baseDirectory +"testOutput/LooseArchiveTests/LooseApp.ear";
-	protected static char sep = java.io.File.separatorChar;
-	/**
-	 * Constructor for LooseArchiveTests.
-	 * @param name
-	 */
-	public LooseArchiveTests(String name) {
-		super(name);
-	}
-	
-	public void testLooseConfigCreation() throws Exception {
-		Resource resource = Resource.Factory.Registry.INSTANCE.getFactory(looseConfigLoc).createResource(looseConfigLoc);
-		resource.getContents().add(createLooseConfig());
-		resource.save(new java.util.HashMap());
-	}
-	
-	public void testLooseAppCreation() throws Exception {
-		Resource resource = Resource.Factory.Registry.INSTANCE.getFactory(looseAppLoc).createResource(looseAppLoc);
-		resource.getContents().add(createLooseApplication());
-		resource.save(new java.util.HashMap());
-	}
-	
-	public void testLooseConfigOpenAndSave() throws Exception {
-		System.setProperty(LooseConfigRegister.LOOSE_CONFIG_PROPERTY, looseConfigLoc.toString());
-		EARFile ear = getArchiveFactory().openEARFile(looseEARUri);
-		verify(ear);
-		//printClasspaths(ear);
-		ear.saveAs(OUTPUT_EAR_FILE_URI);
-		ear.close();
-		ear = getArchiveFactory().openEARFile(OUTPUT_EAR_FILE_URI);
-		verify(ear);
-		ear.close();
-			
-	}
-	
-
-	
-	public void testLooseConfigUnimodeOpenAndSave() throws Exception {
-		System.setProperty(LooseConfigRegister.LOOSE_CONFIG_PROPERTY, "");
-
-		LooseConfigRegister.singleton().addLooseMapping(looseEARUri, looseAppLoc.toString());
-		EARFile ear = getArchiveFactory().openEARFile(looseEARUri);
-		verify(ear);
-		//printClasspaths(ear);
-		ear.saveAs(OUTPUT_EAR_FILE_URI);
-		ear.close(); 
-
-		ear = getArchiveFactory().openEARFile(OUTPUT_EAR_FILE_URI);
-		verify(ear);
-		ear.close();
-			
-	}
-	
-	public void testLooseConfigOpenAndReOpen() throws Exception {
-		System.setProperty(LooseConfigRegister.LOOSE_CONFIG_PROPERTY, looseConfigLoc.toString());
-		EARFile ear = getArchiveFactory().openEARFile(looseEARUri);
-		ear.close();
-		ear.reopen();
-		List jars = ear.getArchiveFiles();
-		for (int i = 0; i < jars.size(); i++) {
-			Archive archive = (Archive) jars.get(i);
-			archive.close();
-			archive.reopen(ear);
-		}
-		ear.close();
-			
-	}
-
-	protected void verify(EARFile ear) throws Exception {
-		verifyModules(ear);
-		verifyModuleRefs(ear);
-		verifyUtilAndLib(ear);
-	}
-
-	/**
-	 * Another level of verification that for each module, the module files exists
-	 * and the deployment descriptor can be read
-	 */
-	protected void verifyModuleRefs(EARFile ear) throws Exception {
-		List moduleRefs = ear.getModuleRefs();
-		int size = moduleRefs.size();
-		assertEquals("Wrong number of modules", 2, size);
-		for (int i = 0; i < size; i++) {
-			ModuleRef ref = (ModuleRef) moduleRefs.get(i);
-			assertNotNull("ModuleRef should have a module file:"+ref.getModule().getUri(), ref.getModuleFile());
-			assertNotNull("Deployment descriptor should not be null", ref.getDeploymentDescriptor());	
-		}
-	}
-	
-	/**
-	 * Verify that the util jar in the ear and the library in the war exist and are not empty
-	 */
-	protected void verifyUtilAndLib(EARFile ear) throws Exception {
-		verifyJAR(ear, UTIL_JAR_URI);
-		verifyJAR((Archive)ear.getFile(WAR_URI), WEBLIB_FULL_URI);
-	
-	}
-	
-	protected void verifyJAR(Archive parent, String uri) throws Exception {
-		assertTrue("Should contain JAR: "+uri, parent.containsFile(uri));
-		Archive jar = (Archive)parent.getFile(uri);
-		//at lease one file plus the manifest
-		assertTrue("JAR should contain a class file: "+uri, containsClassFile(jar));
-	}
-	
-	protected boolean containsClassFile(Archive jar) {
-		List files = jar.getFiles();
-		for (int i = 0; i < files.size(); i++) {
-			File aFile = (File) files.get(i);
-			if (aFile.getURI().endsWith(".class"));
-				return true;	
-		}
-		return false;
-	}
-	
-	/**
-	 * Make sure {@link Container#containsFile(String) works for loose modules
-	 */
-	public void verifyModules(EARFile ear) throws Exception {
-		List modules = ear.getDeploymentDescriptor().getModules();
-		int size = modules.size();
-		for (int i = 0; i < modules.size(); i++) {
-			Module m = (Module) modules.get(i);
-			assertTrue("EAR file should contain module file: "+m.getUri(), ear.containsFile(m.getUri()));
-		}
-		assertEquals("Wrong number of modules", 2, size);
-		for (int i = 0; i < modules.size(); i++) {
-			Module m = (Module) modules.get(i);
-			assertTrue("EAR file should contain module file: "+m.getUri(), ear.containsFile(m.getUri()));
-		}
-	}
-	
-	protected LooseConfiguration createLooseConfig() {
-		LooseConfiguration config = looseConfigFactory().createLooseConfiguration();
-		config.getApplications().add(createLooseApplication());
-		return config;
-	}
-	
-	protected LooseApplication createLooseApplication() {
-		LooseApplication app = looseConfigFactory().createLooseApplication();
-		app.setUri(looseEARUri);
-		app.setResourcesPath(looseEARUri);
-		app.setBinariesPath(looseEARUri);
-		List looseArchives = app.getLooseArchives();
-		looseArchives.add(createLooseEJB());
-		looseArchives.add(createLooseWEB());
-		looseArchives.add(createLooseUtil());
-		return app;
-	}
-	
-	protected LooseModule createLooseEJB() {
-		LooseModule mod = looseConfigFactory().createLooseModule();
-		mod.setUri(EJB_JAR_URI);
-		String absPath = looseModuleWorkspace+sep+"LooseEAREjb"+sep+"bin";
-		mod.setBinariesPath(absPath);
-		mod.setResourcesPath(absPath);
-		return mod;
-	}
-	
-	protected LooseModule createLooseWEB() {
-		LooseWARFile mod = looseConfigFactory().createLooseWARFile();
-		mod.setUri(WAR_URI);
-		String absPath = looseModuleWorkspace+sep+"LooseEARWeb"+sep+"webApplication";
-		mod.setBinariesPath(absPath);
-		mod.setResourcesPath(absPath);
-		mod.getLooseLibs().add(createLooseWebLib());
-		return mod;
-	}
-	
-	protected LooseLibrary createLooseUtil() {
-		LooseLibrary lib = looseConfigFactory().createLooseLibrary();
-		lib.setUri(UTIL_JAR_URI);
-		String absPath = looseModuleWorkspace+sep+"LooseJavaUtil"+sep+"bin";
-		lib.setBinariesPath(absPath);
-		lib.setResourcesPath(absPath);
-		return lib;
-	}
-	
-	protected LooseLibrary createLooseWebLib() {
-		LooseLibrary lib = looseConfigFactory().createLooseLibrary();
-		lib.setUri(WEBLIB_URI);
-		String absPath = looseModuleWorkspace+sep+"LooseJavaWebLib"+sep+"bin";
-		lib.setBinariesPath(absPath);
-		lib.setResourcesPath(absPath);
-		return lib;
-	}
-	
-	protected LooseconfigFactory looseConfigFactory() {
-		return LooseconfigPackage.eINSTANCE.getLooseconfigFactory();
-	}
-	
-	protected void printClasspaths(EARFile ear) {
-		List archives = ear.getArchiveFiles();
-		for (int i = 0; i < archives.size(); i++) {
-			Archive archive = (Archive) archives.get(i);
-			System.out.println("Local runtime classpath for: "+archive.getURI());
-			RuntimeClasspathEntry[] entries = archive.getLocalRuntimeClassPath();
-			for (int j = 0; j < entries.length; j++) {
-				System.out.println(entries[j]);
-			}
-			System.out.println("Full runtime classpath for: "+archive.getURI());
-			entries = archive.getFullRuntimeClassPath();
-			for (int j = 0; j < entries.length; j++) {
-				System.out.println(entries[j]);
-			}
-		}
-	}
-	
-
-	public static void main(String[] args) {
-		String[] className = { "com.ibm.etools.archive.test.LooseArchiveTests", "-noloading" };
-		TestRunner.main(className);
-	}
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite("LooseArchiveTests");
-		suite.addTest(new LooseArchiveTests("testLooseConfigCreation"));
-		suite.addTest(new LooseArchiveTests("testLooseAppCreation"));
-		suite.addTest(new LooseArchiveTests("testLooseConfigOpenAndSave"));
-		suite.addTest(new LooseArchiveTests("testLooseConfigOpenAndReOpen"));
-		suite.addTest(new LooseArchiveTests("testLooseConfigUnimodeOpenAndSave"));
-		return suite;
-	}
-		/*
-		 * @see TestCase#setUp()
-		 */
-		protected void setUp() throws Exception {
-			super.setUp();
-			ArchiveInit.init();
-			LooseConfigRegister.singleton().flush();
-			cwd = AutomatedBVT.baseDirectory;
-			looseModuleWorkspace = cwd+"loose_module_workspace";
-			looseConfigLoc = URI.createFileURI(looseModuleWorkspace+sep+".metadata"+sep+".plugins"+sep+"com.ibm.etools.j2ee"+sep+"looseConfig.xmi");
-			looseAppLoc = URI.createFileURI(looseModuleWorkspace+sep+".metadata"+sep+".plugins"+sep+"com.ibm.etools.j2ee"+sep+"looseApp.xmi");
-			looseEARUri = ArchiveUtil.getOSUri(looseModuleWorkspace+sep+"LooseEAR");
-		}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/RarFileTests.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/RarFileTests.java
deleted file mode 100644
index d5358d2..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/RarFileTests.java
+++ /dev/null
@@ -1,207 +0,0 @@
-package org.eclipse.jst.j2ee.archive.test;
-
-/*
-* Licensed Material - Property of IBM
-* (C) Copyright IBM Corp. 2001 - All Rights Reserved.
-* US Government Users Restricted Rights - Use, duplication or disclosure
-* restricted by GSA ADP Schedule Contract with IBM Corp.
-*/
-
-import java.util.List;
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.RARFile;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.jst.j2ee.jca.AuthenticationMechanism;
-import org.eclipse.jst.j2ee.jca.ConfigProperty;
-import org.eclipse.jst.j2ee.jca.Connector;
-import org.eclipse.jst.j2ee.jca.ResourceAdapter;
-import org.eclipse.jst.j2ee.jca.SecurityPermission;
-
-/**
- * Tests for verfication that RAR support works correctly in WCCM.
- * Creation date: (12/11/00 10:26:11 AM)
- * @author: Jared Jurkiewicz, et al.
- */
-public class RarFileTests extends TestCase {
-    private final static String copyright = "(c) Copyright IBM Corporation 2001."; //$NON-NLS-1$
-    /**
-     * SimpleTests constructor comment.
-     * @param name java.lang.String
-     */
-    public RarFileTests(String name) {
-        super(name);
-    }
-    public CommonarchiveFactory getArchiveFactory() {
-        return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-    }
-    /**
-     * Starts the application.
-     * @param args an array of command-line arguments
-     */
-    public static void main(java.lang.String[] args) {
-        String[] className = { "com.ibm.etools.archive.test.RarFileTests", "-noloading" };
-        TestRunner.main(className);
-    }
-    public void printRARToConsole(Connector connector) {
-        ResourceAdapter ra = connector.getResourceAdapter();
-
-        System.out.println("ResourceAdapter from XML Deployment Descriptor");
-        System.out.println("-------------------------------------------------");
-        System.out.println(connector.getDisplayName() + ": " + connector.getDescription());
-        System.out.println("Vendor : " + connector.getVendorName());
-        System.out.println("Version : " + connector.getVersion());
-        System.out.println("Spec Version : " + connector.getSpecVersion());
-        System.out.println("EIS Type : " + connector.getEisType());
-        System.out.println("Reauthentication Support : " + ra.isReauthenticationSupport());
-        System.out.println("Transaction Support : " + ra.getTransactionSupport().getName().toLowerCase());
-
-        if (connector.getLicense() != null) {
-            System.out.println("License Required : " + connector.getLicense().isRequired());
-            System.out.println("License Description : " + connector.getLicense().getDescription());
-        }
-
-        System.out.println("Small Icon : " + connector.getSmallIcon());
-        System.out.println("Large Icon : " + connector.getLargeIcon());
-
-        List authMechs = ra.getAuthenticationMechanisms();
-        for (int i = 0; i < authMechs.size(); i++) {
-            AuthenticationMechanism auth = (AuthenticationMechanism) authMechs.get(i);
-            System.out.println("\nAuthentication Mechanism:");
-            System.out.println("Description : " + auth.getDescription());
-            System.out.println("Type : " + auth.getAuthenticationMechanismType().getName().toLowerCase());
-            System.out.println("Credential Interface : " + auth.getCredentialInterface());
-        }
-        System.out.println("\nRegistered classes:");
-        System.out.println("\t" + ra.getConnectionFactoryImplClass() + " implements ");
-        System.out.println("\t\t" + ra.getConnectionFactoryInterface());
-        System.out.println("\t" + ra.getConnectionImplClass() + " implements ");
-        System.out.println("\t\t" + ra.getConnectionInterface());
-        System.out.println("\tManagedConnectionFactory: " + ra.getManagedConnectionFactoryClass());
-
-        List configs = ra.getConfigProperties();
-        System.out.println("\nConfig-properties:");
-        for (int i = 0; i < configs.size(); i++) {
-            ConfigProperty prop = (ConfigProperty) configs.get(i);
-            System.out.println("\tConfig-property : " + prop.getName());
-            System.out.println("\tType : " + prop.getType() + " / Value : " + prop.getValue());
-            System.out.println("\tDescription : " + prop.getDescription() + "\n");
-        }
-
-        List secs = ra.getSecurityPermissions();
-        System.out.println("\nSecurity-Permissions:");
-        for (int i = 0; i < secs.size(); i++) {
-            SecurityPermission prop = (SecurityPermission) secs.get(i);
-            System.out.println("\tConfig-Description : " + prop.getDescription());
-            System.out.println("\tSpecification : " + prop.getSpecification() + "\n");
-        }
-
-    }
-    public static junit.framework.Test suite() {
-        return new TestSuite(RarFileTests.class);
-    }
-    public void testaddCopyModule() throws Exception {
-
-        String in = AutomatedBVT.baseDirectory + "sample.rar";
-        RARFile rarFile = (RARFile) getArchiveFactory().openArchive(in);
-
-        rarFile.getDeploymentDescriptor();
-
-        EARFile newEarFile = getArchiveFactory().createEARFileInitialized(AutomatedBVT.baseDirectory + "testOutput/CopyTests/newEarWithRarCopiedModule.ear");
-
-        newEarFile.addCopy(rarFile);
-        RARFile copied = (RARFile) newEarFile.getModuleFiles().get(0);
-        assertTrue(copied.isDeploymentDescriptorSet());
-        assertTrue(copied.getDeploymentDescriptor() == copied.getDeploymentDescriptorResource().getContents().get(0));
-        assertTrue(copied.getDeploymentDescriptor() != rarFile.getDeploymentDescriptor());
-        assertTrue(rarFile.getFiles().size() == copied.getFiles().size());
-
-        newEarFile.saveNoReopen();
-    }
-    public void testexpandRarModule() throws Exception {
-
-        String in = AutomatedBVT.baseDirectory + "sample.rar";
-        RARFile rarFile = (RARFile) getArchiveFactory().openArchive(in);
-        rarFile.setURI("sample.rar");
-
-        rarFile.getDeploymentDescriptor();
-
-        EARFile newEarFile = getArchiveFactory().createEARFileInitialized(AutomatedBVT.baseDirectory + "testOutput/RarTests/newEarWithRarModule.ear");
-        newEarFile.addCopy(rarFile);
-
-        newEarFile.saveNoReopen();
-
-        String out = AutomatedBVT.baseDirectory + "testOutput/RarTests/Rar-containing-ear-out.ear";
-        newEarFile.extractTo(out, Archive.EXPAND_RAR_FILES);
-    }
-    
-    /**
-     * Very basic method to open an archive and save it as a directory to a new destination.  Requires visual inspection
-     * for verification.  Nested wars and ejb jars will be exploded but other nested jars will not
-     */
-    public void testOpenAndExtract() throws Exception {
-
-        String in = AutomatedBVT.baseDirectory + "sample.rar";
-        RARFile rarFile = (RARFile) getArchiveFactory().openArchive(in);
-        String out = AutomatedBVT.baseDirectory + "testOutput/Exploded_RAR_Dir/";
-        rarFile.extractToConnectorDirectory(out, Archive.EXPAND_ALL);
-    }
-    /**
-     * Opens an ear file, and for each module, writes it's dd components to the console.  Requires visual inspection
-     * for verification
-     */
-
-    public void testOpenAndRead() throws Exception {
-
-        String in = AutomatedBVT.baseDirectory + "sample.rar";
-        RARFile rarFile = (RARFile) getArchiveFactory().openArchive(in);
-
-		Connector dd = rarFile.getDeploymentDescriptor();
-		//printRARToConsole(dd);
-	}
-	
-	public void testopenRarEar() throws Exception {
-		EARFile earFile = (EARFile) getArchiveFactory().openArchive(AutomatedBVT.baseDirectory + "testrar.ear");
-		assertTrue(earFile.getDeploymentDescriptor().getFirstModule("sample.rar") != null);
-	}
-	
-	public void testSaveRarEar() throws Exception {
-		String in = AutomatedBVT.baseDirectory + "sample.rar";
-		RARFile rarFile = (RARFile) getArchiveFactory().openArchive(in);
-		rarFile.setURI("sample.rar");
-
-        rarFile.getDeploymentDescriptor();
-
-        EARFile newEarFile = getArchiveFactory().createEARFileInitialized(AutomatedBVT.baseDirectory + "testOutput/RarTests/newEarWithRarModule_saved.ear");
-        newEarFile.addCopy(rarFile);
-
-        assertNotNull("Module wasn't found!", newEarFile.getDeploymentDescriptor().getFirstModule("sample.rar"));
-
-        newEarFile.save();
-    }
-
-    public void testJ2Cauth() throws Exception {
-        String in = AutomatedBVT.baseDirectory + "sample.rar";
-        RARFile rarFile = (RARFile) getArchiveFactory().openArchive(in);
-
-        Connector dd = rarFile.getDeploymentDescriptor();
-
-        ResourceAdapter rd = dd.getResourceAdapter();
-
-        EList myAuthList = rd.getAuthenticationMechanisms();
-//        System.out.println("Number of auth mechanisms is: " + myAuthList.size());
-//        for (int i = 0; i < myAuthList.size(); i++) {
-//            System.out.println("Auth type is: " + ((AuthenticationMechanism) myAuthList.get(i)).getAuthenticationMechanismType());
-//            System.out.println("Auth type is: " + ((AuthenticationMechanism) myAuthList.get(i)).getAuthenticationMechanismType().getName());
-//        }
-    }
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/ResourceTests.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/ResourceTests.java
deleted file mode 100644
index 29ca510..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/ResourceTests.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Created on Mar 13, 2003
- *
- * To change this generated comment go to 
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.jst.j2ee.archive.test;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.jst.j2ee.common.CommonPackage;
-import org.eclipse.jst.j2ee.common.EjbRef;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.ApplicationClientFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EJBJarFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveInit;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.jst.j2ee.ejb.EnterpriseBean;
-
-
-/**
- * @author schacher
- *
- * To change this generated comment go to 
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-public class ResourceTests extends AbstractArchiveTest {
-
-	/**
-	 * @param name
-	 */
-	public ResourceTests(String name) {
-		super(name);
-	}
-	
-	/**
-	 * Starts the application.
-	 * @param args an array of command-line arguments
-	 */
-	public static void main(java.lang.String[] args) {
-		String[] className = {"com.ibm.etools.archive.test.ResourceTests", "-noloading"};
-		TestRunner.main(className);
-	}
-	public static junit.framework.Test suite() {
-		return new TestSuite(ResourceTests.class);
-	}
-
-	protected List findOccurrences(List resources, String uri) {
-		List result = new ArrayList(1);
-		for (int i = 0; i < resources.size(); i++) {
-			Resource aResource = (Resource) resources.get(i);
-			if (uri.equals(aResource.getURI().toString()))
-				result.add(aResource);
-		}
-		return result;
-	}
-
-	public void testResourceCreation() throws Exception {
-		String uri = "META-INF/client-resource.xmi";
-		ApplicationClientFile appClientFile = getArchiveFactory().createApplicationClientFileInitialized("test.jar");
-		Resource res = null;
-		boolean exceptionCaught = false;
-		try {
-			res = appClientFile.getMofResource(uri);
-		} catch (java.io.FileNotFoundException e) {
-			exceptionCaught = true;
-			List foundResources = findOccurrences(appClientFile.getResourceSet().getResources(), uri);
-			assertTrue("There should exist exactly one resource", foundResources.size() == 1);
-			Resource foundResource = (Resource)foundResources.get(0);
-			assertFalse("The resource should be unloaded", foundResource.isLoaded());
-			res = appClientFile.makeMofResource(uri);
-			assertTrue("Resource should not be null", res != null);
-			foundResources = findOccurrences(appClientFile.getResourceSet().getResources(), uri);
-			assertTrue("There should exist exactly one resource", foundResources.size() == 1);
-			foundResource = (Resource)foundResources.get(0);
-			assertTrue("The resource should exist", foundResource != null);
-			assertFalse("The resource should be unloaded", foundResource.isLoaded());		
-		}
-		assertTrue("Exception should have been caught", exceptionCaught);
-		Collection loadedResources = appClientFile.getLoadedMofResources();
-		assertTrue("Loaded resources should be size 1", loadedResources.size() == 1);
-		EjbRef aRef = CommonPackage.eINSTANCE.getCommonFactory().createEjbRef();
-		res.getContents().add(aRef);
-		loadedResources = appClientFile.getLoadedMofResources();
-		assertTrue("Loaded resources should be size 2", loadedResources.size() == 2);
-	}
-	
-	public void testResourceDirty() throws Exception {
-		EJBJarFile jar = getArchiveFactory().openEJB11JarFile(AutomatedBVT.baseDirectory + "bankejbs.jar");
-		EnterpriseBean bean = (EnterpriseBean)jar.getDeploymentDescriptor().getEnterpriseBeans().get(0);
-		
-		EARFile newEar = getArchiveFactory().createEARFileInitialized("test");
-		EJBJarFile copyJar = (EJBJarFile) newEar.addCopy(jar);
-		
-		assertFalse("dd should not be dirty", copyJar.getDeploymentDescriptorResource().isModified());
-	}
-
-	/* (non-Javadoc)
-	 * @see junit.framework.TestCase#setUp()
-	 */
-	protected void setUp() throws Exception {
-		super.setUp();
-		ArchiveInit.init();
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/SaveTests.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/SaveTests.java
deleted file mode 100644
index 046c116..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/SaveTests.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package org.eclipse.jst.j2ee.archive.test;
-
-/*
-* Licensed Material - Property of IBM
-* (C) Copyright IBM Corp. 2001 - All Rights Reserved.
-* US Government Users Restricted Rights - Use, duplication or disclosure
-* restricted by GSA ADP Schedule Contract with IBM Corp.
-*/
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.File;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.ReadOnlyDirectory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.WARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveConstants;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.util.ArchiveUtil;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-
-/**
- * Insert the type's description here.
- * Creation date: (12/21/00 3:04:36 PM)
- * @author: Administrator
- */
-public class SaveTests extends TestCase {
-    private final static String copyright = "(c) Copyright IBM Corporation 2001."; //$NON-NLS-1$
-    /**
-     * SaveTests constructor comment.
-     * @param name java.lang.String
-     */
-    public SaveTests(String name) {
-        super(name);
-    }
-    public CommonarchiveFactory getArchiveFactory() {
-        return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-    }
-    /**
-     * Starts the application.
-     * @param args an array of command-line arguments
-     */
-    public static void main(java.lang.String[] args) {
-        String[] className = { "com.ibm.etools.archive.test.SaveTests", "-noloading" };
-        TestRunner.main(className);
-    }
-    public static junit.framework.Test suite() {
-        return new TestSuite(SaveTests.class);
-    }
-    /**
-     * This scenario tests the case of opening an archive, modifying it's contents, and saving to the same uri from which it was
-     * loaded.  The problem is that the reading of input streams of individual entries in an archive is deferred until requested through
-     * the api or save time; therefore, an open file exists on the source file.  To get around this, the implementation saves the archive
-     * to a temp file, then deletes (or renames, based on setting, to be implemented) the old file, renames the temp file, and does some
-     * housekeeping on the saved archive, with it's load strategy and contained files
-     */
-    public void testSave() throws Exception {
-
-        //First make a copy of our reference file
-        Archive anArchive = getArchiveFactory().openArchive(AutomatedBVT.baseDirectory + "example2.war");
-        anArchive.saveAsNoReopen(AutomatedBVT.baseDirectory + "testOutput/SaveTests/copy.war");
-        anArchive = null;
-
-        WARFile aWarFile = (WARFile) getArchiveFactory().openArchive(AutomatedBVT.baseDirectory + "testOutput/SaveTests/copy.war");
-        ReadOnlyDirectory sampleDirectory = getArchiveFactory().openReadOnlyDirectory(AutomatedBVT.baseDirectory + "WarTestClasses");
-        int initialSize = aWarFile.getClasses().size();
-        File aFile = sampleDirectory.getFileInSelfOrSubdirectory("com/ibm/etools/archive/test/WARFileTests.class");
-        aWarFile.addCopyClass(aFile);
-        assertTrue(aWarFile.getClasses().size() == initialSize + 1);
-
-        String classURI = ArchiveUtil.concatUri(ArchiveConstants.WEBAPP_CLASSES_URI, aFile.getURI(), '/');
-        assertTrue(aWarFile.containsFile(classURI));
-        aWarFile.save();
-
-        File classFile = aWarFile.getFile(classURI);
-        assertTrue("File should not be null", classFile != null);
-        assertTrue("Wrong loading archive", classFile.getLoadingContainer() == aWarFile);
-        assertTrue("Wrong original URI", classFile.getOriginalURI().equals(classURI));
-
-        aWarFile.saveAs("testOutput/SaveTests/copy2.war");
-        aWarFile.save();
-    }
-
-    /**
-     * This scenario is similar to @link #testSave, except that it tests with a directory instead of a jar file
-     */
-    public void testSaveDirectory() throws Exception {
-
-        //First make a copy of our reference file
-        Archive anArchive = getArchiveFactory().openArchive(AutomatedBVT.baseDirectory + "sample.ear");
-        anArchive.saveAsNoReopen(AutomatedBVT.baseDirectory + "testOutput/SaveTests/sample-copied.ear");
-        anArchive = null;
-
-        EARFile anEARFile = (EARFile) getArchiveFactory().openArchive(AutomatedBVT.baseDirectory + "testOutput/SaveTests/sample-copied.ear");
-
-        anEARFile.getDeploymentDescriptor();
-        
-
-        anEARFile.extractNoReopen(Archive.EXPAND_WAR_FILES);
-
-    }
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/SecurityRoleTests.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/SecurityRoleTests.java
deleted file mode 100644
index 4ac0dc4..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/SecurityRoleTests.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package org.eclipse.jst.j2ee.archive.test;
-
- /*
- * Licensed Material - Property of IBM
- * (C) Copyright IBM Corp. 2001 - All Rights Reserved.
- * US Government Users Restricted Rights - Use, duplication or disclosure
- * restricted by GSA ADP Schedule Contract with IBM Corp.
- */
-
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.jst.j2ee.common.CommonFactory;
-import org.eclipse.jst.j2ee.common.CommonPackage;
-import org.eclipse.jst.j2ee.common.SecurityRole;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EJBJarFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EJBModuleRef;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.WARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.WebModuleRef;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-
-/**
- * Insert the type's description here.
- * Creation date: (02/09/01 12:05:18 AM)
- * @author: Administrator
- */
-public class SecurityRoleTests extends AbstractArchiveTest {
-	private final static String copyright = "(c) Copyright IBM Corporation 2001.";//$NON-NLS-1$
-/**
- * SecurityRoleTests constructor comment.
- * @param name java.lang.String
- */
-public SecurityRoleTests(String name) {
-	super(name);
-}
-public CommonFactory getCommonFactory() {
-	return CommonPackage.eINSTANCE.getCommonFactory();
-}
-/**
- * Starts the application.
- * @param args an array of command-line arguments
- */
-public static void main(java.lang.String[] args) {
-	String[] className = {"com.ibm.etools.archive.test.SecurityRoleTests", "-noloading"};
-	TestRunner.main(className);
-}
-public static junit.framework.Test suite() {
-	return new TestSuite(SecurityRoleTests.class);
-}
-public void testPushDownCopy() throws Exception {
-
-	EARFile earFile = getArchiveFactory().openEARFile(AutomatedBVT.baseDirectory + "sample.ear");
-
-	WARFile warFile = (WARFile)earFile.getWARFiles().get(0);
-
-	EJBJarFile ejbJarFile = (EJBJarFile) earFile.getEJBJarFiles().get(0);
-
-	SecurityRole aRole = getCommonFactory().createSecurityRole();
-	aRole.setRoleName("administrator");
-	aRole.setDescription("The all powerful");
-	earFile.getDeploymentDescriptor().getSecurityRoles().add(aRole);
-	earFile.pushDownRole(aRole);
-
-	assertTrue("Push down failed for ejb jar", ejbJarFile.getDeploymentDescriptor().getAssemblyDescriptor().getSecurityRoleNamed("administrator") != null);
-	assertTrue("Push down failed for war", warFile.getDeploymentDescriptor().getSecurityRoleNamed("administrator") != null);
-
-	earFile.close();
-
-}
-public void testRollupAddAndPushDown() throws Exception {
-
-	EARFile earFile = getArchiveFactory().openEARFile(AutomatedBVT.baseDirectory +"sample.ear");
-
-	WebModuleRef webRef = (WebModuleRef)earFile.getWebModuleRefs().get(0);
-
-	EJBModuleRef ejbModRef = (EJBModuleRef) earFile.getEJBModuleRefs().get(0);
-
-	SecurityRole aRole = getCommonFactory().createSecurityRole();
-	aRole.setRoleName("Joe");
-	aRole.setDescription("New description");
-	webRef.getWebApp().getSecurityRoles().add(aRole);
-
-	aRole = getCommonFactory().createSecurityRole();
-	aRole.setRoleName("administrator");
-	aRole.setDescription("The all powerful");
-	
-	webRef.getWebApp().getSecurityRoles().add(aRole);
-
-	//Test the rollup
-	earFile.rollUpRoles();
-	//We cheated here because we already knew there were two roles in the ejb jar
-	//one of which is named Joe, and zero roles in the war file
-	assertTrue("Roll up not right", earFile.getDeploymentDescriptor().getSecurityRoles().size() == 5);
-
-	aRole = getCommonFactory().createSecurityRole();
-	aRole.setRoleName("manager");
-	aRole.setDescription("the manager");
-	earFile.addCopy(aRole, webRef.getModule());
-
-	//Test the add and rollup
-	assertTrue("Add copy not right", earFile.getDeploymentDescriptor().getSecurityRoles().size() == 6 
-		&& earFile.getDeploymentDescriptor().containsSecurityRole(aRole.getRoleName())
-		&& webRef.getWebApp().containsSecurityRole(aRole.getRoleName()));
-
-	//Test the push down
-	earFile.renameSecurityRole("Joe", "guest");
-
-	assertTrue("Push down not right", !earFile.getDeploymentDescriptor().containsSecurityRole("Joe")
-		&& earFile.getDeploymentDescriptor().containsSecurityRole("guest")
-		&& !webRef.getWebApp().containsSecurityRole("Joe")
-		&& webRef.getWebApp().containsSecurityRole("guest")
-		&& !ejbModRef.getEJBJar().containsSecurityRole("Joe")
-		&& ejbModRef.getEJBJar().containsSecurityRole("guest"));
-
-	earFile.saveAsNoReopen(AutomatedBVT.baseDirectory +"testOutput/SecurityRoleTests/newSample.ear");
-	
-}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/SimpleTests.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/SimpleTests.java
deleted file mode 100644
index 5ba873b..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/SimpleTests.java
+++ /dev/null
@@ -1,433 +0,0 @@
-package org.eclipse.jst.j2ee.archive.test;
-
-/*
-* Licensed Material - Property of IBM
-* (C) Copyright IBM Corp. 2001 - All Rights Reserved.
-* US Government Users Restricted Rights - Use, duplication or disclosure
-* restricted by GSA ADP Schedule Contract with IBM Corp.
-*/
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.jst.j2ee.application.Application;
-import org.eclipse.jst.j2ee.application.Module;
-import org.eclipse.jst.j2ee.common.CommonPackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EJBJarFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EJBModuleRef;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.File;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.ModuleFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.ModuleRef;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.ValidateXmlCommand;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.WARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.WebModuleRef;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.XmlValidationResult;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.SaveFailureException;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveInit;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveOptions;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.jst.j2ee.ejb.ContainerManagedEntity;
-import org.eclipse.jst.j2ee.ejb.EJBJar;
-import org.eclipse.jst.j2ee.ejb.EjbPackage;
-import org.eclipse.jst.j2ee.ejb.Entity;
-import org.eclipse.jst.j2ee.ejb.Session;
-import org.eclipse.jst.j2ee.webapplication.WebApp;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationPackage;
-
-
-/**
- * Insert the type's description here.
- * Creation date: (12/11/00 10:26:11 AM)
- * @author: Administrator
- */
-public class SimpleTests extends TestCase {
-    private final static String copyright = "(c) Copyright IBM Corporation 2001."; //$NON-NLS-1$
-    /**
-     * SimpleTests constructor comment.
-     * @param name java.lang.String
-     */
-    public SimpleTests(String name) {
-        super(name);
-    }
-    public boolean isEmpty(Collection adapters) {
-        if (adapters.isEmpty())
-            return true;
-        for (Iterator iter = adapters.iterator(); iter.hasNext();) {
-            if (iter.next() != null)
-                return false;
-        }
-        return true;
-    }
-    public CommonarchiveFactory getArchiveFactory() {
-        return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-    }
-    /**
-     * Starts the application.
-     * @param args an array of command-line arguments
-     */
-    public static void main(java.lang.String[] args) {
-        String[] className = { "com.ibm.etools.archive.test.SimpleTests", "-noloading" };
-        TestRunner.main(className);
-    }
-    public void printApplToConsole(Application appl) {
-
-        List modules = appl.getModules();
-        for (int i = 0; i < modules.size(); i++) {
-            System.out.println(modules.get(i));
-        }
-    }
-    public void printEJBJarToConsole(EJBJar ejbJar) {
-
-        List ejbs = ejbJar.getEnterpriseBeans();
-        for (int i = 0; i < ejbs.size(); i++) {
-            System.out.println(ejbs.get(i));
-        }
-
-    }
-    public void printWebAppToConsole(WebApp webApp) {
-        List servlets = webApp.getServlets();
-
-        for (int i = 0; i < servlets.size(); i++) {
-            System.out.println(servlets.get(i));
-        }
-
-    }
-    public static junit.framework.Test suite() {
-        return new TestSuite(SimpleTests.class);
-    }
-    public void testContainerManagedEntityExtensionRead() throws Exception {
-        CommonarchiveFactory factory = CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-        EJBJarFile jarFile = (EJBJarFile) factory.openArchive(AutomatedBVT.baseDirectory + "cmpsample.jar");
-        EJBJar jar = jarFile.getDeploymentDescriptor();
-     
-    }
-    public void testEJB11JarAdd() throws Exception {
-        EARFile _earFile = getArchiveFactory().createEARFileInitialized(AutomatedBVT.baseDirectory + "testOutput/TestEAREJBAdd.ear");
-        CommonarchiveFactory factory = CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-        EJBJarFile jar = (EJBJarFile) factory.openArchive(AutomatedBVT.baseDirectory + "ejb_compat_entitycmp.jar");
-        jar.setURI(AutomatedBVT.baseDirectory + "ejb_compat_entitycmp.jar");
-        _earFile.addCopy(jar);
-        _earFile.save();
-    }
-    public void testEJBSetAbstractSchemaName() throws Exception {
-        String testSm = AutomatedBVT.baseDirectory + "TestSchema";
-        CommonarchiveFactory factory = CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-        EJBJarFile jarFile = (EJBJarFile) factory.openArchive(AutomatedBVT.baseDirectory + "cmpsample.jar");
-        EJBJar jar = jarFile.getDeploymentDescriptor();
-        List lst = jar.getContainerManagedBeans();
-
-        //I know this will be a CMP, so, lets try set/get on it..
-        ContainerManagedEntity cmp = (ContainerManagedEntity) lst.get(0);
-
-        //System.out.println("Setting Schema name to: " + testSm);
-        cmp.setAbstractSchemaName(testSm);
-        //Retrieve it and see if it matches
-        //System.out.println("Getting schema name: " + cmp.getAbstractSchemaName());
-        assertTrue(cmp.getAbstractSchemaName().equals(testSm));
-    }
-    /**
-     * This excercises the index adapter on Container
-     */
-    public void testIndexing() throws Exception {
-        Archive anArchive = getArchiveFactory().openArchive(AutomatedBVT.baseDirectory + "foo.jar");
-        String uri = "com/ibm/etools/archive/test/SimpleTests.java";
-
-        List files = anArchive.getFiles();
-
-        File aFile = anArchive.getFile(uri);
-        assertTrue("Adapter should be attached to aFile", !isEmpty(aFile.eAdapters()));
-
-        files.remove(aFile);
-
-        assertTrue("Adapter should not be attached to aFile", isEmpty(aFile.eAdapters()));
-
-        assertTrue("Contains should return false", !anArchive.containsFile(uri));
-
-        File copy = anArchive.addCopy(aFile);
-
-        assertTrue("Contains should return true", anArchive.containsFile(uri));
-
-        String renamedURI = "com/ibm/goobledygook";
-        copy.setURI(renamedURI);
-
-        assertTrue("Contains should return false for old uri", !anArchive.containsFile(uri));
-
-        assertTrue("Contains should return true for new uri", anArchive.containsFile(renamedURI));
-
-    }
-    /**
-     * This excercises the index adapter on Container
-     * Tests notifications with add/remove of lists, and that adapters are set post copy
-     */
-    public void testIndexingWithCollections() throws Exception {
-        Archive anArchive = getArchiveFactory().openArchive(AutomatedBVT.baseDirectory + "bankejbs.jar");
-        EARFile earFile = getArchiveFactory().createEARFileInitialized(AutomatedBVT.baseDirectory + "bar.ear");
-        earFile.addCopy(anArchive);
-        anArchive = (Archive) earFile.getFile(AutomatedBVT.baseDirectory + "bankejbs.jar");
-
-        assertTrue("Index out of sync", !anArchive.getFiles().isEmpty() && anArchive.isIndexed());
-        List files = anArchive.getFiles();
-        for (int i = 0; i < files.size(); i++) {
-            File aFile = (File) files.get(i);
-            assertTrue("Index out of whack; containment should be true", anArchive.containsFile(aFile.getURI()));
-            assertTrue("Adapter should be attached to aFile", !isEmpty(aFile.eAdapters()));
-        }
-
-        List filesToAdd = getArchiveFactory().openReadOnlyDirectory(AutomatedBVT.baseDirectory + "WarTestClasses").getFilesRecursive();
-        List addedFiles = anArchive.addCopyFiles(filesToAdd);
-
-        assertTrue("Files added incorrectly", !filesToAdd.isEmpty() && filesToAdd.size() == addedFiles.size());
-
-        for (int i = 0; i < addedFiles.size(); i++) {
-            File aFile = (File) addedFiles.get(i);
-            assertTrue("Contains should be true", anArchive.containsFile(aFile.getURI()));
-            assertTrue("Should be same instance", anArchive.getFile(aFile.getURI()) == aFile);
-            assertTrue("Adapter should be attached to aFile", !isEmpty(aFile.eAdapters()));
-        }
-        anArchive.getFiles().removeAll(addedFiles);
-
-        for (int i = 0; i < addedFiles.size(); i++) {
-            File aFile = (File) addedFiles.get(i);
-            assertTrue("Adapter should not be attached to aFile", isEmpty(aFile.eAdapters()));
-            assertTrue("Contains should return false", !anArchive.containsFile(aFile.getURI()));
-        }
-        getArchiveFactory().closeOpenArchives();
-    }
-    /**
-     * Very basic method to open an archive and save it as a directory to a new destination.  Requires visual inspection
-     * for verification.  Nested jars will not be exploded
-     */
-    public void testOpenAndExtract1() throws Exception {
-
-        String in = AutomatedBVT.baseDirectory + "sample.ear";
-        EARFile earFile = (EARFile) getArchiveFactory().openArchive(in);
-        //System.out.println("EAR spec version " + earFile.getSpecVersion() + " detected.");
-
-        String out = AutomatedBVT.baseDirectory + "testOutput/SimpleTests/sample-expanded-out1.ear";
-        earFile.extractTo(out, Archive.EXPAND_NONE);
-        earFile.close();
-    }
-    /**
-     * Very basic method to open an archive and save it as a directory to a new destination.  Requires visual inspection
-     * for verification.  Nested wars will be exploded but other nested jars will not.  This method emulates the websphere install.
-     * the archive is opened as read only; test that no temp files are created by putting a breakpoint in ArchiveUtil#createTempFile(String, File)
-     * Also the archive is opened with java reflection disabled.  Verify no reflection occurs by putting a breakpoints in the constructors
-     * of JavaJDKAdapterFactory, and the method reflectValues() in each of the subclasses of JdkAdaptor.
-     */
-    public void testOpenAndExtract2() throws Exception {
-
-        String in = AutomatedBVT.baseDirectory + "sample.ear";
-        ArchiveOptions options = new ArchiveOptions();
-        options.setIsReadOnly(true);
-        options.setUseJavaReflection(false);
-        EARFile earFile = (EARFile) getArchiveFactory().openArchive(options, in);
-        //The following code forces the load of all the deployment descriptors, just to make sure java reflection doesn't happen
-        List moduleRefs = earFile.getModuleRefs();
-        for (int i = 0; i < moduleRefs.size(); i++) {
-            ModuleRef m = (ModuleRef) moduleRefs.get(i);
-            m.getDeploymentDescriptor();
-            
-        }
-
-        String out = "testOutput/SimpleTests/sample-expanded-out2.ear";
-        earFile.extractTo(out, Archive.EXPAND_WAR_FILES);
-        earFile.close();
-    }
-    /**
-     * Very basic method to open an archive and save it as a directory to a new destination.  Requires visual inspection
-     * for verification.  Nested wars and ejb jars will be exploded but other nested jars will not
-     */
-    public void testOpenAndExtract3() throws Exception {
-
-        String in = AutomatedBVT.baseDirectory + "sample.ear";
-        EARFile earFile = (EARFile) getArchiveFactory().openArchive(in);
-        String out = AutomatedBVT.baseDirectory + "testOutput/SimpleTests/sample-expanded-out3.ear";
-        earFile.extractTo(out, Archive.EXPAND_WAR_FILES | Archive.EXPAND_EJBJAR_FILES);
-        earFile.close();
-    }
-    /**
-     * Opens an ear file, and for each module, writes it's dd components to the console.  Requires visual inspection
-     * for verification
-     */
-    public void testOpenAndRead() throws Exception {
-
-        String in = AutomatedBVT.baseDirectory + "sample.ear";
-        EARFile earFile = (EARFile) getArchiveFactory().openArchive(in);
-
-        Application appl = earFile.getDeploymentDescriptor();
-        printApplToConsole(appl);
-
-        List moduleRefs = earFile.getModuleRefs();
-
-        for (int i = 0; i < moduleRefs.size(); i++) {
-            ModuleRef aModuleRef = (ModuleRef) moduleRefs.get(i);
-            if (aModuleRef.isWeb()) {
-                WebModuleRef wRef = (WebModuleRef) aModuleRef;
-                printWebAppToConsole(wRef.getWebApp());
-              
-            } else if (aModuleRef.isEJB()) {
-                EJBModuleRef eRef = (EJBModuleRef) aModuleRef;
-                printEJBJarToConsole(eRef.getEJBJar());
-                
-            }
-        }
-    }
-    /**
-     * Very basic method to open an archive and save it as a jar file to a new destination.  Requires visual inspection
-     * for verification
-     */
-    public void testOpenAndSaveAsJarFile() throws Exception {
-
-        String in = AutomatedBVT.baseDirectory + "sample.ear";
-        EARFile earFile = (EARFile) getArchiveFactory().openArchive(in);
-        String out = AutomatedBVT.baseDirectory + "testOutput/SimpleTests/sample-copy.ear";
-        earFile.saveAsNoReopen(out);
-    }
-    /**
-     * Test case created as a result of a defect report that currently cannot be reproduced; open an expanded ear file and save it out
-     * as a jar file
-     */
-    public void testOpenDirectoryAndSaveAsJarFile() throws Exception {
-
-        String in = AutomatedBVT.baseDirectory + "sample_expanded.ear";
-        in = new java.io.File(in).getAbsolutePath();
-        //System.out.println(in);
-        EARFile earFile = (EARFile) getArchiveFactory().openArchive(in);
-        //Added this line to see if loading the dd would make a difference
-        earFile.getDeploymentDescriptor();
-        String out = "testOutput/SimpleTests/sample-jarred.ear";
-        out = new java.io.File(out).getAbsolutePath();
-        //System.out.println(out);
-        earFile.saveAsNoReopen(out);
-    }
-    /**
-     * @see Archive#canClose()
-     */
-    public void testSafeClose() throws Exception {
-
-        String in = AutomatedBVT.baseDirectory + "sample.ear";
-        EARFile earFile = getArchiveFactory().openEARFile(in);
-        List modules = earFile.getDeploymentDescriptor().getModules();
-        EJBJarFile ejbJarFile = null;
-
-        for (int i = 0; i < modules.size(); i++) {
-            Module aModule = (Module) modules.get(i);
-            if (aModule.isEjbModule()) {
-                ejbJarFile = (EJBJarFile) earFile.getFile(aModule.getUri());
-                //System.out.println("EJBJar spec version " + ejbJarFile.getSpecVersion() + " detected.");
-
-                break;
-            }
-        }
-
-        assertTrue("EJBJarFile should not be null", ejbJarFile != null);
-
-        EARFile newEarFile = getArchiveFactory().createEARFileInitialized("testOutput/SimpleTests/safeClose1.ear");
-        newEarFile.addCopy(ejbJarFile);
-        assertTrue(!earFile.getDependentOpenArchives().isEmpty() && !ejbJarFile.getDependentOpenArchives().isEmpty());
-
-        newEarFile.save();
-        assertTrue(earFile.getDependentOpenArchives().isEmpty() && ejbJarFile.getDependentOpenArchives().isEmpty());
-        earFile.close();
-        newEarFile.close();
-    }
-    /**
-     * CMVC defect 99544 - If a save fails and the file didn't exist, one should not
-     * be created
-     */
-    public void testSaveFailure() throws Exception {
-
-        String in = AutomatedBVT.baseDirectory + "sample.ear";
-        String out = AutomatedBVT.baseDirectory + "testOutput/SimpleTests/saveFailure.ear";
-        EARFile earFile = getArchiveFactory().openEARFile(in);
-        List modules = earFile.getDeploymentDescriptor().getModules();
-        EJBJarFile ejbJarFile = null;
-
-        for (int i = 0; i < modules.size(); i++) {
-            Module aModule = (Module) modules.get(i);
-            if (aModule.isEjbModule()) {
-                ejbJarFile = (EJBJarFile) earFile.getFile(aModule.getUri());
-                break;
-            }
-        }
-
-        assertTrue("EJBJarFile should not be null", ejbJarFile != null);
-
-        EARFile newEarFile = getArchiveFactory().createEARFileInitialized(out);
-        newEarFile.addCopy(ejbJarFile);
-        ejbJarFile.close();
-        try {
-            newEarFile.save();
-        } catch (SaveFailureException expected) {
-            System.out.println("Expected save failure occurred");
-            return;
-        } finally {
-            assertTrue("File should not exist", !(new java.io.File(out).exists()));
-            getArchiveFactory().closeOpenArchives();
-        }
-        assertTrue("Save should have failed", false);
-    }
-    /**
-     * Opens an ear file, makes a few changes to ensure the xml is not valid, and validates the xml in all the dds; verifies that
-     * sax exceptions are collected
-     */
-    public void testXmlValidation() throws Exception {
-
-        String in = AutomatedBVT.baseDirectory + "sample.ear";
-        EARFile earFile = getArchiveFactory().openEARFile(in);
-
-        Application appl = earFile.getDeploymentDescriptor();
-        appl.getSecurityRoles().add(CommonPackage.eINSTANCE.getCommonFactory().createSecurityRole());
-
-        List moduleFiles = earFile.getModuleFiles();
-
-        for (int i = 0; i < moduleFiles.size(); i++) {
-            ModuleFile aModuleFile = (ModuleFile) moduleFiles.get(i);
-            if (aModuleFile.isWARFile()) {
-                WARFile aWarFile = (WARFile) aModuleFile;
-                aWarFile.getDeploymentDescriptor().getServlets().add(WebapplicationPackage.eINSTANCE.getWebapplicationFactory().createServlet());
-            } else if (aModuleFile.isEJBJarFile()) {
-                EJBJarFile anEjbJarFile = (EJBJarFile) aModuleFile;
-                anEjbJarFile.getDeploymentDescriptor().getEnterpriseBeans().add(EjbPackage.eINSTANCE.getEjbFactory().createEntity());
-                anEjbJarFile.getDeploymentDescriptor().getAssemblyDescriptor().getSecurityRoles().add(CommonPackage.eINSTANCE.getCommonFactory().createSecurityRole());
-            }
-        }
-        Command cmd = new ValidateXmlCommand(earFile);
-        cmd.execute();
-        List errors = (List) cmd.getResult();
-        assertTrue("Total validation errors should be 3, instead of "+errors.size(), errors.size() == 3);
-        for (int i = 0; i < 3; i++) {
-            XmlValidationResult result = (XmlValidationResult) errors.get(i);
-            if (i == 1)
-                assertTrue("The ejb module should have 2 errors instead of "+ result.getCaughtExceptions().size(), result.getCaughtExceptions().size() == 2);
-            else
-                assertTrue("The web module should have 1 error instead of "+ result.getCaughtExceptions().size(), result.getCaughtExceptions().size() == 1);
-        }
-        earFile.close();
-    }
-    protected void setUp() throws Exception {
-        super.setUp();
-        ArchiveInit.init();
-    }
-    
-   	public void testReadEmptyTags() throws Exception {
-   		String uri = AutomatedBVT.baseDirectory + "CHKJ280X.jar";
-   		EJBJarFile jarfile = getArchiveFactory().openEJBJarFile(uri);
-   		EJBJar jar = jarfile.getDeploymentDescriptor();
-   		Session sess = (Session) jar.getEnterpriseBeans().get(0);
-   		Entity entity = (Entity) jar.getEnterpriseBeans().get(1);
-   		assertFalse("Value should be unset", entity.isSetReentrant());
-		assertFalse("Value should be unset", sess.isSetSessionType());
-		assertFalse("Value should be unset", sess.isSetTransactionType()); 
-}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/TestInvalidXmlMultiplicity.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/TestInvalidXmlMultiplicity.java
deleted file mode 100644
index d62ec7d..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/TestInvalidXmlMultiplicity.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Created on Dec 2, 2003
- *
- */
-package org.eclipse.jst.j2ee.archive.test;
-
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.jst.j2ee.commonarchivecore.internal.WARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.DeploymentDescriptorLoadException;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-import org.eclipse.jst.j2ee.internal.IWrappedException;
-
-
-/**
- * @author schacher
- */
-public class TestInvalidXmlMultiplicity extends AbstractArchiveTest {
-
-	/**
-	 * @param name
-	 */
-	public TestInvalidXmlMultiplicity(String name) {
-		super(name);
-	}
-
-	/**
-	 * Starts the application.
-	 * @param args an array of command-line arguments
-	 */
-	public static void main(java.lang.String[] args) {
-		String[] className = { "com.ibm.etools.archive.test.TestInvalidXmlMultiplicity", "-noloading" };
-		TestRunner.main(className);
-	}
-	
-	public static junit.framework.Test suite() {
-		return new TestSuite(TestInvalidXmlMultiplicity.class);
-	}
-	
-	public void test1() throws Exception {
-		String uri =  AutomatedBVT.baseDirectory + "BadJspConfig.war";
-		runTest(uri);
-	}
-	
-	public void test2() throws Exception {
-		String uri =  AutomatedBVT.baseDirectory + "BadLoginConfig.war";
-		runTest(uri);
-	}
-	
-	public void test3() throws Exception {
-		String uri =  AutomatedBVT.baseDirectory + "BadSessionConfig.war";
-		runTest(uri);
-	}
-	
-	public void runTest(String uri) throws Exception {
-		IWrappedException ex = null;
-		WARFile war = getArchiveFactory().openWARFile(uri);
-		try {
-			war.getDeploymentDescriptor();
-		} catch (DeploymentDescriptorLoadException ddex) {
-			ex = (IWrappedException) ddex;
-		}
-		assertNotNull("Exception should have been caught", ex);
-		Exception inner = ex.getNestedException();
-		
-		while (ex != null) {
-			if (inner instanceof IWrappedException) {
-				ex = (IWrappedException)inner;
-				if (ex.getNestedException() != null)
-					inner = ex.getNestedException();
-			} else 
-				ex = null;
-		}
-		
-		assertTrue("The exception should be an IllegalStateException", inner instanceof IllegalStateException);
-		war.close();
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/TestModuleClassLoading.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/TestModuleClassLoading.java
deleted file mode 100644
index 13eccd7..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/TestModuleClassLoading.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package org.eclipse.jst.j2ee.archive.test;
-
-import java.util.List;
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.jem.java.JavaClass;
-import org.eclipse.jem.java.impl.JavaClassImpl;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.impl.CommonarchiveFactoryImpl;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-
-
-public class TestModuleClassLoading extends TestCase {
-    static String testClass = "client.Subtract";
-    
-    
-    
-    /**
-     * 
-     */
-    public TestModuleClassLoading() {
-        super();
-    }
-
-    public TestModuleClassLoading(String name) {
-        super(name);
-    }
-
-	public CommonarchiveFactory getArchiveFactory() {
-		return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-	}
-	/**
-	 * Starts the application.
-	 * @param args an array of command-line arguments
-	 */
-	public static void main(java.lang.String[] args) {
-		String[] className = {"com.ibm.etools.archive.test.TestModuleClassLoading", "-noloading"};
-		TestRunner.main(className);
-	}
-	public static junit.framework.Test suite() {
-		return new TestSuite(TestModuleClassLoading.class);
-	}
-    public static void testAddModuleClassLoading() throws Exception {
-		String[] files = { "PROTO.ear","SEIinAnotherJar.ear", "SEIinWEB-INF_lib_jar.ear" };
-
-        if (files.length == 0) {
-            System.out.println("Usage: args specify full path to ear files.");
-        }
-        
-       // com.ibm.websphere.models.config.init.ConfigInit.init();
-        for (int i = 0; i < files.length; i++) {
-            String filename = files[i];   
-			CommonarchiveFactory factory = CommonarchiveFactoryImpl.getActiveFactory();
-
-			String in = AutomatedBVT.baseDirectory + files[i];
-            try {
-				EARFile earFile = factory.openEARFile (in);
-				System.out.println ("uri: " + earFile.getURI());
-				System.out.println("Testing " + earFile.getURI());
-                doModules(earFile);
-            } catch (Exception e) {
-                System.out.println(e);
-            }
-        }
-    }
-    
-    
-
-	public static void doModules(EARFile earFile) {
-		List modules = earFile.getModuleFiles();
-		for (int i = 0; i < modules.size(); i++) {
-			Archive module = (Archive) modules.get(i);
-			System.out.print("\tLooking for class " + testClass + " in module " + module.getURI());
-			doLoad(module, testClass);
-		}
-	} // validateModules
-
-	private static void doLoad(Archive module, String testClass) {
-		try {
-			JavaClass javaClass =
-				(JavaClass) JavaClassImpl.reflect(testClass, module.getResourceSet());
-			if (!((JavaClass) javaClass).isExistingType()) {
-				// This is what happens if the class can't be loaded.
-				System.out.println("- NOT FOUND - isExistingType returns false.");
-			} else {
-				System.out.println(" - found: isExistingType returns true.");
-			}
-		} catch (RuntimeException e) {
-			e.printStackTrace();
-		}
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/WARFileTests.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/WARFileTests.java
deleted file mode 100644
index b7c126e..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/test/WARFileTests.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.eclipse.jst.j2ee.archive.test;
-
- /*
- * Licensed Material - Property of IBM
- * (C) Copyright IBM Corp. 2001 - All Rights Reserved.
- * US Government Users Restricted Rights - Use, duplication or disclosure
- * restricted by GSA ADP Schedule Contract with IBM Corp.
- */
-
-import java.util.List;
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import junit.swingui.TestRunner;
-
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.File;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.ReadOnlyDirectory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.WARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveConstants;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.util.ArchiveUtil;
-import org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT;
-
-/**
- * Insert the type's description here.
- * Creation date: (12/15/00 2:26:04 PM)
- * @author: Administrator
- */
-public class WARFileTests extends TestCase {
-	private final static String copyright = "(c) Copyright IBM Corporation 2001.";//$NON-NLS-1$
-/**
- * WARFileTests constructor comment.
- * @param name java.lang.String
- */
-public WARFileTests(String name) {
-	super(name);
-}
-public CommonarchiveFactory getArchiveFactory() {
-	return CommonarchivePackage.eINSTANCE.getCommonarchiveFactory();
-}
-/**
- * Starts the application.
- * @param args an array of command-line arguments
- */
-public static void main(java.lang.String[] args) {
-	String[] className = {"com.ibm.etools.archive.test.WARFileTests", "-noloading"};
-	TestRunner.main(className);
-}
-public static junit.framework.Test suite() {
-	return new TestSuite(WARFileTests.class);
-}
-public void testAddCopyClass() throws Exception {
-
-	WARFile aWarFile = (WARFile)getArchiveFactory().openArchive(AutomatedBVT.baseDirectory +"example2.war");
-
-	ReadOnlyDirectory sampleDirectory = getArchiveFactory().openReadOnlyDirectory(AutomatedBVT.baseDirectory +"WarTestClasses");
-
-	int initialSize = aWarFile.getClasses().size();
-
-	File aFile = sampleDirectory.getFileInSelfOrSubdirectory("com/ibm/etools/archive/test/WARFileTests.class");
-
-	aWarFile.addCopyClass(aFile);
-	assertTrue(aWarFile.getClasses().size() == initialSize+1);
-
-	String classURI = ArchiveUtil.concatUri(ArchiveConstants.WEBAPP_CLASSES_URI, aFile.getURI(), '/');
-	assertTrue(aWarFile.containsFile(classURI));
-	//System.out.println(aWarFile.getURI()+" contains class "+classURI);
-
-	aWarFile.saveAsNoReopen(AutomatedBVT.baseDirectory +"testOutput/WarTests/addCopyClass.war");
-
-}
-	
-public void testAddCopyLib() throws Exception {
-
-	WARFile aWarFile = (WARFile)getArchiveFactory().openArchive(AutomatedBVT.baseDirectory + "example2.war");
-
-	Archive lib = getArchiveFactory().openArchive(AutomatedBVT.baseDirectory + "foo.jar");
-
-	int initialSize = aWarFile.getLibs().size();
-
-	aWarFile.addCopyLib(lib);
-	assertTrue(aWarFile.getLibs().size() == initialSize+1);
-
-	String libURI = ArchiveUtil.concatUri(ArchiveConstants.WEBAPP_LIB_URI, lib.getURI(), '/');
-	assertTrue(aWarFile.containsFile(libURI));
-	//System.out.println(aWarFile.getURI()+" contains lib "+libURI);
-
-	aWarFile.saveAsNoReopen("testOutput/WarTests/addCopyLib.war");
-
-}
-	
-public void testListClassesAndLibs() throws Exception {
-
-	WARFile aWarFile = (WARFile)getArchiveFactory().openArchive(AutomatedBVT.baseDirectory + "example2.war");
-
-	List libs = aWarFile.getLibs();
-	List classes = aWarFile.getClasses();
-	List resources = aWarFile.getResources();
-//	System.out.println("WAR spec version "+aWarFile.getSpecVersion()+" detected.");
-//	System.out.println("example2.war contains "+classes.size()+ " files in classes");
-//	System.out.println("example2.war contains "+libs.size()+ " libs");
-//	System.out.println("example2.war contains "+resources.size()+ " resources");
-
-}
-	
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/testutilities/EAttributeDescriptor.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/testutilities/EAttributeDescriptor.java
deleted file mode 100644
index d850078..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/testutilities/EAttributeDescriptor.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Created on May 1, 2003
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.jst.j2ee.archive.testutilities;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EStructuralFeature;
-
-/**
- * @author administrator
- *
- * To change the template for this generated type comment go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-public class EAttributeDescriptor {
-	
-	EStructuralFeature feature;
-	EClass metaClass;
-	
-	/**
-	 * 
-	 */
-	public EAttributeDescriptor(EStructuralFeature feature, EClass metaClass) {
-		this.feature = feature;
-		this.metaClass = metaClass;
-	}
-
-	/**
-	 * @return
-	 */
-	public EClass getMetaClass() {
-		return metaClass;
-	}
-
-	/**
-	 * @param class1
-	 */
-	public void setMetaClass(EClass class1) {
-		metaClass = class1;
-	}
-	
-	public boolean equals(Object object) {
-		EAttributeDescriptor o = (EAttributeDescriptor)object;
-		return o.getFeature() == getFeature() && o.getMetaClass() == getMetaClass();
-	}
-
-	public int hashCode() {
-		return feature.hashCode() ^ metaClass.hashCode();
-	}
-
-
-	/**
-	 * @return
-	 */
-	public EStructuralFeature getFeature() {
-		return feature;
-	}
-
-	/**
-	 * @param attribute
-	 */
-	public void setFeature(EAttribute attribute) {
-		this.feature = attribute;
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/testutilities/EMFAttributeFeatureGenerator.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/testutilities/EMFAttributeFeatureGenerator.java
deleted file mode 100644
index 233ae2d..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/testutilities/EMFAttributeFeatureGenerator.java
+++ /dev/null
@@ -1,413 +0,0 @@
-package org.eclipse.jst.j2ee.archive.testutilities;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EClassifier;
-import org.eclipse.emf.ecore.EEnum;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.EcorePackage;
-import org.eclipse.jem.java.impl.JavaClassImpl;
-import org.eclipse.jst.j2ee.common.CommonPackage;
-import org.eclipse.jst.j2ee.ejb.EjbPackage;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationPackage;
-
-public class EMFAttributeFeatureGenerator {
-	public static String avClass[];
-	protected static int count = 0;
-	protected static Random randomGenerator = new Random();
-	protected static int maxNumberOfProjectsCreated = 1000;
-	protected static Map enumMap = new HashMap();
-	protected static int paramCount;
-	protected static String[] langArray = new String[] { "EN","FR","DE","JP","CN","BR","SP"};
-	protected static int langCount = 0;  
-	protected static Map booleanMap = new HashMap();
-	protected static Map attIndex = new HashMap();
-	protected static boolean specialNumberGen = false;
-	protected static String httpArray[] = null;
-	protected static int httpArrayIndex = 0;
-	
-	public static int version;
-	public static int moduleType;
-	//static versions
-	public static final int VERSION_1_2 = 0;
-	public static final int VERSION_1_3 = 1;
-	public static final int VERSION_1_4 = 2;
-
-	public static final int APPICATION = 0;
-	public static final int APP_CLIENT = 1;
-	public static final int CONNECTOR = 2;
-	public static final int EJB = 3;
-	public static final int WEB = 4;
-	
-    public EMFAttributeFeatureGenerator() {
-        super();
-    }
-    
-    public static void resetCount() {
-    	count = 0;
-    	return;
-    }
-	public static Object createAttribute(EAttribute att, EObject obj){
-		return createAttribute(new EAttributeDescriptor(att,obj.eClass()));
-	}
-	
-	public static Object createAttribute(EAttribute att, EClass eClass){
-		return createAttribute(new EAttributeDescriptor(att,eClass));
-	}
-	
-	public static Object createAttribute(EAttribute att, EObject obj, boolean special){
-		specialNumberGen = special;
-		return createAttribute(new EAttributeDescriptor(att,obj.eClass()));
-	}
-			
-	public static Object createAttribute(EAttribute att, EObject obj,  boolean special, int ver, int modType) {
-	   specialNumberGen = special;
-	   version = ver;
-	   moduleType = modType;
-	   return createAttribute(new EAttributeDescriptor(att,obj.eClass()));
-   }
-
-    protected static Object createAttribute(EAttributeDescriptor att) {
-		EClassifier meta = att.getFeature().getEType();
-		if (meta instanceof EEnum && att.getFeature().isMany()){
-			List collection = new ArrayList();
-			collection.add(createEnum(att));
-			return collection;
-		}
-		else if (meta instanceof EEnum)
-			return createEnum(att);
-		else if ((version == VERSION_1_3 || version == VERSION_1_2) && att.getFeature().equals(WebapplicationPackage.eINSTANCE.getHTTPMethodType_HttpMethod()))
-			return createSpecialHttpMethodsFor13();
-		else if (version == VERSION_1_3 && att.getFeature().equals(CommonPackage.eINSTANCE.getEJBLocalRef_Local()))
-			return generateRandomAttributeString(new EAttributeDescriptor(CommonPackage.eINSTANCE.getEjbRef_Remote(), att.getMetaClass()));
-		else if (version == VERSION_1_3 && att.getFeature().equals(CommonPackage.eINSTANCE.getEJBLocalRef_LocalHome()))
-			return generateRandomAttributeString(new EAttributeDescriptor(CommonPackage.eINSTANCE.getEjbRef_Home(),att.getMetaClass()));
-		else if (att.getFeature().getName().equals("parms"))
-			return createParams(att);
-		else if (att.getFeature().getName().startsWith("location") && version == VERSION_1_4)
-			return createLocation(att);
-		else if (att.getFeature().getName().startsWith("locale") && version == VERSION_1_4)
-			return createLocale();
-		else if (att.getFeature().getName().equals("lang"))
-			return createLang(att);
-		else if (att.getFeature().getName().equals("version"))
-			if (att.getFeature() == EjbPackage.eINSTANCE.getContainerManagedEntity_Version()) 
-				return "2.x";
-			else
-				return createVersion(att);
-		else if (att.getFeature().getName().equals("mimeType") && version == VERSION_1_4)
-			return "text/plain";
-		else if (att.getFeature().getName().equals("errorCode") && version == VERSION_1_4)
-			return "404";
-		else if (att.getFeature().getName().equals("formLoginPage") && version == VERSION_1_4)
-			return "/testFormLoginPage";
-		else if (att.getFeature().getName().equals("formErrorPage") && version == VERSION_1_4)
-			return "/testFormErrorpage";
-		else if(att.getFeature().getName().equals("link") && version == VERSION_1_4)
-			return "roleName_0";
-		else if(att.getFeature().getName().equals("specVersion") && version == VERSION_1_4)
-			return "1.5";
-		else if (att.getFeature().isMany())
-			return createCollection(att);
-		switch (meta.getClassifierID()) {
-			case EcorePackage.ESTRING:
-				return generateRandomAttributeString(att);
-			case EcorePackage.EBOOLEAN_OBJECT:
-			case EcorePackage.EBOOLEAN:
-				return generateRandomBoolean(att);
-			case EcorePackage.EINTEGER_OBJECT:
-			case EcorePackage.EINT:
-				return generateRandomInteger(att);
-			case EcorePackage.EFLOAT_OBJECT:
-			case EcorePackage.EFLOAT:
-				return generateRandomFloat(att);
-			case EcorePackage.ECHARACTER_OBJECT:
-			case EcorePackage.ECHAR:
-				return generateRandomChar(att);
-			case EcorePackage.ELONG_OBJECT:
-			case EcorePackage.ELONG:
-				return generateRandomLong();
-			case EcorePackage.EBYTE_OBJECT:
-			case EcorePackage.EBYTE:
-				return generateRandomByte();
-			case EcorePackage.EDOUBLE_OBJECT:
-			case EcorePackage.EDOUBLE:
-				return generateRandomDouble();
-			case EcorePackage.ESHORT_OBJECT:
-			case EcorePackage.ESHORT:
-				return generateRandomShort(att);
-			case EcorePackage.EJAVA_OBJECT:
-				return generateRandomObject(att);
-			}
-		return null;
-    }
-
-	/**
-     * @return
-     */
-    private static Object createLocale() {
-        return "en_US";
-    }
-
-    /**
-     * @param att
-     * @return
-     */
-    private static Object createLocation(EAttributeDescriptor att) {
-        String temp = generateRandomAttributeString(att);
-        return "/." + temp;
-    }
-
-    public static EObject createJavaClassProxy(EStructuralFeature ref, EObject eObject) {
-		if (avClass == null) {
-			avClass = new String[] { "java.util.HashTable", "java.util.List", "java.sql.Data", "java.lang.Integer", "java.lang.String" };
-		}
-		EAttributeDescriptor feature = new EAttributeDescriptor(ref,eObject.eClass());
-		if (!attIndex.containsKey(feature))
-			attIndex.put(feature, new Integer(0));
-		int classIndex = ((Integer)attIndex.get(feature)).intValue();
-		String name = avClass[classIndex];
-		classIndex++;
-		if (classIndex == 5)
-			classIndex = 0;
-		attIndex.put(feature,new Integer(classIndex));
-		return JavaClassImpl.createClassRef(name);
-	}
-	/**
-	 * @return
-	 */
-	protected static Object createSpecialHttpMethodsFor13() {
-		if (httpArray == null)
-			httpArray = new String[] {
-				"GET",
-				"POST",
-				"PUT",
-				"DELETE",
-				"HEAD",
-				"OPTIONS",
-				"TRACE"
-			};
-		if (httpArrayIndex >= httpArray.length)
-			httpArrayIndex = 0;
-		Object holder = httpArray[httpArrayIndex]; 	
-		httpArrayIndex++;
-		return holder;
-	}
-
-	/**
-     * @param att
-     * @return
-     */
-    protected static String createVersion(EAttributeDescriptor att) {
-		String versionHolder = "";
-		switch (moduleType) {
-		case APPICATION :
-			if(version == VERSION_1_2) {
-				versionHolder = "1.2";
-				break;
-			}
-			else if(version == VERSION_1_3){
-				versionHolder = "1.3";
-				break;
-			}
-			else {
-				versionHolder = "1.4";
-				break;
-			}
-		case APP_CLIENT :
-			if(version == VERSION_1_2) {
-				versionHolder = "1.2";
-				break;
-			}
-			else if(version == VERSION_1_3) {
-				versionHolder = "1.3";
-				break;
-			}
-			else {
-				versionHolder = "1.4";
-				break;
-			}
-		case EJB :
-			if(version == VERSION_1_2) {
-				versionHolder = "1.1";
-				break;
-			}
-			else if(version == VERSION_1_3) {
-				versionHolder = "2.0";
-				break;
-			}
-			else {
-				versionHolder = "2.1";
-				break;
-			}
-		case CONNECTOR :
-			if(version == VERSION_1_2) {
-				versionHolder = "1.0";
-				break;
-			}
-			else if(version == VERSION_1_3) {
-				versionHolder = "1.0";
-				break;
-			}
-			else { 
-				versionHolder = "1.5";
-				break;
-			}
-		case WEB :
-			if(version == VERSION_1_2) {
-				versionHolder = "2.2";
-				break;
-			}
-			else if(version == VERSION_1_3) {
-				versionHolder = "2.3";
-				break;
-			}
-			else { 
-				versionHolder = "2.4";
-				break;
-			}
-		}
-		
-		return versionHolder;
-    }
-
-    protected static Object createParams(EAttributeDescriptor att) {
-		if (paramCount == 0){
-			paramCount++;
-			return null;
-		}
-		else if (paramCount == 1){
-			paramCount++;
-			return "";
-		}
-		String r = "";
-		for (int i = 1 ; i < paramCount ;i++){
-			r += generateRandomAttributeString(att) + " ";
-		}
-		paramCount++;
-		if (paramCount == 5)
-			paramCount = 0;
-		return r;
-		
-	}
-
-
-	protected static Object createLang(EAttributeDescriptor att) {
-		String name = langArray[langCount];
-		langCount++;
-		if (langCount == 7)
-			langCount = 0;
-		return name;
-	}
-
-	protected static Object createCollection(EAttributeDescriptor att) {
-		ArrayList list = new ArrayList();
-		list.add(generateRandomAttributeString(att));
-		return list;
-	}
-
-
-	protected static Object generateRandomObject(EAttributeDescriptor att) {
-	    return generateRandomAttributeString(att);
-	}
-
-	protected static Object createEnum(EAttributeDescriptor att) {
-		EEnum anEnum = (EEnum) att.getFeature().getEType();
-		if (!enumMap.containsKey(att)){
-			if (att.getFeature().getName().equals("authMethod"))
-				enumMap.put(att,new Integer(1));
-			else 
-				enumMap.put(att,new Integer(0));
-		}
-		int pos = ((Integer)enumMap.get(att)).intValue();
-		EList literals = anEnum.getELiterals();
-		int size = literals.size();
-		if (pos == size)
-			pos = 0;
-		Object holder = anEnum.getEEnumLiteral(pos).getInstance();
-		pos++;
-		enumMap.put(att,new Integer(pos));
-		return holder;
-	    
-	}
-	public static Object generateRandomClassname(EAttributeDescriptor att) {
-		return "com.foo." + generateRandomAttributeString(att);
-	}
-
-	//REVISIT
-    protected static Object generateRandomShort(EAttributeDescriptor att) {
-        return new Short(generateRandomAttributeString(att));
-    }
-
-    protected static Object generateRandomDouble() {
-        return new Double(randomGenerator.nextDouble());
-    }
-	//REVISIT
-    protected static Object generateRandomByte() {
-        return new Byte("byte");
-    }
-
-    protected static Object generateRandomLong() {
-        return new Long(randomGenerator.nextLong());
-    }
-
-    protected static Object generateRandomChar(EAttributeDescriptor att) {
-        return new Character(generateRandomAttributeString(att).charAt(0));
-    }
-
-
-    protected static Object generateRandomFloat(EAttributeDescriptor att) {
-        return new Float(randomGenerator.nextFloat());
-    }
-
-    protected static Object generateRandomInteger(EAttributeDescriptor att) {
-    	return new Integer(generateNumber(att));
-    }
-    
-    
-    protected static Object generateRandomBoolean(EAttributeDescriptor att) {
-		if (!booleanMap.containsKey(att)){
-			booleanMap.put(att,new Boolean(true));
-		}
-		Boolean holder = (Boolean)booleanMap.get(att);
-		booleanMap.put(att, new Boolean(!holder.booleanValue()));
-		return holder;
-    }
-
-    public static String generateRandomAttributeString(EAttributeDescriptor att) {
-		return att.getFeature().getName() + "_" + generateNumber(att);
-	}
-	protected static int generateNumber(EAttributeDescriptor att) {
-		if(!specialNumberGen)
-			return count ++;
-		else{
-			if(!attIndex.containsKey(att))
-				attIndex.put(att, new Integer(0));
-			int holder = ((Integer) attIndex.get(att)).intValue();
-			attIndex.put(att, new Integer(holder+1));
-			return holder;
-		}
-	}
-
-	public static void reset(){
-		count = 0;
-		enumMap = new HashMap();
-		httpArrayIndex = 0;
-		paramCount = 0;
-		langCount = 0;  
-		booleanMap = new HashMap();
-		attIndex = new HashMap();
-		specialNumberGen = false;
-		TestUtilities.reset();
-		J2EEVersionCheck.cur_Tags = null;
-
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/testutilities/J2EEVersionCheck.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/testutilities/J2EEVersionCheck.java
deleted file mode 100644
index d811367..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/testutilities/J2EEVersionCheck.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Created on Apr 14, 2003
- *
- * To change this generated comment go to 
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.jst.j2ee.archive.testutilities;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.jst.j2ee.application.ApplicationPackage;
-import org.eclipse.jst.j2ee.client.ClientPackage;
-import org.eclipse.jst.j2ee.common.CommonPackage;
-import org.eclipse.jst.j2ee.ejb.EjbPackage;
-import org.eclipse.jst.j2ee.jca.JcaPackage;
-import org.eclipse.jst.j2ee.webapplication.WebapplicationPackage;
-
-public class J2EEVersionCheck {
-	public int version;
-	//static versions
-	public static final int VERSION_1_2 = 0;
-	public static final int VERSION_1_3 = 1;
-	public static final int VERSION_1_4 = 2;
-	
-	//modules
-	public static final int APPICATION = 0;
-	public static final int APP_CLIENT = 1;
-	public static final int CONNECTOR = 2;
-	public static final int EJB = 3;
-	public static final int WEB = 4;
-
-	public static List cur_Tags;
-	private static CommonPackage COM = CommonPackage.eINSTANCE;
-
-    public J2EEVersionCheck() {
-        super();
-    }
-	public static boolean checkAttributeVersion(EAttribute att, int version, int type){
-		//TODO: Add version 1.2 excludes
-		if(version == VERSION_1_3 || version == VERSION_1_2){
-			if(cur_Tags == null){
-				cur_Tags = new ArrayList();
-				populate_1_3List(type);
-			}
-		}
-		else if(version == VERSION_1_4){
-			return true;
-		}
-		
-		if(cur_Tags.contains(att) || cur_Tags.contains(att.getEType()))
-			return false;
-		return true;
-	}
-    
-     public static boolean checkReferenceVersion(EStructuralFeature ref, int version, int type){
-		//TODO: Add version 1.2 excludes
-		if(version == VERSION_1_3 || version == VERSION_1_2){
-			if(cur_Tags == null){
-				cur_Tags = new ArrayList();
-				populate_1_3List(type);
-			}
-		}
-		else if(version == VERSION_1_4){
-			return true;
-		}
-		
-		if(cur_Tags.contains(ref) || cur_Tags.contains(ref.getEType()))
-			return false;
-		return true;
-    }
-       
-	private static void populate_1_2List(int type) {
-		switch (type) {
-			case APPICATION :
-				populate_1_2Application();
-				break;
-			case APP_CLIENT :
-				populate_1_2AppClient();
-				break;
-			case EJB :
-				populate_1_2EJB();
-				break;
-			case CONNECTOR :
-				populate_1_2EJB();
-				break;
-			case WEB :
-				populate_1_2Web();
-			default :
-				break;
-		}
-	}
-	
-	private static void populate_1_3List(int type) {
-		switch (type) {
-			case APPICATION :
-				populate_1_3Application();
-				break;
-			case APP_CLIENT :
-				populate_1_3AppClient();
-				break;
-			case EJB :
-				populate_1_3EJB();
-				break;
-			case CONNECTOR :
-				populate_1_3EJB();
-				break;
-			case WEB :
-				populate_1_3Web();
-			default :
-				break;
-		}
-	}
-
-    private static void populate_1_2Application(){
-		populate_1_3Application();
-    }
-
-	private static void populate_1_2AppClient(){
-		populate_1_3AppClient();
-	}
-	
-	private static void populate_1_2EJB(){
-		populate_1_3EJB();
-	}
-	
-	private static void populate_1_2Connector(){
-		populate_1_3Connector();
-	}
-	
-	private static void populate_1_2Web(){
-		populate_1_3Web();
-	}
-
-	//1.3
-	private static void populate_1_3Application(){
-		CommonPackage COM = CommonPackage.eINSTANCE;
-		cur_Tags.add(COM.getIconType());
-		cur_Tags.add(COM.getDisplayName());
-		cur_Tags.add(COM.getDescription());
-		cur_Tags.add(COM.getDescriptionGroup());
-		cur_Tags.add(COM.getSecurityIdentity_Descriptions());
-		cur_Tags.add(ApplicationPackage.eINSTANCE.getApplication_Version());	
-	}
-	
-	private static void populate_1_3AppClient(){
-		cur_Tags.add(COM.getIconType());
-		cur_Tags.add(COM.getDisplayName());
-		cur_Tags.add(COM.getDescription());
-		cur_Tags.add(COM.getDescriptionGroup());
-		cur_Tags.add(ClientPackage.eINSTANCE.getApplicationClient_Version());
-		cur_Tags.add(ClientPackage.eINSTANCE.getApplicationClient_ServiceRefs());
-		cur_Tags.add(ClientPackage.eINSTANCE.getApplicationClient_MessageDestinationRefs());
-		cur_Tags.add(ClientPackage.eINSTANCE.getApplicationClient_MessageDestinations());
-		cur_Tags.add(COM.getMessageDestination());
-		cur_Tags.add(COM.getMessageDestinationRef());
-		//cur_Tags.add(ClientPackage.eINSTANCE.getApplicationClient_ServiceRefs());
-	}
-	
-	private static void populate_1_3Connector(){
-		cur_Tags.add(COM.getIconType());
-		cur_Tags.add(COM.getDisplayName());
-		cur_Tags.add(COM.getDescription());
-		cur_Tags.add(COM.getDescriptionGroup());
-		cur_Tags.add(JcaPackage.eINSTANCE.getOutboundResourceAdapter());
-		cur_Tags.add(JcaPackage.eINSTANCE.getInboundResourceAdapter());
-		cur_Tags.add(JcaPackage.eINSTANCE.getAdminObject());
-		cur_Tags.add(JcaPackage.eINSTANCE.getConnector_Version());
-	}
-	
-    private static void populate_1_3EJB() {
-		cur_Tags.add(COM.getIconType());
-		cur_Tags.add(COM.getDisplayName());
-		cur_Tags.add(COM.getDescription());
-		cur_Tags.add(COM.getDescriptionGroup());
-		cur_Tags.add(EjbPackage.eINSTANCE.getEJBJar_Version());
-		cur_Tags.add(EjbPackage.eINSTANCE.getSession_ServiceEndpoint());
-		cur_Tags.add(COM.getJNDIEnvRefsGroup_MessageDestinationRefs());
-		cur_Tags.add(COM.getJNDIEnvRefsGroup_ServiceRefs());
-		cur_Tags.add(EjbPackage.eINSTANCE.getMessageDriven_MessagingType());
-		cur_Tags.add(EjbPackage.eINSTANCE.getMessageDriven_MessageDestination());
-		cur_Tags.add(EjbPackage.eINSTANCE.getMessageDriven_Link());
-		cur_Tags.add(EjbPackage.eINSTANCE.getMessageDriven_ActivationConfig());	
-    }
-
-	private static void populate_1_3Web(){
-		cur_Tags.add(COM.getIconType());
-		cur_Tags.add(COM.getDisplayName());
-		cur_Tags.add(COM.getDescription());
-		cur_Tags.add(COM.getDescriptionGroup());
-		cur_Tags.add(WebapplicationPackage.eINSTANCE.getWebApp_Version());
-		cur_Tags.add(WebapplicationPackage.eINSTANCE.getWebApp_JspConfig());
-		cur_Tags.add(WebapplicationPackage.eINSTANCE.getWebApp_MessageDestinations());
-		cur_Tags.add(WebapplicationPackage.eINSTANCE.getWebApp_LocalEncodingMappingList());
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/testutilities/TestUtilities.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/testutilities/TestUtilities.java
deleted file mode 100644
index 5f778ec..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/archive/testutilities/TestUtilities.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Created on Apr 3, 2003
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.jst.j2ee.archive.testutilities;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.emf.ecore.EClassifier;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-
-/**
- * @author administrator
- *
- * To change the template for this generated type comment go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-public  class TestUtilities extends EcoreUtil {
-	private static Map objectMap = new HashMap();
-	private static Map subsetMap = new HashMap();
-
-	
-	/**
-		 * Returns the first collection member that {@link EClassifier#isInstance is an instance} of the type.
-		 * @param objects a collection of objects to check.
-		 * @param type the type of object to find.
-		 * @return the first object of the specified type.
-		 */
-		public static Object getObjectByType(Resource res, EClassifier type, boolean isMany) {
-			if (isMany)
-				return getContainedCollectionByType(res.getContents(), type);
-			else
-				return getContainedObjectByType(res.getContents(), type);
-		}
-
-		public static Object getContainedObjectByType(List list, EClassifier type) {
-			Object found;
-			found = getObjectsByType(list, type);
-			if (found != null && !((Collection)found).isEmpty())
-				return extractObject((List) found,type);
-
-			for (int i = 0; i < list.size(); i++) {
-				EObject obj = (EObject) list.get(i);
-				found = getContainedObjectByType(obj.eContents(), type);
-				if (found != null)
-					return found;
-			}
-
-			return null;
-		}
-
-		public static Object getContainedCollectionByType(List list, EClassifier type) {
-			List found;
-			found = (List)getObjectsByType(list, type);
-			if (found != null && !found.isEmpty())
-				return extractSubset(found, type);
-
-			for (int i = 0; i < list.size(); i++) {
-				EObject obj = (EObject) list.get(i);
-				found = (List) getContainedCollectionByType(obj.eContents(), type);
-				if (found != null)
-					return found;
-			}
-
-			return null;
-		
-		
-		
-		}
-	
-		public static List extractSubset(List found, EClassifier type) {
-			if (!subsetMap.containsKey(type)){
-				subsetMap.put(type,new Integer(1));
-			}
-			int pos = ((Integer)subsetMap.get(type)).intValue();
-		
-			if (pos == found.size())
-				pos = 1;
-			List result = new ArrayList();
-			for (int i = 0; i < pos; i++)
-				result.add(found.get(i));
-			pos++;
-			subsetMap.put(type,new Integer(pos));	
-		
-			return result;
-		}
-	
-		public static Object extractObject(List found, EClassifier type) {
-			if (!objectMap.containsKey(type)){
-				objectMap.put(type,new Integer(0));
-			}
-			int pos = ((Integer)objectMap.get(type)).intValue();
-		
-			if (pos == found.size())
-				pos = 0;
-			Object holder = found.get(pos);
-			pos++;
-			objectMap.put(type,new Integer(pos));	
-		
-			return holder;
-		}
-
-	public static void reset(){
-		subsetMap.clear();
-		objectMap.clear();
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/core/tests/bvt/AutomatedBVT.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/core/tests/bvt/AutomatedBVT.java
deleted file mode 100644
index 740689a..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/core/tests/bvt/AutomatedBVT.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Created on Apr 1, 2003
- *
- * To change this generated comment go to 
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.jst.j2ee.core.tests.bvt;
-
-import java.net.URL;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jst.j2ee.archive.emftests.AllTests;
-
-
-/**
- * @author jsholl
- *
- * To change this generated comment go to 
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-public class AutomatedBVT extends TestSuite {
-
-    public static String baseDirectory = System.getProperty("user.dir") + java.io.File.separatorChar + "commonArchiveResources" + java.io.File.separatorChar;
-    
-    static {
-        try {
-            IPluginDescriptor pluginDescriptor = Platform.getPluginRegistry().getPluginDescriptor("org.eclipse.jst.j2ee.core.tests");
-            URL url = pluginDescriptor.getInstallURL(); 
-        	AutomatedBVT.baseDirectory = Platform.asLocalURL(url).getFile() + "commonArchiveResources"+ java.io.File.separatorChar;
-		} catch (Exception e) { 
-			System.err.println("Using working directory since a workspace URL could not be located.");
-		} 
-    }
-
-    public static int unimplementedMethods;
-
-    public static void main(String[] args) {
-        unimplementedMethods = 0;
-        TestRunner.run(suite());
-        if (unimplementedMethods > 0) {
-            System.out.println("\nCalls to warnUnimpl: " + unimplementedMethods);
-        }
-    }
-
-    public AutomatedBVT() {
-        super();
-        TestSuite suite = (TestSuite) AutomatedBVT.suite();
-        for (int i = 0; i < suite.testCount(); i++) {
-            addTest(suite.testAt(i));
-        }
-    }
-
-    public static Test suite() {
-        TestSuite suite = new TestSuite("Test for org.eclipse.jst.j2ee.core.bvt");
-        //$JUnit-BEGIN$
-        //TODO: Make the Archive Test Work
-       // suite.addTest(AllArchiveTestsJava.suite());
-        suite.addTest(AllTests.suite());
-        //suite.addTest(AllJavaTestsJava.suite());
-        //$JUnit-END$
-        return suite;
-    }
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/core/tests/bvt/AutomatedBVTEclipse.java b/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/core/tests/bvt/AutomatedBVTEclipse.java
deleted file mode 100644
index 08b007d..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/commonArchiveTests/org/eclipse/jst/j2ee/core/tests/bvt/AutomatedBVTEclipse.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Created on Mar 25, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.jst.j2ee.core.tests.bvt;
-
-import java.io.IOException;
-import java.net.URL;
-
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.core.runtime.Platform;
-
-/**
- * @author jsholl
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class AutomatedBVTEclipse extends AutomatedBVT {
-	
-	public AutomatedBVTEclipse(){
-		super();
-		IPluginDescriptor pluginDescriptor = Platform.getPluginRegistry().getPluginDescriptor("org.eclipse.jst.j2ee.core.tests");
-        URL url = pluginDescriptor.getInstallURL();
-        try {
-        	AutomatedBVT.baseDirectory = Platform.asLocalURL(url).getFile() + "commonArchiveResources"+ java.io.File.separatorChar;
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/out.xmi b/tests/org.eclipse.jst.j2ee.core.tests/out.xmi
deleted file mode 100644
index 47d30c3..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/out.xmi
+++ /dev/null
@@ -1,110 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<org.eclipse.jem.internal.java:JavaClass xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:org.eclipse.jem.internal.java="java.xmi" name="A" kind="CLASS" public="true">
-  <eSuperTypes href="java:/java.lang#Object"/>
-  <implementsInterfaces href="java:/com.ibm.etools.java.stressSample#IA"/>
-  <fields name="anA" eType="/"/>
-  <fields name="aB">
-    <eType xsi:type="org.eclipse.jem.internal.java:JavaClass" href="java:/com.ibm.etools.java.stressSample#B"/>
-  </fields>
-  <fields name="bees">
-    <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/com.ibm.etools.java.stressSample#B[]"/>
-  </fields>
-  <fields name="bees_and_bees">
-    <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/com.ibm.etools.java.stressSample#B[][]"/>
-  </fields>
-  <fields name="ints">
-    <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#int[]"/>
-  </fields>
-  <fields name="ints2">
-    <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#int[][]"/>
-  </fields>
-  <fields name="ints3">
-    <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#int[][][]"/>
-  </fields>
-  <fields name="chars">
-    <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#char[]"/>
-  </fields>
-  <fields name="floats">
-    <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#float[]"/>
-  </fields>
-  <fields name="cools">
-    <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#boolean[]"/>
-  </fields>
-  <fields name="doubles">
-    <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#double[]"/>
-  </fields>
-  <fields name="longs">
-    <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#long[]"/>
-  </fields>
-  <fields name="shorts">
-    <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#short[]"/>
-  </fields>
-  <fields name="bytes">
-    <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#byte[]"/>
-  </fields>
-  <fields name="testString" final="true" static="true">
-    <eType xsi:type="org.eclipse.jem.internal.java:JavaClass" href="java:/java.lang#String"/>
-    <initializer source="&quot;testing&quot;" name="testString_block"/>
-  </fields>
-  <methods name="doAllPrimitives">
-    <eType xsi:type="org.eclipse.jem.internal.java:JavaDataType" href="java:/#void"/>
-    <parameters name="arg0">
-      <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#int[]"/>
-    </parameters>
-    <parameters name="arg1">
-      <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#int[][]"/>
-    </parameters>
-    <parameters name="arg2">
-      <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#int[][][]"/>
-    </parameters>
-    <parameters name="arg3">
-      <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#char[]"/>
-    </parameters>
-    <parameters name="arg4">
-      <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#float[]"/>
-    </parameters>
-    <parameters name="arg5">
-      <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#boolean[]"/>
-    </parameters>
-    <parameters name="arg6">
-      <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#double[]"/>
-    </parameters>
-    <parameters name="arg7">
-      <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#long[]"/>
-    </parameters>
-    <parameters name="arg8">
-      <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#short[]"/>
-    </parameters>
-    <parameters name="arg9">
-      <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#byte[]"/>
-    </parameters>
-  </methods>
-  <methods name="doSomething">
-    <eType xsi:type="org.eclipse.jem.internal.java:JavaClass" href="java:/com.ibm.etools.java.stressSample#C"/>
-  </methods>
-  <methods name="getBytes">
-    <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#byte[]"/>
-  </methods>
-  <methods name="getChar">
-    <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#char[]"/>
-  </methods>
-  <methods name="getFloats">
-    <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#float[]"/>
-  </methods>
-  <methods name="getInts">
-    <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#int[]"/>
-  </methods>
-  <methods name="getLongs">
-    <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#long[]"/>
-  </methods>
-  <methods name="getShorts">
-    <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/#short[]"/>
-  </methods>
-  <methods name="returnAs">
-    <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/com.ibm.etools.java.stressSample#A[]"/>
-    <parameters name="arg0">
-      <eType xsi:type="org.eclipse.jem.internal.java:ArrayType" href="java:/com.ibm.etools.java.stressSample#C[]"/>
-    </parameters>
-  </methods>
-  <methods name="A" constructor="true"/>
-</org.eclipse.jem.internal.java:JavaClass>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/plugin.xml b/tests/org.eclipse.jst.j2ee.core.tests/plugin.xml
deleted file mode 100644
index d1e74c8..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/plugin.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin
-   id="org.eclipse.jst.j2ee.core.tests"
-   name="J2EE Core Tests Component"
-   version="1.0.0"
-   provider-name="IBM" >
-
-
-   <runtime>
-      <library name="tests.jar">
-         <export name="*"/>
-      </library>
-   </runtime>
-   <requires>
-      <import plugin="org.junit"/>
-      <import plugin="org.eclipse.jst.j2ee.core"/>
-      <import plugin="org.eclipse.jem.workbench"/>
-      <import plugin="org.eclipse.wst.common.emf"/>
-      <import plugin="org.eclipse.emf.ecore.xmi"/>
-      <import plugin="org.eclipse.jem"/>
-      <import plugin="org.eclipse.core.runtime"/>
-      <import plugin="org.eclipse.ui.ide"/>
-      <import plugin="org.eclipse.jface"/>
-      <import plugin="org.eclipse.wst.common.frameworks"/>
-      <import plugin="org.eclipse.core.resources"/>
-      <import plugin="org.eclipse.wst.common.tests"/>
-
-   </requires>
-
-
-</plugin>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/test.xml b/tests/org.eclipse.jst.j2ee.core.tests/test.xml
deleted file mode 100644
index 95916cc..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/test.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="testsuite" default="run" basedir=".">
-  <!-- The property ${eclipse-home} should be passed into this script -->
-  <!-- Set a meaningful default value for when it is not. -->
- <!-- <property name="eclipse-home" value="${basedir}\..\.."/> -->
-	<echo message="basedir ${basedir}" />
-	<echo message="eclipse place ${eclipse-home}" />
-  <!-- sets the properties plugin-name, and library-file -->
-  <property name="plugin-name" value="org.eclipse.jst.j2ee.core.tests"/>
-  <property name="library-file" value="${eclipse-home}/plugins/org.eclipse.test_3.1.0/library.xml"/>
-  <property name="extraVMargs" value="-DXmx700M"/>
-
-  <!-- This target holds all initialization code that needs to be done for -->
-  <!-- all tests that are to be run. Initialization for individual tests -->
-  <!-- should be done within the body of the suite target. -->
-  <target name="init">
-    <tstamp/>
-    <delete>
-      <fileset dir="${eclipse-home}" includes="org*.xml"/>
-    </delete>
-  </target>
-
-  <!-- This target defines the tests that need to be run. -->
-  <target name="suite">
-    <property name="jst-folder" value="${eclipse-home}/jst_folder"/>
-    <delete dir="${jst-folder}" quiet="true"/>
-    <ant target="core-test" antfile="${library-file}" dir="${eclipse-home}">
-      <property name="data-dir" value="${jst-folder}"/>
-      <property name="plugin-name" value="${plugin-name}"/>
-      <property name="classname" value="org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT" />
-   	  <property name="plugin-path" value="${eclipse-home}/plugins/${plugin-name}"/>
-   	  <property name="extraVMargs" value="${extraVMargs}"/>
-    </ant>
-  </target>
-
-  <!-- This target holds code to cleanup the testing environment after -->
-  <!-- after all of the tests have been run. You can use this target to -->
-  <!-- delete temporary files that have been created. -->
-  <target name="cleanup">
-  </target>
-
-  <!-- This target runs the test suite. Any actions that need to happen -->
-  <!-- after all the tests have been run should go here. -->
-  <target name="run" depends="init,suite,cleanup">
-    <ant target="collect" antfile="${library-file}" dir="${eclipse-home}">
-      <property name="includes" value="org*.xml"/>
-      <property name="output-file" value="${plugin-name}.xml"/>
-    </ant>
-  </target>
-</project>
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/MANIFEST.MF
deleted file mode 100644
index 1041650..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,5 +0,0 @@
-Manifest-Version: 1.0
-Ant-Version: Apache Ant 1.5.4 
-Created-By: 1.3.0 (IBM Corporation)
-Main-Class: null
-
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/Table.ddl b/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/Table.ddl
deleted file mode 100644
index 5780861..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/Table.ddl
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
--- Generated by Relational Schema Center on Fri Mar 12 14:32:14 CST 2004
-
-
-CREATE TABLE ACCOUNT
-  (ACCOUNTID VARCHAR(250) NOT NULL,
-   TYPE1 INTEGER NOT NULL,
-   BALANCE DOUBLE PRECISION NOT NULL,
-   APR DOUBLE PRECISION NOT NULL);
-
-ALTER TABLE ACCOUNT
-  ADD CONSTRAINT PK_ACCOUNT PRIMARY KEY (ACCOUNTID);
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/backends/CLOUDSCAPE_V50_1/Map.mapxmi b/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/backends/CLOUDSCAPE_V50_1/Map.mapxmi
deleted file mode 100644
index a19a98e..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/backends/CLOUDSCAPE_V50_1/Map.mapxmi
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ejbrdbmapping:EjbRdbDocumentRoot xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:RDBSchema="RDBSchema.xmi" xmlns:ejb="ejb.xmi" xmlns:ejbrdbmapping="ejbrdbmapping.xmi" xmlns:Mapping="Mapping.xmi" xmi:id="EjbRdbDocumentRoot_1079123516907" topToBottom="true" commandStack="&lt;collection>&lt;command-creation-record>&lt;class name=&quot;com.ibm.etools.ejbrdbmapping.command.TopDownEjbJarCommand&quot;/>&lt;command-parameter>&lt;ref-object href=&quot;platform:/resource/b63748ba/ejbModule/META-INF/ejb-jar.xml#ejb-jar_ID&quot;/>&lt;null/>&lt;collection>&lt;string value=&quot;TopDownDB&quot;/>&lt;null/>&lt;int value=&quot;18&quot;/>&lt;hashtable>&lt;/hashtable>&lt;hashtable>&lt;/hashtable>&lt;boolean value=&quot;false&quot;/>&lt;boolean value=&quot;false&quot;/>&lt;/collection>&lt;null/>&lt;int value=&quot;-1&quot;/>&lt;/command-parameter>&lt;/command-creation-record>&lt;/collection>">
-  <helper xmi:type="ejbrdbmapping:RdbSchemaProperies" xmi:id="RdbSchemaProperies_1079123516907" primitivesDocument="CLOUDSCAPE_V50"/>
-  <nested xmi:type="ejbrdbmapping:RDBEjbMapper" xmi:id="RDBEjbMapper_1079123516907">
-    <helper xmi:type="ejbrdbmapping:PrimaryTableStrategy" xmi:id="PrimaryTableStrategy_1079123516907">
-      <table href="META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB_NULLID_ACCOUNT.tblxmi#ACCOUNT"/>
-    </helper>
-    <nested xmi:type="ejbrdbmapping:RDBEjbFieldMapper" xmi:id="RDBEjbFieldMapper_1079123516907">
-      <inputs xmi:type="ejb:CMPAttribute" href="META-INF/ejb-jar.xml#Account_accountid"/>
-      <outputs xmi:type="RDBSchema:RDBColumn" href="META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB_NULLID_ACCOUNT.tblxmi#ACCOUNTID"/>
-      <typeMapping href="JavatoCLOUDSCAPE_V50TypeMaps.xmi#String-VARCHAR"/>
-    </nested>
-    <nested xmi:type="ejbrdbmapping:RDBEjbFieldMapper" xmi:id="RDBEjbFieldMapper_1079123516908" optimistic="true">
-      <inputs xmi:type="ejb:CMPAttribute" href="META-INF/ejb-jar.xml#Account_type"/>
-      <outputs xmi:type="RDBSchema:RDBColumn" href="META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB_NULLID_ACCOUNT.tblxmi#TYPE1"/>
-      <typeMapping href="JavatoCLOUDSCAPE_V50TypeMaps.xmi#int-INTEGER"/>
-    </nested>
-    <nested xmi:type="ejbrdbmapping:RDBEjbFieldMapper" xmi:id="RDBEjbFieldMapper_1079123516909" optimistic="true">
-      <inputs xmi:type="ejb:CMPAttribute" href="META-INF/ejb-jar.xml#Account_balance"/>
-      <outputs xmi:type="RDBSchema:RDBColumn" href="META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB_NULLID_ACCOUNT.tblxmi#BALANCE"/>
-      <typeMapping href="JavatoCLOUDSCAPE_V50TypeMaps.xmi#double-DOUBLE"/>
-    </nested>
-    <nested xmi:type="ejbrdbmapping:RDBEjbFieldMapper" xmi:id="RDBEjbFieldMapper_1079123516910" optimistic="true">
-      <inputs xmi:type="ejb:CMPAttribute" href="META-INF/ejb-jar.xml#Account_apr"/>
-      <outputs xmi:type="RDBSchema:RDBColumn" href="META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB_NULLID_ACCOUNT.tblxmi#APR"/>
-      <typeMapping href="JavatoCLOUDSCAPE_V50TypeMaps.xmi#double-DOUBLE"/>
-    </nested>
-    <inputs xmi:type="ejb:ContainerManagedEntity" href="META-INF/ejb-jar.xml#ContainerManagedEntity_1"/>
-    <outputs xmi:type="RDBSchema:RDBTable" href="META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB_NULLID_ACCOUNT.tblxmi#ACCOUNT"/>
-  </nested>
-  <inputs xmi:type="ejb:EJBJar" href="META-INF/ejb-jar.xml#ejb-jar_ID"/>
-  <outputs xmi:type="RDBSchema:RDBDatabase" href="META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB.dbxmi#TopDownDB"/>
-  <typeMapping xmi:type="Mapping:MappingRoot" href="JavatoCLOUDSCAPE_V50TypeMaps.xmi#Java_to_CLOUDSCAPE_V50_TypeMaps"/>
-</ejbrdbmapping:EjbRdbDocumentRoot>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/backends/CLOUDSCAPE_V50_1/Table.ddl b/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/backends/CLOUDSCAPE_V50_1/Table.ddl
deleted file mode 100644
index 5780861..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/backends/CLOUDSCAPE_V50_1/Table.ddl
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
--- Generated by Relational Schema Center on Fri Mar 12 14:32:14 CST 2004
-
-
-CREATE TABLE ACCOUNT
-  (ACCOUNTID VARCHAR(250) NOT NULL,
-   TYPE1 INTEGER NOT NULL,
-   BALANCE DOUBLE PRECISION NOT NULL,
-   APR DOUBLE PRECISION NOT NULL);
-
-ALTER TABLE ACCOUNT
-  ADD CONSTRAINT PK_ACCOUNT PRIMARY KEY (ACCOUNTID);
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB.dbxmi b/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB.dbxmi
deleted file mode 100644
index 914bdee..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB.dbxmi
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<RDBSchema:RDBDatabase xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:RDBSchema="RDBSchema.xmi" xmi:id="TopDownDB" name="TopDownDB">
-  <schemata href="META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB_NULLID.schxmi#NULLID"/>
-  <tableGroup xmi:type="RDBSchema:RDBTable" href="META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB_NULLID_ACCOUNT.tblxmi#ACCOUNT"/>
-  <domain href="CLOUDSCAPE_V50_Domain.xmi#SQLVendor_1"/>
-</RDBSchema:RDBDatabase>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB_NULLID.schxmi b/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB_NULLID.schxmi
deleted file mode 100644
index ca20a40..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB_NULLID.schxmi
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<RDBSchema:RDBSchema xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:RDBSchema="RDBSchema.xmi" xmi:id="NULLID" name="NULLID">
-  <database href="META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB.dbxmi#TopDownDB"/>
-  <tables xmi:type="RDBSchema:RDBTable" href="META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB_NULLID_ACCOUNT.tblxmi#ACCOUNT"/>
-</RDBSchema:RDBSchema>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB_NULLID_ACCOUNT.tblxmi b/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB_NULLID_ACCOUNT.tblxmi
deleted file mode 100644
index adf1d75..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB_NULLID_ACCOUNT.tblxmi
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<RDBSchema:RDBTable xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:RDBSchema="RDBSchema.xmi" xmi:id="ACCOUNT" name="ACCOUNT" primaryKey="PK_ACCOUNT">
-  <database href="META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB.dbxmi#TopDownDB"/>
-  <schema href="META-INF/backends/CLOUDSCAPE_V50_1/TopDownDB_NULLID.schxmi#NULLID"/>
-  <columns xmi:type="RDBSchema:RDBColumn" xmi:id="ACCOUNTID" name="ACCOUNTID">
-    <type xmi:type="RDBSchema:SQLCharacterStringType" xmi:id="SQLCharacterStringType_1079123516977" length="250">
-      <originatingType xmi:type="RDBSchema:SQLCharacterStringType" href="JavatoCLOUDSCAPE_V50TypeMaps.xmi#SQLCharacterStringType_250"/>
-    </type>
-  </columns>
-  <columns xmi:type="RDBSchema:RDBColumn" xmi:id="TYPE1" name="TYPE1">
-    <type xmi:type="RDBSchema:SQLExactNumeric" xmi:id="SQLExactNumeric_1079123516977">
-      <originatingType xmi:type="RDBSchema:SQLExactNumeric" href="CLOUDSCAPE_V50_Primitives.xmi#SQLExactNumeric_1"/>
-    </type>
-  </columns>
-  <columns xmi:type="RDBSchema:RDBColumn" xmi:id="BALANCE" name="BALANCE">
-    <type xmi:type="RDBSchema:SQLApproximateNumeric" xmi:id="SQLApproximateNumeric_1079123516977">
-      <originatingType xmi:type="RDBSchema:SQLApproximateNumeric" href="CLOUDSCAPE_V50_Primitives.xmi#SQLApproximateNumeric_1"/>
-    </type>
-  </columns>
-  <columns xmi:type="RDBSchema:RDBColumn" xmi:id="APR" name="APR">
-    <type xmi:type="RDBSchema:SQLApproximateNumeric" xmi:id="SQLApproximateNumeric_1079123516978">
-      <originatingType xmi:type="RDBSchema:SQLApproximateNumeric" href="CLOUDSCAPE_V50_Primitives.xmi#SQLApproximateNumeric_1"/>
-    </type>
-  </columns>
-  <namedGroup xmi:type="RDBSchema:SQLReference" xmi:id="PK_ACCOUNT" name="PK_ACCOUNT" members="ACCOUNTID" constraint="SQLConstraint_1079123516977"/>
-  <constraints xmi:id="SQLConstraint_1079123516977" name="PK_ACCOUNT" type="PRIMARYKEY" primaryKey="PK_ACCOUNT"/>
-</RDBSchema:RDBTable>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/backends/CLOUDSCAPE_V50_1/ibm_pmbab.properties b/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/backends/CLOUDSCAPE_V50_1/ibm_pmbab.properties
deleted file mode 100644
index d6f62d3..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/backends/CLOUDSCAPE_V50_1/ibm_pmbab.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Fri Mar 12 14:32:01 CST 2004
-Account=com.ibm.websphere.samples.appprofile.accountmanagementejb.websphere_deploy.CLOUDSCAPE_V50_1.AccountBeanAdaptorBinding_0c182135
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/ejb-jar.xml b/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/ejb-jar.xml
deleted file mode 100644
index 9d9860f..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/ejb-jar.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
-
-   <ejb-jar id="ejb-jar_ID">
-      <display-name>AppProfileSampleEJBModule</display-name>
-      <enterprise-beans>
-         <entity id="ContainerManagedEntity_1">
-            <ejb-name>Account</ejb-name>
-            <home>com.ibm.websphere.samples.appprofile.accountmanagementejb.AccountHome</home>
-            <remote>com.ibm.websphere.samples.appprofile.accountmanagementejb.Account</remote>
-            <local-home>com.ibm.websphere.samples.appprofile.accountmanagementejb.LocalAccountHome</local-home>
-            <local>com.ibm.websphere.samples.appprofile.accountmanagementejb.LocalAccount</local>
-            <ejb-class>com.ibm.websphere.samples.appprofile.accountmanagementejb.AccountBean</ejb-class>
-            <persistence-type>Container</persistence-type>
-            <prim-key-class>java.lang.String</prim-key-class>
-            <reentrant>False</reentrant>
-            <cmp-version>2.x</cmp-version>
-            <abstract-schema-name>Account</abstract-schema-name>
-            <cmp-field id="Account_accountid">
-               <field-name>accountid</field-name>
-            </cmp-field>
-            <cmp-field id="Account_type">
-               <field-name>type</field-name>
-            </cmp-field>
-            <cmp-field id="Account_balance">
-               <field-name>balance</field-name>
-            </cmp-field>
-            <cmp-field id="Account_apr">
-               <field-name>apr</field-name>
-            </cmp-field>
-            <primkey-field>accountid</primkey-field>
-            <query id="Query_1">
-               <query-method id="QueryMethod_1">
-                  <method-name>findLargeAccounts</method-name>
-                  <method-params>
-                     <method-param>double</method-param>
-                  </method-params>
-               </query-method>
-               <ejb-ql>SELECT OBJECT(a) FROM Account a WHERE a.balance >= ?1</ejb-ql>
-            </query>
-            <query id="Query_2">
-               <query-method id="QueryMethod_2">
-                  <method-name>findByAccountId</method-name>
-                  <method-params>
-                     <method-param>java.lang.String</method-param>
-                  </method-params>
-               </query-method>
-               <ejb-ql>SELECT OBJECT(a) FROM Account a WHERE a.accountid  = ?1</ejb-ql>
-            </query>
-            <query id="Query_3">
-               <query-method id="QueryMethod_3">
-                  <method-name>findAllAccounts</method-name>
-                  <method-params>
-                     <method-param></method-param>
-                  </method-params>
-               </query-method>
-               <ejb-ql>SELECT OBJECT(a) FROM Account a</ejb-ql>
-            </query>
-         </entity>
-         <session id="Session_1">
-            <display-name>AccountManager</display-name>
-            <ejb-name>AccountManager</ejb-name>
-            <home>com.ibm.websphere.samples.appprofile.accountmanagementejb.AccountManagerHome</home>
-            <remote>com.ibm.websphere.samples.appprofile.accountmanagementejb.AccountManager</remote>
-            <ejb-class>com.ibm.websphere.samples.appprofile.accountmanagementejb.AccountManagerBean</ejb-class>
-            <session-type>Stateless</session-type>
-            <transaction-type>Container</transaction-type>
-            <ejb-local-ref id="EJBLocalRef_1">
-               <ejb-ref-name>ejb/AppProfileSample-AccountHome</ejb-ref-name>
-               <ejb-ref-type>Entity</ejb-ref-type>
-               <local-home>com.ibm.websphere.samples.appprofile.accountmanagementejb.LocalAccountHome</local-home>
-               <local>com.ibm.websphere.samples.appprofile.accountmanagementejb.LocalAccount</local>
-               <ejb-link>Account</ejb-link>
-            </ejb-local-ref>
-         </session>
-      </enterprise-beans>
-   </ejb-jar>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/ibm-ejb-jar-bnd.xmi b/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/ibm-ejb-jar-bnd.xmi
deleted file mode 100644
index d690d43..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/ibm-ejb-jar-bnd.xmi
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ejbbnd:EJBJarBinding xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ejbbnd="ejbbnd.xmi" xmlns:ejb="ejb.xmi" xmlns:common="common.xmi" xmi:id="ejb-jar_ID_Bnd" currentBackendId="CLOUDSCAPE_V50_1">
-  <ejbJar href="META-INF/ejb-jar.xml#ejb-jar_ID"/>
-  <ejbBindings xmi:id="ContainerManagedEntity_1_Bnd" jndiName="AppProfileSample-AccountHome">
-    <enterpriseBean xmi:type="ejb:ContainerManagedEntity" href="META-INF/ejb-jar.xml#ContainerManagedEntity_1"/>
-  </ejbBindings>
-  <ejbBindings xmi:id="EnterpriseBeanBinding_1" jndiName="AppProfileSample-AccountManagerHome">
-    <enterpriseBean xmi:type="ejb:Session" href="META-INF/ejb-jar.xml#Session_1"/>
-    <ejbRefBindings xmi:id="EjbRefBinding_1" jndiName="AppProfileSample-AccountHome">
-      <bindingEjbRef xmi:type="common:EJBLocalRef" href="META-INF/ejb-jar.xml#EJBLocalRef_1"/>
-    </ejbRefBindings>
-  </ejbBindings>
-  <defaultCMPConnectionFactory xmi:id="CMPConnectionFactoryBinding_2" jndiName="eis/jdbc/AppProfileSampleDB_CMP" resAuth="Per_Connection_Factory"/>
-</ejbbnd:EJBJarBinding>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/ibm-ejb-jar-ext-pme.xmi b/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/ibm-ejb-jar-ext-pme.xmi
deleted file mode 100644
index 3eeecb1..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/ibm-ejb-jar-ext-pme.xmi
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<pmeext:PMEEJBJarExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:appprofileejbext="http://www.ibm.com/websphere/appserver/schemas/5.0/appprofileejbext.xmi" xmlns:ejbext="ejbext.xmi" xmlns:ejb="ejb.xmi" xmlns:pmeext="http://www.ibm.com/websphere/appserver/schemas/5.0/pmeext.xmi" xmi:id="PMEEJBJarExtension_1">
-  <appProfileEJBJarExtension xmi:id="AppProfileEJBJarExtension_1">
-    <applicationProfiles xmi:id="EJBModuleProfile_1" name="Read-only" description="This profile will apply a read-only access-intent policy to the multifinder for the Account entity bean.">
-      <appliedAccessIntents xmi:id="AppliedAccessIntent_1072828753424" name="com.ibm.websphere.ejbquery.Default" description="All methods of the Account bean are set for read only." accessIntentName="wsPessimisticRead">
-        <methodElements xmi:id="MethodElement_1072828753424" type="Unspecified">
-          <enterpriseBean xmi:type="ejb:ContainerManagedEntity" href="META-INF/ejb-jar.xml#ContainerManagedEntity_1"/>
-        </methodElements>
-      </appliedAccessIntents>
-      <tasks xmi:id="Task_1071093415784" name="getLargeAccounts" description="This task will be used by AccountManager session bean for read-only intent."/>
-    </applicationProfiles>
-    <ejbJarExtension href="META-INF/ibm-ejb-jar-ext.xmi#ejb-jar_ID_Ext"/>
-    <definedAccessIntentPolicies xmi:id="DefinedAccessIntentPolicy_1" name="PessimisticUpdate - Increment 10" description="This is a custom policy that keeps all the attributes of wsPessimisiticUpdate except for collection increment, which is set to 10.">
-      <accessIntentEntries xmi:type="ejbext:PessimisticUpdate" xmi:id="PessimisticUpdate_1072824290817"/>
-      <accessIntentEntries xmi:type="ejbext:CollectionIncrement" xmi:id="CollectionIncrement_1072824290817" collectionIncrement="10"/>
-      <accessIntentEntries xmi:type="ejbext:ResourceManagerPreFetchIncrement" xmi:id="ResourceManagerPreFetchIncrement_1072824290817" preFetchIncrement="0"/>
-      <accessIntentEntries xmi:type="ejbext:TransactionScope" xmi:id="TransactionScope_1072824290817"/>
-    </definedAccessIntentPolicies>
-    <runAsTasks xmi:id="RunAsTask_2" name="getLargeAcounts">
-      <taskRunAsKind xmi:type="appprofileejbext:RunAsSpecifiedTask" xmi:id="RunAsSpecifiedTask_2">
-        <task xmi:id="Task_5" name="getLargeAccounts" description="for viewing account data only"/>
-      </taskRunAsKind>
-      <methodElements xmi:id="MethodElement_3" name="getLargeAccounts" parms="double " type="Remote">
-        <enterpriseBean xmi:type="ejb:Session" href="META-INF/ejb-jar.xml#Session_1"/>
-      </methodElements>
-    </runAsTasks>
-    <appProfileComponentExtensions xmi:id="AppProfileComponentExtension_1">
-      <componentExtension xmi:type="ejbext:SessionExtension" href="META-INF/ibm-ejb-jar-ext.xmi#SessionExtension_1"/>
-    </appProfileComponentExtensions>
-    <appProfileComponentExtensions xmi:id="AppProfileComponentExtension_2">
-      <componentExtension xmi:type="ejbext:ContainerManagedEntityExtension" href="META-INF/ibm-ejb-jar-ext.xmi#ContainerManagedEntity_1_Ext"/>
-    </appProfileComponentExtensions>
-  </appProfileEJBJarExtension>
-</pmeext:PMEEJBJarExtension>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/ibm-ejb-jar-ext.xmi b/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/ibm-ejb-jar-ext.xmi
deleted file mode 100644
index 673264f..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/ejb/META-INF/ibm-ejb-jar-ext.xmi
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ejbext:EJBJarExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ejbext="ejbext.xmi" xmlns:ejb="ejb.xmi" xmi:id="ejb-jar_ID_Ext">
-  <ejbExtensions xmi:type="ejbext:ContainerManagedEntityExtension" xmi:id="ContainerManagedEntity_1_Ext" concurrencyControl="pessimistic">
-    <enterpriseBean xmi:type="ejb:ContainerManagedEntity" href="META-INF/ejb-jar.xml#ContainerManagedEntity_1"/>
-    <structure xmi:id="BeanStructure_1" inheritenceRoot="false"/>
-    <beanCache xmi:id="BeanCache_1" activateAt="TRANSACTION" loadAt="TRANSACTION"/>
-    <localTran xmi:id="LocalTran_1" boundary="BEAN_METHOD" unresolvedAction="ROLLBACK"/>
-    <dataCache xmi:id="DataCache_1" lifetimeInCache="0" lifetimeInCacheUsage="OFF"/>
-  </ejbExtensions>
-  <ejbExtensions xmi:type="ejbext:SessionExtension" xmi:id="SessionExtension_1" timeout="600">
-    <enterpriseBean xmi:type="ejb:Session" href="META-INF/ejb-jar.xml#Session_1"/>
-    <structure xmi:id="BeanStructure_2" inheritenceRoot="false"/>
-    <beanCache xmi:id="BeanCache_2" activateAt="ONCE"/>
-    <localTran xmi:id="LocalTran_2" boundary="BEAN_METHOD" unresolvedAction="ROLLBACK"/>
-  </ejbExtensions>
-  <ejbJar href="META-INF/ejb-jar.xml#ejb-jar_ID"/>
-  <appliedAccessIntents xmi:id="AppliedAccessIntent_1071093415744" name="com.ibm.websphere.ejbquery.Default" description="" accessIntentName="PessimisticUpdate - Increment 10">
-    <methodElements xmi:id="MethodElement_1071093415744" type="Unspecified">
-      <enterpriseBean xmi:type="ejb:ContainerManagedEntity" href="META-INF/ejb-jar.xml#ContainerManagedEntity_1"/>
-    </methodElements>
-  </appliedAccessIntents>
-</ejbext:EJBJarExtension>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/no-sl/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.j2ee.core.tests/testData/no-sl/META-INF/MANIFEST.MF
deleted file mode 100644
index 59499bc..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/no-sl/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/no-sl/META-INF/ejb-jar.xml b/tests/org.eclipse.jst.j2ee.core.tests/testData/no-sl/META-INF/ejb-jar.xml
deleted file mode 100644
index 2693c86..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/no-sl/META-INF/ejb-jar.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ejb-jar id="ejb-jar_ID" version="2.1" 
-	xmlns="http://java.sun.com/xml/ns/j2ee" >
-	<display-name>
-	TestEJB</display-name>
-	<enterprise-beans>
-		<session id="T1">
-			<ejb-name>T1</ejb-name>
-			<home>ejbs.T1Home</home>
-			<remote>ejbs.T1</remote>
-			<ejb-class>ejbs.T1Bean</ejb-class>
-			<session-type>Stateless</session-type>
-			<transaction-type>Container</transaction-type>
-		</session>
-	</enterprise-beans>
-</ejb-jar>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/no-sl/ejbs/T1.class b/tests/org.eclipse.jst.j2ee.core.tests/testData/no-sl/ejbs/T1.class
deleted file mode 100644
index cda4e08..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/no-sl/ejbs/T1.class
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/no-sl/ejbs/T1Bean.class b/tests/org.eclipse.jst.j2ee.core.tests/testData/no-sl/ejbs/T1Bean.class
deleted file mode 100644
index 51cb4f6..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/no-sl/ejbs/T1Bean.class
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/no-sl/ejbs/T1Home.class b/tests/org.eclipse.jst.j2ee.core.tests/testData/no-sl/ejbs/T1Home.class
deleted file mode 100644
index a579832..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/no-sl/ejbs/T1Home.class
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/sl/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.j2ee.core.tests/testData/sl/META-INF/MANIFEST.MF
deleted file mode 100644
index 59499bc..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/sl/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/sl/META-INF/ejb-jar.xml b/tests/org.eclipse.jst.j2ee.core.tests/testData/sl/META-INF/ejb-jar.xml
deleted file mode 100644
index af37a03..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/sl/META-INF/ejb-jar.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ejb-jar id="ejb-jar_ID" 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>
-	TestEJB</display-name>
-	<enterprise-beans>
-		<session id="T1">
-			<ejb-name>T1</ejb-name>
-			<home>ejbs.T1Home</home>
-			<remote>ejbs.T1</remote>
-			<ejb-class>ejbs.T1Bean</ejb-class>
-			<session-type>Stateless</session-type>
-			<transaction-type>Container</transaction-type>
-		</session>
-	</enterprise-beans>
-</ejb-jar>
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/sl/ejbs/T1.class b/tests/org.eclipse.jst.j2ee.core.tests/testData/sl/ejbs/T1.class
deleted file mode 100644
index cda4e08..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/sl/ejbs/T1.class
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/sl/ejbs/T1Bean.class b/tests/org.eclipse.jst.j2ee.core.tests/testData/sl/ejbs/T1Bean.class
deleted file mode 100644
index 51cb4f6..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/sl/ejbs/T1Bean.class
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.core.tests/testData/sl/ejbs/T1Home.class b/tests/org.eclipse.jst.j2ee.core.tests/testData/sl/ejbs/T1Home.class
deleted file mode 100644
index a579832..0000000
--- a/tests/org.eclipse.jst.j2ee.core.tests/testData/sl/ejbs/T1Home.class
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/.classpath b/tests/org.eclipse.jst.j2ee.tests/.classpath
deleted file mode 100644
index c63d058..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/.classpath
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="j2ee-tests"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="src" path="ejbmodule-tests"/>
-	<classpathentry kind="src" path="webmodule-tests"/>
-	<classpathentry kind="src" path="jcamodule-tests"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/tests/org.eclipse.jst.j2ee.tests/.cvsignore b/tests/org.eclipse.jst.j2ee.tests/.cvsignore
deleted file mode 100644
index c5e82d7..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.j2ee.tests/.project b/tests/org.eclipse.jst.j2ee.tests/.project
deleted file mode 100644
index ffec9c0..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jst.j2ee.tests</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/.cvsignore b/tests/org.eclipse.jst.j2ee.tests/TestData/.cvsignore
deleted file mode 100644
index d30e719..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-tempOutput
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/AppClientTests/12AppClientTest.jar b/tests/org.eclipse.jst.j2ee.tests/TestData/AppClientTests/12AppClientTest.jar
deleted file mode 100644
index 8cce112..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/AppClientTests/12AppClientTest.jar
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/AppClientTests/13AppClient.jar b/tests/org.eclipse.jst.j2ee.tests/TestData/AppClientTests/13AppClient.jar
deleted file mode 100644
index 79957c4..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/AppClientTests/13AppClient.jar
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/AppClientTests/13AppClientTest.jar b/tests/org.eclipse.jst.j2ee.tests/TestData/AppClientTests/13AppClientTest.jar
deleted file mode 100644
index f00cf8b..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/AppClientTests/13AppClientTest.jar
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/AppClientTests/AppClientExpTest.jar b/tests/org.eclipse.jst.j2ee.tests/TestData/AppClientTests/AppClientExpTest.jar
deleted file mode 100644
index b3c7ede..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/AppClientTests/AppClientExpTest.jar
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/SimpleEAR.ear b/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/SimpleEAR.ear
deleted file mode 100644
index 3bf23c1..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/SimpleEAR.ear
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test12EJBEAR.ear b/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test12EJBEAR.ear
deleted file mode 100644
index e7c8dc9..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test12EJBEAR.ear
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test12WEBEJBEAR.ear b/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test12WEBEJBEAR.ear
deleted file mode 100644
index c16da2a..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test12WEBEJBEAR.ear
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test13EJBEAR.ear b/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test13EJBEAR.ear
deleted file mode 100644
index edc7beb..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test13EJBEAR.ear
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test13WEBEJBEAR.ear b/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test13WEBEJBEAR.ear
deleted file mode 100644
index e932509..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test13WEBEJBEAR.ear
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test14EJBEAR.ear b/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test14EJBEAR.ear
deleted file mode 100644
index fd22028..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test14EJBEAR.ear
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test14WEBEJBEAR.ear b/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test14WEBEJBEAR.ear
deleted file mode 100644
index 86cb493..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test14WEBEJBEAR.ear
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test14WEBEJBEARWithMetaData.ear b/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test14WEBEJBEARWithMetaData.ear
deleted file mode 100644
index 17b981a..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/Test14WEBEJBEARWithMetaData.ear
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/UtilityJarTestEAR.ear b/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/UtilityJarTestEAR.ear
deleted file mode 100644
index cb83101..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/UtilityJarTestEAR.ear
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/UtilityJarWebLibWithMetaDataFilesEAR.ear b/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/UtilityJarWebLibWithMetaDataFilesEAR.ear
deleted file mode 100644
index 5debb3b..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/EARImportTests/UtilityJarWebLibWithMetaDataFilesEAR.ear
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/EJBImportTests/Test13EJB.jar b/tests/org.eclipse.jst.j2ee.tests/TestData/EJBImportTests/Test13EJB.jar
deleted file mode 100644
index be00332..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/EJBImportTests/Test13EJB.jar
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/EJBImportTests/Test14EJB.jar b/tests/org.eclipse.jst.j2ee.tests/TestData/EJBImportTests/Test14EJB.jar
deleted file mode 100644
index f06f754..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/EJBImportTests/Test14EJB.jar
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/RARImportTests/JDEConnector.rar b/tests/org.eclipse.jst.j2ee.tests/TestData/RARImportTests/JDEConnector.rar
deleted file mode 100644
index f1fb89d..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/RARImportTests/JDEConnector.rar
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/WARImportTests/Example1.war b/tests/org.eclipse.jst.j2ee.tests/TestData/WARImportTests/Example1.war
deleted file mode 100644
index 9c30a38..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/WARImportTests/Example1.war
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/WARImportTests/Test12Web.war b/tests/org.eclipse.jst.j2ee.tests/TestData/WARImportTests/Test12Web.war
deleted file mode 100644
index ba220b1..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/WARImportTests/Test12Web.war
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/WARImportTests/Test13Web.war b/tests/org.eclipse.jst.j2ee.tests/TestData/WARImportTests/Test13Web.war
deleted file mode 100644
index 22aa926..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/WARImportTests/Test13Web.war
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/WARImportTests/Test14Web.war b/tests/org.eclipse.jst.j2ee.tests/TestData/WARImportTests/Test14Web.war
deleted file mode 100644
index 1eb2a3f..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/WARImportTests/Test14Web.war
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.j2ee.tests/TestData/testOutput/testOutput.txt b/tests/org.eclipse.jst.j2ee.tests/TestData/testOutput/testOutput.txt
deleted file mode 100644
index e69de29..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/TestData/testOutput/testOutput.txt
+++ /dev/null
diff --git a/tests/org.eclipse.jst.j2ee.tests/build.properties b/tests/org.eclipse.jst.j2ee.tests/build.properties
deleted file mode 100644
index 9b3c21e..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/build.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-source.j2ee-tests.jar = j2ee-tests/,\
-                        webmodule-tests/,\
-                        ejbmodule-tests/,\
-                        jcamodule-tests/
-output.j2ee-tests.jar = bin/
-bin.includes = plugin.xml,\
-               j2ee-tests.jar,\
-               TestData/,\
-               test.xml
diff --git a/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/operations/AllTests.java b/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/operations/AllTests.java
deleted file mode 100644
index 7ef749a..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/operations/AllTests.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Created on Feb 2, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.ejb.operations;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * @author jsholl
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class AllTests extends TestSuite {
-
-    public static Test suite(){
-        return new AllTests();
-    }
-    
-    public AllTests(){
-        super("EJB Tests");
-        addTest(EJBExportOperationTest.suite());
-        addTest(EJBImportOperationTest.suite());
-        addTest(EJBProjectCreationOperationTest.suite());
-        addTest(EJBProjectCreationTest.suite());
-    }
-    
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/operations/EJBExportOperationTest.java b/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/operations/EJBExportOperationTest.java
deleted file mode 100644
index 6312c71..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/operations/EJBExportOperationTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Created on Jan 6, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.ejb.operations;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleExportDataModel;
-import org.eclipse.jst.j2ee.internal.ejb.project.operations.EJBModuleExportDataModel;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleExportOperationTestCase;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class EJBExportOperationTest extends ModuleExportOperationTestCase {  
-	
-	public EJBExportOperationTest(String name) {
-		super(name);
-	}
-	 
-	public static Test suite() {
-		return new TestSuite(EJBExportOperationTest.class);
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleExportOperationTestCase#getExportModel()
-	 */
-	protected J2EEModuleExportDataModel getModelInstance() {
-		return new EJBModuleExportDataModel();
-	}
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleExportOperationTestCase#getImportTestCase()
-	 */
-	protected ModuleImportOperationTestCase getImportTestCase() {
-		return new EJBImportOperationTest("");
-	}
-	
-	
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/operations/EJBImportOperationTest.java b/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/operations/EJBImportOperationTest.java
deleted file mode 100644
index b6545b3..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/operations/EJBImportOperationTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Created on Jan 5, 2004
- * 
- * To change the template for this generated file go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.ejb.operations;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleImportDataModel;
-import org.eclipse.jst.j2ee.internal.ejb.project.operations.EJBModuleImportDataModel;
-import org.eclipse.wst.common.tests.ProjectUtility;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase;
-import org.eclipse.wtp.j2ee.headless.tests.plugin.HeadlessTestsPlugin;
-
-/**
- * @author Administrator
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-public class EJBImportOperationTest extends ModuleImportOperationTestCase { 
-	
-	public static Test suite() {
-		return new TestSuite(EJBImportOperationTest.class);
-	} 
-
-	public EJBImportOperationTest(String name) {
-		super(name);
-	}  	 
-
-	public void testEJB20Import() throws Exception { 
-		testImport("Test13EJB", getFullPathForEJBJar("Test13EJB.jar")); 
-		
-	} 
-	
-	public String getFullPathForEJBJar(String jarName) {
-	try{
-		return ProjectUtility.getFullFileName(HeadlessTestsPlugin.getDefault(),TESTS_PATH + "\\" + jarName);
-	} catch (Exception e) {
-		e.printStackTrace();
-	  }
-	return jarName;
-	}
-	
-	public void testEJB21Import() throws Exception { 
-		testImport("Test14EJB", getFullPathForEJBJar("Test14EJB.jar")); 
-	} 
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase#getDirectory()
-	 */
-	protected String getDirectory() {
-		return "EJBImportTests";
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase#getModelInstance()
-	 */
-	protected J2EEModuleImportDataModel getModelInstance() {
-		return new EJBModuleImportDataModel();
-	}
-	
- 
-	
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/operations/EJBProjectCreationOperationTest.java b/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/operations/EJBProjectCreationOperationTest.java
deleted file mode 100644
index b39e38b..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/operations/EJBProjectCreationOperationTest.java
+++ /dev/null
@@ -1,24 +0,0 @@
-
-package org.eclipse.wtp.j2ee.headless.tests.ejb.operations;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleCreationDataModel;
-import org.eclipse.jst.j2ee.internal.ejb.project.operations.EJBModuleCreationDataModel;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleProjectCreationOperationTest;
-
-public class EJBProjectCreationOperationTest extends ModuleProjectCreationOperationTest {
-
-    public static Test suite() {
-        return new TestSuite(EJBProjectCreationOperationTest.class);
-    }
-
-    /* (non-Javadoc)
-     * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleProjectCreationOperationTest#getProjectCreationDataModel()
-     */
-    public J2EEModuleCreationDataModel getProjectCreationDataModel() {
-        return new EJBModuleCreationDataModel();
-    }
-  
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/operations/EJBProjectCreationTest.java b/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/operations/EJBProjectCreationTest.java
deleted file mode 100644
index 7db49b6..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/operations/EJBProjectCreationTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Created on Jan 6, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.ejb.operations;
-
-import junit.framework.Test;
-
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleCreationDataModel;
-import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
-import org.eclipse.wst.common.tests.LogUtility;
-import org.eclipse.wst.common.tests.ProjectUtility;
-import org.eclipse.wst.common.tests.SimpleTestSuite;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.AbstractProjectCreationTest;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.RandomObjectGenerator;
-
-/**
- * @author blancett
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class EJBProjectCreationTest extends AbstractProjectCreationTest {
-	
-	
-	public void testVaild11EJBProjectNameCreationWithAlphabeticChars() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++)
-			createVaildProjectNameCreationWithAlphabetChars(EJB_PROJECT, J2EEVersionConstants.EJB_1_1_ID, false);
-	}
-	
-	public void testVaildEJB11ProjectNameCreationWithMixedChars() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++)
-			createVaildProjectNameCreationWithAlphabetChars(EJB_PROJECT, J2EEVersionConstants.EJB_1_1_ID, true);
-	}
-	
-	public void testVaild20EJBProjectNameCreationAllChars() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++)
-			createVaildProjectNameCreationWithAlphabetChars(EJB_PROJECT, J2EEVersionConstants.EJB_2_0_ID, true);
-	}
-	
-	public void testVaild20EJBProjectNameCreationWithAlphabetic() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++)
-			createVaildProjectNameCreationWithAlphabetChars(EJB_PROJECT, J2EEVersionConstants.EJB_2_0_ID, false);
-	}
-	
-	public void testVaildRandomVersionsEJBProjectNameCreationAllChars() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++) {
-			if (RandomObjectGenerator.createRandomProjectNumber() % 2 == 0)
-				createVaildProjectNameCreationWithAlphabetChars(EJB_PROJECT, J2EEVersionConstants.EJB_1_1_ID, true);
-			else
-				createVaildProjectNameCreationWithAlphabetChars(EJB_PROJECT, J2EEVersionConstants.EJB_2_0_ID, true);
-		}
-	}
-	
-	public void testVaildRandomVersionsEJBProjectNameCreationAlphabetChars() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++) {
-			if (RandomObjectGenerator.createRandomProjectNumber() % 2 == 0)
-				createVaildProjectNameCreationWithAlphabetChars(EJB_PROJECT, J2EEVersionConstants.EJB_1_1_ID, false);
-			else
-				createVaildProjectNameCreationWithAlphabetChars(EJB_PROJECT, J2EEVersionConstants.EJB_2_0_ID, false);
-		}
-	}
-	
-	public void testInvaild11EJBProjectNameCreation() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		LogUtility.getInstance().resetLogging();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++) {
-			try {
-				J2EEModuleCreationDataModel model = setupEJBProject(RandomObjectGenerator.createInvalidRandomProjectName(), J2EEVersionConstants.EJB_1_1_ID);
-				checkValidDataModel(model);
-			} catch (Exception e) {
-				if (e instanceof IllegalArgumentException) {
-					System.out.println(ILLEGAL_PROJECT_NAME_MESSAGE + projectName);
-				} else
-					new Exception(UNEXPECTED_ERROR_MESSAGE);
-			} finally {
-				new Exception(TEST_FAILED_MESSAGE);
-			}
-		}
-		LogUtility.getInstance().verifyNoWarnings();
-	}
-
-    public static Test suite() {
-        return new SimpleTestSuite(EJBProjectCreationTest.class);
-    }
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/verifiers/EJBExportDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/verifiers/EJBExportDataModelVerifier.java
deleted file mode 100644
index 0552fba..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/verifiers/EJBExportDataModelVerifier.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.ejb.verifiers;
-
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.ModuleExportDataModelVerifier;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class EJBExportDataModelVerifier extends ModuleExportDataModelVerifier {
- 
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/verifiers/EJBImportDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/verifiers/EJBImportDataModelVerifier.java
deleted file mode 100644
index 6315719..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/verifiers/EJBImportDataModelVerifier.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.ejb.verifiers;
-
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.ModuleImportDataModelVerifier;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class EJBImportDataModelVerifier extends ModuleImportDataModelVerifier {
-	
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/verifiers/EJBProjectCreationDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/verifiers/EJBProjectCreationDataModelVerifier.java
deleted file mode 100644
index c82fa11..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/ejbmodule-tests/org/eclipse/wtp/j2ee/headless/tests/ejb/verifiers/EJBProjectCreationDataModelVerifier.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.ejb.verifiers;
-
-import junit.framework.Assert;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleCreationDataModel;
-import org.eclipse.jst.j2ee.common.XMLResource;
-import org.eclipse.jst.j2ee.internal.earcreation.EAREditModel;
-import org.eclipse.jst.j2ee.internal.earcreation.EARNatureRuntime;
-import org.eclipse.jst.j2ee.internal.ejb.project.EJBEditModel;
-import org.eclipse.jst.j2ee.internal.ejb.project.EJBNatureRuntime;
-import org.eclipse.jst.j2ee.internal.ejb.project.operations.EJBModuleCreationDataModel;
-import org.eclipse.wst.common.internal.emfworkbench.operation.EditModelOperationDataModel;
-import org.eclipse.wst.common.tests.ProjectUtility;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.ModuleProjectCreationDataModelVerifier;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class EJBProjectCreationDataModelVerifier extends ModuleProjectCreationDataModelVerifier {
-    /* (non-Javadoc)
-     * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.ModuleProjectCreationDataModelVerifier#verifyProjectCreationDataModel(com.ibm.etools.application.operations.J2EEProjectCreationDataModel)
-     */
-    public void verifyProjectCreationDataModel(J2EEModuleCreationDataModel model) {
-        EJBModuleCreationDataModel dataModel = (EJBModuleCreationDataModel)model;
-        ProjectUtility.verifyProject(dataModel.getTargetProject().getName(), true);
-        EJBEditModel editModel = null;
-        Object key = new Object();
-        EJBNatureRuntime ejbRuntime = EJBNatureRuntime.getRuntime(dataModel.getTargetProject());
-        try {
-            editModel = (EJBEditModel)ejbRuntime.getEditModelForRead(dataModel.getStringProperty(EditModelOperationDataModel.EDIT_MODEL_ID), key);
-            XMLResource dd = editModel.getDeploymentDescriptorResource();
-            Assert.assertNotNull("Deployment Descriptor Null", dd);
-        } finally {
-            editModel.releaseAccess(key);
-        }
-        if (dataModel.getBooleanProperty(EJBModuleCreationDataModel.ADD_TO_EAR)) {
-            EARNatureRuntime[] earRuntimes = ejbRuntime.getReferencingEARProjects();
-            IProject earProject = earRuntimes[0].getProject();
-            EAREditModel earEditModel = null;
-            try {
-                Assert.assertTrue("EAR doesn't exist:", earProject.exists());
-                EARNatureRuntime runtime = EARNatureRuntime.getRuntime(earProject);
-                earEditModel = (EAREditModel) earRuntimes[0].getEarEditModelForRead(key);
-                earEditModel.getModuleMapping(dataModel.getTargetProject());
-                //TODO
-            } finally {
-            if(earEditModel != null)
-            	earEditModel.releaseAccess(key);
-            }
-        }
-    }
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/core/tests/bvt/AutomatedBVT.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/core/tests/bvt/AutomatedBVT.java
deleted file mode 100644
index 7430531..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/core/tests/bvt/AutomatedBVT.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Created on Apr 1, 2003
- *
- * To change this generated comment go to 
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.jst.j2ee.core.tests.bvt;
-
-import java.net.URL;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.wtp.j2ee.headless.tests.plugin.AllPluginTests;
-
-
-/**
- * @author jsholl
- *
- * To change this generated comment go to 
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-public class AutomatedBVT extends TestSuite {
-
-    public static String baseDirectory = System.getProperty("user.dir") + java.io.File.separatorChar + "TestData" + java.io.File.separatorChar;
-    
-    static {
-        try {
-            IPluginDescriptor pluginDescriptor = Platform.getPluginRegistry().getPluginDescriptor("org.eclipse.jst.j2ee.tests");
-            URL url = pluginDescriptor.getInstallURL(); 
-        	AutomatedBVT.baseDirectory = Platform.asLocalURL(url).getFile() + "TestData"+ java.io.File.separatorChar;
-		} catch (Exception e) { 
-			System.err.println("Using working directory since a workspace URL could not be located.");
-		} 
-    }
-
-    public static int unimplementedMethods;
-
-    public static void main(String[] args) {
-        unimplementedMethods = 0;
-        TestRunner.run(suite());
-        if (unimplementedMethods > 0) {
-            System.out.println("\nCalls to warnUnimpl: " + unimplementedMethods);
-        }
-    }
-
-    public AutomatedBVT() {
-        super();
-        TestSuite suite = (TestSuite) AutomatedBVT.suite();
-        for (int i = 0; i < suite.testCount(); i++) {
-            addTest(suite.testAt(i));
-        }
-    }
-
-    public static Test suite() {
-        TestSuite suite = new TestSuite("Test for org.eclipse.jst.j2ee.test.bvt");
-        suite.addTest(AllPluginTests.suite());
-        return suite;
-    }
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/core/tests/bvt/AutomatedBVTEclipse.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/core/tests/bvt/AutomatedBVTEclipse.java
deleted file mode 100644
index ca1ca8d..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/core/tests/bvt/AutomatedBVTEclipse.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Created on Mar 25, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.jst.j2ee.core.tests.bvt;
-
-import java.io.IOException;
-import java.net.URL;
-
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.core.runtime.Platform;
-
-/**
- * @author jsholl
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class AutomatedBVTEclipse extends AutomatedBVT {
-	
-	public AutomatedBVTEclipse(){
-		super();
-		IPluginDescriptor pluginDescriptor = Platform.getPluginRegistry().getPluginDescriptor("org.eclipse.jst.j2ee.tests");
-        URL url = pluginDescriptor.getInstallURL();
-        try {
-        	AutomatedBVT.baseDirectory = Platform.asLocalURL(url).getFile() + "TestData"+ java.io.File.separatorChar;
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/flexible/project/tests/FlexibleProjectEditTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/flexible/project/tests/FlexibleProjectEditTest.java
deleted file mode 100644
index 985d28d..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/flexible/project/tests/FlexibleProjectEditTest.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Created on Feb 14, 2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.eclipse.jst.j2ee.flexible.project.tests;
-
-import junit.framework.TestCase;
-
-/**
- * @author vijayb
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class FlexibleProjectEditTest extends TestCase {
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/tests/modulecore/AllTests.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/tests/modulecore/AllTests.java
deleted file mode 100644
index 3b6ee50..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/tests/modulecore/AllTests.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Created on Feb 18, 2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.eclipse.jst.j2ee.tests.modulecore;
-
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class AllTests extends TestSuite {
-
-    public static Test suite(){
-        return new AllTests();
-    }
-    
-    public AllTests(){
-        super("ModuleCore Tests");
-        addTest(ModuleStructuralModelTest.suite());
-    }
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/tests/modulecore/FlexibleProjectBuilderTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/tests/modulecore/FlexibleProjectBuilderTest.java
deleted file mode 100644
index 74de726..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/tests/modulecore/FlexibleProjectBuilderTest.java
+++ /dev/null
@@ -1,336 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004, 2005 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
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.j2ee.tests.modulecore;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-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.resources.IWorkspaceDescription;
-import org.eclipse.core.resources.IncrementalProjectBuilder;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.jst.common.jdt.internal.integration.JavaProjectCreationDataModel;
-import org.eclipse.jst.j2ee.internal.web.archive.operations.WebModuleCreationDataModel;
-import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext;
-import org.eclipse.wst.common.modulecore.DependentModule;
-import org.eclipse.wst.common.modulecore.ModuleCore;
-import org.eclipse.wst.common.modulecore.ModuleCoreFactory;
-import org.eclipse.wst.common.modulecore.ModuleCoreNature;
-import org.eclipse.wst.common.modulecore.ModuleStructuralModel;
-import org.eclipse.wst.common.modulecore.ModuleType;
-import org.eclipse.wst.common.modulecore.ProjectModules;
-import org.eclipse.wst.common.modulecore.WorkbenchModule;
-import org.eclipse.wst.common.modulecore.WorkbenchModuleResource;
-import org.eclipse.wst.common.modulecore.internal.util.IModuleConstants;
-
-public class FlexibleProjectBuilderTest extends TestCase {
-	public static final String MODULE__RESOURCE_URI_PROTOCOL = "module:/resource/";
-	private IProject project;
-	private EMFWorkbenchContext emfContext;
-
-	public interface IModuleTypesConstants {
-		String MODULE_TYPE_WEB = IModuleConstants.WST_WEB_MODULE;
-	}
-
-    public FlexibleProjectBuilderTest(String name) {
-        super(name);
-        // TODO Auto-generated constructor stub
-    }
-    
-	public static Test suite() {
-		// return new TestSuite(ModuleEditModelTest.class);
-		TestSuite suite = new TestSuite();
-		suite.addTest(new FlexibleProjectBuilderTest("testFlexibleProjectBuilderOutput"));
-		return suite;
-	}
-	
-    /*
-	 * (non-Javadoc)
-	 * 
-	 * @see junit.framework.TestCase#setUp()
-	 */
-	public void setUp() throws Exception {
-	    IWorkspaceDescription desc = ResourcesPlugin.getWorkspace().getDescription();
-	    desc.setAutoBuilding(false);
-	    ResourcesPlugin.getWorkspace().setDescription(desc);
-		getProjectForWebModuleAndLocalWebLib().delete(true, null);
-		getProjectForRemoteWebLib().delete(true, null);
-		super.setUp();
-	}
-	/**
-	 * 
-	 */
-	public void testFlexibleProjectBuilderOutput() throws Exception {
-	    setupContent();
-	    checkForEmptyDeployables();
-	    buildProjects();
-	    checkForDeployablesOutput();
-	}
-
-	/**
-     * 
-     */
-    private void checkForDeployablesOutput() {
-        try {
-            //check web project
-            IProject remoteWeb = getProjectForRemoteWebLib();
-            IFolder[] remoteOutputFolders = ModuleCore.getOutputContainersForProject(remoteWeb);
-            IFolder tempFolder = remoteWeb.getFolder(remoteOutputFolders[0].getName());
-            if(!tempFolder.exists())
-                assertFalse(".deployables should exist, a build has been run", true);
-            
-            if(!tempFolder.getFolder(getRemoteWebLibraryDeployedName()).exists())
-                assertFalse(".deployables/RemoteWebLibProject.jar should exist, a build has been run", true);
-            //check the remote java util project
-            IProject localWeb = getProjectForWebModuleAndLocalWebLib();
-            IFolder[] localOutputFolders = ModuleCore.getOutputContainersForProject(localWeb);
-            tempFolder = localWeb.getFolder(localOutputFolders[0].getName());
-            if(!tempFolder.exists())
-                assertFalse(".deployables should exist, a build has been run", true);
-            tempFolder = tempFolder.getFolder(getWebModuleDeployedName());
-            if(!tempFolder.exists())
-                assertFalse(getWebModuleDeployedName() + " should exist, a build has been run", true);
-            IFolder metaFolder = tempFolder.getFolder("META-INF");
-            if(!metaFolder.exists())
-                assertFalse(getWebModuleDeployedName() + "/META-INF should exist, a build has been run", true);
-            IFile manifest = metaFolder.getFile("MANIFEST.MF");
-            if(!manifest.exists())
-                assertFalse(getWebModuleDeployedName() + "/META-INF/MANIFEST.MF should exist, a build has been run", true);
-            IFolder webInf = tempFolder.getFolder("WEB-INF");
-            if(!webInf.exists())
-                assertFalse(getWebModuleDeployedName() + "/WEB-INF should exist, a build has been run", true);
-            if(!webInf.getFolder("classes").exists())
-                assertFalse(getWebModuleDeployedName() + "/WEB-INF/classes should exist, a build has been run", true);
-            if(!webInf.getFile("web.xml").exists())
-                assertFalse(getWebModuleDeployedName() + "/WEB-INF/web.xml should exist, a build has been run", true);
-            IFolder lib = webInf.getFolder("lib");
-            if(!lib.getFile(getLocalWebLibraryDeployedName()).exists())
-                assertFalse(getWebModuleDeployedName() + "/WEB-INF/lib/LocalWebLibrary.jar should exist, a build has been run", true);  
-            if(!lib.getFile(getRemoteWebLibraryDeployedName()).exists())
-                assertFalse(getWebModuleDeployedName() + "/WEB-INF/lib/RemoteWebLibProject.jar should exist, a build has been run", true);
-          
-        } catch (Exception e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }   
-    }
-
-    /**
-     * 
-     */
-    private void buildProjects() {
-        try {
-    	    ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, null);           
-        } catch (Exception e) {
-            // TODO: handle exception
-        }
-    }
-
-    /**
-     * 
-     */
-    private void checkForEmptyDeployables() {
-        try {
-            IProject remoteWeb = getProjectForRemoteWebLib();
-            IFolder[] remoteOutputFolders = ModuleCore.getOutputContainersForProject(remoteWeb);
-            IFolder folder = remoteWeb.getFolder(remoteOutputFolders[0].getName());
-            if(folder.exists())
-                assertFalse(".deployables should only exist if a build has been run", true);
-            IProject localWeb = getProjectForWebModuleAndLocalWebLib();
-            IFolder[] localOutputFolders = ModuleCore.getOutputContainersForProject(localWeb);
-            folder = remoteWeb.getFolder(localOutputFolders[0].getName());
-            if(folder.exists())
-                assertFalse(".deployables should only exist if a build has been run", true);
-        } catch (Exception e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }    
-    }
-
-	public void setupContent() throws Exception {
-		ModuleCore localModuleCore = null;
-		try {
-			getProjectForWebModuleAndLocalWebLib();
-			
-			IProject containingProject = ModuleCore.getContainingProject(getWebModuleURI());
-			localModuleCore = ModuleCore.getModuleCoreForWrite(containingProject); 
-
-			createLocalModules(localModuleCore);
-
-			// will setup and handle creating the modules model
-			getProjectForRemoteWebLib();
-
-			WorkbenchModule webModule = localModuleCore.findWorkbenchModuleByDeployName(getWebModuleDeployedName());
-
-			addDependentModule(webModule, URI.createURI("WEB-INF/lib"), getLocalWebLibraryModuleURI());
-			addDependentModule(webModule, URI.createURI("WEB-INF/lib"), getRemoteWebLibraryModuleURI());
-
-			localModuleCore.saveIfNecessary(null);
-
-		} finally {
-			if (localModuleCore != null)
-				localModuleCore.dispose();
-		}
-
-	}
-	
-	public IProject getProjectForWebModuleAndLocalWebLib() throws Exception {
-		return getWebProject(getWebModuleAndLocalWebLibModuleProjectName());
-	}
-
-	public IProject getProjectForRemoteWebLib() throws Exception {
-		return getJavaProject(getRemoteWebLibModuleProjectName());
-	}
-	public String getWebModuleAndLocalWebLibModuleProjectName() {
-		return "MyModulesProject"; //$NON-NLS-1$
-	}
-
-	public String getRemoteWebLibModuleProjectName() {
-		return "RemoteWebLibProject"; //$NON-NLS-1$
-	}
-	public IProject getWebProject(String aProjectName) throws Exception {
-		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(aProjectName);
-		if (!project.exists())
-			project = createWebProject(aProjectName);
-		return project;
-	}
-
-	public IProject getJavaProject(String aProjectName) throws Exception {
-		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(aProjectName);
-		if (!project.exists()) 
-			createJavaProject(aProjectName); 
-		return project;
-	}
-	public IProject createWebProject(String aProjectName) throws Exception {
-
-		project = ResourcesPlugin.getWorkspace().getRoot().getProject(aProjectName);
-		if (!project.exists()) {
-			WebModuleCreationDataModel dataModel = new WebModuleCreationDataModel();
-			dataModel.setProperty(WebModuleCreationDataModel.PROJECT_NAME, aProjectName);
-			dataModel.setProperty(WebModuleCreationDataModel.IS_FLEXIBLE_PROJECT, Boolean.TRUE);
-			dataModel.getDefaultOperation().run(null);
-		}
-		return ResourcesPlugin.getWorkspace().getRoot().getProject(aProjectName);
-	}
-
-	public IProject createJavaProject(String aProjectName) throws Exception {
-
-		project = ResourcesPlugin.getWorkspace().getRoot().getProject(aProjectName);
-		if (!project.exists()) {
-			JavaProjectCreationDataModel dataModel = new JavaProjectCreationDataModel();
-			dataModel.setProperty(JavaProjectCreationDataModel.PROJECT_NAME, aProjectName);
-			dataModel.getDefaultOperation().run(null);
-			project = ResourcesPlugin.getWorkspace().getRoot().getProject(aProjectName);
-			ModuleCoreNature.addModuleCoreNatureIfNecessary(project, null);
-
-			ModuleStructuralModel structuralModel = null;
-			try {
-				structuralModel = ModuleCoreNature.getModuleCoreNature(project).getModuleStructuralModelForWrite(this);
-				structuralModel.prepareProjectModulesIfNecessary();
-				ModuleCore moduleCore = (ModuleCore) structuralModel.getAdapter(ModuleCore.ADAPTER_TYPE);
-				String deployedName = aProjectName + ".jar";
-				URI moduleURI = URI.createURI(MODULE__RESOURCE_URI_PROTOCOL + aProjectName + IPath.SEPARATOR + deployedName);
-				WorkbenchModule utilityModule = addWorkbenchModule(moduleCore.getModuleModelRoot(), deployedName, moduleURI);
-				IResource sourceFolder = project.getFolder("src");
-				addResource(utilityModule, sourceFolder, "/"); //$NON-NLS-1$
-
-				ModuleType utilityModuleType = ModuleCoreFactory.eINSTANCE.createModuleType();
-				utilityModuleType.setModuleTypeId(IModuleConstants.JST_UTILITY_MODULE);
-				utilityModule.setModuleType(utilityModuleType);
-
-				structuralModel.saveIfNecessary(this);
-			} finally {
-				if (structuralModel != null)
-					structuralModel.releaseAccess(this);
-			}
-		}
-		return ResourcesPlugin.getWorkspace().getRoot().getProject(aProjectName);
-	}
-	
-	public void addResource(WorkbenchModule aModule, IResource aSourceFile, String aDeployPath) {
-		WorkbenchModuleResource resource = ModuleCoreFactory.eINSTANCE.createWorkbenchModuleResource();
-		resource.setSourcePath(URI.createURI(aSourceFile.getFullPath().toString()));
-		resource.setDeployedPath(URI.createURI(aDeployPath));
-		aModule.getResources().add(resource);
-	}
-
-	public WorkbenchModule addWorkbenchModule(ProjectModules theModules, String aDeployedName, URI aHandle) {
-		WorkbenchModule module = ModuleCoreFactory.eINSTANCE.createWorkbenchModule();
-		module.setDeployedName(aDeployedName);
-		module.setHandle(aHandle);
-		theModules.getWorkbenchModules().add(module);
-		return module;
-	}
-
-	public void addDependentModule(WorkbenchModule aModule, URI aDeployedPath, URI aHandle) {
-		DependentModule aClasspathDependentModule = ModuleCoreFactory.eINSTANCE.createDependentModule();
-		aClasspathDependentModule.setDeployedPath(aDeployedPath);
-		aClasspathDependentModule.setHandle(aHandle);
-		aModule.getModules().add(aClasspathDependentModule);
-	}
-	
-	public void createLocalModules(ModuleCore moduleCore) throws Exception {
-
-		ProjectModules projectModules = moduleCore.getModuleModelRoot();
-
-		WorkbenchModule webLibraryModule = addWorkbenchModule(projectModules, getLocalWebLibraryDeployedName(), getLocalWebLibraryModuleURI());
-		IFolder localWebLibrary = getProjectForWebModuleAndLocalWebLib().getFolder(getLocalWebLibraryFolderName());
-		if (!localWebLibrary.exists())
-			localWebLibrary.create(true, true, null);
-		addResource(webLibraryModule, localWebLibrary, "/");
-
-		ModuleType webModuleType = ModuleCoreFactory.eINSTANCE.createModuleType();
-		webModuleType.setModuleTypeId(IModuleConstants.JST_UTILITY_MODULE);
-		webLibraryModule.setModuleType(webModuleType);
-	}
-
-	public URI getWebModuleURI() {
-		return URI.createURI(MODULE__RESOURCE_URI_PROTOCOL + getWebModuleAndLocalWebLibModuleProjectName() + IPath.SEPARATOR + getWebModuleDeployedName());
-	}
-
-	public URI getLocalWebLibraryModuleURI() {
-		return URI.createURI(MODULE__RESOURCE_URI_PROTOCOL + getWebModuleAndLocalWebLibModuleProjectName() + IPath.SEPARATOR + getLocalWebLibraryDeployedName());
-	}
-
-	public URI getRemoteWebLibraryModuleURI() {
-		return URI.createURI(MODULE__RESOURCE_URI_PROTOCOL + getRemoteWebLibModuleProjectName() + IPath.SEPARATOR + getRemoteWebLibraryDeployedName());
-	}
-
-	public String getWebModuleDeployedName() {
-		return getWebModuleAndLocalWebLibModuleProjectName() + ".war"; //$NON-NLS-1$
-	}
-
-	public String getLocalWebLibraryDeployedName() {
-		return "LocalWebLibrary.jar"; //$NON-NLS-1$
-	}
-
-	public String getRemoteWebLibraryDeployedName() {
-		return getRemoteWebLibModuleProjectName() + ".jar"; //$NON-NLS-1$
-	}
-
-	public String getModulesFolder() {
-		return "MyWebModule"; //$NON-NLS-1$
-	}
-
-	public String getTestResourcePath() {
-		return "WEB-INF/web.xml"; //$NON-NLS-1$
-	}
-
-	public String getLocalWebLibraryFolderName() {
-		return "WebLibraryContents";
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/tests/modulecore/ModuleStructuralModelTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/tests/modulecore/ModuleStructuralModelTest.java
deleted file mode 100644
index 762df35..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/j2ee/tests/modulecore/ModuleStructuralModelTest.java
+++ /dev/null
@@ -1,410 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2004 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
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.j2ee.tests.modulecore;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-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.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.jst.common.jdt.internal.integration.JavaProjectCreationDataModel;
-import org.eclipse.jst.j2ee.internal.web.archive.operations.WebModuleCreationDataModel;
-import org.eclipse.jst.j2ee.internal.web.util.WebArtifactEdit;
-import org.eclipse.jst.j2ee.webapplication.WebApp;
-import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext;
-import org.eclipse.wst.common.modulecore.ArtifactEditModel;
-import org.eclipse.wst.common.modulecore.DependentModule;
-import org.eclipse.wst.common.modulecore.ModuleCore;
-import org.eclipse.wst.common.modulecore.ModuleCoreFactory;
-import org.eclipse.wst.common.modulecore.ModuleCoreNature;
-import org.eclipse.wst.common.modulecore.ModuleStructuralModel;
-import org.eclipse.wst.common.modulecore.ModuleType;
-import org.eclipse.wst.common.modulecore.ProjectModules;
-import org.eclipse.wst.common.modulecore.WorkbenchModule;
-import org.eclipse.wst.common.modulecore.WorkbenchModuleResource;
-import org.eclipse.wst.common.modulecore.internal.impl.ArtifactEditModelFactory;
-import org.eclipse.wst.common.modulecore.internal.impl.PlatformURLModuleConnection;
-import org.eclipse.wst.common.modulecore.internal.impl.ResourceTreeRoot;
-import org.eclipse.wst.common.modulecore.internal.util.IModuleConstants;
-import org.eclipse.wst.common.modulecore.internal.util.SourcePathProvider;
-import org.eclipse.wtp.j2ee.headless.tests.plugin.AllPluginTests;
-
-/**
- * <p>
- * The following class is experimental until fully documented.
- * </p>
- */
-public class ModuleStructuralModelTest extends TestCase {
-
-	public static final String MODULE__RESOURCE_URI_PROTOCOL = "module:/resource/";
-	private IProject project;
-	private EMFWorkbenchContext emfContext;
-
-	public interface IModuleTypesConstants {
-		String MODULE_TYPE_WEB = "org.eclipse.jst.modules.web"; //$NON-NLS-1$
-	}
-
-
-	public ModuleStructuralModelTest(String name) {
-		super(name);
-	}
-
-	public static Test suite() {
-		// return new TestSuite(ModuleEditModelTest.class);
-		TestSuite suite = new TestSuite();
-		suite.addTest(new ModuleStructuralModelTest("testResolveDependentModule"));
-		return suite;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see junit.framework.TestCase#setUp()
-	 */
-	public void setUp() throws Exception {
-		getProjectForWebModuleAndLocalWebLib().delete(true, null);
-		getProjectForRemoteWebLib().delete(true, null);
-		setupContent();
-		super.setUp();
-	}
-
-	/**
-	 * 
-	 */
-	public void testResourceTree() throws Exception {
-		ModuleCore moduleCore = null; 
-		try {
-			/* We need to find the project */
-			moduleCore = ModuleCore.getModuleCoreForRead(ModuleCore.getContainingProject(getWebModuleURI()));
-			
-			WorkbenchModule module = moduleCore.getWorkbenchModules()[0];
-			ResourceTreeRoot sourceRoot = new ResourceTreeRoot(module, SourcePathProvider.INSTANCE); 
-			WorkbenchModuleResource[] resources = sourceRoot.findModuleResources(URI.createURI("/"+getWebModuleAndLocalWebLibModuleProjectName()+"/WebContent/WEB-INF/web.xml"));
-			System.out.println(resources[0] != null ? resources[0].getSourcePath().toString() : "NOT FOUND");
-
-		} finally {
-			if (moduleCore != null)
-				moduleCore.dispose();
-		}
-
-	}
-
-	public void testResolveDependentModule() throws Exception {
-
-		ModuleCore moduleCore = null;
-		try {
-			IProject containingProject = ModuleCore.getContainingProject(getWebModuleURI()); 
-			moduleCore = ModuleCore.getModuleCoreForRead(containingProject);
-			WorkbenchModule[] modules = moduleCore.getWorkbenchModules();
-			ProjectModules pm = moduleCore.getModuleModelRoot();
-			Class clazz = moduleCore.getClass();
-			String name = ModuleCore.getDeployedName(getWebModuleURI());
-			List dependentModules = null;
-			for(int i=0; i<modules.length; i++) {
-				System.out.println("Module: "+modules[i].getDeployedName());
-				List list = modules[i].getResources();
-				for (int j = 0; j < list.size(); j++) {
-					WorkbenchModuleResource wmr = (WorkbenchModuleResource)list.get(j);
-					IResource er = ModuleCore.getEclipseResource(wmr);
-				}
-				// test modulecore API
-				dependentModules = modules[i].getModules(); 			
-				for(int dependentIndex=0; dependentIndex<dependentModules.size(); dependentIndex++) {
-					DependentModule dependentModule = (DependentModule)dependentModules.get(dependentIndex);
-					WorkbenchModule resolvedModule = moduleCore.findWorkbenchModuleByModuleURI(dependentModule.getHandle());
-					System.out.println("\tDependentModule: "+resolvedModule.getDeployedName()+ " in " + resolvedModule.getHandle());
-					boolean b = moduleCore.isLocalDependency(dependentModule);
-				}
-			}
-		} finally {
-			if(moduleCore != null)
-				moduleCore.dispose();	
-		}
-	}
-
-	public void testLoadResource() throws Exception {
-
-		ArtifactEditModel artifactModel = null;
-		try {
-			URI moduleURI = URI.createURI(MODULE__RESOURCE_URI_PROTOCOL + getWebModuleAndLocalWebLibModuleProjectName() + "/" + getWebModuleAndLocalWebLibModuleProjectName() + ".war");
-			artifactModel = getNature(getProjectForWebModuleAndLocalWebLib()).getArtifactEditModelForRead(moduleURI, this);
-			WebArtifactEdit editUtility = (WebArtifactEdit) artifactModel.getAdapter(WebArtifactEdit.ADAPTER_TYPE);
-
-			WebApp webApp = editUtility.getWebApplication();
-			if (webApp == null)
-				System.out.println("Read failed.");
-			else
-				System.out.println("Found WebApp: " + webApp.getDisplayName());
-		} finally {
-			if (artifactModel != null)
-				artifactModel.releaseAccess(this);
-		}
-	}
-
-	public void testURIAPI() throws Exception {
-		URI uri = URI.createURI(MODULE__RESOURCE_URI_PROTOCOL + getWebModuleAndLocalWebLibModuleProjectName() + IPath.SEPARATOR + getWebModuleDeployedName() + ".war" + IPath.SEPARATOR + getTestResourcePath());
-		System.out.println("URI : \"" + uri.toString() + "\"" + " with scheme \"" + uri.scheme() + "\" has " + uri.segmentCount() + " segments. They are ...");
-		String[] segments = uri.segments();
-		for (int i = 0; i < segments.length; i++)
-			System.out.println("[" + i + "]: " + segments[i]);
-
-
-		/* Determine if the URI is for a resource or binary module */
-
-		if (PlatformURLModuleConnection.RESOURCE_MODULE.equals(segments[0])) {
-			ModuleCore moduleCore = null;
-			try {
-				moduleCore = ModuleCore.getModuleCoreForRead(ModuleCore.getContainingProject(uri)); 
-				WorkbenchModuleResource[] resource = moduleCore.findWorkbenchModuleResourceByDeployPath(uri);
-				System.out.println(resource != null ? resource[0].getSourcePath().toString() : "NOT FOUND");
-			} finally {
-				if (moduleCore != null)
-					moduleCore.dispose();
-			}
-		} else if (PlatformURLModuleConnection.BINARY_MODULE.equals(segments[0])) {
-
-		}
-	}
-
-	public void testLoadingDocument() throws Exception {
-		ArtifactEditModelFactory factory = new ArtifactEditModelFactory();
-
-		URI moduleURI = URI.createURI(PlatformURLModuleConnection.MODULE_PROTOCOL + IPath.SEPARATOR + getWebModuleAndLocalWebLibModuleProjectName() + IPath.SEPARATOR + getWebModuleDeployedName());
-		URI ddURI = URI.createURI(IPath.SEPARATOR + "WEB-INF" + IPath.SEPARATOR + "web.xml");
-
-		Map params = new HashMap();
-		params.put(ArtifactEditModelFactory.PARAM_MODULE_URI, moduleURI);
-		EMFWorkbenchContext context = createEMFWorkbenchContext();
-		ArtifactEditModel editModel = (ArtifactEditModel) factory.createEditModelForWrite(IModuleTypesConstants.MODULE_TYPE_WEB, context, params);
-		Resource ddResource = editModel.getResource(ddURI);
-		EObject rootObject = (EObject) ddResource.getContents().get(0);
-		if (rootObject == null)
-			System.out.println("Read failed.");
-		else
-			System.out.println("Found WebApp: " + ((WebApp) rootObject).getDisplayName());
-
-	}
-
-	public void setupContent() throws Exception {
-		ModuleCore localModuleCore = null;
-		try {
-			getProjectForWebModuleAndLocalWebLib();
-			
-			IProject containingProject = ModuleCore.getContainingProject(getWebModuleURI());
-			localModuleCore = ModuleCore.getModuleCoreForWrite(containingProject); 
-
-			createLocalModules(localModuleCore);
-
-			// will setup and handle creating the modules model
-			getProjectForRemoteWebLib();
-
-			WorkbenchModule webModule = localModuleCore.findWorkbenchModuleByDeployName(getWebModuleDeployedName());
-
-			addDependentModule(webModule, URI.createURI("WEB-INF/lib"), getLocalWebLibraryModuleURI());
-			addDependentModule(webModule, URI.createURI("WEB-INF/lib"), getRemoteWebLibraryModuleURI());
-
-			localModuleCore.saveIfNecessary(null);
-
-		} finally {
-			if (localModuleCore != null)
-				localModuleCore.dispose();
-		}
-
-	}
-
-	public void createLocalModules(ModuleCore moduleCore) throws Exception {
-
-		ProjectModules projectModules = moduleCore.getModuleModelRoot();
-
-		WorkbenchModule webLibraryModule = addWorkbenchModule(projectModules, getLocalWebLibraryDeployedName(), getLocalWebLibraryModuleURI());
-		IFolder localWebLibrary = getProjectForWebModuleAndLocalWebLib().getFolder(getLocalWebLibraryFolderName());
-		if (!localWebLibrary.exists())
-			localWebLibrary.create(true, true, null);
-		addResource(webLibraryModule, localWebLibrary, "/");
-
-		ModuleType webModuleType = ModuleCoreFactory.eINSTANCE.createModuleType();
-		webModuleType.setModuleTypeId(IModuleConstants.JST_UTILITY_MODULE);
-		webLibraryModule.setModuleType(webModuleType);
-	}
-
-	public IFile getModuleRelativeFile(String aModuleRelativePath) throws Exception {
-		return getProjectForWebModuleAndLocalWebLib().getFile(new Path(getModulesFolder() + IPath.SEPARATOR + aModuleRelativePath));
-	}
-
-	public void addResource(WorkbenchModule aModule, IResource aSourceFile, String aDeployPath) {
-		WorkbenchModuleResource resource = ModuleCoreFactory.eINSTANCE.createWorkbenchModuleResource();
-		resource.setSourcePath(URI.createURI(aSourceFile.getFullPath().toString()));
-		resource.setDeployedPath(URI.createURI(aDeployPath));
-		aModule.getResources().add(resource);
-	}
-
-	public WorkbenchModule addWorkbenchModule(ProjectModules theModules, String aDeployedName, URI aHandle) {
-		WorkbenchModule module = ModuleCoreFactory.eINSTANCE.createWorkbenchModule();
-		module.setDeployedName(aDeployedName);
-		module.setHandle(aHandle);
-		theModules.getWorkbenchModules().add(module);
-		return module;
-	}
-
-	public void addDependentModule(WorkbenchModule aModule, URI aDeployedPath, URI aHandle) {
-		DependentModule aClasspathDependentModule = ModuleCoreFactory.eINSTANCE.createDependentModule();
-		aClasspathDependentModule.setDeployedPath(aDeployedPath);
-		aClasspathDependentModule.setHandle(aHandle);
-		aModule.getModules().add(aClasspathDependentModule);
-	}
-
-
-	public EMFWorkbenchContext createEMFWorkbenchContext() throws Exception {
-		if (emfContext == null)
-			emfContext = new EMFWorkbenchContext(getProjectForWebModuleAndLocalWebLib());
-		return emfContext;
-	}
-
-	public IProject getProjectForWebModuleAndLocalWebLib() throws Exception {
-		return getWebProject(getWebModuleAndLocalWebLibModuleProjectName());
-	}
-
-	public IProject getProjectForRemoteWebLib() throws Exception {
-		return getJavaProject(getRemoteWebLibModuleProjectName());
-	}
-
-	public IProject getWebProject(String aProjectName) throws Exception {
-		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(aProjectName);
-		if (!project.exists())
-			project = createWebProject(aProjectName);
-		return project;
-	}
-
-	public IProject getJavaProject(String aProjectName) throws Exception {
-		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(aProjectName);
-		if (!project.exists()) 
-			createJavaProject(aProjectName); 
-		return project;
-	}
-
-	public IProject createWebProject(String aProjectName) throws Exception {
-
-		project = ResourcesPlugin.getWorkspace().getRoot().getProject(aProjectName);
-		if (!project.exists()) {
-			WebModuleCreationDataModel dataModel = new WebModuleCreationDataModel();
-			dataModel.setProperty(WebModuleCreationDataModel.PROJECT_NAME, aProjectName);
-			dataModel.setProperty(WebModuleCreationDataModel.IS_FLEXIBLE_PROJECT, Boolean.TRUE);
-			dataModel.setProperty(WebModuleCreationDataModel.ADD_TO_EAR, Boolean.FALSE);
-			dataModel.setProperty(WebModuleCreationDataModel.ADD_SERVER_TARGET, Boolean.FALSE);
-//			dataModel.setProperty(WebModuleCreationDataModel.SERVER_TARGET_ID, AllPluginTests.JONAS_SERVER.getId());
-			dataModel.getDefaultOperation().run(null);
-		}
-		return ResourcesPlugin.getWorkspace().getRoot().getProject(aProjectName);
-	}
-
-	public IProject createJavaProject(String aProjectName) throws Exception {
-
-		project = ResourcesPlugin.getWorkspace().getRoot().getProject(aProjectName);
-		if (!project.exists()) {
-			JavaProjectCreationDataModel dataModel = new JavaProjectCreationDataModel();
-			dataModel.setProperty(JavaProjectCreationDataModel.PROJECT_NAME, aProjectName);
-			dataModel.getDefaultOperation().run(null);
-			project = ResourcesPlugin.getWorkspace().getRoot().getProject(aProjectName);
-			ModuleCoreNature.addModuleCoreNatureIfNecessary(project, null);
-
-			ModuleStructuralModel structuralModel = null;
-			try {
-				structuralModel = ModuleCoreNature.getModuleCoreNature(project).getModuleStructuralModelForWrite(this);
-				structuralModel.prepareProjectModulesIfNecessary();
-				ModuleCore moduleCore = (ModuleCore) structuralModel.getAdapter(ModuleCore.ADAPTER_TYPE);
-				String deployedName = aProjectName + ".jar";
-				URI moduleURI = URI.createURI(MODULE__RESOURCE_URI_PROTOCOL + aProjectName + IPath.SEPARATOR + deployedName);
-				WorkbenchModule utilityModule = addWorkbenchModule(moduleCore.getModuleModelRoot(), deployedName, moduleURI);
-				IResource sourceFolder = project.getFolder("src");
-				addResource(utilityModule, sourceFolder, "/"); //$NON-NLS-1$
-
-				ModuleType utilityModuleType = ModuleCoreFactory.eINSTANCE.createModuleType();
-				utilityModuleType.setModuleTypeId(IModuleConstants.JST_UTILITY_MODULE);
-				utilityModule.setModuleType(utilityModuleType);
-
-				structuralModel.saveIfNecessary(this);
-			} finally {
-				if (structuralModel != null)
-					structuralModel.releaseAccess(this);
-			}
-		}
-		return ResourcesPlugin.getWorkspace().getRoot().getProject(aProjectName);
-	}
-
-	public ModuleCoreNature getNature(IProject aProject) {
-		try {
-			return (ModuleCoreNature) aProject.getNature(ModuleCoreNature.MODULE_NATURE_ID);
-		} catch (CoreException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-
-	public URI getWebModuleURI() {
-		return URI.createURI(MODULE__RESOURCE_URI_PROTOCOL + getWebModuleAndLocalWebLibModuleProjectName() + IPath.SEPARATOR + getWebModuleDeployedName());
-	}
-
-	public URI getLocalWebLibraryModuleURI() {
-		return URI.createURI(MODULE__RESOURCE_URI_PROTOCOL + getWebModuleAndLocalWebLibModuleProjectName() + IPath.SEPARATOR + getLocalWebLibraryDeployedName());
-	}
-
-	public URI getRemoteWebLibraryModuleURI() {
-		return URI.createURI(MODULE__RESOURCE_URI_PROTOCOL + getRemoteWebLibModuleProjectName() + IPath.SEPARATOR + getRemoteWebLibraryDeployedName());
-	}
-
-	public String getWebModuleAndLocalWebLibModuleProjectName() {
-		return "MyModulesProject"; //$NON-NLS-1$
-	}
-
-	public String getRemoteWebLibModuleProjectName() {
-		return "RemoteWebLibProject"; //$NON-NLS-1$
-	}
-
-	public String getWebModuleDeployedName() {
-		return getWebModuleAndLocalWebLibModuleProjectName() + ".war"; //$NON-NLS-1$
-	}
-
-	public String getLocalWebLibraryDeployedName() {
-		return "LocalWebLibrary.jar"; //$NON-NLS-1$
-	}
-
-	public String getRemoteWebLibraryDeployedName() {
-		return getRemoteWebLibModuleProjectName() + ".jar"; //$NON-NLS-1$
-	}
-
-	public String getModulesFolder() {
-		return "MyWebModule"; //$NON-NLS-1$
-	}
-
-	public String getTestResourcePath() {
-		return "WEB-INF/web.xml"; //$NON-NLS-1$
-	}
-
-	public String getLocalWebLibraryFolderName() {
-		return "WebLibraryContents";
-	}
-
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/appclient/operations/AllTests.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/appclient/operations/AllTests.java
deleted file mode 100644
index a042c18..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/appclient/operations/AllTests.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Created on Feb 2, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.appclient.operations;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * @author jsholl
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class AllTests extends TestSuite {
-    public static Test suite(){
-        return new AllTests();
-    }
-    
-    public AllTests(){
-        super("App Client Tests");
-        addTest(AppClientExportOperationTest.suite());
-        addTest(AppClientImportOperationTest.suite());
-        addTest(AppClientProjectCreationOperationTest.suite());
-        addTest(AppClientProjectTest.suite());
-    }
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/appclient/operations/AppClientExportOperationTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/appclient/operations/AppClientExportOperationTest.java
deleted file mode 100644
index dbf6e6a..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/appclient/operations/AppClientExportOperationTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Created on Jan 6, 2004
- * 
- * To change the template for this generated file go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.appclient.operations;
-
-import junit.framework.Test;
-
-import org.eclipse.jst.j2ee.application.operations.AppClientModuleExportDataModel;
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleExportDataModel;
-import org.eclipse.wst.common.tests.SimpleTestSuite;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleExportOperationTestCase;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase;
-
-/**
- * @author Administrator
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-public class AppClientExportOperationTest extends ModuleExportOperationTestCase {
-
-	public AppClientExportOperationTest(String name) {
-		super(name);
-	}
-	public static Test suite() {
-		return new SimpleTestSuite(AppClientExportOperationTest.class);
-	}
-	
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleExportOperationTestCase#getModelInstance()
-	 */
-	protected J2EEModuleExportDataModel getModelInstance() {
-		return new AppClientModuleExportDataModel();
-	}
-	
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleExportOperationTestCase#getImportTestCase()
-	 */
-	protected ModuleImportOperationTestCase getImportTestCase() {
-		return new AppClientImportOperationTest("");
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/appclient/operations/AppClientImportOperationTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/appclient/operations/AppClientImportOperationTest.java
deleted file mode 100644
index 280d8c5..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/appclient/operations/AppClientImportOperationTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Created on Jan 6, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.appclient.operations;
-
-import junit.framework.Test;
-
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleImportDataModel;
-import org.eclipse.jst.j2ee.applicationclient.creation.AppClientModuleImportDataModel;
-import org.eclipse.wst.common.tests.SimpleTestSuite;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class AppClientImportOperationTest extends ModuleImportOperationTestCase {
-	
-	public AppClientImportOperationTest(String name) {
-		super(name);
-	}
-	
-	public static Test suite() {
-		return new SimpleTestSuite(AppClientImportOperationTest.class);
-	}
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase#getDirectory()
-	 */
-	protected String getDirectory() {
-		return "AppClientTests";
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase#getModelInstance()
-	 */
-	protected J2EEModuleImportDataModel getModelInstance() {
-		return new AppClientModuleImportDataModel();
-	}
- 
-
-	
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/appclient/operations/AppClientProjectCreationOperationTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/appclient/operations/AppClientProjectCreationOperationTest.java
deleted file mode 100644
index b4d47f4..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/appclient/operations/AppClientProjectCreationOperationTest.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Created on Nov 6, 2003
- *
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.appclient.operations;
-
-import junit.framework.Test;
-
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleCreationDataModel;
-import org.eclipse.jst.j2ee.applicationclient.creation.AppClientModuleCreationDataModel;
-import org.eclipse.wst.common.tests.SimpleTestSuite;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleProjectCreationOperationTest;
-
-/**
- * @author jsholl
- *
- * To change the template for this generated type comment go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-public class AppClientProjectCreationOperationTest extends ModuleProjectCreationOperationTest {
-
-    public static String DEFAULT_PROJECT_NAME = "SimpleAppClient";
-    
-    public static Test suite() {
-        return new SimpleTestSuite(AppClientProjectCreationOperationTest.class);
-    }
-
-    public J2EEModuleCreationDataModel getProjectCreationDataModel() {
-        return new AppClientModuleCreationDataModel();
-    }
-
-
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/appclient/operations/AppClientProjectTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/appclient/operations/AppClientProjectTest.java
deleted file mode 100644
index 19fac16..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/appclient/operations/AppClientProjectTest.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Created on Jan 6, 2004
- * 
- * To change the template for this generated file go to Window - Preferences -
- * Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.appclient.operations;
-
-import junit.framework.Test;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleCreationDataModel;
-import org.eclipse.jst.j2ee.applicationclient.creation.AppClientModuleCreationDataModel;
-import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
-import org.eclipse.wst.common.tests.ProjectUtility;
-import org.eclipse.wst.common.tests.SimpleTestSuite;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.AbstractProjectCreationTest;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.RandomObjectGenerator;
-
-/**
- * @author blancett
- * 
- * To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Generation - Code and Comments
- */
-public class AppClientProjectTest extends AbstractProjectCreationTest {
-
-	public void testVaild12ApplicationClientProjectNameCreationWithAlphabetChars() throws Exception {
-		org.eclipse.wst.common.tests.ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++) {
-			createVaildProjectNameCreationWithAlphabetChars(APPLICATION_CLIENT_PROJECT, J2EEVersionConstants.J2EE_1_2_ID, false);
-			addJavaMainClassToApplicationModel(ProjectUtility.getProject(projectName));
-		}
-	}
-
-	public void testVaild12ApplicationClientCreationWithMixedChars() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++)
-			createVaildProjectNameCreationWithAlphabetChars(APPLICATION_CLIENT_PROJECT, J2EEVersionConstants.J2EE_1_2_ID, true);
-	}
-
-	public void testVaild13ApplicationClientNameCreationWithAlphabetChars() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++)
-			createVaildProjectNameCreationWithAlphabetChars(APPLICATION_CLIENT_PROJECT, J2EEVersionConstants.J2EE_1_3_ID, false);
-	}
-
-	public void testVaild13ApplicationClientNameCreationAllChars() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		setupEARProject("test", J2EEVersionConstants.J2EE_1_3_ID);
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++) {
-			IProject javaProject = ProjectUtility.getProject("testapp");
-			AppClientModuleCreationDataModel model = new AppClientModuleCreationDataModel();
-			model.setProperty(AppClientModuleCreationDataModel.PROJECT_NAME, javaProject.getName());
-			//model.setProperty(AppClientProjectCreationDataModel.PROJECT_LOCATION, javaProject.getLocation().toOSString());
-			model.setIntProperty(AppClientModuleCreationDataModel.J2EE_MODULE_VERSION, J2EEVersionConstants.J2EE_1_3_ID);
-			createAppClientProject(model, ProjectUtility.getProject("test"));
-		}
-	}
-
-	public void testVaildRandomVersionsApplicationProjectNameCreationAllChars() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++) {
-			if (RandomObjectGenerator.createRandomProjectNumber() % 2 == 0)
-				createVaildProjectNameCreationWithAlphabetChars(APPLICATION_CLIENT_PROJECT, J2EEVersionConstants.J2EE_1_3_ID, true);
-			else
-				createVaildProjectNameCreationWithAlphabetChars(APPLICATION_CLIENT_PROJECT, J2EEVersionConstants.J2EE_1_2_ID, true);
-		}
-	}
-
-	public void testInVaild12ApplicationClientNameCreation() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++) {
-			try {
-				J2EEModuleCreationDataModel model = setupApplicationClientProject(RandomObjectGenerator.createInvalidRandomProjectName(), J2EEVersionConstants.J2EE_1_2_ID);
-				ProjectUtility.verifyProject(model.getStringProperty(J2EEModuleCreationDataModel.PROJECT_NAME), true);
-			} catch (Exception e) {
-				if (e instanceof IllegalArgumentException) {
-					System.out.println(ILLEGAL_PROJECT_NAME_MESSAGE + projectName);
-				} else
-					new Exception(UNEXPECTED_ERROR_MESSAGE);
-			} finally {
-				new Exception(TEST_FAILED_MESSAGE);
-			}
-		}
-	}
-
-    public static Test suite() {
-        return new SimpleTestSuite(AppClientProjectTest.class);
-    }
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/ear/operations/AllTests.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/ear/operations/AllTests.java
deleted file mode 100644
index 81eacc4..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/ear/operations/AllTests.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Created on Feb 2, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.ear.operations;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * @author jsholl
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class AllTests extends TestSuite {
-
-    public static Test suite(){
-        return new AllTests();
-    }
-    
-    public AllTests(){
-        super("EAR Tests");
-        addTest(EARExportOperationTest.suite());
-        addTest(EARImportOperationTest.suite());
-        addTest(EARProjectCreationOperationTest.suite());
-        addTest(EARProjectCreationTest.suite());
-    }
-    
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/ear/operations/EARExportOperationTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/ear/operations/EARExportOperationTest.java
deleted file mode 100644
index 0e8b800..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/ear/operations/EARExportOperationTest.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Created on Jan 6, 2004
- * 
- * To change the template for this generated file go to Window - Preferences - Java - Code Generation - Code and
- * Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.ear.operations;
-
-import junit.framework.Test;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.jst.j2ee.application.operations.EnterpriseApplicationExportDataModel;
-import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin;
-import org.eclipse.wst.common.tests.SimpleTestSuite;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.OperationTestCase;
-
-/**
- * @author Changeme
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code Generation - Code
- * and Comments
- */
-public class EARExportOperationTest extends OperationTestCase {
-
-    public static String fileSep = System.getProperty("file.separator");
-
-    public EARExportOperationTest() {
-        super();
-    }
-    public EARExportOperationTest(String name) {
-        super(name);
-    }
-    public static Test suite() {
-        return new SimpleTestSuite(EARExportOperationTest.class);
-    }
-
-    public static void exportEARProject(String projectName, IPath exportPath, boolean exportSource) throws Exception {
-    	EnterpriseApplicationExportDataModel model = new EnterpriseApplicationExportDataModel();
-        model.setProperty(EnterpriseApplicationExportDataModel.PROJECT_NAME, projectName);
-        model.setProperty(EnterpriseApplicationExportDataModel.ARCHIVE_DESTINATION, exportPath.toOSString());
-        model.setBooleanProperty(EnterpriseApplicationExportDataModel.EXPORT_SOURCE_FILES, exportSource);
-        runAndVerify(model);
-    }
-
-    public static void exportEARProjectWithMetaData(String projectName, IPath exportPath, boolean exportSource) throws Exception {
-    	EnterpriseApplicationExportDataModel model = new EnterpriseApplicationExportDataModel();
-        model.setProperty(EnterpriseApplicationExportDataModel.PROJECT_NAME, projectName);
-        model.setProperty(EnterpriseApplicationExportDataModel.ARCHIVE_DESTINATION, exportPath.toOSString());
-        model.setBooleanProperty(EnterpriseApplicationExportDataModel.EXPORT_SOURCE_FILES, exportSource);
-        model.setBooleanProperty(EnterpriseApplicationExportDataModel.OVERWRITE_EXISTING, true);
-        model.setBooleanProperty(EnterpriseApplicationExportDataModel.INCLUDE_BUILD_PATH_AND_META_FILES, true);
-        runAndVerify(model);
-    }
-
-    public void testEAR12Export() throws Exception {
-        String projectName = "Test12WEBEJBEAR";
-        String earName = "TestData" + fileSep + "EARImportTests" + fileSep + "Test12WEBEJBEAR.ear";
-        EARImportOperationTest.load(projectName, earName);
-        exportEARProject("Test12WEBEJBEAR", J2EEPlugin.getWorkspace().getRoot().getLocation().append("Test12WEBEJBEAR.ear"), false);
-    }
-    public void testEARExportWithMetaData() throws Exception {
-        String projectName = "Test14WEBEJBEARWithMetaData";
-        String earName = "TestData" + fileSep + "EARImportTests" + fileSep + "Test14WEBEJBEARWithMetaData.ear";
-        EARImportOperationTest.load(projectName, earName);
-        exportEARProjectWithMetaData("Test14WEBEJBEARWithMetaData", J2EEPlugin.getWorkspace().getRoot().getLocation().append("Test14WEBEJBEARWithMetaData.ear"), true);
-    }
-    public void testEARExportWithSource() throws Exception {
-        String projectName = "Test14WEBEJBEAR";
-        String earName = "TestData" + fileSep + "EARImportTests" + fileSep + "Test14WEBEJBEAR.ear";
-        EARImportOperationTest.load(projectName, earName);
-        exportEARProject("Test14WEBEJBEAR", J2EEPlugin.getWorkspace().getRoot().getLocation().append("Test14WEBEJBEAR.ear"), true);
-    }
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/ear/operations/EARImportOperationTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/ear/operations/EARImportOperationTest.java
deleted file mode 100644
index 46b4817..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/ear/operations/EARImportOperationTest.java
+++ /dev/null
@@ -1,294 +0,0 @@
-package org.eclipse.wtp.j2ee.headless.tests.ear.operations;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.Test;
-
-import org.eclipse.jst.j2ee.application.operations.EnterpriseApplicationCreationDataModel;
-import org.eclipse.jst.j2ee.application.operations.EnterpriseApplicationImportDataModel;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.File;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.impl.FileImpl;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.impl.WARFileImpl;
-import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
-import org.eclipse.wst.common.tests.LogUtility;
-import org.eclipse.wst.common.tests.ProjectUtility;
-import org.eclipse.wst.common.tests.SimpleTestSuite;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.OperationTestCase;
-import org.eclipse.wtp.j2ee.headless.tests.plugin.HeadlessTestsPlugin;
-
-/**
- * @author vijayb
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code Generation - Code
- * and Comments
- */
-public class EARImportOperationTest extends OperationTestCase {
-
-    public static String fileSep = System.getProperty("file.separator");
-
-    /**
-     *  
-     */
-    public EARImportOperationTest() {
-        super();
-    }
-
-    public List getUtilityJarsInEAR(EARFile earFile) {
-        List utilJars = new ArrayList();
-        try {
-            List files = earFile.getArchiveFiles();
-            for (int i = 0; i < files.size(); i++) {
-                FileImpl file = (FileImpl) files.get(i);
-                if (file.isArchive() && !file.isModuleFile() && file.getURI().endsWith(".jar")) //$NON-NLS-1$
-                    utilJars.add(file);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return utilJars;
-    }
-
-    public void testEARImportRootLocation() throws Exception {
-    	EnterpriseApplicationImportDataModel importModel = null;
-        String projectName = "Test13WEBEJBEAR";
-        String earName = getFullTestDataPath("TestData" + fileSep + "EARImportTests" + fileSep + "Test13WEBEJBEAR.ear");
-        try {
-            importModel = new EnterpriseApplicationImportDataModel();
-            importModel.setProperty(EnterpriseApplicationCreationDataModel.PROJECT_NAME, projectName);
-            importModel.setProperty(EnterpriseApplicationImportDataModel.FILE_NAME, earName);
-            importModel.setIntProperty(EnterpriseApplicationCreationDataModel.APPLICATION_VERSION, J2EEVersionConstants.J2EE_1_3_ID);
-            importModel.setProperty(EnterpriseApplicationCreationDataModel.PROJECT_LOCATION, "c:" + fileSep + "EARTestTemp");
-            importModel.setProperty(EnterpriseApplicationImportDataModel.NESTED_MODULE_ROOT, "c:" + fileSep + "EARTestModulesTemp");
-            runAndVerify(importModel);
-        } finally {
-            importModel.dispose();
-        }
-    }
-    
-    //TODO M4 Action Item - enable the util jar tests after the fixes for util jar import are available in M4
-
-    /*public void testImportSomeUtilityJarsExploded() throws Exception {
-        String projectName = "UtilityJarTestEAR";
-        String earName = getFullTestDataPath("TestData" + fileSep + "EARImportTests" + fileSep + "UtilityJarTestEAR.ear");
-        EnterpriseApplicationImportDataModel importModel = null;
-        try {
-            importModel = new EnterpriseApplicationImportDataModel();
-            importModel.setProperty(EnterpriseApplicationCreationDataModel.PROJECT_NAME, projectName);
-            importModel.setProperty(EnterpriseApplicationImportDataModel.FILE_NAME, earName);
-            importModel.setIntProperty(EnterpriseApplicationCreationDataModel.APPLICATION_VERSION, J2EEVersionConstants.J2EE_1_3_ID);
-            EARFile file = importModel.getEARFile();
-            List utilJars = getUtilityJarsInEAR(file);
-            if (!utilJars.isEmpty()) {
-                utilJars.remove(0);
-                utilJars.remove(2);
-                importModel.setProperty(EnterpriseApplicationImportDataModel.UTILITY_LIST, utilJars);
-            }
-            //TODO to be changed when the new property is available, EARImportDataModel.CREATE_BINARY_PROJECT is
-            // removed
-            //importModel.setBooleanProperty(EARImportDataModel.CREATE_BINARY_PROJECT, false);
-            runAndVerify(importModel);
-        } finally {
-            importModel.dispose();
-        }
-    }
-
-    public void testImportUtilityJarsExploded() throws Exception {
-        String projectName = "UtilityJarTestEAR";
-        String earName = getFullTestDataPath("TestData" + fileSep + "EARImportTests" + fileSep + "UtilityJarTestEAR.ear");
-        EnterpriseApplicationImportDataModel importModel = null;
-        try {
-            importModel = new EnterpriseApplicationImportDataModel();
-            importModel.setProperty(EnterpriseApplicationCreationDataModel.PROJECT_NAME, projectName);
-            importModel.setProperty(EnterpriseApplicationImportDataModel.FILE_NAME, earName);
-            importModel.setIntProperty(EnterpriseApplicationCreationDataModel.APPLICATION_VERSION, J2EEVersionConstants.J2EE_1_3_ID);
-            EARFile file = importModel.getEARFile();
-            List utilJars = getUtilityJarsInEAR(file);
-            if (!utilJars.isEmpty())
-                importModel.setProperty(EnterpriseApplicationImportDataModel.UTILITY_LIST, utilJars);
-            //TODO to be changed when the new property is available, EARImportDataModel.CREATE_BINARY_PROJECT is
-            // removed
-            //importModel.setBooleanProperty(EARImportDataModel.CREATE_BINARY_PROJECT, false);
-            runAndVerify(importModel);
-        } finally {
-            importModel.dispose();
-        }
-    }
-    
-    public void testImportWebLibWithMetaData() throws Exception {
-        String projectName = "YourCompanyExampleEAR";
-        String earName = getFullTestDataPath("TestData" + fileSep + "EARImportTests" + fileSep + "YourCompanyExampleEAR.ear");
-        EnterpriseApplicationImportDataModel importModel = null;
-        try {
-            importModel = new EnterpriseApplicationImportDataModel();
-            importModel.setProperty(EnterpriseApplicationCreationDataModel.PROJECT_NAME, projectName);
-            importModel.setProperty(EnterpriseApplicationImportDataModel.FILE_NAME, earName);
-            importModel.setIntProperty(EnterpriseApplicationCreationDataModel.APPLICATION_VERSION, J2EEVersionConstants.J2EE_1_3_ID);
-            EARFile file = importModel.getEARFile();
-            List webLibs = getWebLibs(file);
-            //TODO to be changed when the new property is available, EARImportDataModel.CREATE_BINARY_PROJECT is
-            // removed
-            //importModel.setBooleanProperty(EARImportDataModel.CREATE_BINARY_PROJECT, false);
-            List projectModels = importModel.getProjectModels();
-            for (int i = 0; i < projectModels.size(); i++) {
-                if (projectModels.get(i) instanceof J2EEModuleCreationDataModel) {
-                    J2EEModuleCreationDataModel projectDataModel = (J2EEModuleCreationDataModel) projectModels.get(i);
-                    if (projectDataModel.getJ2EENatureID().equals(J2EEWebNatureRuntime.J2EE_NATURE_ID)) {
-                        projectDataModel.setProperty(WebModuleCreationDataModel.JAR_LIST_TEXT_UI, webLibs);
-                    }
-                }
-            }
-            importModel.setBooleanProperty(EnterpriseApplicationImportDataModel.PRESERVE_PROJECT_METADATA, true);
-            runAndVerify(importModel);
-        } finally {
-            importModel.dispose();
-        }
-    }*/
-    //TODO M4 Action Item - enable the util jar tests after the fixes for util jar import are available in M4
-    /*public void testImportUtilityJarsAndWebLibWithMetaData() throws Exception {
-        String projectName = "UtilityJarWebLibWithMetaDataFilesEAR";
-        String earName = getFullTestDataPath("TestData" + fileSep + "EARImportTests" + fileSep + "UtilityJarWebLibWithMetaDataFilesEAR.ear");
-        EnterpriseApplicationImportDataModel importModel = null;
-        try {
-            importModel = new EnterpriseApplicationImportDataModel();
-            importModel.setProperty(EnterpriseApplicationCreationDataModel.PROJECT_NAME, projectName);
-            importModel.setProperty(EnterpriseApplicationImportDataModel.FILE_NAME, earName);
-            importModel.setIntProperty(EnterpriseApplicationCreationDataModel.APPLICATION_VERSION, J2EEVersionConstants.J2EE_1_3_ID);
-            EARFile file = importModel.getEARFile();
-            List utilJars = getUtilityJarsInEAR(file);
-            if (!utilJars.isEmpty())
-                importModel.setProperty(EnterpriseApplicationImportDataModel.UTILITY_LIST, utilJars);
-            List webLibs = getWebLibs(file);
-            //TODO to be changed when the new property is available, EARImportDataModel.CREATE_BINARY_PROJECT is
-            // removed
-            //importModel.setBooleanProperty(EARImportDataModel.CREATE_BINARY_PROJECT, false);
-            List projectModels = importModel.getProjectModels();
-            for (int i = 0; i < projectModels.size(); i++) {
-                if (projectModels.get(i) instanceof J2EEModuleCreationDataModel) {
-                    J2EEModuleCreationDataModel projectDataModel = (J2EEModuleCreationDataModel) projectModels.get(i);
-                    if (projectDataModel.getJ2EENatureID().equals(J2EEWebNatureRuntime.J2EE_NATURE_ID)) {
-                        projectDataModel.setProperty(WebModuleCreationDataModel.JAR_LIST_TEXT_UI, webLibs);
-                    }
-                }
-            }
-            importModel.setBooleanProperty(EnterpriseApplicationImportDataModel.PRESERVE_PROJECT_METADATA, false);
-            runAndVerify(importModel);
-        } finally {
-            importModel.dispose();
-        }
-    }*/
-
-    /**
-     * @param file
-     * @return
-     */
-    private List getWebLibs(EARFile earFile) {
-        List files = earFile.getArchiveFiles();
-        List webLibs = new ArrayList();
-        for (int i = 0; i < files.size(); i++) {
-            FileImpl file = (FileImpl) files.get(i);
-            if (file.isWARFile()) {
-                List webLib = ((WARFileImpl) file).getLibArchives();
-                if (!webLib.isEmpty())
-                    webLibs.addAll(webLib);
-            }
-        }
-        return webLibs;
-    }
-
-    protected static String getFullTestDataPath(String dataPath) {
-    	try {
-    	  return ProjectUtility.getFullFileName(HeadlessTestsPlugin.getDefault(),dataPath);
-    	} catch(Exception e) {
-    		e.printStackTrace();
-    	}
-    	return "";
-    }
-
-    public void testImportEAR14() throws Exception {
-        String projectName = "Test14WEBEJBEAR";
-        String earName = getFullTestDataPath("TestData" + fileSep + "EARImportTests" + fileSep + "Test14WEBEJBEAR.ear");
-        EnterpriseApplicationImportDataModel importModel = null;
-        try {
-            importModel = new EnterpriseApplicationImportDataModel();
-            importModel.setProperty(EnterpriseApplicationImportDataModel.PROJECT_NAME, projectName);
-            importModel.setProperty(EnterpriseApplicationImportDataModel.FILE_NAME, earName);
-            runAndVerify(importModel);
-        } finally {
-            importModel.dispose();
-        }
-    }
-
-    public static Test suite() {
-        return new SimpleTestSuite(EARImportOperationTest.class);
-    }
-
-    public void testImportProjectNameCollisionForEARImport() {
-        try {
-            String earName = "TestData" + fileSep + "EARImportTests" + fileSep + "Test13WEBEJBEAR.ear";
-            load(null, earName);
-            load(null, earName);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    public void testImportEAR12() throws Exception {
-        String projectName = "Test12WEBEJBEAR";
-        String earName = "TestData" + fileSep + "EARImportTests" + fileSep + "Test12WEBEJBEAR.ear";
-        load(projectName, earName);
-    }
-    public void testImportEAR13() throws Exception {
-        String projectName = "Test13WEBEJBEAR";
-        String earName = "TestData" + fileSep + "EARImportTests" + fileSep + "Test13WEBEJBEAR.ear";
-        load(projectName, earName);
-    }
-    public static void testAllEARImportProjects() throws Exception {
-        String projectName = "EARTest";
-        String earName = "TestData" + fileSep + "EARImportTests" + fileSep;
-        List projects = ProjectUtility.getEarsInDirectory(HeadlessTestsPlugin.getDefault(),getFullTestDataPath(earName));
-        for (int i = 0; i < projects.size(); i++) {
-            ProjectUtility.deleteAllProjects();
-            LogUtility.getInstance().resetLogging();
-            load(projectName, earName + projects.get(i));
-        }
-    }
-
-    public static void load(String projectName, String earName) throws Exception {
-    	EnterpriseApplicationImportDataModel importModel = null;
-        try {
-            importModel = new EnterpriseApplicationImportDataModel();
-            importModel.setProperty(EnterpriseApplicationImportDataModel.PROJECT_NAME, projectName);
-            importModel.setProperty(EnterpriseApplicationImportDataModel.FILE_NAME, getFullTestDataPath(earName));
-            runAndVerify(importModel);
-        } finally {
-            importModel.dispose();
-        }
-    }
-
-    public List getArchiveInEAR(String earFileURI) {
-        CommonarchiveFactory factory = CommonarchiveFactory.eINSTANCE;
-        List moduleArchives = new ArrayList();
-        try {
-            Archive archive = factory.openArchive(earFileURI);
-            List files = archive.getFiles();
-            if (!files.isEmpty()) {
-                for (int i = 0; i < files.size(); i++) {
-                    moduleArchives = new ArrayList();
-                    File file = (File) files.get(i);
-                    if (file.isArchive()) {
-                        moduleArchives.add(file);
-                    }
-                }
-            }
-        } catch (OpenFailureException oe) {
-            oe.printStackTrace();
-        }
-        return moduleArchives;
-    }
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/ear/operations/EARProjectCreationOperationTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/ear/operations/EARProjectCreationOperationTest.java
deleted file mode 100644
index f25d2fc..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/ear/operations/EARProjectCreationOperationTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Created on Oct 27, 2003
- * 
- * To change the template for this generated file go to Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and
- * Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.ear.operations;
-
-import junit.framework.Test;
-
-import org.eclipse.jst.j2ee.application.operations.EnterpriseApplicationCreationDataModel;
-import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
-import org.eclipse.wst.common.tests.SimpleTestSuite;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.OperationTestCase;
-
-/**
- * @author jsholl
- * 
- * To change the template for this generated type comment go to Window&gt;Preferences&gt;Java&gt;Code
- * Generation&gt;Code and Comments
- */
-public class EARProjectCreationOperationTest extends OperationTestCase {
-    public static Test suite() {
-        return new SimpleTestSuite(EARProjectCreationOperationTest.class);
-    }
-
-    public void testDefaults() throws Exception {
-        createSimpleEAR("SimpleEAR");
-    }
-    public void testLocation() throws Exception {
-        EnterpriseApplicationCreationDataModel dataModel = new EnterpriseApplicationCreationDataModel();
-        dataModel.setProperty(EnterpriseApplicationCreationDataModel.PROJECT_NAME, "SimpleEAR");
-        dataModel.setProperty(EnterpriseApplicationCreationDataModel.PROJECT_LOCATION, "c:/temp/");
-        runAndVerify(dataModel);
-    }
-
-    public void testVersion12() throws Exception {
-    	EnterpriseApplicationCreationDataModel dataModel = new EnterpriseApplicationCreationDataModel();
-        dataModel.setProperty(EnterpriseApplicationCreationDataModel.PROJECT_NAME, "SimpleEAR");
-        dataModel.setIntProperty(EnterpriseApplicationCreationDataModel.APPLICATION_VERSION, J2EEVersionConstants.J2EE_1_2_ID);
-        runAndVerify(dataModel);
-    }
-
-    public void testVersion13() throws Exception {
-    	EnterpriseApplicationCreationDataModel dataModel = new EnterpriseApplicationCreationDataModel();
-        dataModel.setProperty(EnterpriseApplicationCreationDataModel.PROJECT_NAME, "SimpleEAR");
-        dataModel.setIntProperty(EnterpriseApplicationCreationDataModel.APPLICATION_VERSION, J2EEVersionConstants.J2EE_1_3_ID);
-        runAndVerify(dataModel);
-    }
-
-    public void testVersion14() throws Exception {
-    	EnterpriseApplicationCreationDataModel dataModel = new EnterpriseApplicationCreationDataModel();
-        dataModel.setProperty(EnterpriseApplicationCreationDataModel.PROJECT_NAME, "SimpleEAR");
-        dataModel.setIntProperty(EnterpriseApplicationCreationDataModel.APPLICATION_VERSION, J2EEVersionConstants.J2EE_1_4_ID);
-        runAndVerify(dataModel);
-    }
-
-    public static void createSimpleEAR(String earName) throws Exception {
-    	EnterpriseApplicationCreationDataModel dataModel = new EnterpriseApplicationCreationDataModel();
-        dataModel.setProperty(EnterpriseApplicationCreationDataModel.PROJECT_NAME, earName);
-        runAndVerify(dataModel);
-    }
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/ear/operations/EARProjectCreationTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/ear/operations/EARProjectCreationTest.java
deleted file mode 100644
index 9b46152..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/ear/operations/EARProjectCreationTest.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Created on Jan 6, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.ear.operations;
-
-import junit.framework.Test;
-
-import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
-import org.eclipse.wst.common.tests.ProjectUtility;
-import org.eclipse.wst.common.tests.SimpleTestSuite;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.AbstractProjectCreationTest;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.RandomObjectGenerator;
-
-/**
- * @author blancett
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class EARProjectCreationTest extends AbstractProjectCreationTest{
-	
-	public void testVaild12EARProjectNameCreationWithAlphabetChars() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++)
-			createVaildProjectNameCreationWithAlphabetChars(EAR_PROJECT, J2EEVersionConstants.J2EE_1_2_ID, false);
-	}
-	
-	public void testVaild12EARProjectNameCreationWithMixedChars() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++)
-			createVaildProjectNameCreationWithAlphabetChars(EAR_PROJECT, J2EEVersionConstants.J2EE_1_3_ID, true);
-	}
-	
-	public void testVaild13EARProjectNameCreationWithAlphabetChars() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++)
-			createVaildProjectNameCreationWithAlphabetChars(EAR_PROJECT, J2EEVersionConstants.J2EE_1_3_ID, false);
-	}
-	
-	public void testVaild13EARProjectNameCreationAllChars() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++)
-			createVaildProjectNameCreationWithAlphabetChars(EAR_PROJECT, J2EEVersionConstants.J2EE_1_3_ID, true);
-	}
-	
-	public void testVaildRandomVersionsEARProjectNameCreationAllChars() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++) {
-			if (RandomObjectGenerator.createRandomProjectNumber() % 2 == 0)
-				createVaildProjectNameCreationWithAlphabetChars(EAR_PROJECT, J2EEVersionConstants.J2EE_1_3_ID, true);
-			else
-				createVaildProjectNameCreationWithAlphabetChars(EAR_PROJECT, J2EEVersionConstants.J2EE_1_2_ID, true);
-		}
-	}
-	
-	public void testVaildRandomVersionsEARProjectNameCreationAlphabet() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++) {
-			if (RandomObjectGenerator.createRandomProjectNumber() % 2 == 0)
-				createVaildProjectNameCreationWithAlphabetChars(EAR_PROJECT, J2EEVersionConstants.J2EE_1_3_ID, false);
-			else
-				createVaildProjectNameCreationWithAlphabetChars(EAR_PROJECT, J2EEVersionConstants.J2EE_1_2_ID, false);
-		}
-	}
-	
-	public void testInVaild12EARProjectNameCreation() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++) {
-			try {
-//				projectName = setupWebProject(RandomObjectGenerator.createInvalidRandomProjectName(), J2EEVersionConstants.EJB_1_1_ID);
-//				checkVaildProjectName(projectName);
-			} catch (Exception e) {
-				if (e instanceof IllegalArgumentException) {
-					System.out.println(ILLEGAL_PROJECT_NAME_MESSAGE + projectName);
-				} else
-					new Exception(UNEXPECTED_ERROR_MESSAGE);
-			} finally {
-				new Exception(TEST_FAILED_MESSAGE);
-			}
-		}
-	}
-
-    public static Test suite() {
-        return new SimpleTestSuite(EARProjectCreationTest.class);
-    }
-	
-	
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/AbstractProjectCreationTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/AbstractProjectCreationTest.java
deleted file mode 100644
index f2e902b..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/AbstractProjectCreationTest.java
+++ /dev/null
@@ -1,374 +0,0 @@
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.operations;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-
-import junit.framework.TestCase;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jst.j2ee.application.operations.AddArchiveProjectsToEARDataModel;
-import org.eclipse.jst.j2ee.application.operations.EnterpriseApplicationCreationDataModel;
-import org.eclipse.jst.j2ee.application.operations.EnterpriseApplicationCreationOperation;
-import org.eclipse.jst.j2ee.application.operations.J2EEArtifactCreationDataModel;
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleCreationDataModel;
-import org.eclipse.jst.j2ee.applicationclient.creation.AppClientModuleCreationDataModel;
-import org.eclipse.jst.j2ee.applicationclient.creation.AppClientModuleCreationOperation;
-import org.eclipse.jst.j2ee.applicationclient.creation.ApplicationClientNatureRuntime;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveConstants;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveManifestImpl;
-import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
-import org.eclipse.jst.j2ee.internal.ejb.project.operations.EJBModuleCreationDataModel;
-import org.eclipse.jst.j2ee.internal.ejb.project.operations.EJBModuleCreationOperation;
-import org.eclipse.jst.j2ee.internal.jca.operations.ConnectorModuleCreationDataModel;
-import org.eclipse.jst.j2ee.internal.jca.operations.ConnectorModuleCreationOperation;
-import org.eclipse.jst.j2ee.internal.web.archive.operations.WebModuleCreationDataModel;
-import org.eclipse.jst.j2ee.internal.web.archive.operations.WebModuleCreationOperation;
-import org.eclipse.wst.common.frameworks.internal.operations.ProjectCreationDataModel;
-import org.eclipse.wst.common.frameworks.operations.WTPOperationDataModel;
-import org.eclipse.wst.common.tests.LogUtility;
-import org.eclipse.wst.common.tests.ProjectUtility;
-import org.eclipse.wst.common.tests.TaskViewUtility;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.DataModelVerifier;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.DataModelVerifierFactory;
-
-public abstract class AbstractProjectCreationTest extends TestCase {
-	protected static final String ILLEGAL_PROJECT_NAME_MESSAGE = "Illegal project name: ";
-	protected static final String UNEXPECTED_ERROR_MESSAGE = "Unexpected exception";
-	protected static final String TEST_FAILED_MESSAGE = "Test fails Exception should of been trown";
-	protected static final String MANIFEST_CLASS_NAME = "Junit_Test_Dummy_Class";
-	protected static final String MANIFEST_WRITE_ERROR = "Could not write to manifest test failed";
-	protected static final String MANIFEST_LOCK_ERROR = "Manifest IO error - File could be locked";
-	protected static final String MANIFEST_CORE_ERROR = "Java core error";
-	protected String projectName = null;
-	public static final int APPLICATION_CLIENT_PROJECT = 0;
-	public static final int WEB_PROJECT = 1;
-	public static final int EJB_PROJECT = 2;
-	public static final int EAR_PROJECT = 3;
-	public IProject ejbproject;
-	public IProject earproject;
-
-	public AbstractProjectCreationTest(String name) {
-		super(name);
-	}
-
-	public void createVaildProjectNameCreationWithAlphabetChars(
-		int PROJECT_TYPE,
-		int j2eeVersion,
-		boolean isMixedChars)
-		throws Exception {
-
-		LogUtility.getInstance().resetLogging();
-		J2EEArtifactCreationDataModel model = null;
-		switch (PROJECT_TYPE) {
-			case WEB_PROJECT :
-				{
-					if (!isMixedChars)
-						model = setupWebProject(RandomObjectGenerator.createCorrectRandomProjectNames(), j2eeVersion);
-					else
-						model =
-							setupWebProject(
-								RandomObjectGenerator.createCorrectRandomProjectNamesAllChars(),
-								j2eeVersion);
-					break;
-				}
-			case EJB_PROJECT :
-				{
-					if (!isMixedChars)
-						model = setupEJBProject(RandomObjectGenerator.createCorrectRandomProjectNames(), j2eeVersion);
-					else
-						model =
-							setupEJBProject(
-								RandomObjectGenerator.createCorrectRandomProjectNamesAllChars(),
-								j2eeVersion);
-					break;
-				}
-			case APPLICATION_CLIENT_PROJECT :
-				{
-					if (!isMixedChars)
-						model =
-							setupApplicationClientProject(
-								RandomObjectGenerator.createCorrectRandomProjectNames(),
-								j2eeVersion);
-					else
-						model =
-							setupApplicationClientProject(
-								RandomObjectGenerator.createCorrectRandomProjectNamesAllChars(),
-								j2eeVersion);
-					break;
-				}
-			case EAR_PROJECT :
-				{
-					if (!isMixedChars)
-						model = setupEARProject(RandomObjectGenerator.createCorrectRandomProjectNames(), j2eeVersion);
-					else
-						model =
-							setupEARProject(
-								RandomObjectGenerator.createCorrectRandomProjectNamesAllChars(),
-								j2eeVersion);
-					break;
-				}
-		}
-
-		LogUtility.getInstance().verifyNoWarnings();
-		checkValidDataModel(model);
-	}
-
-	/**
-	 * @param model
-	 */
-	protected void checkValidDataModel(J2EEArtifactCreationDataModel model) {
-		DataModelVerifier verifier = DataModelVerifierFactory.getInstance().createVerifier(model);
-		try {
-			verifier.verify(model);
-		} catch (Exception e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-
-	}
-
-	protected static void checkVaildProjectName(String projectName) {
-		ProjectUtility.verifyProject(projectName, true);
-		//To do verify
-	}
-
-	public J2EEModuleCreationDataModel setupEJBProject(String aProjectName, int j2eeVersion) throws Exception {
-		projectName = aProjectName;
-		IProject javaProject = ProjectUtility.getProject(projectName);
-		EJBModuleCreationDataModel model = new EJBModuleCreationDataModel();
-		model.setProperty(EJBModuleCreationDataModel.PROJECT_NAME, javaProject.getName());
-		model.setProperty(EJBModuleCreationDataModel.PROJECT_LOCATION, javaProject.getLocation());
-		model.setIntProperty(EJBModuleCreationDataModel.J2EE_MODULE_VERSION, j2eeVersion);
-		createEJBProject(model, null);
-		return model;
-	}
-
-	public EnterpriseApplicationCreationDataModel setupEARProject(String aProjectName, int j2eeVersion) throws Exception {
-		projectName = aProjectName;
-		IProject earProject = ProjectUtility.getProject(aProjectName);
-		EnterpriseApplicationCreationDataModel earDataModel = new EnterpriseApplicationCreationDataModel();
-		earDataModel.setProperty(EnterpriseApplicationCreationDataModel.PROJECT_NAME, aProjectName);
-		earDataModel.setProperty(EnterpriseApplicationCreationDataModel.PROJECT_LOCATION, earProject.getLocation());
-		earDataModel.setIntProperty(EnterpriseApplicationCreationDataModel.APPLICATION_VERSION, j2eeVersion);
-		OperationTestCase.runAndVerify(earDataModel);
-		return earDataModel;
-	}
-
-	public J2EEModuleCreationDataModel setupWebProject(String aProjectName, int j2eeVersion) throws Exception {
-		projectName = aProjectName;
-		IProject javaProject = ProjectUtility.getProject(projectName);
-		WebModuleCreationDataModel model = new WebModuleCreationDataModel();
-		model.setProperty(WebModuleCreationDataModel.PROJECT_NAME, javaProject.getName());
-		model.setProperty(WebModuleCreationDataModel.PROJECT_LOCATION, javaProject.getLocation());
-		model.setIntProperty(WebModuleCreationDataModel.J2EE_MODULE_VERSION, j2eeVersion);
-		createWebProject(model, null);
-		return model;
-	}
-
-	public J2EEModuleCreationDataModel setupApplicationClientProject(String aProjectName, int j2eeVersion)
-		throws Exception {
-		projectName = aProjectName;
-		IProject javaProject = ProjectUtility.getProject(projectName);
-		AppClientModuleCreationDataModel model = new AppClientModuleCreationDataModel();
-		model.setProperty(AppClientModuleCreationDataModel.PROJECT_NAME, javaProject.getName());
-		model.setProperty(AppClientModuleCreationDataModel.PROJECT_LOCATION, javaProject.getLocation());
-		model.setIntProperty(AppClientModuleCreationDataModel.J2EE_MODULE_VERSION, j2eeVersion);
-		createAppClientProject(model, null);
-		return model;
-	}
-
-	public void testJavaCreation() throws Exception {
-		createEJBProject("testEAR", "testEJB", J2EEVersionConstants.J2EE_1_2_ID, J2EEVersionConstants.EJB_1_1_ID);
-	}
-
-	/**
-	 * Create a project and its containing EAR with default model settings
-	 * @param projectType
-	 * @param earProject
-	 * @param projectName
-	 * @return
-	 * @throws Exception
-	 */
-	public static IProject createProject(int projectType, String earProject, boolean createEAR, String projectName) throws Exception {
-		if (createEAR)
-			ProjectUtility.deleteProjectIfExists(earProject);
-		ProjectUtility.deleteProjectIfExists(projectName);
-
-		if (earProject != null && createEAR) {
-			WTPOperationDataModel earProjectCreationDataModel = new EnterpriseApplicationCreationDataModel();
-			earProjectCreationDataModel.setProperty(ProjectCreationDataModel.PROJECT_NAME, earProject);
-			earProjectCreationDataModel.getDefaultOperation().run(null);
-			ProjectUtility.verifyProject(earProject, true);
-		}
-
-		WTPOperationDataModel projectCreationDataModel = null;
-		switch (projectType) {
-			case EJB_PROJECT :
-				projectCreationDataModel = new EnterpriseApplicationCreationDataModel();
-				break;
-			case WEB_PROJECT :
-				projectCreationDataModel = new EnterpriseApplicationCreationDataModel();
-				break;
-			case APPLICATION_CLIENT_PROJECT :
-				projectCreationDataModel = new EnterpriseApplicationCreationDataModel();
-				break;
-		}
-		if (earProject != null) {
-			projectCreationDataModel.setBooleanProperty(J2EEModuleCreationDataModel.ADD_TO_EAR, true);
-			projectCreationDataModel.setProperty(J2EEModuleCreationDataModel.EAR_PROJECT_NAME, earProject);
-		}
-		projectCreationDataModel.setProperty(EJBModuleCreationDataModel.PROJECT_NAME, projectName);
-		projectCreationDataModel.getDefaultOperation().run(null);
-		ProjectUtility.verifyProject(projectName, true);
-
-		return (IProject) ProjectUtility.getProject(projectName);
-	}
-
-
-	public static IProject createEARProject(String earProject) throws Exception {
-		EnterpriseApplicationCreationDataModel projectCreationModel = new EnterpriseApplicationCreationDataModel();
-		projectCreationModel.setProperty(ProjectCreationDataModel.PROJECT_NAME, earProject);
-		return createEARProject(projectCreationModel);
-	}
-
-	public static IProject createEARProject(EnterpriseApplicationCreationDataModel model) throws Exception {
-		EnterpriseApplicationCreationOperation op = new EnterpriseApplicationCreationOperation(model);
-		op.run(null);
-		ProjectUtility.verifyProject(model.getStringProperty(EnterpriseApplicationCreationDataModel.PROJECT_NAME), true);
-		return model.getTargetProject();
-	}
-
-	public static IProject createEJBProject(EJBModuleCreationDataModel model, IProject earProject) throws Exception {
-		if (earProject != null) {
-			model.setBooleanProperty(EJBModuleCreationDataModel.ADD_TO_EAR, true);
-			model.setProperty(EJBModuleCreationDataModel.EAR_PROJECT_NAME, earProject.getName());
-		}
-		EJBModuleCreationOperation ejbOp = new EJBModuleCreationOperation(model);
-		ejbOp.run(null);
-		ProjectUtility.verifyProject(model.getStringProperty(EJBModuleCreationDataModel.PROJECT_NAME), true);
-		return model.getTargetProject();
-	}
-
-	public static void createEARProject(EnterpriseApplicationCreationDataModel model, boolean notImport) throws Exception {
-		model.setBooleanProperty(EnterpriseApplicationCreationDataModel.CREATE_DEFAULT_FILES, notImport);
-		EnterpriseApplicationCreationOperation op = new EnterpriseApplicationCreationOperation(model);
-		op.run(null);
-		ProjectUtility.verifyProject(model.getStringProperty(EnterpriseApplicationCreationDataModel.PROJECT_NAME), true);
-	}
-
-	public static void createWebProject(WebModuleCreationDataModel model, IProject earProject) throws Exception {
-		if (earProject != null) {
-			model.setBooleanProperty(WebModuleCreationDataModel.ADD_TO_EAR, true);
-			model.setProperty(WebModuleCreationDataModel.EAR_PROJECT_NAME, earProject.getName());
-		}
-		WebModuleCreationOperation webOp = new WebModuleCreationOperation(model);
-		webOp.run(null);
-		ProjectUtility.verifyProject(model.getTargetProject().getName(), true);
-		TaskViewUtility.verifyNoErrors();
-	}
-
-	public static void createAppClientProject(AppClientModuleCreationDataModel model, IProject earProject)
-		throws Exception {
-		if (earProject != null) {
-			model.setBooleanProperty(AppClientModuleCreationDataModel.ADD_TO_EAR, true);
-			model.setProperty(AppClientModuleCreationDataModel.EAR_PROJECT_NAME, earProject.getName());
-		}
-		AppClientModuleCreationOperation appOp = new AppClientModuleCreationOperation(model);
-		appOp.run(null);
-		ProjectUtility.verifyProject(model.getTargetProject().getName(), true);
-	}
-
-	public static void createRarProject(ConnectorModuleCreationDataModel model, IProject earProject)
-		throws Exception {
-		if (earProject != null) {
-			model.setBooleanProperty(ConnectorModuleCreationDataModel.ADD_TO_EAR, true);
-			model.setProperty(ConnectorModuleCreationDataModel.EAR_PROJECT_NAME, earProject.getName());
-		}
-		ConnectorModuleCreationOperation rarOp = new ConnectorModuleCreationOperation(model);
-		rarOp.run(null);
-		ProjectUtility.verifyProject(model.getTargetProject().getName(), true);
-	}
-
-	public static IProject createEJBProject(String earName, String ejbName, int j2eeEARVersion, int j2eeEJBVersion)
-		throws Exception {
-		ProjectUtility.deleteAllProjects();
-		EnterpriseApplicationCreationDataModel model = null;
-		EJBModuleCreationDataModel ejbDataModel = null;
-		if (earName != null) {
-			IProject earProject = ProjectUtility.getProject(earName);
-			model = new EnterpriseApplicationCreationDataModel();
-			model.setProperty(EnterpriseApplicationCreationDataModel.PROJECT_NAME, earName);
-			model.setProperty(EnterpriseApplicationCreationDataModel.PROJECT_LOCATION, earProject.getLocation());
-			model.setIntProperty(EnterpriseApplicationCreationDataModel.APPLICATION_VERSION, j2eeEARVersion);
-			EnterpriseApplicationCreationOperation op = new EnterpriseApplicationCreationOperation(model);
-
-			IProject ejbProject = ProjectUtility.getProject(ejbName);
-			ejbDataModel = new EJBModuleCreationDataModel();
-			ejbDataModel.setProperty(EJBModuleCreationDataModel.PROJECT_NAME, ejbName);
-			ejbDataModel.setProperty(EJBModuleCreationDataModel.PROJECT_LOCATION, ejbProject.getLocation());
-			ejbDataModel.setIntProperty(EJBModuleCreationDataModel.J2EE_MODULE_VERSION, j2eeEJBVersion);
-			IProject ejbp = createEJBProject(ejbDataModel, model.getTargetProject());
-
-		}
-		return ejbDataModel.getTargetProject();
-	}
-
-	public static void addJavaMainClassToApplicationModel(IProject appProject) {
-		ApplicationClientNatureRuntime runtime = ApplicationClientNatureRuntime.getRuntime(appProject);
-		IFile file = runtime.getEMFRoot().getFile(new Path(ArchiveConstants.MANIFEST_URI));
-		ArchiveManifestImpl manifest = null;
-		InputStream inputStream = null;
-		try {
-			inputStream = file.getContents();
-			manifest = new ArchiveManifestImpl(inputStream);
-		} catch (IOException e) {
-			new Exception(MANIFEST_LOCK_ERROR);
-		} catch (CoreException e) {
-			new Exception(MANIFEST_CORE_ERROR);
-		} finally {
-			if (null != inputStream) {
-				try {
-					inputStream.close();
-				} catch (IOException ex) {
-				}
-			}
-		}
-		manifest.setMainClass(MANIFEST_CLASS_NAME);
-		try {
-			//attempt with manifest dataObject -- J2EEProjectUtilities.writeManifest(appProject, manifest);
-		} catch (Exception e) {
-			new Exception(MANIFEST_WRITE_ERROR);
-		}
-	}
-
-	public void testAddingEJBtoEarModule() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		setupEARDataObject(RandomObjectGenerator.createCorrectRandomProjectNames(), J2EEVersionConstants.J2EE_1_3_ID);
-
-	}
-
-	public String setupEARDataObject(String aProjectName, int j2eeVersion) throws Exception {
-		projectName = aProjectName;
-		IProject earProject = ProjectUtility.getProject(aProjectName);
-		EnterpriseApplicationCreationDataModel earDataModel = new EnterpriseApplicationCreationDataModel();
-		earDataModel.setProperty(EnterpriseApplicationCreationDataModel.PROJECT_NAME, aProjectName);
-		earDataModel.setProperty(EnterpriseApplicationCreationDataModel.PROJECT_LOCATION, earProject.getLocation());
-		//String projectName = setupEJBProject(RandomObjectGenerator.createCorrectRandomProjectNames(), j2eeVersion);
-		IProject ejbProject = ProjectUtility.getProject(projectName);
-		ArrayList list = new ArrayList();
-		list.add(ejbProject);
-		earDataModel.setProperty(AddArchiveProjectsToEARDataModel.MODULE_LIST, list);
-		earDataModel.setIntProperty(EnterpriseApplicationCreationDataModel.APPLICATION_VERSION, j2eeVersion);
-		earDataModel.getProperty(AddArchiveProjectsToEARDataModel.MODULE_MODELS);
-		AddArchiveProjectsToEARDataModel arcModel = earDataModel.getAddModulesToEARDataModel();
-		return (earDataModel.getStringProperty(EnterpriseApplicationCreationDataModel.PROJECT_NAME));
-	}
-
-	public AbstractProjectCreationTest() {
-		super();
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/ModuleExportOperationTestCase.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/ModuleExportOperationTestCase.java
deleted file mode 100644
index 2ba501d..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/ModuleExportOperationTestCase.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Created on Jan 6, 2004
- * 
- * To change the template for this generated file go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.operations;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleExportDataModel;
-import org.eclipse.wst.common.tests.ProjectUtility;
-import org.eclipse.wtp.j2ee.headless.tests.appclient.operations.AppClientExportOperationTest;
-import org.eclipse.wtp.j2ee.headless.tests.ejb.operations.EJBExportOperationTest;
-import org.eclipse.wtp.j2ee.headless.tests.jca.operations.RARExportOperationTest;
-import org.eclipse.wtp.j2ee.headless.tests.plugin.HeadlessTestsPlugin;
-import org.eclipse.wtp.j2ee.headless.tests.web.operations.WebExportOperationTest;
-
-/**
- * @author Administrator
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-public abstract class ModuleExportOperationTestCase extends OperationTestCase {
-
-	protected boolean exportSourceFiles = false;
-	protected boolean overwriteExisting = false;
-	protected boolean dataModelShouldBeValid = true;
-
-	public final String TESTS_OUTPUT_PATH;
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite();
-		suite.addTestSuite(RARExportOperationTest.class);
-		suite.addTestSuite(EJBExportOperationTest.class);
-		suite.addTestSuite(WebExportOperationTest.class);
-		suite.addTestSuite(AppClientExportOperationTest.class);
-		return suite;
-	}
-
-	public ModuleExportOperationTestCase(String name) {
-		super(name);
-
-		String relativeOutputTestsPath = "TestData" + File.separator + getOutputDirectory() + File.separator;
-		TESTS_OUTPUT_PATH = getOutputPath(relativeOutputTestsPath);
-	}
-	
-	public String getOutputPath(String relPath) {
-		try{
-			return ProjectUtility.getFullFileName(HeadlessTestsPlugin.getDefault(),relPath);
-			} catch(IOException e) {
-				e.printStackTrace();
-			}
-		return null;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.OperationTestCase#setUp()
-	 */
-	protected void setUp() throws Exception {
-		super.setUp();
-		exportSourceFiles = false;
-		overwriteExisting = false;
-	}
-
-	private String getOutputDirectory(){
-	    return "testOutput";
-	}
-	protected abstract ModuleImportOperationTestCase getImportTestCase();
-	protected abstract J2EEModuleExportDataModel getModelInstance();
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleExportOperationTestCase#getExportableProjects()
-	 */
-	protected IProject[] getExportableProjects() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		ModuleImportOperationTestCase importTestCase = getImportTestCase(); 
-		importTestCase.testAllImportTestCases();
-
-		// if the projects aren't created successfully, the previous
-		// line will fail so there's no need to verify
-		return ProjectUtility.getAllProjects();
-	}
-
-	public void testExport(String projectName, String filename) throws Exception {
-
-		J2EEModuleExportDataModel dataModel = getModelInstance();
-		dataModel.setProperty(J2EEModuleExportDataModel.ARCHIVE_DESTINATION, TESTS_OUTPUT_PATH + filename);
-		dataModel.setProperty(J2EEModuleExportDataModel.PROJECT_NAME, projectName);
-		dataModel.setBooleanProperty(J2EEModuleExportDataModel.EXPORT_SOURCE_FILES, exportSourceFiles);
-		dataModel.setBooleanProperty(J2EEModuleExportDataModel.OVERWRITE_EXISTING, overwriteExisting);
-
-		if (dataModelShouldBeValid)
-			runAndVerify(dataModel);
-		else
-			verifyInvalidDataModel(dataModel);
-	}
-
-	public void testAllWithExportSourceFilesWithOverwriteExisting() throws Exception {
-		exportSourceFiles = true;
-		overwriteExisting = true;
-
-		testAllExportTestCases();
-	}
-
-	public void testAllWithExportSourceFilesWithoutOverwriteExisting() throws Exception {
-		exportSourceFiles = true;
-		overwriteExisting = false;
-
-		testAllExportTestCases();
-	}
-
-	public void testAllWithoutExportSourceFilesWithoutOverwriteExisting() throws Exception {
-		exportSourceFiles = false;
-		overwriteExisting = false;
-
-		testAllExportTestCases();
-	}
-
-	public void testAllWithoutExportSourceFilesWithOverwriteExisting() throws Exception {
-		exportSourceFiles = false;
-		overwriteExisting = true;
-
-		testAllExportTestCases();
-	}
-
-//	public void testOverwriteProjectExportFail() throws Exception {
-//
-//		testAllWithoutExportSourceFilesWithoutOverwriteExisting();
-//		dataModelShouldBeValid = false;
-//		testAllWithoutExportSourceFilesWithoutOverwriteExisting();
-//	}
-
-	public void testOverwriteProjectExportSucceed() throws Exception {
-
-		testAllWithoutExportSourceFilesWithOverwriteExisting();
-		testAllWithoutExportSourceFilesWithOverwriteExisting();
-	}
-
-	public void testAllExportTestCases() throws Exception {
-
-		File exportDirectory = new File(TESTS_OUTPUT_PATH);
-		if (exportDirectory.isDirectory()) {
-			File[] contents = exportDirectory.listFiles();
-			for (int i = 0; i < contents.length; i++) {
-				if (!contents[i].isDirectory())
-					contents[i].delete();
-			}
-		}
-		IProject[] projects = getExportableProjects();
-		for (int i = 0; i < projects.length; i++) {
-			testExport(projects[i].getName(), getFileName(projects[i].getName()));
-		}
-	}
-
-	public String getFileName(String baseName) {
-		StringBuffer result = new StringBuffer(baseName);
-		result.append((exportSourceFiles) ? "_withSource" : "_withoutSource").append(getModuleExportFileExt());
-		return result.toString();
-	}
-
-	/**
-	 * @return
-	 */
-	public String getModuleExportFileExt() {
-		return ".jar";
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/ModuleImportOperationTestCase.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/ModuleImportOperationTestCase.java
deleted file mode 100644
index f702f86..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/ModuleImportOperationTestCase.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Created on Jan 6, 2004
- * 
- * To change the template for this generated file go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.operations;
-
-import java.io.File;
-import java.util.List;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleImportDataModel;
-import org.eclipse.wst.common.tests.ProjectUtility;
-import org.eclipse.wtp.j2ee.headless.tests.appclient.operations.AppClientImportOperationTest;
-import org.eclipse.wtp.j2ee.headless.tests.ejb.operations.EJBImportOperationTest;
-import org.eclipse.wtp.j2ee.headless.tests.jca.operations.RARImportOperationTest;
-import org.eclipse.wtp.j2ee.headless.tests.plugin.AllPluginTests;
-import org.eclipse.wtp.j2ee.headless.tests.plugin.HeadlessTestsPlugin;
-import org.eclipse.wtp.j2ee.headless.tests.web.operations.WebImportOperationTest;
-
-/**
- * @author Administrator
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-public abstract class ModuleImportOperationTestCase extends OperationTestCase {
-
-	protected boolean isBinary = false;
-	protected boolean overwriteProject = false;
-	protected boolean dataModelShouldBeValid = true;
-	public  String TESTS_PATH;
-
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite();
-		suite.addTestSuite(RARImportOperationTest.class);
-		suite.addTestSuite(EJBImportOperationTest.class);
-		suite.addTestSuite(WebImportOperationTest.class);
-		suite.addTestSuite(AppClientImportOperationTest.class);
-		return suite;
-	}
-
-	public ModuleImportOperationTestCase(String name)  {
-		super(name);
-		TESTS_PATH = "TestData" + File.separator + getDirectory() + File.separator;
-	}
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.OperationTestCase#setUp()
-	 */
-	protected void setUp() throws Exception {
-		super.setUp();
-		isBinary = false;
-		overwriteProject = false;
-		dataModelShouldBeValid = true;
-	}
-
-	protected abstract String getDirectory(); 
-	protected abstract J2EEModuleImportDataModel getModelInstance();
-
-	public void testImport(String projectName, String filename) throws Exception {
-
-		J2EEModuleImportDataModel dataModel = getModelInstance();
-		dataModel.setProperty(J2EEModuleImportDataModel.FILE_NAME, filename);
-		dataModel.setProperty(J2EEModuleImportDataModel.PROJECT_NAME, projectName);
-		setServerTargetProperty(dataModel);
-		// TODO revisit once refactorings are completed
-		//dataModel.setBooleanProperty(J2EEImportDataModel.CREATE_BINARY_PROJECT, isBinary);
-		dataModel.setBooleanProperty(J2EEModuleImportDataModel.OVERWRITE_PROJECT, overwriteProject);
-
-		if (dataModelShouldBeValid)
-			runAndVerify(dataModel);
-		else 
-			verifyInvalidDataModel(dataModel);
-	}
-
-	/**
-	 * @param dataModel
-	 */
-	public void setServerTargetProperty(J2EEModuleImportDataModel dataModel) {
-		dataModel.setProperty(J2EEModuleImportDataModel.SERVER_TARGET_ID, AllPluginTests.JONAS_SERVER.getId());
-	}
-
-	public void testAllBinaryImportTestCases() throws Exception {
-		isBinary = true;
-		testAllImportTestCases();
-	}
-
-	public void testAllImportTestCases() throws Exception {
- 
-		List projects = getImportableArchiveFileNames();
-		for (int i = 0; i < projects.size(); i++) {
-			String jarName =  projects.get(i).toString(); 
-			String projectName = jarName.substring(jarName.lastIndexOf('\\') + 1,jarName.length()-4);
-			testImport(projectName, jarName);
-		}
-	} 
- 
-	/**
-	 * @return
-	 */
-	protected List getImportableArchiveFileNames() {
-		return ProjectUtility.getJarsInDirectory(HeadlessTestsPlugin.getDefault(),TESTS_PATH);
-	}
-
-	public void testBadFileName() throws Exception {
- 
-		dataModelShouldBeValid = false;
-		testImport("BobTheProject", "BobTheFile");
-	}
-
-	public void testOverwriteProjectImportFail() throws Exception {
-
-		overwriteProject = false;
-		testAllImportTestCases();
-		dataModelShouldBeValid = false;
-		testAllImportTestCases();
-	}
-	
-	public void testOverwriteProjectImportSucceed() throws Exception {
-
-		overwriteProject = true; 
-		testAllImportTestCases();
-		testAllImportTestCases();
-	} 
- 
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/ModuleProjectCreationOperationTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/ModuleProjectCreationOperationTest.java
deleted file mode 100644
index 87d76b5..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/ModuleProjectCreationOperationTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.operations;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jst.j2ee.application.operations.EnterpriseApplicationCreationDataModel;
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleCreationDataModel;
-import org.eclipse.wtp.j2ee.headless.tests.appclient.operations.AppClientProjectCreationOperationTest;
-import org.eclipse.wtp.j2ee.headless.tests.ear.operations.EARProjectCreationOperationTest;
-import org.eclipse.wtp.j2ee.headless.tests.ejb.operations.EJBProjectCreationOperationTest;
-import org.eclipse.wtp.j2ee.headless.tests.jca.operations.ConnectorProjectCreationOperationTest;
-import org.eclipse.wtp.j2ee.headless.tests.web.operations.WebProjectCreationOperationTest;
-
-public abstract class ModuleProjectCreationOperationTest extends OperationTestCase {
-    
-    public static String DEFAULT_PROJECT_NAME = "SimpleProject";
-    
-    public static Test suite() {
-        TestSuite suite = new TestSuite();
-        suite.addTestSuite(AppClientProjectCreationOperationTest.class);
-        suite.addTestSuite(EJBProjectCreationOperationTest.class);
-        suite.addTestSuite(WebProjectCreationOperationTest.class); 
-        suite.addTestSuite(ConnectorProjectCreationOperationTest.class); 
-        return suite;
-    }
-    
-    public void testDefaults() throws Exception {
-        createSimpleModule(DEFAULT_PROJECT_NAME);
-    }
-    
-    public void testCreateEAR() throws Exception {
-        J2EEModuleCreationDataModel dataModel = getProjectCreationDataModel();
-        dataModel.setProperty(J2EEModuleCreationDataModel.PROJECT_NAME, "SimpleEJB");
-        dataModel.setProperty(J2EEModuleCreationDataModel.EAR_PROJECT_NAME, "SimpleEAR");
-        runAndVerify(dataModel);
-    }
-
-    public void testAddToEAR() throws Exception {
-        EnterpriseApplicationCreationDataModel dataModelEAR = new EnterpriseApplicationCreationDataModel();
-        dataModelEAR.setProperty(EnterpriseApplicationCreationDataModel.PROJECT_NAME, "SimpleEAR");
-        EARProjectCreationOperationTest.runAndVerify(dataModelEAR);
-
-        J2EEModuleCreationDataModel dataModel = getProjectCreationDataModel();
-        dataModel.setProperty(J2EEModuleCreationDataModel.PROJECT_NAME, "SimpleEJB");
-        dataModel.setBooleanProperty(J2EEModuleCreationDataModel.ADD_TO_EAR, true);
-        dataModel.setProperty(J2EEModuleCreationDataModel.EAR_PROJECT_NAME, "SimpleEAR");
-        runAndVerify(dataModel);
-    }
-    
-    public void testNoAddToEAR() throws Exception {
-        J2EEModuleCreationDataModel dataModel = getProjectCreationDataModel();
-        dataModel.setProperty(J2EEModuleCreationDataModel.PROJECT_NAME, "SimpleEJB");
-        dataModel.setBooleanProperty(J2EEModuleCreationDataModel.ADD_TO_EAR, false);
-        dataModel.setProperty(J2EEModuleCreationDataModel.EAR_PROJECT_NAME, "SimpleEAR");
-        runAndVerify(dataModel);
-    }
-
-    public void createSimpleModule(String projectName) throws Exception {
-        J2EEModuleCreationDataModel dataModel = getProjectCreationDataModel();
-        dataModel.setProperty(J2EEModuleCreationDataModel.PROJECT_NAME, projectName);
-        runAndVerify(dataModel);
-    }
-    
-    public abstract J2EEModuleCreationDataModel getProjectCreationDataModel();
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/OperationTestCase.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/OperationTestCase.java
deleted file mode 100644
index bd014ee..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/OperationTestCase.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Created on Nov 6, 2003
- * 
- * To change the template for this generated file go to Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and
- * Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.operations;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jst.j2ee.internal.web.archive.operations.WebModuleCreationDataModel;
-import org.eclipse.jst.j2ee.internal.web.archive.operations.WebModuleExportDataModel;
-import org.eclipse.wst.common.frameworks.operations.WTPOperationDataModel;
-import org.eclipse.wst.common.tests.LogUtility;
-import org.eclipse.wst.common.tests.ProjectUtility;
-import org.eclipse.wst.common.tests.TaskViewUtility;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.DataModelVerifier;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.DataModelVerifierFactory;
-
-/**
- * @author jsholl
- * 
- * To change the template for this generated type comment go to Window&gt;Preferences&gt;Java&gt;Code
- * Generation&gt;Code and Comments
- */
-public abstract class OperationTestCase extends TestCase {
-
-    public static IStatus OK_STATUS = new Status(IStatus.OK, "org.eclipse.wtp.common", 0, "OK", null); //$NON-NLS-1$
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        ProjectUtility.deleteAllProjects();
-        LogUtility.getInstance().resetLogging();
-    }
-
-    public OperationTestCase() {
-        super("OperationsTestCase");
-    }
-
-    public OperationTestCase(String name) {
-        super(name);
-    }
-
-    public static void runAndVerify(WTPOperationDataModel dataModel) throws Exception {
-        OperationTestCase.runAndVerify(dataModel, true, true);
-    }
-
-    /**
-     * Guaranteed to close the dataModel
-     * 
-     * @param dataModel
-     * @throws Exception
-     */
-    public static void runAndVerify(WTPOperationDataModel dataModel, boolean checkTasks, boolean checkLog) throws Exception {
-        try {
-            verifyValidDataModel(dataModel);
-            dataModel.getDefaultOperation().run(null);
-            DataModelVerifier verifier = DataModelVerifierFactory.getInstance().createVerifier(dataModel);
-            verifier.verify(dataModel);
-            if (checkTasks) {
-                checkTasksList();
-            }
-            if (checkLog) {
-                checkLogUtility();
-            }
-        } finally {
-            dataModel.dispose();
-        }
-    }
-
-    protected static void checkLogUtility() {
-        LogUtility.getInstance().verifyNoWarnings();
-    }
-
-    protected static void checkTasksList() {
-        TaskViewUtility.verifyNoErrors();
-    }
-
-    public static void verifyValidDataModel(WTPOperationDataModel dataModel) {
-    	 if(dataModel instanceof WebModuleExportDataModel )
-        	System.out.print("");
-        IStatus status = dataModel.validateDataModel();
-        if (!status.isOK()) {
-            Assert.assertTrue("DataModel is invalid operation will not run:" + status.getMessage(), false);
-        }
-    }
-
-    public static void verifyInvalidDataModel(WTPOperationDataModel dataModel) {
-        IStatus status = dataModel.validateDataModel();
-        if (status.isOK()) {
-            Assert.assertTrue("DataModel should be invalid:" + status.getMessage(), false);
-        }
-    }
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/RandomObjectGenerator.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/RandomObjectGenerator.java
deleted file mode 100644
index f825f35..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/RandomObjectGenerator.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Created on Jan 6, 2004
- * 
- * To change the template for this generated file go to Window - Preferences - Java - Code Generation - Code and
- * Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.operations;
-
-import java.util.Random;
-
-/**
- * @author blancett
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code Generation - Code
- * and Comments
- */
-public class RandomObjectGenerator {
-    protected static RandomObjectGenerator randomObjectGenerator;
-    private static Random randomGenerator = new Random();
-    private static int maxNumOfLettersInWords = 15;
-    private static int maxNumberOfProjectsCreated = 5;
-    private static int upperCaseSeed = 65; //ASCII 'A'
-    private static int lowerCaseSeed = 97; //ASCII 'a'
-    private static int invalidCharSeed = 33;
-    private static int numberSeed = 48;
-    private static int alphabetRange = 25;
-    private static int symbolRange = 15;
-    private static int numberRange = 9;
-
-    public static String createCorrectRandomProjectNames() {
-        int numOfletterInWord = Math.max(randomGenerator.nextInt(maxNumOfLettersInWords + 1), 2);
-        String string = new String();
-        for (int i = 0; i < numOfletterInWord; i++) {
-            string = string + createRandomCharacterInAlphabetRange();
-        }
-        return string;
-    }
-
-    public static String createRandomNumbers() {
-        char randomChar;
-        int randomInt = randomGenerator.nextInt(numberRange + 1);
-        randomChar = (char) (randomInt + numberSeed);
-        return (new Character(randomChar)).toString();
-    }
-
-    public static String createRandomInvaildCharacters() {
-        char randomChar;
-        int randomInt = randomGenerator.nextInt(symbolRange + 1);
-        randomChar = (char) (randomInt + invalidCharSeed);
-        return (new Character(randomChar)).toString();
-    }
-    public static int createRandomProjectNumber() {
-        return randomGenerator.nextInt(maxNumberOfProjectsCreated + 1);
-    }
-
-    public static String createRandomCharacterInAlphabetRange() {
-        char randomChar;
-        int randomInt = randomGenerator.nextInt(alphabetRange + 1);
-        if ((randomInt % 2) == 0)
-            randomChar = (char) (randomInt + lowerCaseSeed);
-        else
-            randomChar = (char) (randomInt + upperCaseSeed);
-        return Character.toString(randomChar);
-    }
-
-    public static String createInvalidRandomProjectName() {
-        int numOfletterInWord = randomGenerator.nextInt(maxNumOfLettersInWords + 1);
-        String string = new String();
-        for (int i = 0; i < numOfletterInWord; i++) {
-            string.concat(createRandomInvaildCharacters());
-        }
-        return string;
-    }
-
-    public static String createCorrectRandomProjectNamesAllChars() {
-        int numOfletterInWord = Math.max(randomGenerator.nextInt(maxNumOfLettersInWords + 1), 2);
-        String string = new String();
-        for (int i = 0; i < numOfletterInWord; i++) {
-            if (randomGenerator.nextInt() % 5 == 0) {
-                Character c = new Character('$');
-                string = string + c.toString();
-            }
-
-            if (randomGenerator.nextInt() % 2 == 0) {
-                Character c = new Character('_');
-                string = string + c.toString();
-            }
-            string += createRandomCharacterInAlphabetRange();
-            if (randomGenerator.nextInt() % 3 == 0)
-                string = string + createRandomNumbers();
-        }
-        return string.substring(0, numOfletterInWord - 1);
-    }
-
-    public static RandomObjectGenerator getInstance() {
-        if (randomObjectGenerator == null)
-            randomObjectGenerator = new RandomObjectGenerator();
-        return randomObjectGenerator;
-    }
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/AppClientExportDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/AppClientExportDataModelVerifier.java
deleted file mode 100644
index cafda98..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/AppClientExportDataModelVerifier.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class AppClientExportDataModelVerifier extends ModuleExportDataModelVerifier {
- 
-	
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/AppClientImportDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/AppClientImportDataModelVerifier.java
deleted file mode 100644
index 59845ce..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/AppClientImportDataModelVerifier.java
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class AppClientImportDataModelVerifier extends ModuleImportDataModelVerifier {
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/AppClientProjectCreationDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/AppClientProjectCreationDataModelVerifier.java
deleted file mode 100644
index 21ac734..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/AppClientProjectCreationDataModelVerifier.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers;
-
-import junit.framework.Assert;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleCreationDataModel;
-import org.eclipse.jst.j2ee.applicationclient.creation.AppClientEditModel;
-import org.eclipse.jst.j2ee.applicationclient.creation.AppClientModuleCreationDataModel;
-import org.eclipse.jst.j2ee.applicationclient.creation.ApplicationClientNatureRuntime;
-import org.eclipse.jst.j2ee.common.XMLResource;
-import org.eclipse.jst.j2ee.internal.earcreation.EAREditModel;
-import org.eclipse.jst.j2ee.internal.earcreation.EARNatureRuntime;
-import org.eclipse.jst.j2ee.internal.earcreation.IEARNatureConstants;
-import org.eclipse.wst.common.internal.emfworkbench.operation.EditModelOperationDataModel;
-import org.eclipse.wst.common.tests.ProjectUtility;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class AppClientProjectCreationDataModelVerifier extends ModuleProjectCreationDataModelVerifier {
- /* (non-Javadoc)
- * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.J2EEProjectCreationDataModelVerifier#verifyProjectCreationDataModel(com.ibm.etools.application.operations.J2EEProjectCreationDataModel)
- */
-public void verifyProjectCreationDataModel(J2EEModuleCreationDataModel model) {
-    	AppClientModuleCreationDataModel dataModel = (AppClientModuleCreationDataModel)model;
-        ProjectUtility.verifyProject(dataModel.getTargetProject().getName(), true);
-        AppClientEditModel editModel = null;
-        Object key = new Object();
-        try {
-        	ApplicationClientNatureRuntime aRuntime = ApplicationClientNatureRuntime.getRuntime(dataModel.getTargetProject());
-            //EMFWorkbenchContext emfWorkbenchContext = WorkbenchResourceHelper.createEMFContext(dataModel.getTargetProject(), null);
-            editModel = (AppClientEditModel)aRuntime.getEditModelForRead(dataModel.getStringProperty(EditModelOperationDataModel.EDIT_MODEL_ID), key);
-            XMLResource dd = editModel.getDeploymentDescriptorResource();
-            Assert.assertNotNull("Deployment Descriptor Null", dd);
-        } finally {
-            editModel.releaseAccess(key);
-        }
-        if (dataModel.getBooleanProperty(AppClientModuleCreationDataModel.ADD_TO_EAR)) {
-            IProject earProject = dataModel.getApplicationCreationDataModel().getTargetProject();
-            EAREditModel ear = null;
-            try {
-                Assert.assertTrue("EAR doesn't exist:", earProject.exists());
-                EARNatureRuntime runtime = EARNatureRuntime.getRuntime(earProject);
-                //EMFWorkbenchContext emfWorkbenchContext = WorkbenchResourceHelper.createEMFContext(earProject, null);
-                ear = (EAREditModel)runtime.getEditModelForRead(IEARNatureConstants.EDIT_MODEL_ID, key);
-                ear.getModuleMapping(dataModel.getTargetProject());
-                //TODO
-            } finally {
-                ear.releaseAccess(key);
-            }
-        }
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/DataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/DataModelVerifier.java
deleted file mode 100644
index 12bd540..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/DataModelVerifier.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers;
-
-import org.eclipse.wst.common.frameworks.operations.WTPOperationDataModel;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class DataModelVerifier {
-	
-	public void verify(WTPOperationDataModel model) throws Exception {
-		
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/DataModelVerifierFactory.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/DataModelVerifierFactory.java
deleted file mode 100644
index d8c41fa..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/DataModelVerifierFactory.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Created on Jan 5, 2004
- * 
- * To change the template for this generated file go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.jst.j2ee.application.operations.AppClientModuleExportDataModel;
-import org.eclipse.jst.j2ee.application.operations.EnterpriseApplicationCreationDataModel;
-import org.eclipse.jst.j2ee.applicationclient.creation.AppClientModuleCreationDataModel;
-import org.eclipse.jst.j2ee.applicationclient.creation.AppClientModuleImportDataModel;
-import org.eclipse.jst.j2ee.internal.ejb.project.operations.EJBModuleCreationDataModel;
-import org.eclipse.jst.j2ee.internal.ejb.project.operations.EJBModuleExportDataModel;
-import org.eclipse.jst.j2ee.internal.ejb.project.operations.EJBModuleImportDataModel;
-import org.eclipse.jst.j2ee.internal.jca.operations.ConnectorModuleImportDataModel;
-import org.eclipse.jst.j2ee.internal.web.archive.operations.WebModuleCreationDataModel;
-import org.eclipse.jst.j2ee.internal.web.archive.operations.WebModuleExportDataModel;
-import org.eclipse.jst.j2ee.internal.web.archive.operations.WebModuleImportDataModel;
-import org.eclipse.wst.common.frameworks.operations.WTPOperationDataModel;
-import org.eclipse.wtp.j2ee.headless.tests.ejb.verifiers.EJBExportDataModelVerifier;
-import org.eclipse.wtp.j2ee.headless.tests.ejb.verifiers.EJBImportDataModelVerifier;
-import org.eclipse.wtp.j2ee.headless.tests.ejb.verifiers.EJBProjectCreationDataModelVerifier;
-import org.eclipse.wtp.j2ee.headless.tests.jca.verifiers.JCAExportDataModelVerifier;
-import org.eclipse.wtp.j2ee.headless.tests.jca.verifiers.JCAImportDataModelVerifier;
-import org.eclipse.wtp.j2ee.headless.tests.web.verifiers.WebExportDataModelVerifier;
-import org.eclipse.wtp.j2ee.headless.tests.web.verifiers.WebImportDataModelVerifier;
-import org.eclipse.wtp.j2ee.headless.tests.web.verifiers.WebProjectCreationDataModelVerifier;
-
-/**
- * @author Administrator
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-public class DataModelVerifierFactory {
-
-	private Map dataModelVerifiersMap = null;
-	private DataModelVerifier defaultDataModelVerifier = new DataModelVerifier();
-	
-	private static final DataModelVerifierFactory instance = new DataModelVerifierFactory();
-
-	public static DataModelVerifierFactory getInstance() {
-		return instance;
-	}
-
-	public DataModelVerifier createVerifier(WTPOperationDataModel model)  {
-		DataModelVerifier verifier = getDefaultDataModelVerifier();
-		String verifierClassName = null;
-		if (model != null) {
-			verifierClassName = (String) getDataModelVerifiersMap().get(model.getClass().getName());
-			if (verifierClassName != null) {
-				try {
-					Class verifierClass = Class.forName(verifierClassName);
-					verifier = (DataModelVerifier) verifierClass.newInstance();
-				} catch (Exception e) { 
-					verifier = getDefaultDataModelVerifier();
-				}
-			}
-		}  
-		return verifier;
-	}
-
-	/**
-	 * @return Returns the dataModelVerifiersMap.
-	 */
-	protected Map getDataModelVerifiersMap() {
-		if (dataModelVerifiersMap == null) {
-			dataModelVerifiersMap = new HashMap();
-			dataModelVerifiersMap.put(EJBModuleImportDataModel.class.getName(), EJBImportDataModelVerifier.class.getName());
-			dataModelVerifiersMap.put(ConnectorModuleImportDataModel.class.getName(),JCAImportDataModelVerifier.class.getName());
-			dataModelVerifiersMap.put(WebModuleImportDataModel.class.getName(), WebImportDataModelVerifier.class.getName());
-			dataModelVerifiersMap.put(AppClientModuleImportDataModel.class.getName(), AppClientImportDataModelVerifier.class.getName());
-			
-			dataModelVerifiersMap.put(EJBModuleExportDataModel.class.getName(), EJBExportDataModelVerifier.class.getName());
-			dataModelVerifiersMap.put(JCAExportDataModelVerifier.class.getName(), JCAExportDataModelVerifier.class.getName());
-			dataModelVerifiersMap.put(WebModuleExportDataModel.class.getName(), WebExportDataModelVerifier.class.getName());
-			dataModelVerifiersMap.put(AppClientModuleExportDataModel.class.getName(), AppClientExportDataModelVerifier.class.getName());
-			
-			dataModelVerifiersMap.put(WebModuleCreationDataModel.class.getName(), WebProjectCreationDataModelVerifier.class.getName());
-			dataModelVerifiersMap.put(EnterpriseApplicationCreationDataModel.class.getName(), EARProjectCreationDataModelVerifier.class.getName());
-			dataModelVerifiersMap.put(EJBModuleCreationDataModel.class.getName(), EJBProjectCreationDataModelVerifier.class.getName());
-			dataModelVerifiersMap.put(AppClientModuleCreationDataModel.class.getName(),AppClientProjectCreationDataModelVerifier.class.getName());
-			
-		}
-		
-		return dataModelVerifiersMap;
-	}
-
-	/**
-	 * @return Returns the defaultDataModelVerifier.
-	 */
-	protected DataModelVerifier getDefaultDataModelVerifier() {
-		return defaultDataModelVerifier;
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/EARExportDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/EARExportDataModelVerifier.java
deleted file mode 100644
index 4796997..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/EARExportDataModelVerifier.java
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class EARExportDataModelVerifier extends J2EEExportDataModelVerifier {
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/EARImportDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/EARImportDataModelVerifier.java
deleted file mode 100644
index e4ca1d7..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/EARImportDataModelVerifier.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.jst.j2ee.application.operations.EnterpriseApplicationImportDataModel;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.ModuleFile;
-import org.eclipse.wst.common.frameworks.operations.WTPOperationDataModel;
-import org.eclipse.wst.common.tests.ProjectUtility;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class EARImportDataModelVerifier extends J2EEImportDataModelVerifier {
-
-    public void verify(WTPOperationDataModel model) throws Exception {
-        super.verify(model);
-        EnterpriseApplicationImportDataModel importModel = (EnterpriseApplicationImportDataModel)model;
-        List list = importModel.getEARFile().getModuleFiles();
-        for (Iterator iter = list.iterator(); iter.hasNext();) {
-            ModuleFile element = (ModuleFile) iter.next();
-            String uri = element.getURI();
-            ProjectUtility.verifyProject(uri.substring(0, uri.indexOf(".")), true);
-        }
-    }
-    
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/EARProjectCreationDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/EARProjectCreationDataModelVerifier.java
deleted file mode 100644
index bd7782a..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/EARProjectCreationDataModelVerifier.java
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class EARProjectCreationDataModelVerifier extends J2EEProjectCreationDataModelVerifier {
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/J2EEExportDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/J2EEExportDataModelVerifier.java
deleted file mode 100644
index 493815c..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/J2EEExportDataModelVerifier.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers;
-
-import java.io.File;
-
-import junit.framework.Assert;
-
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleExportDataModel;
-import org.eclipse.wst.common.frameworks.operations.WTPOperationDataModel;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class J2EEExportDataModelVerifier extends DataModelVerifier {
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.DataModelVerifier#verify(org.eclipse.wtp.common.operation.WTPOperationDataModel)
-	 */
-	public void verify(WTPOperationDataModel model) throws Exception {
-		super.verify(model);
-		
-		String archiveDestination = model.getStringProperty(J2EEModuleExportDataModel.ARCHIVE_DESTINATION);
-		File archive = new File(archiveDestination);
-		Assert.assertTrue("The exported archive must exist.", archive.exists());
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/J2EEImportDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/J2EEImportDataModelVerifier.java
deleted file mode 100644
index 1267cab..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/J2EEImportDataModelVerifier.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Created on Jan 5, 2004
- * 
- * To change the template for this generated file go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers;
-
-import junit.framework.Assert;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleImportDataModel;
-import org.eclipse.wst.common.frameworks.operations.WTPOperationDataModel;
-import org.eclipse.wst.common.tests.ProjectUtility;
-import org.eclipse.wst.server.core.IRuntime;
-import org.eclipse.wst.server.core.ServerCore;
-
-/**
- * @author Administrator
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-public class J2EEImportDataModelVerifier extends DataModelVerifier {
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.DataModelVerifier#verify(org.eclipse.wtp.common.operation.WTPOperationDataModel)
-	 */
-	public void verify(WTPOperationDataModel model) throws Exception {
-
-		super.verify(model);
-
-		IProject project = ProjectUtility.verifyAndReturnProject(model.getStringProperty(J2EEModuleImportDataModel.PROJECT_NAME), true);
-
-		String serverTargetId = model.getStringProperty(J2EEModuleImportDataModel.SERVER_TARGET_ID);
-		IRuntime stt = ServerCore.getProjectProperties(project).getRuntimeTarget();
-		/* fail because exactly one of the following is set */
-		if (serverTargetId != null) {
-			if (stt == null)
-				Assert.fail("The server target of the project (Not Set) does not match that of the model (" + serverTargetId + ")");
-			/*
-			 * we know that either stt == null && serverTargetId == null OR stt != null &&
-			 * serverTargetId != null
-			 */
-			else 
-				Assert.assertEquals("The actual server target should match the model's server target.",serverTargetId,stt.getName());
-		}
-
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/J2EEProjectCreationDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/J2EEProjectCreationDataModelVerifier.java
deleted file mode 100644
index d9610dc..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/J2EEProjectCreationDataModelVerifier.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers;
-
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleCreationDataModel;
-import org.eclipse.wst.common.frameworks.operations.WTPOperationDataModel;
-import org.eclipse.wst.common.tests.ProjectUtility;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class J2EEProjectCreationDataModelVerifier extends DataModelVerifier {
-
-	public void verify(WTPOperationDataModel model) throws Exception {
-		super.verify(model);		
-		ProjectUtility.verifyProject(model.getStringProperty(J2EEModuleCreationDataModel.PROJECT_NAME), true);
-
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/ModuleExportDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/ModuleExportDataModelVerifier.java
deleted file mode 100644
index 0119f0f..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/ModuleExportDataModelVerifier.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Created on Jan 5, 2004
- * 
- * To change the template for this generated file go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers;
-
-import org.eclipse.wst.common.frameworks.operations.WTPOperationDataModel;
-
-/**
- * @author mdelder
- */
-public abstract class ModuleExportDataModelVerifier extends J2EEExportDataModelVerifier {
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.J2EEExportDataModelVerifier#verify(org.eclipse.wtp.common.operation.WTPOperationDataModel)
-	 */
-	public final void verify(WTPOperationDataModel model) throws Exception {
-		super.verify(model);
-
-		doModuleSpecificVerification(model);
-	}
-
-	public void doModuleSpecificVerification(WTPOperationDataModel model) throws Exception {
-		
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/ModuleImportDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/ModuleImportDataModelVerifier.java
deleted file mode 100644
index 7df9a8b..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/ModuleImportDataModelVerifier.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers;
-
-import org.eclipse.wst.common.frameworks.operations.WTPOperationDataModel;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public abstract class ModuleImportDataModelVerifier extends J2EEImportDataModelVerifier {
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.DataModelVerifier#verify(org.eclipse.wtp.common.operation.WTPOperationDataModel)
-	 */
-	public final void verify(WTPOperationDataModel model) throws Exception { 
-		super.verify(model);
-		
-		doModuleSpecificVerification(model);
-	}
-	
-	public void doModuleSpecificVerification(WTPOperationDataModel model) throws Exception {
-		
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/ModuleProjectCreationDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/ModuleProjectCreationDataModelVerifier.java
deleted file mode 100644
index b2e2008..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/verifiers/ModuleProjectCreationDataModelVerifier.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers;
-
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleCreationDataModel;
-import org.eclipse.wst.common.frameworks.operations.WTPOperationDataModel;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public abstract class ModuleProjectCreationDataModelVerifier extends J2EEProjectCreationDataModelVerifier {
-    /* (non-Javadoc)
-     * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.J2EEProjectCreationDataModelVerifier#verify(org.eclipse.wtp.common.operation.WTPOperationDataModel)
-     */
-    public void verify(WTPOperationDataModel model) throws Exception {
-        super.verify(model);
-        verifyProjectCreationDataModel((J2EEModuleCreationDataModel)model);
-    }
-
-    public abstract void verifyProjectCreationDataModel(J2EEModuleCreationDataModel model); 
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/plugin/AllPluginTests.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/plugin/AllPluginTests.java
deleted file mode 100644
index 6e96487..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/plugin/AllPluginTests.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Created on Feb 2, 2004
- * 
- * To change the template for this generated file go to Window - Preferences - Java - Code Generation - Code and
- * Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.plugin;
-
-import org.eclipse.core.runtime.Path;
-import org.eclipse.wst.server.core.IRuntime;
-import org.eclipse.wst.server.core.IRuntimeType;
-import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
-import org.eclipse.wst.server.core.ServerCore;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * @author jsholl
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code Generation - Code
- * and Comments
- */
-public class AllPluginTests extends TestSuite {
-	
-	public static IRuntime JONAS_SERVER = createJONASRuntime();
-
-    public static Test suite() {
-        return new AllPluginTests();
-    }
-
-    public AllPluginTests() {
-        super();
-	      addTest(org.eclipse.wtp.j2ee.headless.tests.ejb.operations.AllTests.suite());
-	      addTest(org.eclipse.wtp.j2ee.headless.tests.web.operations.AllTests.suite());
-	      addTest(org.eclipse.wtp.j2ee.headless.tests.jca.operations.AllTests.suite());
-	      addTest(org.eclipse.wtp.j2ee.headless.tests.ear.operations.AllTests.suite());
-	      addTest(org.eclipse.wtp.j2ee.headless.tests.appclient.operations.AllTests.suite());
-	      addTest(org.eclipse.jst.j2ee.tests.modulecore.AllTests.suite());
-    }
-    
-    public static IRuntime createJONASRuntime()  {
-    	String s = System.getProperty("org.eclipse.jst.server.jonas.432");
-    	if (s == null || s.length() == 0)
-    		return null;
-    	try {
-    		IRuntimeType rt = ServerCore.findRuntimeType("org.eclipse.jst.server.core.runtimeType");
-    		IRuntimeWorkingCopy wc = rt.createRuntime(null, null);
-    		wc.setLocation(new Path(s));
-    		return wc.save(true, null);
-    	} catch (Exception e) {
-    		e.printStackTrace();
-    		return null;
-    	}
-    }
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/plugin/HeadlessTestsPlugin.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/plugin/HeadlessTestsPlugin.java
deleted file mode 100644
index 910baad..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/plugin/HeadlessTestsPlugin.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.eclipse.wtp.j2ee.headless.tests.plugin;
-
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.Plugin;
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class HeadlessTestsPlugin extends Plugin {
-	//The shared instance.
-	private static HeadlessTestsPlugin plugin;
-	//Resource bundle.
-	private ResourceBundle resourceBundle;
-	
-	/**
-	 * The constructor.
-	 */
-	public HeadlessTestsPlugin() {
-		super();
-		plugin = this;
-		try {
-			resourceBundle= ResourceBundle.getBundle("org.eclipse.wtp.j2ee.wb.tests.TestsPluginResources");
-		} catch (MissingResourceException x) {
-			resourceBundle = null;
-		}
-	}
-
-	/**
-	 * Returns the shared instance.
-	 */
-	public static HeadlessTestsPlugin getDefault() {
-		return plugin;
-	}
-
-	/**
-	 * Returns the workspace instance.
-	 */
-	public static IWorkspace getWorkspace() {
-		return ResourcesPlugin.getWorkspace();
-	}
-
-	/**
-	 * Returns the string from the plugin's resource bundle,
-	 * or 'key' if not found.
-	 */
-	public static String getResourceString(String key) {
-		ResourceBundle bundle= getDefault().getResourceBundle();
-		try {
-			return (bundle!=null ? bundle.getString(key) : key);
-		} catch (MissingResourceException e) {
-			return key;
-		}
-	}
-
-	/**
-	 * Returns the plugin's resource bundle,
-	 */
-	public ResourceBundle getResourceBundle() {
-		return resourceBundle;
-	}
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/operations/AllTests.java b/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/operations/AllTests.java
deleted file mode 100644
index 2977375..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/operations/AllTests.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Created on Feb 2, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.jca.operations;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * @author jsholl
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class AllTests extends TestSuite {
-
-    public static Test suite(){
-        return new AllTests();
-    }
-    
-    public AllTests(){
-        super("JCA Tests");
-        addTest(ConnectorProjectCreationOperationTest.suite());
-        addTest(RARExportOperationTest.suite());
-        addTest(RARImportOperationTest.suite());
-    }
-    
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/operations/ConnectorProjectCreationOperationTest.java b/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/operations/ConnectorProjectCreationOperationTest.java
deleted file mode 100644
index 099fcf2..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/operations/ConnectorProjectCreationOperationTest.java
+++ /dev/null
@@ -1,25 +0,0 @@
-
-package org.eclipse.wtp.j2ee.headless.tests.jca.operations;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleCreationDataModel;
-import org.eclipse.jst.j2ee.internal.jca.operations.ConnectorModuleCreationDataModel;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleProjectCreationOperationTest;
-
-public class ConnectorProjectCreationOperationTest extends ModuleProjectCreationOperationTest {
-    
-    public static Test suite() {
-        return new TestSuite(ConnectorProjectCreationOperationTest.class);
-    }
-
-    /* (non-Javadoc)
-     * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleProjectCreationOperationTest#getProjectCreationDataModel()
-     */
-    public J2EEModuleCreationDataModel getProjectCreationDataModel() {
-        return new ConnectorModuleCreationDataModel();
-    }
- 
-    
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/operations/RARExportOperationTest.java b/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/operations/RARExportOperationTest.java
deleted file mode 100644
index 440346d..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/operations/RARExportOperationTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Created on Jan 6, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.jca.operations;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleExportDataModel;
-import org.eclipse.jst.j2ee.internal.jca.operations.ConnectorModuleExportDataModel;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleExportOperationTestCase;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class RARExportOperationTest extends ModuleExportOperationTestCase {
-	
-	public RARExportOperationTest(String name) {
-		super(name);
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleExportOperationTestCase#suite()
-	 */
-	public static Test suite() {
-		return new TestSuite(RARExportOperationTest.class);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleExportOperationTestCase#getModelInstance()
-	 */
-	protected J2EEModuleExportDataModel getModelInstance() {
-		return new ConnectorModuleExportDataModel();
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleExportOperationTestCase#getImportTestCase()
-	 */
-	protected ModuleImportOperationTestCase getImportTestCase() { 
-		return new RARImportOperationTest("");
-	}
-	
-	/**
-	 * @return
-	 */
-	public String getModuleExportFileExt() {
-		return ".rar";
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/operations/RARImportOperationTest.java b/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/operations/RARImportOperationTest.java
deleted file mode 100644
index c16bc34..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/operations/RARImportOperationTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Created on Jan 6, 2004
- * 
- * To change the template for this generated file go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.jca.operations;
-
-import java.util.List;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleImportDataModel;
-import org.eclipse.jst.j2ee.internal.jca.operations.ConnectorModuleImportDataModel;
-import org.eclipse.wst.common.tests.ProjectUtility;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase;
-import org.eclipse.wtp.j2ee.headless.tests.plugin.HeadlessTestsPlugin;
-
-/**
- * @author Administrator
- * 
- * To change the template for this generated type comment go to Window - Preferences - Java - Code
- * Generation - Code and Comments
- */
-public class RARImportOperationTest extends ModuleImportOperationTestCase {
-
-	public static boolean isBinary = false;
-	public static boolean overwriteProject = false;
-
-	public static Test suite() {
-		return new TestSuite(RARImportOperationTest.class);
-	}
- 
-	public RARImportOperationTest(String name) {
-		super(name);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase#getDirectory()
-	 */
-	protected String getDirectory() {
-		return "RARImportTests";
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase#getModelInstance()
-	 */
-	protected J2EEModuleImportDataModel getModelInstance() {
-		return new ConnectorModuleImportDataModel();
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase#getImportableArchiveFileNames()
-	 */
-	protected List getImportableArchiveFileNames() {
-		return ProjectUtility.getRarsInDirectory(HeadlessTestsPlugin.getDefault(),TESTS_PATH);
-	}
- 
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/verifiers/JCAExportDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/verifiers/JCAExportDataModelVerifier.java
deleted file mode 100644
index e0a9c25..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/verifiers/JCAExportDataModelVerifier.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.jca.verifiers;
-
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.ModuleExportDataModelVerifier;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class JCAExportDataModelVerifier extends ModuleExportDataModelVerifier {
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/verifiers/JCAImportDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/verifiers/JCAImportDataModelVerifier.java
deleted file mode 100644
index d8815ef..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/verifiers/JCAImportDataModelVerifier.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.jca.verifiers;
-
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.ModuleImportDataModelVerifier;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class JCAImportDataModelVerifier extends ModuleImportDataModelVerifier {
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/verifiers/JCAProjectCreationDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/verifiers/JCAProjectCreationDataModelVerifier.java
deleted file mode 100644
index 32de6dc..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/jcamodule-tests/org/eclipse/wtp/j2ee/headless/tests/jca/verifiers/JCAProjectCreationDataModelVerifier.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.jca.verifiers;
-
-import junit.framework.Assert;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleCreationDataModel;
-import org.eclipse.jst.j2ee.common.XMLResource;
-import org.eclipse.jst.j2ee.internal.earcreation.EAREditModel;
-import org.eclipse.jst.j2ee.internal.earcreation.EARNatureRuntime;
-import org.eclipse.jst.j2ee.internal.earcreation.IEARNatureConstants;
-import org.eclipse.jst.j2ee.internal.jca.operations.ConnectorEditModel;
-import org.eclipse.jst.j2ee.internal.jca.operations.ConnectorModuleCreationDataModel;
-import org.eclipse.jst.j2ee.internal.jca.operations.ConnectorNatureRuntime;
-import org.eclipse.wst.common.internal.emfworkbench.operation.EditModelOperationDataModel;
-import org.eclipse.wst.common.tests.ProjectUtility;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.ModuleProjectCreationDataModelVerifier;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class JCAProjectCreationDataModelVerifier extends ModuleProjectCreationDataModelVerifier {
-    /* (non-Javadoc)
-     * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.ModuleProjectCreationDataModelVerifier#verifyProjectCreationDataModel(com.ibm.etools.application.operations.J2EEProjectCreationDataModel)
-     */
-    public void verifyProjectCreationDataModel(J2EEModuleCreationDataModel model) {
-        ConnectorModuleCreationDataModel dataModel = (ConnectorModuleCreationDataModel) model;
-        ProjectUtility.verifyProject(dataModel.getTargetProject().getName(), true);
-        ConnectorEditModel editModel = null;
-        Object key = new Object();
-        try {
-        	ConnectorNatureRuntime cRuntime = ConnectorNatureRuntime.getRuntime(dataModel.getTargetProject());
-            //EMFWorkbenchContext emfWorkbenchContext = WorkbenchResourceHelper.createEMFContext(dataModel.getTargetProject(), null);
-            editModel = (ConnectorEditModel) cRuntime.getEditModelForRead(dataModel.getStringProperty(EditModelOperationDataModel.EDIT_MODEL_ID), key);
-            XMLResource dd = editModel.getDeploymentDescriptorResource();
-            Assert.assertNotNull("Deployment Descriptor Null", dd);
-        } finally {
-            editModel.releaseAccess(key);
-        }
-        if (dataModel.getBooleanProperty(ConnectorModuleCreationDataModel.ADD_TO_EAR)) {
-            IProject earProject = dataModel.getApplicationCreationDataModel().getTargetProject();
-            EAREditModel ear = null;
-            try {
-                Assert.assertTrue("EAR doesn't exist:", earProject.exists());
-                EARNatureRuntime runtime = EARNatureRuntime.getRuntime(earProject);
-                ear = (EAREditModel) runtime.getEditModelForRead(IEARNatureConstants.EDIT_MODEL_ID, key);
-                ear.getModuleMapping(dataModel.getTargetProject());
-                //TODO
-            } finally {
-                ear.releaseAccess(key);
-            }
-        }
-    }
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/plugin.xml b/tests/org.eclipse.jst.j2ee.tests/plugin.xml
deleted file mode 100644
index 6d96788..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/plugin.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin
-   id="org.eclipse.jst.j2ee.tests"
-   name="J2EE Tests Plug-in"
-   version="1.0.0"
-   class="org.eclipse.wtp.j2ee.headless.tests.plugin.HeadlessTestsPlugin">
-
-   <runtime>
-      <library name="j2ee-tests.jar">
-         <export name="*"/>
-      </library>
-   </runtime>
-   <requires>
-      <import plugin="org.eclipse.core.runtime"/>
-      <import plugin="org.eclipse.core.resources"/>
-      <import plugin="org.eclipse.jst.common.frameworks"/>
-      <import plugin="com.ibm.wtp.emf.workbench"/>
-      <import plugin="org.eclipse.wst.common.emfworkbench.integration"/>
-      <import plugin="org.eclipse.wst.common.frameworks"/>
-      <import plugin="org.eclipse.jst.j2ee.core"/>
-      <import plugin="org.eclipse.jst.j2ee.web"/>
-      <import plugin="org.eclipse.pde.junit.runtime"/>
-      <import plugin="org.junit"/>
-      <import plugin="org.eclipse.emf.common"/>
-      <import plugin="org.eclipse.emf.ecore"/>
-      <import plugin="org.eclipse.jst.j2ee"/>
-      <import plugin="org.eclipse.wst.common.modulecore"/>
-      <import plugin="org.eclipse.jst.j2ee.ejb"/>
-      <import plugin="org.eclipse.jst.j2ee.jca"/>
-      <import plugin="org.eclipse.wst.web"/>
-      <import plugin="org.eclipse.wst.common.tests"/>
-      <import plugin="org.eclipse.wst.server.core"/>
-      
-      
-   </requires>
-
-</plugin>
diff --git a/tests/org.eclipse.jst.j2ee.tests/test.xml b/tests/org.eclipse.jst.j2ee.tests/test.xml
deleted file mode 100644
index b878946..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/test.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="testsuite" default="run" basedir=".">
-  <!-- The property ${eclipse-home} should be passed into this script -->
-  <!-- Set a meaningful default value for when it is not. -->
-  <property name="eclipse-home" value="${basedir}\..\.."/>
-
-  <!-- sets the properties eclipse-home, and library-file -->
-  <property name="plugin-name" value="org.eclipse.jst.j2ee.tests"/>
-  <property name="library-file" value="${eclipse-home}/plugins/org.eclipse.test_3.1.0/library.xml"/>
-  <property name="extraVMargs" value="-Dorg.eclipse.jst.server.jonas.432=${jonas432Dir}"/> 
-            
-  <property name="workspace" value="${basedir}/${plugin-name}"/>
-
-  <!-- This target holds all initialization code that needs to be done for -->
-  <!-- all tests that are to be run. Initialization for individual tests -->
-  <!-- should be done within the body of the suite target. -->
-  <target name="init">
-    <tstamp/>
-    <delete>
-      <fileset dir="${eclipse-home}" includes="org*.xml"/>
-    </delete>
-  </target>
-
-  <!-- This target defines the tests that need to be run. -->
-  <target name="suite">
-    <delete dir="${workspace}" quiet="true"/>
-    
-    <ant target="core-test" antfile="${library-file}" dir="${eclipse-home}">
-      <property name="data-dir" value="${workspace}"/>
-      <property name="plugin-name" value="${plugin-name}"/>
-      <property name="classname" value="org.eclipse.jst.j2ee.core.tests.bvt.AutomatedBVT"/>
-      <property name="extraVMargs" value="${extraVMargs}"/>
-    </ant>
-  </target>
-    
-  <!-- This target holds code to cleanup the testing environment after -->
-  <!-- after all of the tests have been run. You can use this target to -->
-  <!-- delete temporary files that have been created. -->
-  <target name="cleanup">
-	<delete dir="${workspace}" quiet="true"/>
-  </target>
-
-  <!-- This target runs the test suite. Any actions that need to happen -->
-  <!-- after all the tests have been run should go here. -->
-  <target name="run" depends="init,suite,cleanup">
-    <ant target="collect" antfile="${library-file}" dir="${eclipse-home}">
-      <property name="includes" value="org*.xml"/>
-      <property name="output-file" value="${plugin-name}.xml"/>
-    </ant>
-  </target>
-
-</project>
-
-
-
diff --git a/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/operations/AllTests.java b/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/operations/AllTests.java
deleted file mode 100644
index 6c3e671..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/operations/AllTests.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Created on Feb 2, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.web.operations;
-
-import org.eclipse.core.runtime.Path;
-import org.eclipse.wst.server.core.IRuntime;
-import org.eclipse.wst.server.core.IRuntimeType;
-import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
-import org.eclipse.wst.server.core.ServerCore;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * @author jsholl
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class AllTests extends TestSuite {
-	
-	public static IRuntime TOMCAT_RUNTIME = createRuntime();
-	public static IRuntime JONAS_TOMCAT_RUNTIME = createJONASRuntime();
-	
-	
-    public static Test suite(){
-        return new AllTests();
-    }
-    
-    public AllTests(){
-        super("WEB Tests");
-        addTest(WebExportOperationTest.suite());
-        addTest(WebImportOperationTest.suite());
-        addTest(WebProjectCreationOperationTest.suite());
-        addTest(WebProjectCreationTest.suite());
-    }
-    
-    public static IRuntime createRuntime()  {
-    	String s = "D:/Program Files/Apache Software Foundation/Tomcat 5.0";
-    	if (s == null || s.length() == 0)
-    		return null;
-    	try {
-    		IRuntimeType rt = ServerCore.findRuntimeType("org.eclipse.jst.server.tomcat.runtime.50");
-    		IRuntimeWorkingCopy wc = rt.createRuntime(null, null);
-    		wc.setLocation(new Path(s));
-    		return wc.save(true, null);
-    	} catch (Exception e) {
-    		e.printStackTrace();
-    		return null;
-    	}
-    }
-    
-    public static IRuntime createJONASRuntime()  {
-    	String s = "D:/JOnAS-4.3.2";
-    	if (s == null || s.length() == 0)
-    		return null;
-    	try {
-    		IRuntimeType rt = ServerCore.findRuntimeType("org.eclipse.jst.server.tomcat.runtime.50");
-    		IRuntimeWorkingCopy wc = rt.createRuntime(null, null);
-    		wc.setLocation(new Path(s));
-    		return wc.save(true, null);
-    	} catch (Exception e) {
-    		e.printStackTrace();
-    		return null;
-    	}
-    }
-    
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/operations/WebExportOperationTest.java b/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/operations/WebExportOperationTest.java
deleted file mode 100644
index 3cd8171..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/operations/WebExportOperationTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Created on Jan 6, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.web.operations;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleExportDataModel;
-import org.eclipse.jst.j2ee.internal.web.archive.operations.WebModuleExportDataModel;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleExportOperationTestCase;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class WebExportOperationTest extends ModuleExportOperationTestCase {
-	 
-	protected boolean excludeCompileJsp = false;
-	
-	public WebExportOperationTest(String name) {
-		super(name);
-	}
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite(); 
-		suite.addTestSuite(WebExportOperationTest.class); 
-		return suite;
-	}
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.OperationTestCase#setUp()
-	 */
-	protected void setUp() throws Exception { 
-		super.setUp(); 
-		excludeCompileJsp = false;
-	}
-
-	public void testExcludeCompileJspOn() throws Exception {  
-		excludeCompileJsp = true;
-		testAllExportTestCases();
-	}
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleExportOperationTestCase#getModelInstance()
-	 */
-	protected J2EEModuleExportDataModel getModelInstance() {
-		WebModuleExportDataModel dataModel = new WebModuleExportDataModel(); 
-		dataModel.setBooleanProperty(WebModuleExportDataModel.EXCLUDE_COMPILE_JSP, excludeCompileJsp);
-		return dataModel;		
-	}
-	
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleExportOperationTestCase#getImportTestCase()
-	 */
-	protected ModuleImportOperationTestCase getImportTestCase() {
-		return new WebImportOperationTest("");
-	}
-	
-	/**
-	 * @return
-	 */
-	public String getModuleExportFileExt() {
-		return ".war";
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/operations/WebImportOperationTest.java b/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/operations/WebImportOperationTest.java
deleted file mode 100644
index 3ccb86f..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/operations/WebImportOperationTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Created on Jan 6, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.web.operations;
-
-import java.io.File;
-import java.net.URL;
-import java.util.List;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleImportDataModel;
-import org.eclipse.jst.j2ee.internal.web.archive.operations.WebModuleImportDataModel;
-import org.eclipse.wst.common.tests.ProjectUtility;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase;
-import org.eclipse.wtp.j2ee.headless.tests.plugin.HeadlessTestsPlugin;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class WebImportOperationTest extends ModuleImportOperationTestCase {
-	
-	public final String WEB_TESTS_PATH;
-	
-	public WebImportOperationTest(String name) {
-		super(name);
-		String relativeImportTestsPath = "TestData" + File.separator + getDirectory() + File.separator;
-		URL fullImportTestsPath = HeadlessTestsPlugin.getDefault().find(new Path(relativeImportTestsPath));
-		WEB_TESTS_PATH = fullImportTestsPath.getPath();
-	}	
-	
-	public static Test suite() {
-		return new TestSuite(WebImportOperationTest.class);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase#getDirectory()
-	 */
-	protected String getDirectory() {
-		return "WARImportTests";
-	}
- 
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase#getModelInstance()
-	 */
-	protected J2EEModuleImportDataModel getModelInstance() {
-		return new WebModuleImportDataModel();
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase#getImportableArchiveFileNames()
-	 */
-	protected List getImportableArchiveFileNames() {
-		return ProjectUtility.getWarsInDirectory(HeadlessTestsPlugin.getDefault(),WEB_TESTS_PATH);
-	}
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/operations/WebProjectCreationOperationTest.java b/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/operations/WebProjectCreationOperationTest.java
deleted file mode 100644
index 04926f7..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/operations/WebProjectCreationOperationTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Created on Nov 7, 2003
- *
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.web.operations;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleCreationDataModel;
-import org.eclipse.jst.j2ee.internal.web.archive.operations.WebModuleCreationDataModel;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleProjectCreationOperationTest;
-
-
-public class WebProjectCreationOperationTest extends ModuleProjectCreationOperationTest {
-    
-    public static Test suite() {
-        return new TestSuite(WebProjectCreationOperationTest.class);
-    }
-
-    /* (non-Javadoc)
-     * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleProjectCreationOperationTest#getProjectCreationDataModel()
-     */
-    public J2EEModuleCreationDataModel getProjectCreationDataModel() {
-        return new WebModuleCreationDataModel();
-    }
-    
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/operations/WebProjectCreationTest.java b/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/operations/WebProjectCreationTest.java
deleted file mode 100644
index 5a0054a..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/operations/WebProjectCreationTest.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Created on Jan 6, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.web.operations;
-
-import junit.framework.Test;
-
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleCreationDataModel;
-import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
-import org.eclipse.wst.common.tests.ProjectUtility;
-import org.eclipse.wst.common.tests.SimpleTestSuite;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.AbstractProjectCreationTest;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.RandomObjectGenerator;
-
-/**
- * @author blancett
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class WebProjectCreationTest extends AbstractProjectCreationTest {
-	
-	
-	public void testVaild12WebProjectNameCreationWithAlphabetChars() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++)
-			createVaildProjectNameCreationWithAlphabetChars(WEB_PROJECT, J2EEVersionConstants.WEB_2_2_ID, false);
-	}
-	
-	public void testVaild12WebProjectNameCreationWithMixedChars() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++)
-			createVaildProjectNameCreationWithAlphabetChars(WEB_PROJECT, J2EEVersionConstants.WEB_2_2_ID, true);
-	}
-	
-	public void testVaild13WebProjectNameCreationWithAlphabetChars() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++)
-			createVaildProjectNameCreationWithAlphabetChars(WEB_PROJECT, J2EEVersionConstants.WEB_2_3_ID, false);
-	}
-	
-	public void testVaild13WebProjectNameCreationAllChars() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++)
-			createVaildProjectNameCreationWithAlphabetChars(WEB_PROJECT, J2EEVersionConstants.WEB_2_3_ID, true);
-	}
-	
-	public void testVaildRandomVersionsWebProjectNameCreationAllChars() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++) {
-			if (RandomObjectGenerator.createRandomProjectNumber() % 2 == 0)
-				createVaildProjectNameCreationWithAlphabetChars(WEB_PROJECT, J2EEVersionConstants.WEB_2_3_ID, true);
-			else
-				createVaildProjectNameCreationWithAlphabetChars(WEB_PROJECT, J2EEVersionConstants.WEB_2_2_ID, true);
-		}
-	}
-	
-	public void testVaildRandomVersionsWebProjectNameCreationAlphabet() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++) {
-			if (RandomObjectGenerator.createRandomProjectNumber() % 2 == 0)
-				createVaildProjectNameCreationWithAlphabetChars(WEB_PROJECT, J2EEVersionConstants.WEB_2_3_ID, false);
-			else
-				createVaildProjectNameCreationWithAlphabetChars(WEB_PROJECT, J2EEVersionConstants.WEB_2_2_ID, false);
-		}
-	}
-	
-	public void testInVaild12WebProjectNameCreation() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		for (int i = 0; i < RandomObjectGenerator.createRandomProjectNumber(); i++) {
-			try {
-				 setupWebProject(RandomObjectGenerator.createInvalidRandomProjectName(), J2EEVersionConstants.WEB_2_2_ID);
-				 J2EEModuleCreationDataModel model = setupWebProject(RandomObjectGenerator.createInvalidRandomProjectName(), J2EEVersionConstants.WEB_2_2_ID);
-				 checkValidDataModel(model);
-			} catch (Exception e) {
-				if (e instanceof IllegalArgumentException) {
-					System.out.println(ILLEGAL_PROJECT_NAME_MESSAGE + projectName);
-				} else
-					new Exception(UNEXPECTED_ERROR_MESSAGE);
-			} finally {
-				new Exception(TEST_FAILED_MESSAGE);
-			}
-		}
-	}
-
-    public static Test suite() {
-        return new SimpleTestSuite(WebProjectCreationTest.class);
-    }
-    
-    public void testJavaCreation() throws Exception {
-	}
-	
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/verifiers/WebExportDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/verifiers/WebExportDataModelVerifier.java
deleted file mode 100644
index cb4a34b..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/verifiers/WebExportDataModelVerifier.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.web.verifiers;
-
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.ModuleExportDataModelVerifier;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class WebExportDataModelVerifier extends ModuleExportDataModelVerifier {
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/verifiers/WebImportDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/verifiers/WebImportDataModelVerifier.java
deleted file mode 100644
index d897ea1..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/verifiers/WebImportDataModelVerifier.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.web.verifiers;
-
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.ModuleImportDataModelVerifier;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class WebImportDataModelVerifier extends ModuleImportDataModelVerifier {
-
-}
diff --git a/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/verifiers/WebProjectCreationDataModelVerifier.java b/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/verifiers/WebProjectCreationDataModelVerifier.java
deleted file mode 100644
index 3b300c5..0000000
--- a/tests/org.eclipse.jst.j2ee.tests/webmodule-tests/org/eclipse/wtp/j2ee/headless/tests/web/verifiers/WebProjectCreationDataModelVerifier.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Created on Jan 5, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.wtp.j2ee.headless.tests.web.verifiers;
-
-import junit.framework.Assert;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleCreationDataModel;
-import org.eclipse.jst.j2ee.common.XMLResource;
-import org.eclipse.jst.j2ee.internal.earcreation.EAREditModel;
-import org.eclipse.jst.j2ee.internal.earcreation.EARNatureRuntime;
-import org.eclipse.jst.j2ee.internal.earcreation.IEARNatureConstants;
-import org.eclipse.jst.j2ee.internal.web.archive.operations.WebModuleCreationDataModel;
-import org.eclipse.jst.j2ee.internal.web.operations.J2EEWebNatureRuntime;
-import org.eclipse.jst.j2ee.internal.web.operations.WebEditModel;
-import org.eclipse.wst.common.internal.emfworkbench.operation.EditModelOperationDataModel;
-import org.eclipse.wst.common.tests.ProjectUtility;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.ModuleProjectCreationDataModelVerifier;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class WebProjectCreationDataModelVerifier extends ModuleProjectCreationDataModelVerifier {
-    
-    /* (non-Javadoc)
-     * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.ModuleProjectCreationDataModelVerifier#verifyProjectCreationDataModel(com.ibm.etools.application.operations.J2EEProjectCreationDataModel)
-     */
-    public void verifyProjectCreationDataModel(J2EEModuleCreationDataModel model) {
-        WebModuleCreationDataModel dataModel = (WebModuleCreationDataModel) model;
-        ProjectUtility.verifyProject(dataModel.getTargetProject().getName(), true);
-        WebEditModel editModel = null;
-        Object key = new Object();
-        try {
-        	J2EEWebNatureRuntime wRuntime = J2EEWebNatureRuntime.getRuntime(dataModel.getTargetProject());
-            //EMFWorkbenchContext emfWorkbenchContext = WorkbenchResourceHelper.createEMFContext(dataModel.getTargetProject(), null);
-            editModel = (WebEditModel) wRuntime.getEditModelForRead(dataModel.getStringProperty(EditModelOperationDataModel.EDIT_MODEL_ID), key);
-            XMLResource dd = editModel.getDeploymentDescriptorResource();
-            Assert.assertNotNull("Deployment Descriptor Null", dd);
-        } finally {
-            editModel.releaseAccess(key);
-        }
-        if (dataModel.getBooleanProperty(WebModuleCreationDataModel.ADD_TO_EAR)) {
-            IProject earProject = dataModel.getApplicationCreationDataModel().getTargetProject();
-            EAREditModel ear = null;
-            try {
-                Assert.assertTrue("EAR doesn't exist:", earProject.exists());
-                EARNatureRuntime runtime = EARNatureRuntime.getRuntime(earProject);
-                //EMFWorkbenchContext emfWorkbenchContext = WorkbenchResourceHelper.createEMFContext(earProject, null);
-                ear = (EAREditModel) runtime.getEditModelForRead(IEARNatureConstants.EDIT_MODEL_ID, key);
-                ear.getModuleMapping(dataModel.getTargetProject());
-                //TODO
-            } finally {
-                ear.releaseAccess(key);
-            }
-
-        }
-    }
-
-}
diff --git a/tests/org.eclipse.jst.servlet.tests/.classpath b/tests/org.eclipse.jst.servlet.tests/.classpath
deleted file mode 100644
index 1160020..0000000
--- a/tests/org.eclipse.jst.servlet.tests/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="webmodule-tomcat-tests"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/tests/org.eclipse.jst.servlet.tests/.cvsignore b/tests/org.eclipse.jst.servlet.tests/.cvsignore
deleted file mode 100644
index 2521e52..0000000
--- a/tests/org.eclipse.jst.servlet.tests/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-bin
-temp.folder
-build.xml
-ui.jar
diff --git a/tests/org.eclipse.jst.servlet.tests/.project b/tests/org.eclipse.jst.servlet.tests/.project
deleted file mode 100644
index 732c1cf..0000000
--- a/tests/org.eclipse.jst.servlet.tests/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jst.j2ee.servlet.tests</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/tests/org.eclipse.jst.servlet.tests/WARImportTests/Example1.war b/tests/org.eclipse.jst.servlet.tests/WARImportTests/Example1.war
deleted file mode 100644
index 9c30a38..0000000
--- a/tests/org.eclipse.jst.servlet.tests/WARImportTests/Example1.war
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.servlet.tests/WARImportTests/Test12Web.war b/tests/org.eclipse.jst.servlet.tests/WARImportTests/Test12Web.war
deleted file mode 100644
index ba220b1..0000000
--- a/tests/org.eclipse.jst.servlet.tests/WARImportTests/Test12Web.war
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.servlet.tests/WARImportTests/Test13Web.war b/tests/org.eclipse.jst.servlet.tests/WARImportTests/Test13Web.war
deleted file mode 100644
index 22aa926..0000000
--- a/tests/org.eclipse.jst.servlet.tests/WARImportTests/Test13Web.war
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.servlet.tests/WARImportTests/Test14Web.war b/tests/org.eclipse.jst.servlet.tests/WARImportTests/Test14Web.war
deleted file mode 100644
index 1eb2a3f..0000000
--- a/tests/org.eclipse.jst.servlet.tests/WARImportTests/Test14Web.war
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.servlet.tests/WARImportTests/YourCompanyExample.war b/tests/org.eclipse.jst.servlet.tests/WARImportTests/YourCompanyExample.war
deleted file mode 100644
index 1c9628c..0000000
--- a/tests/org.eclipse.jst.servlet.tests/WARImportTests/YourCompanyExample.war
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.servlet.tests/build.properties b/tests/org.eclipse.jst.servlet.tests/build.properties
deleted file mode 100644
index 986c81c..0000000
--- a/tests/org.eclipse.jst.servlet.tests/build.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-source.tests.jar = webmodule-tomcat-tests/
-output.tests.jar = bin/
-bin.includes = plugin.xml,\
-               tests.jar,\
-               WARImportTests/,\
-               test.xml
diff --git a/tests/org.eclipse.jst.servlet.tests/plugin.xml b/tests/org.eclipse.jst.servlet.tests/plugin.xml
deleted file mode 100644
index f232f83..0000000
--- a/tests/org.eclipse.jst.servlet.tests/plugin.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin
-   id="org.eclipse.jst.servlet.tests"
-   name="org.eclipse.jst.servlet.tests"
-   version="1.0.0"
-   provider-name="IBM"
-   class="org.eclipse.jst.servlet.tests.ServletTestsPlugin">
-
-   <runtime>
-      <library name="tests.jar">
-         <export name="*"/>
-      </library>
-   </runtime>
-
-   <requires>
-      <import plugin="org.eclipse.core.runtime"/>
-      <import plugin="org.eclipse.jst.common.frameworks"/>
-      <import plugin="com.ibm.wtp.emf.workbench"/>
-      <import plugin="org.eclipse.wst.common.emfworkbench.integration"/>
-      <import plugin="org.eclipse.wst.common.frameworks"/>
-      <import plugin="org.eclipse.jst.j2ee.core"/>
-      <import plugin="org.eclipse.jst.j2ee.web"/>
-      <import plugin="org.eclipse.wst.common.tests"/>
-      <import plugin="org.junit"/>
-      <import plugin="org.junit"/>
-      <import plugin="org.eclipse.jst.j2ee.tests"/>
-      <import plugin="org.eclipse.jst.j2ee"/>
-      <import plugin="org.eclipse.wst.server.core"/>
-      <import plugin="org.eclipse.emf.common"/>
-      <import plugin="org.eclipse.emf.ecore"/>
-      <import plugin="org.eclipse.wst.common.modulecore"/>
-      
-   </requires>
-
-</plugin>
diff --git a/tests/org.eclipse.jst.servlet.tests/test.xml b/tests/org.eclipse.jst.servlet.tests/test.xml
deleted file mode 100644
index cbbb98f..0000000
--- a/tests/org.eclipse.jst.servlet.tests/test.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="testsuite" default="run" basedir=".">
-  <!-- The property ${eclipse-home} should be passed into this script -->
-  <!-- Set a meaningful default value for when it is not. -->
- <!-- <property name="eclipse-home" value="${basedir}\..\.."/> -->
-	<echo message="basedir ${basedir}" />
-	<echo message="eclipse place ${eclipse-home}" />
-  <!-- sets the properties plugin-name, and library-file -->
-  <property name="plugin-name" value="org.eclipse.jst.servlet.tests"/>
-  <property name="library-file" value="${eclipse-home}/plugins/org.eclipse.test_3.1.0/library.xml"/>
-  <property name="extraVMargs" value="-Dorg.eclipse.jst.server.tomcat.50=${testDir}/${tomcat50Dir}"/>
-
-  <!-- This target holds all initialization code that needs to be done for -->
-  <!-- all tests that are to be run. Initialization for individual tests -->
-  <!-- should be done within the body of the suite target. -->
-  <target name="init">
-    <tstamp/>
-    <delete>
-      <fileset dir="${eclipse-home}" includes="org*.xml"/>
-    </delete>
-  </target>
-
-  <!-- This target defines the tests that need to be run. -->
-  <target name="suite">
-    <property name="jst-folder" value="${eclipse-home}/jst_folder"/>
-    <delete dir="${jst-folder}" quiet="true"/>
-    <ant target="core-test" antfile="${library-file}" dir="${eclipse-home}">
-      <property name="data-dir" value="${jst-folder}"/>
-      <property name="plugin-name" value="${plugin-name}"/>
-      <property name="classname" value="org.eclipse.jst.servlet.tests.bvt.AutomatedBVT" />
-   	  <property name="extraVMargs" value="${extraVMargs}"/>
-    </ant>
-  </target>
-
-  <!-- This target holds code to cleanup the testing environment after -->
-  <!-- after all of the tests have been run. You can use this target to -->
-  <!-- delete temporary files that have been created. -->
-  <target name="cleanup">
-  </target>
-
-  <!-- This target runs the test suite. Any actions that need to happen -->
-  <!-- after all the tests have been run should go here. -->
-  <target name="run" depends="init,suite,cleanup">
-    <ant target="collect" antfile="${library-file}" dir="${eclipse-home}">
-      <property name="includes" value="org*.xml"/>
-      <property name="output-file" value="${plugin-name}.xml"/>
-    </ant>
-  </target>
-</project>
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tests/ServletTestsPlugin.java b/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tests/ServletTestsPlugin.java
deleted file mode 100644
index 199e23a..0000000
--- a/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tests/ServletTestsPlugin.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.eclipse.jst.servlet.tests;
-
-import org.eclipse.core.runtime.Plugin;
-import org.osgi.framework.BundleContext;
-import java.util.*;
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class ServletTestsPlugin extends Plugin {
-	//The shared instance.
-	private static ServletTestsPlugin plugin;
-	//Resource bundle.
-	private ResourceBundle resourceBundle;
-	
-	/**
-	 * The constructor.
-	 */
-	public ServletTestsPlugin() {
-		super();
-		plugin = this;
-	}
-
-	/**
-	 * This method is called upon plug-in activation
-	 */
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-	}
-
-	/**
-	 * This method is called when the plug-in is stopped
-	 */
-	public void stop(BundleContext context) throws Exception {
-		super.stop(context);
-		plugin = null;
-		resourceBundle = null;
-	}
-
-	/**
-	 * Returns the shared instance.
-	 */
-	public static ServletTestsPlugin getDefault() {
-		return plugin;
-	}
-
-	/**
-	 * Returns the string from the plugin's resource bundle,
-	 * or 'key' if not found.
-	 */
-	public static String getResourceString(String key) {
-		ResourceBundle bundle = ServletTestsPlugin.getDefault().getResourceBundle();
-		try {
-			return (bundle != null) ? bundle.getString(key) : key;
-		} catch (MissingResourceException e) {
-			return key;
-		}
-	}
-
-	/**
-	 * Returns the plugin's resource bundle,
-	 */
-	public ResourceBundle getResourceBundle() {
-		try {
-			if (resourceBundle == null)
-				resourceBundle = ResourceBundle.getBundle("org.eclipse.jst.servlet.tests.ServletTestsPluginResources");
-		} catch (MissingResourceException x) {
-			resourceBundle = null;
-		}
-		return resourceBundle;
-	}
-}
diff --git a/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tests/bvt/AutomatedBVT.java b/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tests/bvt/AutomatedBVT.java
deleted file mode 100644
index e4a5911..0000000
--- a/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tests/bvt/AutomatedBVT.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Created on Apr 1, 2003
- *
- * To change this generated comment go to 
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.jst.servlet.tests.bvt;
-
-import java.net.URL;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jst.servlet.tomcat.tests.AllTomcatTests;
-
-
-/**
- * @author jsholl
- *
- * To change this generated comment go to 
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-public class AutomatedBVT extends TestSuite {
-
-    public static String baseDirectory = System.getProperty("user.dir") + java.io.File.separatorChar + "WARImportTests" + java.io.File.separatorChar;
-    
-    static {
-        try {
-            IPluginDescriptor pluginDescriptor = Platform.getPluginRegistry().getPluginDescriptor("org.eclipse.jst.servlet.tests");
-            URL url = pluginDescriptor.getInstallURL(); 
-        	AutomatedBVT.baseDirectory = Platform.asLocalURL(url).getFile() + "TestData"+ java.io.File.separatorChar;
-		} catch (Exception e) { 
-			System.err.println("Using working directory since a workspace URL could not be located.");
-		} 
-    }
-
-    public static int unimplementedMethods;
-
-    public static void main(String[] args) {
-        unimplementedMethods = 0;
-        TestRunner.run(suite());
-        if (unimplementedMethods > 0) {
-            System.out.println("\nCalls to warnUnimpl: " + unimplementedMethods);
-        }
-    }
-
-    public AutomatedBVT() {
-        super();
-        TestSuite suite = (TestSuite) AutomatedBVT.suite();
-        for (int i = 0; i < suite.testCount(); i++) {
-            addTest(suite.testAt(i));
-        }
-    }
-
-    public static Test suite() {
-        TestSuite suite = new TestSuite("Test for org.eclipse.jst.servlet.tests.bvt");
-        suite.addTest(AllTomcatTests.suite());
-        return suite;
-    }
-}
diff --git a/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tests/bvt/AutomatedBVTEclipse.java b/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tests/bvt/AutomatedBVTEclipse.java
deleted file mode 100644
index 18298d2..0000000
--- a/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tests/bvt/AutomatedBVTEclipse.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Created on Mar 25, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.jst.servlet.tests.bvt;
-
-import java.io.IOException;
-import java.net.URL;
-
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.core.runtime.Platform;
-
-/**
- * @author jsholl
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class AutomatedBVTEclipse extends AutomatedBVT {
-	
-	public AutomatedBVTEclipse(){
-		super();
-		IPluginDescriptor pluginDescriptor = Platform.getPluginRegistry().getPluginDescriptor("org.eclipse.jst.servlet.tests");
-        URL url = pluginDescriptor.getInstallURL();
-        try {
-        	AutomatedBVT.baseDirectory = Platform.asLocalURL(url).getFile() + "WARImportTests"+ java.io.File.separatorChar;
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-	}
-}
diff --git a/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tomcat/tests/AllTomcatTests.java b/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tomcat/tests/AllTomcatTests.java
deleted file mode 100644
index 7d7d4f3..0000000
--- a/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tomcat/tests/AllTomcatTests.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Created on Feb 2, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.jst.servlet.tomcat.tests;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.wst.server.core.IRuntime;
-import org.eclipse.wst.server.core.IRuntimeType;
-import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
-import org.eclipse.wst.server.core.ServerCore;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * @author jsholl
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class AllTomcatTests extends TestSuite {
-	
-	public static IRuntime TOMCAT_RUNTIME = createRuntime();
-	
-    public static Test suite(){
-        return new AllTomcatTests();
-    }
-    
-    public AllTomcatTests(){
-        super("WEB Tests");
-        addTest(WebProjectCreationTomcatTest.suite());
-        addTest(WebImportOperationTomcatTest.suite());
-        addTest(WebExportOperationTomcatTest.suite());
-        
-    }
-    
-    public static IRuntime createRuntime()  {
-    	String s = System.getProperty("org.eclipse.jst.server.tomcat.50");
-    	if (s == null || s.length() == 0)
-    		return null;
-    	try {
-    		IRuntimeType rt = ServerCore.findRuntimeType("org.eclipse.jst.server.tomcat.runtime.50");
-    		IRuntimeWorkingCopy wc = rt.createRuntime(null, null);
-    		wc.setLocation(new Path(s));
-    		return wc.save(true, null);
-    	} catch (Exception e) {
-    		e.printStackTrace();
-    		return null;
-    	}
-    }
-    
-}
diff --git a/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tomcat/tests/WebExportOperationTomcatTest.java b/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tomcat/tests/WebExportOperationTomcatTest.java
deleted file mode 100644
index c21ac30..0000000
--- a/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tomcat/tests/WebExportOperationTomcatTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Created on Jan 6, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.jst.servlet.tomcat.tests;
-import junit.framework.Test;
-
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleExportDataModel;
-import org.eclipse.jst.j2ee.internal.web.archive.operations.WebModuleExportDataModel;
-import org.eclipse.wst.common.tests.SimpleTestSuite;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleExportOperationTestCase;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class WebExportOperationTomcatTest extends ModuleExportOperationTestCase {
-	 
-	protected boolean excludeCompileJsp = false;
-	
-	public WebExportOperationTomcatTest(String name) {
-		super(name);
-	}
-
-	public static Test suite() {
-		return new SimpleTestSuite(WebExportOperationTomcatTest.class);
-	}
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.OperationTestCase#setUp()
-	 */
-	protected void setUp() throws Exception { 
-		super.setUp(); 
-		excludeCompileJsp = false;
-	}
-
-	public void testExcludeCompileJspOn() throws Exception {  
-		excludeCompileJsp = true;
-		testAllExportTestCases();
-	}
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleExportOperationTestCase#getModelInstance()
-	 */
-	protected J2EEModuleExportDataModel getModelInstance() {
-		WebModuleExportDataModel dataModel = new WebModuleExportDataModel(); 
-		dataModel.setBooleanProperty(WebModuleExportDataModel.EXCLUDE_COMPILE_JSP, excludeCompileJsp);
-		return dataModel;		
-	}
-	
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleExportOperationTestCase#getImportTestCase()
-	 */
-	protected ModuleImportOperationTestCase getImportTestCase() {
-		return new WebImportOperationTomcatTest("");
-	}
-	
-	/**
-	 * @return
-	 */
-	public String getModuleExportFileExt() {
-		return ".war";
-	}
-
-}
diff --git a/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tomcat/tests/WebImportOperationTomcatTest.java b/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tomcat/tests/WebImportOperationTomcatTest.java
deleted file mode 100644
index 3ebd344..0000000
--- a/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tomcat/tests/WebImportOperationTomcatTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Created on Jan 6, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.jst.servlet.tomcat.tests;
-import java.util.List;
-
-import junit.framework.Test;
-
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleImportDataModel;
-import org.eclipse.jst.j2ee.internal.servertarget.ServerTargetDataModel;
-import org.eclipse.jst.j2ee.internal.web.archive.operations.WebModuleImportDataModel;
-import org.eclipse.wst.common.tests.ProjectUtility;
-import org.eclipse.wst.common.tests.SimpleTestSuite;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase;
-import org.eclipse.wtp.j2ee.headless.tests.plugin.HeadlessTestsPlugin;
-
-/**
- * @author Administrator
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class WebImportOperationTomcatTest extends ModuleImportOperationTestCase {
-	
-	public WebImportOperationTomcatTest(String name) {
-		super(name);
-	}	
-	
-	public static Test suite() {
-		return new SimpleTestSuite(WebImportOperationTomcatTest.class);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase#getDirectory()
-	 */
-	protected String getDirectory() {
-		return "WARImportTests";
-	}
- 
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase#getModelInstance()
-	 */
-	protected J2EEModuleImportDataModel getModelInstance() {
-		return new WebModuleImportDataModel();
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase#getImportableArchiveFileNames()
-	 */
-	protected List getImportableArchiveFileNames() {
-		return ProjectUtility.getWarsInDirectory(HeadlessTestsPlugin.getDefault(),TESTS_PATH);
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleImportOperationTestCase#setServerTargetProperty(org.eclipse.jst.j2ee.application.operations.J2EEModuleImportDataModel)
-	 */
-	public void setServerTargetProperty(J2EEModuleImportDataModel dataModel) {
-		dataModel.setProperty(ServerTargetDataModel.RUNTIME_TARGET_ID,AllTomcatTests.TOMCAT_RUNTIME.getId());
-	}
-
-}
diff --git a/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tomcat/tests/WebProjectCreationTomcatTest.java b/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tomcat/tests/WebProjectCreationTomcatTest.java
deleted file mode 100644
index 073994d..0000000
--- a/tests/org.eclipse.jst.servlet.tests/webmodule-tomcat-tests/org/eclipse/jst/servlet/tomcat/tests/WebProjectCreationTomcatTest.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Created on Jan 6, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package org.eclipse.jst.servlet.tomcat.tests;
-import junit.framework.Test;
-import junit.framework.TestCase;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jst.j2ee.application.operations.J2EEArtifactCreationDataModel;
-import org.eclipse.jst.j2ee.application.operations.J2EEModuleCreationDataModel;
-import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
-import org.eclipse.jst.j2ee.internal.web.archive.operations.WebModuleCreationDataModel;
-import org.eclipse.jst.j2ee.internal.web.archive.operations.WebModuleCreationOperation;
-import org.eclipse.jst.j2ee.web.operations.AddServletOperation;
-import org.eclipse.jst.j2ee.web.operations.NewServletClassDataModel;
-import org.eclipse.wst.common.tests.LogUtility;
-import org.eclipse.wst.common.tests.ProjectUtility;
-import org.eclipse.wst.common.tests.SimpleTestSuite;
-import org.eclipse.wst.common.tests.TaskViewUtility;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.DataModelVerifier;
-import org.eclipse.wtp.j2ee.headless.tests.j2ee.verifiers.DataModelVerifierFactory;
-
-/**
- * @author blancett
- *
- * To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-public class WebProjectCreationTomcatTest extends TestCase {
-	protected String projectName = null;
-	
-	public static void createStandaloneWebProject(WebModuleCreationDataModel model) throws Exception {
-		WebModuleCreationOperation webOp = new WebModuleCreationOperation(model);
-		webOp.run(null);
-		ProjectUtility.verifyProject(model.getTargetProject().getName(), true);
-		TaskViewUtility.verifyNoErrors();
-	}
-	
-	public static void createServlet(NewServletClassDataModel model) throws Exception {
-		AddServletOperation op = new AddServletOperation(model);
-		op.run(null);
-		ProjectUtility.verifyProject(model.getTargetProject().getName(), true);
-		TaskViewUtility.verifyNoErrors();
-		
-	}
-	
-	public WebModuleCreationDataModel setupStandaloneWebProject(String aProjectName, int j2eeVersion) throws Exception {
-		projectName = aProjectName;
-		IProject javaProject = ProjectUtility.getProject(projectName);
-		WebModuleCreationDataModel model = new WebModuleCreationDataModel();
-		model.setProperty(WebModuleCreationDataModel.PROJECT_NAME, javaProject.getName());
-		model.setProperty(WebModuleCreationDataModel.PROJECT_LOCATION, javaProject.getLocation());
-		model.setIntProperty(WebModuleCreationDataModel.J2EE_MODULE_VERSION, j2eeVersion);
-		model.setProperty(WebModuleCreationDataModel.SERVER_TARGET_ID,AllTomcatTests.TOMCAT_RUNTIME.getId());
-		createStandaloneWebProject(model);
-		createServlet(projectName);
-		return model;
-	}
-	
-	public WebModuleCreationDataModel setupStandaloneAnnotatedWebProject(String aProjectName, int j2eeVersion) throws Exception {
-		projectName = aProjectName;
-		IProject javaProject = ProjectUtility.getProject(projectName);
-		WebModuleCreationDataModel model = new WebModuleCreationDataModel();
-		model.setProperty(WebModuleCreationDataModel.PROJECT_NAME, javaProject.getName());
-		model.setProperty(WebModuleCreationDataModel.PROJECT_LOCATION, javaProject.getLocation());
-		model.setIntProperty(WebModuleCreationDataModel.J2EE_MODULE_VERSION, j2eeVersion);
-		model.setProperty(WebModuleCreationDataModel.SERVER_TARGET_ID,AllTomcatTests.TOMCAT_RUNTIME.getId());
-		createStandaloneWebProject(model);
-		createAnnotatedServlet(projectName);
-		return model;
-	}
-
-	/**
-	 * @throws Exception
-	 */
-	private void createServlet(String projectName) throws Exception {
-		NewServletClassDataModel servletModel = setupServletCreationDataModel(projectName);
-		createServlet(servletModel);
-	}
-	
-	/**
-	 * @throws Exception
-	 */
-	private void createAnnotatedServlet(String projectName) throws Exception {
-		NewServletClassDataModel servletModel = setupAnnotatedServletCreationDataModel(projectName);
-		createServlet(servletModel);
-	}
-	
-	public NewServletClassDataModel setupAnnotatedServletCreationDataModel(String projectName) {
-		NewServletClassDataModel servletDataModel = new NewServletClassDataModel();
-		servletDataModel.setProperty(NewServletClassDataModel.PROJECT_NAME, projectName);
-		servletDataModel.setProperty(NewServletClassDataModel.CLASS_NAME, "FooServlet");
-		servletDataModel.setProperty(NewServletClassDataModel.DISPLAY_NAME,"FooServlet");
-		servletDataModel.setBooleanProperty(NewServletClassDataModel.USE_ANNOTATIONS,true);
-		return servletDataModel;
-	}
-	
-	public NewServletClassDataModel setupServletCreationDataModel(String projectName) {
-		NewServletClassDataModel servletDataModel = new NewServletClassDataModel();
-		servletDataModel.setProperty(NewServletClassDataModel.PROJECT_NAME, projectName);
-		servletDataModel.setProperty(NewServletClassDataModel.CLASS_NAME, "FooServlet");
-		servletDataModel.setProperty(NewServletClassDataModel.DISPLAY_NAME,"FooServlet");
-		servletDataModel.setBooleanProperty(NewServletClassDataModel.USE_ANNOTATIONS,false);
-		return servletDataModel;
-	}
-	
-	public void createVaildProjectAndServletCreation(String projectName,int j2eeVersion) throws Exception {
-				LogUtility.getInstance().resetLogging();
-				J2EEArtifactCreationDataModel model = null;
-				model = setupStandaloneWebProject(projectName, j2eeVersion);
-				LogUtility.getInstance().verifyNoWarnings();
-				checkValidDataModel(model);
-			}
-	
-	public void createVaildAnnotatedProjectAndServletCreation(String projectName,int j2eeVersion) throws Exception {
-		LogUtility.getInstance().resetLogging();
-		J2EEArtifactCreationDataModel model = null;
-		model = setupStandaloneAnnotatedWebProject(projectName, j2eeVersion);
-		LogUtility.getInstance().verifyNoWarnings();
-		checkValidDataModel(model);
-	}
-
-			/**
-			 * @param model
-			 */
-	protected void checkValidDataModel(J2EEArtifactCreationDataModel model) {
-			DataModelVerifier verifier = DataModelVerifierFactory.getInstance().createVerifier(model);
-			try {
-				verifier.verify(model);
-			} catch (Exception e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}
-
-		}
-	
-	public void testVaild12WebProjectNameCreation() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		createVaildProjectAndServletCreation("FooTomcatWebProject12", J2EEVersionConstants.WEB_2_2_ID);
-	}
-	
-	/* TODO Uncomment this method when Annotation support for servlets is enabled
-	 * public void testVaild12AnnotatedWebProjectNameCreation() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		createVaildAnnotatedProjectAndServletCreation("FooAnnotatedTomcatWebProject12", J2EEVersionConstants.WEB_2_2_ID);
-	}*/
-	
-	public void testVaild13WebProjectNameCreation() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		createVaildProjectAndServletCreation("Foo1TomcatWebProject13", J2EEVersionConstants.WEB_2_3_ID);
-	}
-	
-	/* TODO Uncomment this method when Annotation support for servlets is enabled
-	 * public void testVaild13AnnotatedWebProjectNameCreation() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		createVaildAnnotatedProjectAndServletCreation("Foo1TomcatWebProject13", J2EEVersionConstants.WEB_2_3_ID);
-	}*/
-	
-	public void testVaild14WebProjectNameCreation() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		createVaildProjectAndServletCreation("Foo1TomcatWebProject14", J2EEVersionConstants.WEB_2_4_ID);
-	}
-	
-	/* TODO Uncomment this method when Annotation support for servlets is enabled
-	 * public void testVaild14AnnotatedWebProjectNameCreation() throws Exception {
-		ProjectUtility.deleteAllProjects();
-		createVaildAnnotatedProjectAndServletCreation("Foo1TomcatWebProject14", J2EEVersionConstants.WEB_2_4_ID);
-	}*/
-	
-	
-    public static Test suite() {
-        return new SimpleTestSuite(WebProjectCreationTomcatTest.class);
-    }
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleProjectCreationOperationTest#getProjectCreationDataModel()
-	 */
-	public J2EEModuleCreationDataModel getProjectCreationDataModel() {
-		// TODO Auto-generated method stub
-		return null;
-	}
-   
-	
-
-}
diff --git a/tests/org.eclipse.jst.validation.sample/.classpath b/tests/org.eclipse.jst.validation.sample/.classpath
deleted file mode 100644
index 202b238..0000000
--- a/tests/org.eclipse.jst.validation.sample/.classpath
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="propertiesValidator/"/>
-	<classpathentry kind="src" path="propertiesValFS/"/>
-	<classpathentry kind="src" path="propertiesValWB/"/>
-	<classpathentry kind="src" path="filesystemFWK/"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/tests/org.eclipse.jst.validation.sample/.cvsignore b/tests/org.eclipse.jst.validation.sample/.cvsignore
deleted file mode 100644
index ba077a4..0000000
--- a/tests/org.eclipse.jst.validation.sample/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
diff --git a/tests/org.eclipse.jst.validation.sample/.project b/tests/org.eclipse.jst.validation.sample/.project
deleted file mode 100644
index aff2b8f..0000000
--- a/tests/org.eclipse.jst.validation.sample/.project
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jst.validation.sample</name>
-	<comment></comment>
-	<projects>
-		<project>com.ibm.etools.validation</project>
-		<project>com.ibm.wtp.common</project>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/tests/org.eclipse.jst.validation.sample/build.properties b/tests/org.eclipse.jst.validation.sample/build.properties
deleted file mode 100644
index 3cf80e0..0000000
--- a/tests/org.eclipse.jst.validation.sample/build.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-source.runtime/propertiesValidator.jar = propertiesValidator/,\
-                                         propertiesValFS/,\
-                                         propertiesValWB/,\
-                                         filesystemFWK/
-bin.includes = runtime/propertiesValidator.jar,\
-               plugin.xml,\
-               filesystem.bat,\
-               prop.bat
-jars.compile.order = runtime/propertiesValidator.jar
-output.runtime/propertiesValidator.jar = bin/
diff --git a/tests/org.eclipse.jst.validation.sample/filesystem.bat b/tests/org.eclipse.jst.validation.sample/filesystem.bat
deleted file mode 100644
index 2dc85a9..0000000
--- a/tests/org.eclipse.jst.validation.sample/filesystem.bat
+++ /dev/null
@@ -1,46 +0,0 @@
-@echo off
-REM Licensed Material - Property of IBM 
-REM (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
-REM US Government Users Restricted Rights - Use, duplication or disclosure 
-REM restricted by GSA ADP Schedule Contract with IBM Corp. 
-REM 
-REM DISCLAIMER OF WARRANTIES.
-REM The following [enclosed] code is sample code created by IBM
-REM Corporation. This sample code is not part of any standard or IBM
-REM product and is provided to you solely for the purpose of assisting
-REM you in the development of your applications.  The code is provided
-REM "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
-REM NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-REM FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
-REM THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
-REM for any damages arising out of your use of the sample code, even
-REM if it has been advised of the possibility of such damages.
-REM 
-REM This batch file runs the "filesystem framework"'s application
-REM
-setlocal
-
-if "%JAVA_HOME%" EQU "" goto syntax
-
-set CLASSPATH=%CLASSPATH%;..\com.ibm.etools.logging.util_5.1.0\runtime\logutil.jar
-set CLASSPATH=%CLASSPATH%;..\com.ibm.etools.validation.core_5.1.0\runtime\common.jar
-set CLASSPATH=%CLASSPATH%;.\runtime\propertiesValidator.jar
-set CLASSPATH=%CLASSPATH%;.\runtime\filesystemFWK.jar
-set CLASSPATH=%CLASSPATH%;.\runtime\propertiesValWB.jar
-set CLASSPATH=%CLASSPATH%;.\runtime\propertiesValFS.jar
-
-%JAVA_HOME%\bin\java com.ibm.etools.validation.filesystem.FilesystemApplication %1
-goto :end
-
-:syntax
-echo.
-echo The JAVA_HOME environment variable must be set to the JRE directory.
-echo e.g., set JAVA_HOME=C:\JRE
-echo where JRE has a subdirectory named "bin"
-echo.
-echo.
-goto :end
-
-:end
-endlocal
-@echo on
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.validation.sample/filesystemFWK/filesystem.properties b/tests/org.eclipse.jst.validation.sample/filesystemFWK/filesystem.properties
deleted file mode 100644
index a728349..0000000
--- a/tests/org.eclipse.jst.validation.sample/filesystemFWK/filesystem.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# Licensed Material - Property of IBM 
-# (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
-# US Government Users Restricted Rights - Use, duplication or disclosure 
-# restricted by GSA ADP Schedule Contract with IBM Corp. 
-#
-#  DISCLAIMER OF WARRANTIES.
-#  The following [enclosed] code is sample code created by IBM
-#  Corporation. This sample code is not part of any standard or IBM
-#  product and is provided to you solely for the purpose of assisting
-#  you in the development of your applications.  The code is provided
-#  "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
-#  NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-#  FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
-#  THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
-#  for any damages arising out of your use of the sample code, even
-#  if it has been advised of the possibility of such damages.
-#
-
-# VFFS = Validation Framework File System 
-VFFS0000 = VFFS0000E: Internal error caused premature termination of validator {0}. See the stack trace below.
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/FilesystemApplication.java b/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/FilesystemApplication.java
deleted file mode 100644
index 26b6aa7..0000000
--- a/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/FilesystemApplication.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package org.eclipse.wst.validation.sample.filesystem;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-
-import org.eclipse.wst.validation.core.IFileDelta;
-import org.eclipse.wst.validation.core.IReporter;
-import org.eclipse.wst.validation.core.Message;
-import org.eclipse.wst.validation.core.SeverityEnum;
-import org.eclipse.wst.validation.core.ValidationException;
-import org.eclipse.wst.validation.core.ValidatorLauncher;
-
-/**
- * This class is the representation of a file system based application
- * which needs to use the common validation APIs.
- */
-public class FilesystemApplication {
-	/**
-	 * The argv[] parameter needs to be a fully-qualified list of file names 
-	 * of files that should be validated. 
-	 */
-	public static void main(String argv[]) {
-		IFileDelta[] files = FilesystemManager.getManager().getFileDeltas(argv);
-		boolean fullBuild = ((files == null) || (files.length == 0));
-
-		IReporter reporter = null;
-		if (fullBuild) {
-			reporter = new FullReporter();
-		}
-		else {
-			reporter = new IncrementalReporter();
-		}
-
-		FilesystemLoader loaders[] = FilesystemManager.getManager().getLoaders(files);
-		for (int i=0; i<loaders.length; i++) {
-			FilesystemLoader loader = loaders[i];
-			try {
-				ValidatorLauncher.getLauncher().start(loader.getHelper(), loader.getValidator(), reporter, files);
-				if (!fullBuild) {
-					((IncrementalReporter)reporter).report();
-				}
-			}
-			catch (ValidationException exc) {
-				Message message = new Message("filesystem", SeverityEnum.HIGH_SEVERITY, "VFFS0000", new String[]{loader.getValidator().getClass().getName()}); //$NON-NLS-1$  //$NON-NLS-2$
-				reporter.displaySubtask(loader.getValidator(), message);
-				
-				if(exc.getAssociatedMessage() != null) {
-					System.out.println(exc.getAssociatedMessage());
-				}
-				
-				exc.printStackTrace();
-				if(exc.getAssociatedException() != null) {
-					exc.getAssociatedException().printStackTrace();
-				}
-				// continue with the next validation
-			}
-			catch (Exception exc) {
-				Message message = new Message("filesystem", SeverityEnum.HIGH_SEVERITY, "VFFS0000", new String[]{loader.getValidator().getClass().getName()}); //$NON-NLS-1$ //$NON-NLS-2$
-				reporter.displaySubtask(loader.getValidator(), message);
-				// continue with the next validation
-				exc.printStackTrace();
-			}
-		}
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/FilesystemLoader.java b/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/FilesystemLoader.java
deleted file mode 100644
index 08fb649..0000000
--- a/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/FilesystemLoader.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.eclipse.wst.validation.sample.filesystem;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-import org.eclipse.wst.validation.core.IValidator;
-
-/**
- * This class associates a Validator with a Helper and the file extensions that
- * the validator runs on.
- */
-public class FilesystemLoader {
-	private IFilesystemHelper _helper = null;
-	private IValidator _validator = null;
-	private String[] _fileExtensions = null;
-	
-	public FilesystemLoader(String[] fileExtensions, IFilesystemHelper helper, IValidator validator) {
-		super();
-
-		_fileExtensions = fileExtensions;
-		_helper = helper;
-		_validator = validator;
-	}
-	
-	/**
-	 * Return the helper that the validator needs to access information 
-	 * in the filesystem validation framework.
-	 */
-	public IFilesystemHelper getHelper() {
-		return _helper;
-	}
-
-	/**
-	 * Return the validator that checks the rules.
-	 */
-	public IValidator getValidator() {
-		return _validator;
-	}
-	
-	/**
-	 * Return a list of file name extensions that this validator validates.
-	 */
-	public String[] getFileExtensions() {
-		return _fileExtensions;
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/FilesystemManager.java b/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/FilesystemManager.java
deleted file mode 100644
index 2b35223..0000000
--- a/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/FilesystemManager.java
+++ /dev/null
@@ -1,220 +0,0 @@
-package org.eclipse.wst.validation.sample.filesystem;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.eclipse.wst.validation.core.FileDelta;
-import org.eclipse.wst.validation.core.IFileDelta;
-import org.eclipse.wst.validation.core.IValidator;
-
-/**
- * This class is the heart of the filesystem validation framework.
- * It &quot;loads&quot; each validator's metadata
- */
-public class FilesystemManager {
-	private static FilesystemManager _inst = null;
-	private Set _loaders = null;
-	
-	private FilesystemManager() {
-		_loaders = new HashSet();
-		
-		// Please pretend that this metadata, i.e., the file extension, fully-qualified
-		// class name of the helper, and fully-qualified class name of the validator, 
-		// was loaded generically somehow. In practice, this information could be stored
-		// in .xml files, in a configuration file, etc., that the framework would read
-		// to find the installed validators.
-		try {
-			_loaders.add(new FilesystemLoader(new String[]{".properties"}, loadHelper("org.eclipse.jst.validation.sample.filesystemimpl.FilesystemPropertiesHelper"), loadValidator("org.eclipse.wst.validation.sample.PropertiesValidator"))); //$NON-NLS-1$  //$NON-NLS-2$ //$NON-NLS-3$
-		}
-		catch(IllegalArgumentException exc) {
-			exc.printStackTrace();
-		}
-		catch(ClassNotFoundException exc) {
-			exc.printStackTrace();
-		}
-		catch(IllegalAccessException exc) {
-			exc.printStackTrace();
-		}
-		catch(InstantiationException exc) {
-			exc.printStackTrace();
-		}
-	}
-	
-	/**
-	 * Given a fully-qualified name of a helper, return an instance of it.
-	 */
-	private static IFilesystemHelper loadHelper(String className) throws IllegalArgumentException, ClassNotFoundException, IllegalAccessException, InstantiationException  {
-		return (IFilesystemHelper)loadClass(className);
-	}
-	
-	/**
-	 * Given a fully-qualified name of a validator, return an instance of it.
-	 */
-	private static IValidator loadValidator(String className) throws IllegalArgumentException, ClassNotFoundException, IllegalAccessException, InstantiationException  {
-		return (IValidator)loadClass(className);
-	}
-	
-	/**
-	 * Return an instance of the class identified by the className parameter,
-	 * which contains the fully-qualified class name of the class.
-	 */
-	private static Object loadClass(String className) throws IllegalArgumentException, ClassNotFoundException, IllegalAccessException, InstantiationException {
-		if(className == null) {
-			throw new IllegalArgumentException("loadClass argument must not be null"); //$NON-NLS-1$
-		}
-		
-		Class clazz = Class.forName(className);
-		return clazz.newInstance();		
-	}
-	
-	/**
-	 * Return the FilesystemManager singleton.
-	 */
-	public static FilesystemManager getManager() {
-		if(_inst == null) {
-			_inst = new FilesystemManager();
-		}
-		return _inst;
-	}
-
-	/**
-	 * Given an array of file names, return an array of IFileDelta
-	 * instances to pass to the validator instance.
-	 */
-	public IFileDelta[] getFileDeltas(String[] fileNames) {
-		if((fileNames == null) || (fileNames.length == 0)) {
-			return null;
-		}
-		
-		FileDelta[] files = new FileDelta[fileNames.length];
-		for(int i=0; i<fileNames.length; i++) {
-			files[i] = new FileDelta(fileNames[i], IFileDelta.CHANGED);
-		}
-		return files;
-	}
-	
-	/**
-	 * Given an array of IFileDelta instances, return an array
-	 * of the IValidator instances, with their associated IHelper instances,
-	 * that validate these particular delta instances.
-	 */
-	public FilesystemLoader[] getLoaders(IFileDelta[] deltas) {
-		if(deltas == null) {
-			return getAllLoaders();
-		}
-
-		Set loaders = new HashSet();		
-		for(int i=0; i<deltas.length; i++) {
-			FilesystemLoader[] loaderArray = getLoadersFor(deltas[i]);
-			if(loaderArray != null) {
-				for(int j=0; j<loaderArray.length; j++) {
-					loaders.add(loaderArray[j]);
-				}
-			}
-		}
-		
-		FilesystemLoader[] result = new FilesystemLoader[loaders.size()];
-		loaders.toArray(result);
-		return result;
-	}
-	
-	/**
-	 * Given an IValidator instance, return the IHelper instance that the
-	 * IValidator uses to load information from the filesystem validation
-	 * framework environment.
-	 */
-	public IFilesystemHelper getHelper(IValidator validator) {
-		if(validator == null) {
-			return null;
-		}
-		
-		Iterator iterator = _loaders.iterator();
-		while(iterator.hasNext()) {
-			FilesystemLoader loader = (FilesystemLoader)iterator.next();
-			if(validator.equals(loader.getValidator())) {
-				return loader.getHelper();
-			}
-		}
-		
-		return null;
-	}
-	
-	/**
-	 * Given the fully-qualified name of the validator, return the IValidator instance.
-	 * null will be returned if the IValidator cannot be found.
-	 */
-	public IValidator getValidator(String validatorClassName) {
-		if(validatorClassName == null) {
-			return null;
-		}
-		
-		Iterator iterator = _loaders.iterator();
-		while(iterator.hasNext()) {
-			FilesystemLoader loader = (FilesystemLoader)iterator.next();
-			if(validatorClassName.equals(loader.getValidator().getClass().getName())) {
-				return loader.getValidator();
-			}
-		}
-		
-		return null;
-	}
-	
-	/**
-	 * Return an array of all FilesystemLoader instances. Each loader has
-	 * one IValidator and one IHelper.
-	 */
-	public FilesystemLoader[] getAllLoaders() {
-		FilesystemLoader[] result = new FilesystemLoader[_loaders.size()];
-		_loaders.toArray(result);
-		return result;
-	}
-
-	/**
-	 * Given a file name, return the loader which contains the validator & helper
-	 * which can validate that file, if one exists.
-	 */
-	public FilesystemLoader[] getLoadersFor(IFileDelta delta) {
-		Iterator iterator = _loaders.iterator();
-		FilesystemLoader[] tempLoaders = new FilesystemLoader[_loaders.size()];
-		int count = 0;
-		while(iterator.hasNext()) {
-			FilesystemLoader loader = (FilesystemLoader)iterator.next();
-			String[] fileExtensions = loader.getFileExtensions();
-			if(fileExtensions == null) {
-				continue;
-			}
-			
-			for(int i=0; i<fileExtensions.length; i++) {
-				if(delta.getFileName().endsWith(fileExtensions[i])) {
-					tempLoaders[count++] = loader;
-				}
-			}
-		}
-		
-		FilesystemLoader[] result = new FilesystemLoader[count];
-		System.arraycopy(tempLoaders, 0, result, 0, count);
-		return result;
-	}
-
-}
diff --git a/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/FullReporter.java b/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/FullReporter.java
deleted file mode 100644
index 31fabbb..0000000
--- a/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/FullReporter.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package org.eclipse.wst.validation.sample.filesystem;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-import org.eclipse.wst.validation.core.IMessage;
-import org.eclipse.wst.validation.core.IMessageAccess;
-import org.eclipse.wst.validation.core.IReporter;
-import org.eclipse.wst.validation.core.IValidator;
-
-/**
- * This reporter is used when full validation is needed. It doesn't cache
- * anything, so it's faster than the IncrementalReporter.
- */
-public class FullReporter implements IReporter {
-	public FullReporter() {
-		super();
-	}
-
-	/**
-	 * @see IReporter#addMessage(IValidator, IMessage)
-	 */
-	public void addMessage(IValidator validator, IMessage message) {
-		if (message == null) {
-			return;
-		}
-
-		System.out.println(MessageManager.formatMessage(validator, message));
-	}
-	
-	/**
-	 * @see IReporter#displaySubtask(IValidator, IMessage)
-	 */
-	public void displaySubtask(IValidator validator, IMessage message) {
-		// Flush the message to the user immediately.
-		System.err.println(message.getText());
-	}
-	
-	/**
-	 * @see IReporter#getMessageAccess()
-	 */
-	public IMessageAccess getMessageAccess() {
-		// this reporter does not support message access 
-		return null;
-	}
-	
-	/**
-	 * @see IReporter#isCancelled()
-	 */
-	public boolean isCancelled() {
-		// to make things easy, do not allow the user to cancel validation.
-		return false;
-	}
-	
-	/**
-	 * @see IReporter#removeAllMessages(IValidator)
-	 */
-	public void removeAllMessages(IValidator validator) {
-		// since no messages are stored, there's nothing to remove
-	}
-	
-	/**
-	 * @see IReporter#removeAllMessages(IValidator, Object)
-	 */
-	public void removeAllMessages(IValidator validator, Object object) {
-		// since no messages are stored, there's nothing to remove
-	}
-	
-	/**
-	 * @see IReporter#removeMessageSubset(IValidator, Object, String)
-	 */
-	public void removeMessageSubset(IValidator validator, Object obj, String groupName) {
-		// Since this reporter doesn't store messages, there is no removal of any messages
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/IFilesystemHelper.java b/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/IFilesystemHelper.java
deleted file mode 100644
index 7d5a9ee..0000000
--- a/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/IFilesystemHelper.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.eclipse.wst.validation.sample.filesystem;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-import org.eclipse.wst.validation.core.IHelper;
-import org.eclipse.wst.validation.core.IMessage;
-
-/**
- * To integrate a validator into this framework, an implementation of this
- * IHelper must be provided.
- */
-public interface IFilesystemHelper extends IHelper {
-	/**
-	 * Return the fully-qualified name of the file which the IMessage is reported against.
-	 */
-	public String getFileName(IMessage message);
-}
diff --git a/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/IncrementalReporter.java b/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/IncrementalReporter.java
deleted file mode 100644
index 374cd24..0000000
--- a/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/IncrementalReporter.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package org.eclipse.wst.validation.sample.filesystem;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.wst.validation.core.IMessage;
-import org.eclipse.wst.validation.core.IMessageAccess;
-import org.eclipse.wst.validation.core.IReporter;
-import org.eclipse.wst.validation.core.IValidator;
-import org.eclipse.wst.validation.core.SeverityEnum;
-
-/**
- * This class is the file system specific implementation of an incremental IReporter.
- * It caches validation messages, so that messages can both be added and deleted.
- */
-public class IncrementalReporter implements IReporter {
-	
-	public IncrementalReporter() {
-		super();
-	}
-	
-	/**
-	 * @see IReporter#addMessage(IValidator, IMessage)
-	 */
-	public void addMessage(IValidator validator, IMessage message) {
-		if (validator == null) {
-			return;
-		}
-
-		if (message == null) {
-			return;
-		}
-
-		ValidatorMessages vm = MessageManager.getManager().getMessages(validator);
-		if (vm != null) {
-			vm.addValidationMessage(message);
-		}
-	}
-
-	/**
-	 * @see IReporter#displaySubtask(IValidator, IMessage)
-	 */
-	public void displaySubtask(IValidator validator, IMessage message) {
-		// Flush the message to the user immediately.
-		System.err.println(message.getText());
-	}
-
-	/**
-	 * @see IReporter#getMessageAccess()
-	 */
-	public IMessageAccess getMessageAccess() {
-		return null;
-	}
-
-	/**
-	 * Return a Map of String fully-qualified validator class names,
-	 * with a value of Collection, and the Collection contains the
-	 * MessageMetaData reported by the validator, of the given severity.
-	 */
-	public Map getMessages(int messageType) {
-		return MessageManager.getManager().getMessages(messageType);
-	}
-
-	/**
-	 * @see IReporter#isCancelled()
-	 */
-	public boolean isCancelled() {
-		// For simplicity, never allow cancellation.
-		// In a production system, this method might query another object to find out its cancellation status.
-		return false;
-	}
-
-	/**
-	 * @see IReporter#removeAllMessages(IValidator)
-	 */
-	public void removeAllMessages(IValidator validator) {
-		if (validator == null) {
-			return;
-		}
-		MessageManager.getManager().removeAllMessages(validator);
-	}
-
-	/**
-	 * @see IReporter#removeAllMessages(IValidator, Object)
-	 */
-	public void removeAllMessages(IValidator validator, Object object) {
-		if (validator == null) {
-			return;
-		}
-		
-
-		MessageManager.getManager().removeAllMessages(validator, object);
-	}
-
-	/**
-	 * @see IReporter#removeMessageSubset(IValidator, Object, String)
-	 */
-	public void removeMessageSubset(IValidator validator, Object obj, String groupName) {
-		// implement later
-	}
-
-	/**
-	 * Display a formatted list of all of the problems found while
-	 * validating the file.
-	 */
-	public void report() {
-		System.out.println();
-		System.out.println("Error messages"); //$NON-NLS-1$
-		Map messages = getMessages(SeverityEnum.HIGH_SEVERITY);
-		report(messages);
-
-		System.out.println();
-		System.out.println("Warning messages"); //$NON-NLS-1$
-		messages = getMessages(SeverityEnum.NORMAL_SEVERITY);
-		report(messages);
-
-		System.out.println();
-		System.out.println("Information messages"); //$NON-NLS-1$
-		messages = getMessages(SeverityEnum.LOW_SEVERITY);
-		report(messages);
-	}
-	
-	/**
-	 * @see IReporter#report(Map)
-	 */
-	protected static void report(Map messages) {
-		if(messages.size() == 0) {
-			return;
-		}
-		
-		Iterator iterator = messages.keySet().iterator();
-		while(iterator.hasNext()) {
-			String validatorClassName = (String)iterator.next();
-			IValidator validator = FilesystemManager.getManager().getValidator(validatorClassName);
-			IFilesystemHelper helper = FilesystemManager.getManager().getHelper(validator);
-			List mssgList = (List)messages.get(validator);
-			if(mssgList == null) {
-				continue;
-			}
-			
-			Collections.sort(mssgList, MessageManager.getManager().getMessageComparator(helper));
-			
-			for(int i=0; i<mssgList.size(); i++) {
-				IMessage mssg = (IMessage)mssgList.get(i);
-				System.out.println(MessageManager.formatMessage(validator, mssg));
-			}
-		}
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/MessageManager.java b/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/MessageManager.java
deleted file mode 100644
index d842260..0000000
--- a/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/MessageManager.java
+++ /dev/null
@@ -1,255 +0,0 @@
-package org.eclipse.wst.validation.sample.filesystem;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.eclipse.wst.validation.core.IMessage;
-import org.eclipse.wst.validation.core.IValidator;
-import org.eclipse.wst.validation.core.SeverityEnum;
-
-/**
- * This class manages the validation messages for each validator. Each validator's
- * messages can be retrieved by using the validator's unique name as a key into the
- * table. (i.e., call getMessages with the validator's unique name as the parameter.)
- */
-public class MessageManager {
-	private static MessageManager _singleton = null;
-	private Comparator _comparator = null;
-
-	private Map _validationMessages = null;
-
-	private MessageManager() {
-		super();
-
-		_validationMessages = new HashMap(10);
-	}
-
-	/**
-	 * Return the MessageManager singleton.
-	 */
-	public static MessageManager getManager() {
-		if (_singleton == null) {
-			_singleton = new MessageManager();
-		}
-		return _singleton;
-	}
-	
-	/**
-	 * Return a map of all messages of the given severity. The key of the map
-	 * is the IValidator, the value of the IValidator is the List of IMessage
-	 * instances of the given severity.
-	 */
-	public Map getMessages(int messageTypes) {
-		Map messages = new HashMap();
-
-		Iterator iterator = _validationMessages.values().iterator();
-		while(iterator.hasNext()) {
-			ValidatorMessages mssg = (ValidatorMessages) iterator.next();
-
-			messages.put(mssg.getValidator().getClass().getName(), mssg.getMessages(messageTypes));
-		}
-		return messages;
-	}
-	
-	/**
-	 * This method returns the ValidationMessage owned by the identified validator,
-	 * if one exists. If one doesn't exist, it is created & registered, and then 
-	 * returned.
-	 */
-	public ValidatorMessages getMessages(IValidator validator) {
-		if (validator == null) {
-			return null;
-		}
-
-		ValidatorMessages message = (ValidatorMessages) _validationMessages.get(validator.getClass().getName());
-		if (message == null) {
-			// if it doesn't exist, create it.
-			message = new ValidatorMessages(validator);
-			_validationMessages.put(validator.getClass().getName(), message);
-		}
-		return message;
-	}
-	
-	/**
-	 * Remove all messages owned by the identified validator.
-	 */
-	public void removeAllMessages(IValidator validator) {
-		if (validator == null) {
-			return;
-		}
-
-		_validationMessages.remove(validator.getClass().getName());
-	}
-	
-	/**
-	 * Remove all messages, owned by the identified validator, reported
-	 * against the given target object.
-	 */
-	public void removeAllMessages(IValidator validator, Object object) {
-		if (validator == null) {
-			return;
-		}
-
-		ValidatorMessages message = getMessages(validator);
-		if (message != null) {
-			message.removeAllMessages(object);
-		}
-	}
-	
-	/**
-	 * To support removal of a subset of validation messages, an IValidator
-	 * may assign group names to IMessages. An IMessage subset will be identified
-	 * by the name of its group. Default (null) means no group. This method will
-	 * remove only the IMessage's that are in the group identified by groupName.
-	 */
-	public void removeMessageSubset(IValidator validator, Object object, String groupName) {
-		if (validator == null) {
-			return;
-		}
-
-		ValidatorMessages message = getMessages(validator);
-		if (message != null) {
-			message.removeAllMessages(object);
-		}
-	}
-
-	/**
-	 * Return the IMessage as a String suitable for displaying to the user.
-	 */
-	public static String formatMessage(IValidator validator, IMessage message) {
-		if (message == null) {
-			return ""; //$NON-NLS-1$
-		}
-
-		int severity = message.getSeverity();
-		Object object = message.getTargetObject();
-		StringBuffer formattedMessage = new StringBuffer();
-		switch (severity) {
-			case (SeverityEnum.HIGH_SEVERITY) :
-				{
-					formattedMessage.append("Error: "); //$NON-NLS-1$
-					break;
-				}
-
-			case (SeverityEnum.LOW_SEVERITY) :
-				{
-					formattedMessage.append("Information: "); //$NON-NLS-1$
-					break;
-				}
-
-			case (SeverityEnum.NORMAL_SEVERITY) :
-			default :
-				{
-					formattedMessage.append("Warning: "); //$NON-NLS-1$
-					break;
-				}
-		}
-
-		formattedMessage.append(message.getText());
-
-		if (object != null) {
-			String fileName = FilesystemManager.getManager().getHelper(validator).getFileName(message);
-			int lineNumber = message.getLineNo();
-
-			if((fileName != null) || (lineNumber != IMessage.LINENO_UNSET)) {
-				formattedMessage.append("["); //$NON-NLS-1$
-				if(fileName != null) {
-					formattedMessage.append(fileName);
-				}
-				if(lineNumber != IMessage.LINENO_UNSET) {
-					formattedMessage.append(" line number: "); //$NON-NLS-1$
-					formattedMessage.append(String.valueOf(lineNumber));
-				}
-				formattedMessage.append("] "); //$NON-NLS-1$
-			}
-		}
-
-		return formattedMessage.toString();
-	}
-
-	/**
-	 * This Comparator is used to sort messages first by file name, then by line number.
-	 */
-	public Comparator getMessageComparator(final IFilesystemHelper helper) {
-		if(_comparator == null) {
-			_comparator = 	new Comparator() {
-				protected int compare(String a, String b) {
-					if((a == null) && (b == null)) {
-						return 0;
-					}
-					else if(a == null) {
-						return -1;
-					}
-					else if(b == null) {
-						return 1;
-					}
-					
-					return a.compareTo(b);
-				}
-				
-				protected int compare(int a, int b) {
-					if((a == IMessage.LINENO_UNSET) && (b == IMessage.LINENO_UNSET)) {
-						return 0;
-					}
-					else if(a == IMessage.LINENO_UNSET) {
-						return -1;
-					}
-					else if(b == IMessage.LINENO_UNSET) {
-						return 1;
-					}
-					
-					return (a - b);
-				}
-				
-				public int compare(Object a, Object b) {
-					if((a == null) && (b == null)) {
-						return 0;
-					}
-					else if(a == null) {
-						return -1;
-					}
-					else if(b == null) {
-						return 1;
-					}
-					
-					IMessage aMssg = (IMessage)a;
-					IMessage bMssg = (IMessage)b;
-					
-					// Sort by file name, then line number. Unset line numbers go to the start of the list.
-					String aFileName = helper.getFileName(aMssg);
-					String bFileName = helper.getFileName(bMssg);
-					int result = compare(aFileName, bFileName);
-					if(result != 0) {
-						return result;
-					}
-					
-					int aLineNumber = aMssg.getLineNo();
-					int bLineNumber = bMssg.getLineNo();
-					return compare(aLineNumber, bLineNumber);
-				}
-			};
-		}
-		return _comparator;
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/ValidatorMessages.java b/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/ValidatorMessages.java
deleted file mode 100644
index 89eaaf1..0000000
--- a/tests/org.eclipse.jst.validation.sample/filesystemFWK/org/eclipse/wst/validation/sample/filesystem/ValidatorMessages.java
+++ /dev/null
@@ -1,171 +0,0 @@
-package org.eclipse.wst.validation.sample.filesystem;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.wst.validation.core.IMessage;
-import org.eclipse.wst.validation.core.IValidator;
-
-/**
- * This class manages messages for one validator. Each validator 
- * can store three types of messages: error (SeverityEnum.HIGH_SEVERITY), 
- * warning (SeverityEnum.NORMAL_SEVERITY), and info (SeverityEnum.LOW_SEVERITY).
- * Each message is associated with an Object (for incremental validation).
- * If a message does not apply to a particular Object, the default Object
- * is used.
- *
- * Each Object is associated with either 0, 1, or >1 messages. 
- */
-public class ValidatorMessages {
-	private Map _messages = null;
-	private IValidator _validator = null;
-	protected static final Object DEFAULT_OBJECT = new Object();
-
-	public ValidatorMessages(IValidator validator) {
-		_messages = new HashMap();
-		_validator = validator;
-	}
-	
-	/**
-	 * Return the validator that owns these messages.
-	 */
-	public IValidator getValidator() {
-		return _validator;
-	}
-	
-	/**
-	 * Add an IMessage to the default group.
-	 */
-	public void addValidationMessage(IMessage message) {
-		addValidationMessage(message, null);
-	}
-	
-	/**
-	 * Add an IMessage to the named group.
-	 */
-	public void addValidationMessage(IMessage message, String groupName) {
-		if (message == null) {
-			return;
-		}
-
-		if (message.getTargetObject() == null) {
-			// If object is null, the error message does not apply to a particular object.
-			//
-			// This value might be used if, for example, the validator experiences an internal, unrecoverable error.
-			// You need to let the user know that validation terminated abnormally, but a list
-			// of the validation which proceeded normally can help to narrow down what part of the
-			// code caused a problem.
-			//
-			// Or it could be something generic, e.g. it applies to a .jar file, instead of a file in the .jar.
-			message.setTargetObject(getDefaultObject());
-		}
-		
-		if(groupName != null) {
-			message.setGroupName(groupName);
-		}
-
-		List list = (List) _messages.get(message.getTargetObject());
-		if (list == null) {
-			list = new ArrayList();
-		}
-		list.add(message);
-		_messages.put(message.getTargetObject(), list);
-	}
-	
-	/**
-	 * If the IMessage does not have a target object, the object
-	 * returned by this method is used as the key in the Map.
-	 */
-	public static Object getDefaultObject() {
-		return DEFAULT_OBJECT;
-	}
-	
-	/**
-	 * Return all messages whose severity matches the messageTypes severity.
-	 */
-	public List getMessages(int messageTypes) {
-		List messages = new ArrayList();
-
-		Iterator iterator = _messages.values().iterator();
-		while (iterator.hasNext()) {
-			List list = (List) iterator.next();
-
-			Object[] listContents = list.toArray();
-			for (int i = 0; i < listContents.length; i++) {
-				IMessage message = (IMessage) listContents[i];
-
-				if ((messageTypes & message.getSeverity()) != 0) {
-					messages.add(message);
-				}
-			}
-		}
-		return messages;
-	}
-	
-	/**
-	 * Remove all messages that apply to the given object. If object is
-	 * null, the messages owned by the default object are removed.
-	 */
-	public void removeAllMessages(Object object) {
-		if (object == null) {
-			object = getDefaultObject();
-		}
-
-		_messages.remove(object);
-	}
-	
-	/**
-	 * Remove all messages that apply to the given object which are in
-	 * the named group. If Object is null, the default object is used.
-	 */
-	public void removeMessageSubset(Object object, String groupName) {
-		if (groupName == null) {
-			removeAllMessages(object);
-			return;
-		}
-
-		if (object == null) {
-			object = getDefaultObject();
-		}
-
-		List list = (List) _messages.get(object);
-		if (list == null) {
-			return;
-		}
-
-		if (list.size() == 0) {
-			return;
-		}
-
-		Iterator iterator = list.iterator();
-		while (iterator.hasNext()) {
-			IMessage msg = (IMessage) iterator.next();
-			String msgGroupName = msg.getGroupName();
-			if (groupName.equals(msgGroupName)) {
-				list.remove(msg);
-			}
-		}
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.sample/plugin.xml b/tests/org.eclipse.jst.validation.sample/plugin.xml
deleted file mode 100644
index 703127c..0000000
--- a/tests/org.eclipse.jst.validation.sample/plugin.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin
-   id="org.eclipse.jst.validation.sample"
-   name="Properties Validator"
-   version="1.0.0"
-   class="org.eclipse.jst.validation.sample.workbenchimpl.PropertiesValidatorPlugin">
-
-   <runtime>
-      <library name="runtime/propertiesValidator.jar">
-         <export name="*"/>
-      </library>
-   </runtime>
-   <requires>
-      <import plugin="org.eclipse.core.resources"/>
-      <import plugin="org.eclipse.jdt.core"/>
-      <import plugin="org.eclipse.wst.validation"/>
-      <import plugin="org.eclipse.help"/>
-      <import plugin="org.eclipse.wst.common.frameworks"/>
-      <import plugin="org.eclipse.core.runtime.compatibility"/>
-   </requires>
-
-
-<!--=======================================-->
-<!-- Properties Validator Contributions    -->
-<!--=======================================-->
-   <extension
-         id="PropertiesValidator"
-         name="Properties Validator"
-         point="org.eclipse.wst.validation.validator">
-      <validator>
-         <projectNature
-               id="org.eclipse.jdt.core.javanature">
-         </projectNature>
-         <filter
-               objectClass="org.eclipse.core.resources.IFile"
-               nameFilter="*.properties"
-               action="add, change">
-         </filter>
-         <run
-               enabled="false"
-               async="false"
-               class="org.eclipse.jst.validation.sample.PropertiesValidator">
-         </run>
-         <helper
-               class="org.eclipse.jst.validation.sample.workbenchimpl.PropertiesHelper">
-         </helper>
-      </validator>
-   </extension>
-<!--=======================================-->
-<!-- Validation Documentation              -->
-<!--=======================================-->
-<!--                                       -->
-<!-- Validator Developer's Guide           -->
-<!--                                       -->
-<!--
-   <extension
-         point="org.eclipse.help.toc">
-      <toc
-            file="doc/developerGuide/toc.xml"
-            primary="true">
-      </toc>
-   </extension>
--->
-<!--                                       -->
-<!-- Validation Guide                      -->
-<!--                                       -->
-<!--
-   <extension
-         point="org.eclipse.help.toc">
-      <toc
-            file="doc/guide/toc.xml"
-            primary="true">
-      </toc>
-   </extension>
--->
-
-</plugin>
diff --git a/tests/org.eclipse.jst.validation.sample/prop.bat b/tests/org.eclipse.jst.validation.sample/prop.bat
deleted file mode 100644
index 80bf940..0000000
--- a/tests/org.eclipse.jst.validation.sample/prop.bat
+++ /dev/null
@@ -1,45 +0,0 @@
-@echo off
-REM Licensed Material - Property of IBM 
-REM (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
-REM US Government Users Restricted Rights - Use, duplication or disclosure 
-REM restricted by GSA ADP Schedule Contract with IBM Corp. 
-REM 
-REM DISCLAIMER OF WARRANTIES.
-REM The following [enclosed] code is sample code created by IBM
-REM Corporation. This sample code is not part of any standard or IBM
-REM product and is provided to you solely for the purpose of assisting
-REM you in the development of your applications.  The code is provided
-REM "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
-REM NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-REM FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
-REM THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
-REM for any damages arising out of your use of the sample code, even
-REM if it has been advised of the possibility of such damages.
-REM 
-REM This batch file fires off the property file parse or comparison.
-REM
-setlocal
-
-if "%JAVA_HOME%" EQU "" goto NO_JAVA
-
-set CLASSPATH=%CLASSPATH%;..\com.ibm.etools.validation.core_5.1.0\runtime\common.jar
-set CLASSPATH=%CLASSPATH%;.\runtime\propertiesValidator.jar
-if "%1" == "" goto syntax
-
-%JAVA_HOME%\bin\java com.ibm.etools.parser.Main %1 %2 %3
-goto :end
-
-:NO_JAVA
-echo.
-echo The JAVA_HOME environment variable must be set to the JRE directory.
-echo e.g., set JAVA_HOME=C:\JRE
-echo where JRE has a subdirectory named "bin"
-echo.
-goto :end
-
-:syntax
-%JAVA_HOME%\bin\java com.ibm.etools.parser.Main
-
-:end
-endlocal
-@echo on
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.validation.sample/propertiesValFS/org/eclipse/jst/validation/sample/filesystemimpl/FilesystemPropertiesHelper.java b/tests/org.eclipse.jst.validation.sample/propertiesValFS/org/eclipse/jst/validation/sample/filesystemimpl/FilesystemPropertiesHelper.java
deleted file mode 100644
index d2d8e40..0000000
--- a/tests/org.eclipse.jst.validation.sample/propertiesValFS/org/eclipse/jst/validation/sample/filesystemimpl/FilesystemPropertiesHelper.java
+++ /dev/null
@@ -1,198 +0,0 @@
-package org.eclipse.jst.validation.sample.filesystemimpl;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.LineNumberReader;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.eclipse.jst.validation.sample.PModelEnum;
-import org.eclipse.jst.validation.sample.parser.APropertyFile;
-import org.eclipse.jst.validation.sample.parser.PropertyLine;
-import org.eclipse.wst.validation.core.FileDelta;
-import org.eclipse.wst.validation.core.IFileDelta;
-import org.eclipse.wst.validation.core.IMessage;
-import org.eclipse.wst.validation.sample.filesystem.IFilesystemHelper;
-
-/**
- * This class is the IHelper implementation, used by the PropertiesValidator,
- * when the validator is run in the filesystem validation framework.
- */
-public class FilesystemPropertiesHelper implements IFilesystemHelper {
-	public FilesystemPropertiesHelper() {
-		super();
-	}
-
-	/**
-	 * @see com.ibm.etools.validation.core.IHelper#loadModel(String)
-	 */
-	public Object loadModel(String symbolicName) {
-		return (Object) loadModel(symbolicName, null);
-	}
-
-	/**
-	 * @see com.ibm.etools.validation.core.IHelper#loadModel(String, Object[])
-	 */
-	public Object loadModel(String symbolicName, Object[] parm) {
-		if ((symbolicName == null) || (symbolicName.equals(""))) { //$NON-NLS-1$
-			return null;
-		}
-
-		if (symbolicName.equals(PModelEnum.LINEINPUTREADER) && (parm != null) && (parm.length == 1) && (parm[0] instanceof String)) {
-			return loadLineNumberReader((String) parm[0]);
-		}
-		else if (symbolicName.equals(PModelEnum.RELEASE_LINEINPUTREADER) && (parm != null) && (parm.length == 1) && (parm[0] instanceof LineNumberReader)) {
-			return releaseLineNumberReader((LineNumberReader) parm[0]);
-		}
-		else if (symbolicName.equals(PModelEnum.ALL_PROPERTIES_FILES)) {
-			return loadAllPropertiesFiles();
-		}
-		else if(symbolicName.equals(PModelEnum.FILTER)) {
-			// Because this environment does not copy resources into a "bin" directory,
-			// the input is already filtered.
-			return parm;
-		}
-		else {
-			return null;
-		}
-	}
-
-	/**
-	 * Given the file name of an existing .properties file, return
-	 * the LineNumberReader that will read the file.
-	 */
-	protected Object loadLineNumberReader(String fileName) {
-		File propertyFile = new File(fileName);
-		if (!propertyFile.exists() || !propertyFile.isFile()) {
-			return null;
-		}
-
-		FileReader input = null;
-		try {
-			input = new FileReader(propertyFile);
-		}
-		catch (FileNotFoundException e) {
-			return null;
-		}
-
-		// Because we want to read in a line at a time from the file, convert the FileReader to a LineReader
-		LineNumberReader lineInput = new LineNumberReader(input);
-		return lineInput;
-	}
-
-	/**
-	 * This method doesn't load anything; it releases the resources allocated
-	 * by the loadLineNumberReader method. Its result will never be used, so always
-	 * return null.
-	 */
-	protected Object releaseLineNumberReader(LineNumberReader reader) {
-		if (reader == null) {
-			return null;
-		}
-
-		try {
-			reader.close();
-		}
-		catch (IOException e) {
-		}
-
-		return null;
-	}
-
-	/**
-	 * When the validator is told to perform a full validation, this
-	 * method returns an IFileDelta[], with one IFileDelta for every
-	 * .properties file in the current directory and its subdirectories.
-	 */
-	protected Object loadAllPropertiesFiles() {
-		String pwd = System.getProperty("user.dir"); //$NON-NLS-1$
-		File pwdDir = new File(pwd);
-		if (!pwdDir.exists()) {
-			return null;
-		}
-
-		if (!pwdDir.isDirectory()) {
-			return null;
-		}
-
-		Set tempSet = new HashSet();
-		traverseDirectories(pwdDir, tempSet);
-		
-		IFileDelta[] result = new IFileDelta[tempSet.size()];
-		Iterator iterator = tempSet.iterator();
-		int count = 0;
-		while(iterator.hasNext()) {
-			File file = (File)iterator.next();
-			result[count++] = new FileDelta(file.getAbsolutePath(), IFileDelta.CHANGED);
-		}
-		tempSet.clear();
-		tempSet = null;
-		iterator = null;
-		return result;
-	}
-
-	/**
-	 * Traverse the directory, looking for .properties files, and if a
-	 * .properties file is found then add it to the Set.
-	 */
-	protected void traverseDirectories(File directoryToSearch, Set result) {
-		if (directoryToSearch == null) {
-			return;
-		}
-
-		if (directoryToSearch.isDirectory()) {
-			// Traverse into this directory's children.
-			String[] children = directoryToSearch.list();
-			for (int i = 0; i < children.length; i++) {
-				File child = new File(directoryToSearch, children[i]);
-				traverseDirectories(child, result);
-			}
-		}
-		else if(directoryToSearch.isFile()) {
-			String fileName = directoryToSearch.getName();
-			if((fileName != null) && fileName.endsWith("properties")) { //$NON-NLS-1$
-				result.add(directoryToSearch);
-			}
-		}
-	}
-	
-	/**
-	 * Given an IMessage, return the file name of the .properties file that
-	 * the message was reported against.
-	 */
-	public String getFileName(IMessage message) {
-		Object object = message.getTargetObject();
-		if(object instanceof PropertyLine) {
-			PropertyLine line = (PropertyLine)object;
-			APropertyFile pFile = line.getFile();
-			return pFile.getQualifiedFileName(); // a ValidationPropertyFile returns the file name as its qualified name
-		}
-		else if(object instanceof APropertyFile) {
-			APropertyFile pFile = (APropertyFile)object;
-			return pFile.getQualifiedFileName(); // a ValidationPropertyFile returns the file name as its qualified name
-		}
-		return "";	//$NON-NLS-1$
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.sample/propertiesValWB/org/eclipse/jst/validation/sample/workbenchimpl/PluginPropertyFile.java b/tests/org.eclipse.jst.validation.sample/propertiesValWB/org/eclipse/jst/validation/sample/workbenchimpl/PluginPropertyFile.java
deleted file mode 100644
index 77dbe36..0000000
--- a/tests/org.eclipse.jst.validation.sample/propertiesValWB/org/eclipse/jst/validation/sample/workbenchimpl/PluginPropertyFile.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * (c) Copyright 2001 MyCorporation.
- * All Rights Reserved.
- */
-package org.eclipse.jst.validation.sample.workbenchimpl;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.LineNumberReader;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.Locale;
-import java.util.logging.Level;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.core.runtime.IPluginRegistry;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Plugin;
-import org.eclipse.jst.validation.sample.parser.APropertyFile;
-import org.eclipse.jst.validation.sample.parser.MessageMetaData;
-import org.eclipse.wst.validation.core.IMessage;
-
-import com.ibm.wtp.common.logger.proxy.Logger;
-
-/**
- * A PluginPropertyFile represents a resource bundle that is exported by a plugin.
- */
-public class PluginPropertyFile extends APropertyFile {
-	private String _bundleName = null;
-	private String _pluginId = null;
-	private String _langVariant = null; // e.g., en_US vs en
-	private ClassLoader _classLoader = null; // the ClassLoader used to load the bundle
-	
-	
-	/**
-	 * Both the pluginId and the bundleName must not be null, must
-	 * refer to an existing plugin, and must refer to an existing bundle 
-	 * exported by that plugin.
-	 */
-	public PluginPropertyFile(String pluginId, String bundleName) {
-		_pluginId = pluginId;
-		_bundleName = bundleName;
-		
-		ClassLoader cl = null;
-		InputStream inS = null;
-		Plugin plugin = getPlugin(pluginId);			
-		if(bundleName.equals("plugin")) { //$NON-NLS-1$
-			// Try loading it from the Plugin parent (a "plugin.properties")
-			cl = getPluginPropertiesClassLoader(plugin);
-		}
-		else {
-			cl = plugin.getDescriptor().getPluginClassLoader();
-		}
-		inS = getInputStream(cl, bundleName);
-		
-		InputStreamReader inR = new InputStreamReader(inS);
-		LineNumberReader lineR = new LineNumberReader(inR);
-		parseFile(lineR); // populate this property file
-		try {
-			lineR.close();
-			inR.close();
-		}
-		catch(IOException exc) {
-			Logger logger = PropertiesValidatorPlugin.getPlugin().getMsgLogger();;
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE, exc);
-			}
-		}
-		
-		try {
-			if(inS != null) {
-				inS.close();
-			}
-		}
-		catch(IOException exc) {
-			Logger logger = PropertiesValidatorPlugin.getPlugin().getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE, exc);
-			}
-		}
-		
-		_classLoader = cl; // store the ClassLoader which was used to load the bundle
-	}
-	
-	private InputStream getInputStream(ClassLoader cl, String bundleName) {
-		Locale l = Locale.getDefault();
-		String language = l.getLanguage();
-		String country = l.getCountry();
-		String variant = l.getVariant();
-		
-		String lang = null;
-		String lang_country = null;
-		String lang_country_variant = null;
-		if((language != null) && !(language.equals(""))) { //$NON-NLS-1$
-			lang = "_" + language; //$NON-NLS-1$
-		}
-
-		if((country != null) && !(country.equals(""))) { //$NON-NLS-1$
-			lang_country = lang + "_" + country; //$NON-NLS-1$
-		}
-
-		if((variant != null) && !(variant.equals(""))) { //$NON-NLS-1$
-			lang_country_variant = lang_country + "_" + variant; //$NON-NLS-1$
-		}
-		
-		InputStream inS = null;
-		if(lang_country_variant != null) {
-			inS = getResourceAsStream(cl, bundleName, lang_country_variant);
-			if(inS != null) {
-				_langVariant = lang_country_variant;
-				return inS;
-			}
-		}
-		
-		if(lang_country != null) {
-			inS = getResourceAsStream(cl, bundleName, lang_country);
-			if(inS != null) {
-				_langVariant = lang_country;
-				return inS;
-			}
-		}
-		
-		if(lang != null) {
-			inS = getResourceAsStream(cl, bundleName, lang);
-			if(inS != null) {
-				_langVariant = lang;
-				return inS;
-			}
-		}
-		
-		if(Locale.getDefault().equals(Locale.US)) {
-			// Running the TVT plugin in en_US mode, so return the default .properties file.
-			inS = getResourceAsStream(cl, bundleName, ""); //$NON-NLS-1$
-			if(inS != null) {
-				_langVariant = ""; //$NON-NLS-1$
-				return inS;
-			}
-		}
-		
-		return null;
-	}
-	
-	private final static InputStream getResourceAsStream(final ClassLoader cl, final String bundleName, final String language) {
-		String resName = bundleName.replace('.', '/') + language + ".properties"; //$NON-NLS-1$
-		return cl.getResourceAsStream(resName);
-	}
-	
-	private static ClassLoader getPluginPropertiesClassLoader(Plugin p) {
-		// Copied from PluginDescriptor.java's getResourceBundle method.
-		URL[] cp = ((URLClassLoader)p.getDescriptor().getPluginClassLoader()).getURLs();
-		URL[] newcp = new URL[cp.length+1];
-		for (int i=0; i<cp.length; i++) newcp[i+1] = cp[i];
-		try {
-			newcp[0] = Platform.resolve(p.getDescriptor().getInstallURL()); // always try to resolve URLs used in loaders
-		} catch(IOException e) {
-			newcp[0] = p.getDescriptor().getInstallURL();;
-		}
-		ClassLoader resourceLoader = new URLClassLoader(newcp, null);
-		return resourceLoader;
-	}
-	
-	private static Plugin getPlugin(String pluginId) {
-		if (pluginId == null) {
-			return null;
-		}
-
-		IPluginRegistry registry = Platform.getPluginRegistry();
-		IPluginDescriptor pluginDesc = registry.getPluginDescriptor(pluginId);
-		if(pluginDesc == null) {
-			return null;
-		}
-		
-		try {
-			return pluginDesc.getPlugin();
-		}
-		catch(CoreException exc) {
-			Logger logger = PropertiesValidatorPlugin.getPlugin().getMsgLogger();;
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE, exc);
-			}
-			return null;
-		}
-		
-	}
-
-	
-	/*
-	 * @see APropertyFile#report(String)
-	 */
-	public void report(String str) {
-		addParseWarning(new MessageMetaData(str));
-	}
-	
-	public void report(IMessage message) {
-		MessageMetaData mmd = new MessageMetaData(message.getBundleName(), message.getSeverity(), message.getId(), message.getParams(), message.getTargetObject(), message.getLineNo(), message.getOffset(), message.getLength());
-		addParseWarning(mmd);
-	}
-	
-	public void report(MessageMetaData mmd) {
-		addParseWarning(mmd);
-	}
-	
-	public void addParseWarning(IMessage message) {
-		MessageMetaData mmd = new MessageMetaData(message.getBundleName(), message.getSeverity(), message.getId(), message.getParams(), message.getTargetObject(), message.getLineNo(), message.getOffset(), message.getLength());
-		addParseWarning(mmd);
-	}
-	
-	public String getPluginId() {
-		return _pluginId;
-	}
-
-	public String getBundleName() {
-		return _bundleName;
-	}
-	
-	public String getQualifiedFileName() {
-		StringBuffer buffer = new StringBuffer(getPluginId());
-		buffer.append("::");
-		buffer.append(getBundleName());
-		buffer.append(_langVariant);
-		return buffer.toString();
-	}
-
-	public String getLangVariant() {
-		return _langVariant;
-	}
-	
-	public ClassLoader getClassLoader() {
-		return _classLoader;
-	}	
-}
diff --git a/tests/org.eclipse.jst.validation.sample/propertiesValWB/org/eclipse/jst/validation/sample/workbenchimpl/PropertiesHelper.java b/tests/org.eclipse.jst.validation.sample/propertiesValWB/org/eclipse/jst/validation/sample/workbenchimpl/PropertiesHelper.java
deleted file mode 100644
index cbf9e52..0000000
--- a/tests/org.eclipse.jst.validation.sample/propertiesValWB/org/eclipse/jst/validation/sample/workbenchimpl/PropertiesHelper.java
+++ /dev/null
@@ -1,235 +0,0 @@
-package org.eclipse.jst.validation.sample.workbenchimpl;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.LineNumberReader;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceVisitor;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jst.validation.sample.PModelEnum;
-import org.eclipse.jst.validation.sample.parser.APropertyFile;
-import org.eclipse.jst.validation.sample.parser.PropertyLine;
-import org.eclipse.wst.validation.core.IFileDelta;
-import org.eclipse.wst.validation.internal.operations.AWorkbenchHelper;
-import org.eclipse.wst.validation.internal.operations.WorkbenchFileDelta;
-
-import com.ibm.wtp.common.logger.proxy.Logger;
-
-/**
- * This class implements the WebSphere Studio IHelper for the 
- * Properties Validator.
- */
-public class PropertiesHelper extends AWorkbenchHelper {
-	public PropertiesHelper() {
-		super();
-		 
-		registerModel(PModelEnum.LINEINPUTREADER, "loadLineNumberReader", new Class[]{java.lang.String.class}); //$NON-NLS-1$
-		registerModel(PModelEnum.RELEASE_LINEINPUTREADER, "releaseLineNumberReader", new Class[]{java.io.LineNumberReader.class}); //$NON-NLS-1$
-		registerModel(PModelEnum.ALL_PROPERTIES_FILES, "loadAllPropertiesFiles"); //$NON-NLS-1$
-		registerModel(PModelEnum.MSGLOGGER, "getMsgLogger"); //$NON-NLS-1$
-		registerModel(PModelEnum.FILTER, "filter", new Class[]{IFileDelta[].class}); //$NON-NLS-1$
-	}
-
-	/**
-	 * @see com.ibm.etools.validate.IWorkbenchHelper#getTargetObjectName(Object)
-	 */
-	public String getTargetObjectName(Object object) {
-		return null;
-	}
-	
-	/**
-	 * @see com.ibm.etools.validate.IWorkbenchHelper#getResource(Object)
-	 */
-	public IResource getResource(Object object) {
-		IFile file = null;
-		if(object instanceof PropertyLine) {
-			PropertyLine line = (PropertyLine)object;
-			APropertyFile pFile = line.getFile();
-			String fileName = pFile.getQualifiedFileName(); // a ValidationPropertyFile returns the file name as its qualified name
-			file = getFile(fileName);
-		}
-		else if(object instanceof APropertyFile) {
-			APropertyFile pFile = (APropertyFile)object;
-			String fileName = pFile.getQualifiedFileName(); // a ValidationPropertyFile returns the file name as its qualified name
-			file = getFile(fileName);
-		}
-		
-		if((file == null) || (!file.exists())) {
-			return super.getResource(object);
-		}
-		return file;
-	}
-	
-	/**
-	 * When a full validation is performed, this method returns an
-	 * IFileDelta[] containing one IFileDelta for each .properties 
-	 * file in the IProject.
-	 */
-	public IFileDelta[] loadAllPropertiesFiles() {
-		IProject project = getProject();
-		
-		final Set files = new HashSet();
-		IResourceVisitor visitor = new IResourceVisitor() {
-			public boolean visit(IResource res) throws CoreException {
-				if(!res.isAccessible()) {
-					return false; // if the resource isn't accessible then neither are its children
-				}
-				
-				if(isSrcFile(res)) { //$NON-NLS-1$
-					WorkbenchFileDelta newFileDelta = new WorkbenchFileDelta(res.getFullPath().toString(), IFileDelta.CHANGED, res);
-					files.add(newFileDelta);
-				}
-
-				return true; // visit the resource's children as well
-			}
-		};
-
-		try {
-			project.accept(visitor, IResource.DEPTH_INFINITE, true); // true means include phantom resources
-		}
-		catch(CoreException e) {
-			Logger logger = getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(e);
-			}
-		}
-		
-		IFileDelta[] result = new IFileDelta[files.size()];
-		files.toArray(result);
-		return result;
-	}
-	
-	/**
-	 * Return the IFile handle for the file identified by fileName.
-	 * null will be returned if the file does not exist.
-	 */
-	protected static IFile getFile(String fileName) {
-		IFile file = (IFile)ResourcesPlugin.getWorkspace().getRoot().findMember(fileName);
-		return file;
-	}
-	
-	/**
-	 * Given the file name of an existing .properties file, return
-	 * the LineNumberReader that will read the file.
-	 */
-	public LineNumberReader loadLineNumberReader(String fileName) {
-		try {
-			IFile file = getFile(fileName);
-			InputStream in = file.getContents();
-			InputStreamReader reader = new InputStreamReader(in);
-	
-			// Because we want to read in a line at a time from the file, convert the InputStreamReader to a LineReader
-			LineNumberReader lineInput = new LineNumberReader(reader);
-			return lineInput;
-		}
-		catch(CoreException exc) {
-			Logger logger = getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(exc);
-			}
-			return null;
-		}
-	}
-	
-	/**
-	 * This method doesn't load anything; it releases the resources allocated
-	 * by the loadLineNumberReader method. Its result will never be used, so always
-	 * return null.
-	 */
-	public LineNumberReader releaseLineNumberReader(LineNumberReader reader) {
-		if(reader == null) {
-			return null;
-		}
-		
-		try {
-			reader.close();
-		}
-		catch (IOException exc) {
-			Logger logger = getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(exc);
-			}
-		}
-
-		return null;
-	}
-	
-	/**
-	 * The MsgLogger from this method can be used to log exceptions.
-	 * This method will never return null.
-	 */
-	public Logger getMsgLogger() {
-		return PropertiesValidatorPlugin.getPlugin().getMsgLogger();
-	}
-	
-	// package visibility for performance reasons (synthetic accessor method)
-	boolean isSrcFile(IResource res) {
-		// Want to filter out the copies in the "bin" directory.
-		if(res == null) {
-			return false;
-		}
-		
-		if(!(res instanceof IFile)) {
-			return false;
-		}
-		
-		if(!res.getFileExtension().equals("properties")) { //$NON-NLS-1$
-			return false; 		
-		}
-		
-		if(res.isDerived()) {
-			// Created by eclipse
-			return false;
-		}
-		
-		return true;
-	}
-	
-	public IFileDelta[] filter(IFileDelta[] changedFiles) {
-		IFileDelta[] temp = new IFileDelta[changedFiles.length];
-		int count = 0;
-		for(int i=0; i<changedFiles.length; i++) {
-			IFileDelta fd = changedFiles[i];
-			IResource resource = ((WorkbenchFileDelta)fd).getResource();
-			if(isSrcFile(resource)) {
-				temp[count++] = fd;
-			}
-		}
-		
-		if(count == changedFiles.length) {
-			return changedFiles;
-		}
-		
-		IFileDelta[] result = new IFileDelta[count];
-		System.arraycopy(temp, 0, result, 0, count);
-		return result;
-	}
-
-}
diff --git a/tests/org.eclipse.jst.validation.sample/propertiesValWB/org/eclipse/jst/validation/sample/workbenchimpl/PropertiesValidatorPlugin.java b/tests/org.eclipse.jst.validation.sample/propertiesValWB/org/eclipse/jst/validation/sample/workbenchimpl/PropertiesValidatorPlugin.java
deleted file mode 100644
index 3f194c7..0000000
--- a/tests/org.eclipse.jst.validation.sample/propertiesValWB/org/eclipse/jst/validation/sample/workbenchimpl/PropertiesValidatorPlugin.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.eclipse.jst.validation.sample.workbenchimpl;
-/*
- * Licensed Material - Property of IBM (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. US
- * Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP
- * Schedule Contract with IBM Corp.
- * 
- * DISCLAIMER OF WARRANTIES. The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM product and is provided to you
- * solely for the purpose of assisting you in the development of your applications. The code is
- * provided "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE
- * FUNCTION OR PERFORMANCE OF THIS CODE. THIS CODE MAY CONTAIN ERRORS. IBM shall not be liable for
- * any damages arising out of your use of the sample code, even if it has been advised of the
- * possibility of such damages.
- *  
- */
-import org.eclipse.wst.common.frameworks.internal.WTPPlugin;
-
-import com.ibm.wtp.common.logger.proxy.Logger;
-/**
- * This class is the Plugin class identified by the com.ibm.etools.validation.core.prop's plugin.xml
- * file (i.e., the &lt;plugin <br><br>
- * class=&quot;class="com.ibm.etools.validation.core.properties.workbenchimpl.PropertiesValidatorPlugin"&quot&gt;
- */
-public class PropertiesValidatorPlugin extends WTPPlugin {
-	private static PropertiesValidatorPlugin _inst = null;
-	public static final String PLUGIN_ID = "com.ibm.etools.validation.prop"; //$NON-NLS-1$
-	private static Logger _logger;
-	public PropertiesValidatorPlugin() {
-		super();
-		if (_inst == null) {
-			_inst = this;
-		}
-	}
-	public static PropertiesValidatorPlugin getPlugin() {
-		return _inst;
-	}
-	public Logger getMsgLogger() {
-		if (_logger == null)
-			_logger = Logger.getLogger();
-		return _logger;
-	}
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.ibm.wtp.common.WTPPlugin#getPluginID()
-	 */
-	public String getPluginID() {
-		return PLUGIN_ID;
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/PModelEnum.java b/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/PModelEnum.java
deleted file mode 100644
index f625a6a..0000000
--- a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/PModelEnum.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.eclipse.jst.validation.sample;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-/**
- * This class contains the constants that uniquely identify each
- * model that the Properties Validator's helper must load. All of
- * these models must be supported by the IHelper implementation
- * or the helper cannot be used to support the Properties Validator.
- */
-public interface PModelEnum {
-	public static final String LINEINPUTREADER = "get a LineInputReader for a .properties file"; //$NON-NLS-1$
-	public static final String RELEASE_LINEINPUTREADER = "relase (close) the LineInputReader"; //$NON-NLS-1$
-	public static final String ALL_PROPERTIES_FILES = "return an IFileDelta[] of all of the .properties files in the project"; //$NON-NLS-1$
-	public static final String MSGLOGGER = "get the MsgLogger needed to log messages. This MsgLogger must never be null."; //$NON-NLS-1$
-	public static final String FILTER = "get only the .properties files that are in src dir; filter out the .properties files that are in bin dir (i.e., don't validate the same file twice"; //$NON-NLS-1$
-
-}
diff --git a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/PropertiesValidator.java b/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/PropertiesValidator.java
deleted file mode 100644
index 3b832f6..0000000
--- a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/PropertiesValidator.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.eclipse.jst.validation.sample;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-import java.io.LineNumberReader;
-import java.util.logging.Level;
-
-import org.eclipse.jst.validation.sample.parser.IValidationConstants;
-import org.eclipse.wst.validation.core.IFileDelta;
-import org.eclipse.wst.validation.core.IHelper;
-import org.eclipse.wst.validation.core.IMessage;
-import org.eclipse.wst.validation.core.IReporter;
-import org.eclipse.wst.validation.core.IValidator;
-import org.eclipse.wst.validation.core.Message;
-import org.eclipse.wst.validation.core.SeverityEnum;
-import org.eclipse.wst.validation.core.ValidationException;
-
-import com.ibm.wtp.common.logger.proxy.Logger;
-
-/**
- * This class checks that the .properties files has no syntax or
- * or problems. This validator can run in any validation framework
- * implementation.
- */
-public class PropertiesValidator implements IValidator {
-
-	/*
-	 * @see IValidator#cleanup(IReporter)
-	 */
-	public void cleanup(IReporter reporter) {
-		// This validator doesn't cache anything so it doesn't need to clean anything up.
-	}
-
-	/*
-	 * @see IValidator#validate(IHelper, IReporter, IFileDelta[])
-	 */
-	public void validate(IHelper helper, IReporter reporter, IFileDelta[] changedFiles) throws ValidationException {
-		if((changedFiles == null) || (changedFiles.length == 0)) {
-			changedFiles = (IFileDelta[])helper.loadModel(PModelEnum.ALL_PROPERTIES_FILES);
-		}
-		else {
-			// Filter out the files that are in the "bin" directory.
-			changedFiles = (IFileDelta[])helper.loadModel(PModelEnum.FILTER, new Object[]{changedFiles});
-		}
-		if(changedFiles == null) {
-			// Problem loading the files. 
-			Logger logger = (Logger)helper.loadModel(PModelEnum.MSGLOGGER);
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE,"changedFiles == null; terminating validation"); //$NON-NLS-1$
-				return;
-			}
-		}
-		
-		for (int i = 0; i < changedFiles.length; i++) {
-			// Load the reader for the file
-			LineNumberReader reader = null;
-			try {
-				reader = (LineNumberReader)helper.loadModel(PModelEnum.LINEINPUTREADER, new Object[]{changedFiles[i].getFileName()});
-				if(reader == null) {
-					// Either: 
-					// 1. The file doesn't exist or
-					// 2. The file isn't a .properties file or
-					// 3. The file can't be read
-					IMessage message = new Message(IValidationConstants.BUNDLENAME, SeverityEnum.NORMAL_SEVERITY, IValidationConstants.ABCD0090, new String[]{changedFiles[i].getFileName()});
-					reporter.addMessage(this, message);
-					continue;
-				}
-	
-				// If we can get a reader then we can get a PropertyFile
-				ValidatorPropertyFile propFile = new ValidatorPropertyFile(reader, changedFiles[i].getFileName(), reporter, this);
-				propFile.printSyntaxWarnings();
-				propFile.printDuplicateMessageId();
-				propFile.printDuplicateMessagePrefix();
-			}
-			finally {
-				// Don't catch Throwable, MessageLimitException, OperationCanceledException, or ValidationException.
-				// Let them travel up to the framework and the framework will log or cleanup as appropriate.
-				if(reader != null) {
-					// Release the reader for the file.
-					// Because different validation frameworks may allocate LineNumberReaders
-					// differently, don't close the reader in the validator. Instead, pass the
-					// reader back to the helper, and regardless of whether the reader should 
-					// be closed or reused, the helper knows the right thing to do for its
-					// framework environment.
-					helper.loadModel(PModelEnum.RELEASE_LINEINPUTREADER, new Object[]{reader});
-				}
-			}
-		}
-	}
-	
-}
diff --git a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/ValidatorPropertyFile.java b/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/ValidatorPropertyFile.java
deleted file mode 100644
index a9a9e8e..0000000
--- a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/ValidatorPropertyFile.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package org.eclipse.jst.validation.sample;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-import java.io.LineNumberReader;
-
-import org.eclipse.jst.validation.sample.parser.APropertyFile;
-import org.eclipse.jst.validation.sample.parser.MessageMetaData;
-import org.eclipse.wst.validation.core.IMessage;
-import org.eclipse.wst.validation.core.IReporter;
-import org.eclipse.wst.validation.core.IValidator;
-import org.eclipse.wst.validation.core.Message;
-
-/**
- * This class represents an APropertyFile that is instantiated by a validator.
- */
-public class ValidatorPropertyFile extends APropertyFile {
-	private IReporter _reporter = null;
-	private IValidator _validator = null;
-	private String _fileName = null; // if this is created from a reader instead of a file name, we only have the bundle name
-	
-	public ValidatorPropertyFile(LineNumberReader reader, String fileName, IReporter reporter, IValidator validator) {
-		super();
-		setFileName(fileName);
-		_reporter = reporter;
-		_validator = validator;
-		parseFile(reader);
-	}
-	
-	public void setFileName(String bundleName) {
-		_fileName = bundleName;
-	}
-	
-	/**
-	 * Return the name of the .properties file (or bundle).
-	 */
-	public String getFileName() {
-		return _fileName;
-	}
-	
-	/*
-	 * @see APropertyFile#report(String)
-	 */
-	public void report(String str) {
-		// Never print titles like "DUPLICATE MESSAGE IDS". Print only the IMessage.
-	}
-	
-	/*
-	 * @see APropertyFile#report(MessageMetaData)
-	 */
-	public void report(MessageMetaData mmd) {
-		IMessage message = new Message();
-		message.setBundleName(mmd.getBundleName());
-		message.setSeverity(getSeverity(mmd.getSeverity()));
-		message.setId(mmd.getId());
-		message.setParams(mmd.getParams());
-		message.setTargetObject(mmd.getTargetObject());
-		message.setLineNo(mmd.getLineNumber());
-		message.setLength(mmd.getLength());
-		message.setOffset(mmd.getOffset());
-		message.setLength(mmd.getLength());
-		_reporter.addMessage(getValidator(), message);
-	}
-	
-	/**
-	 * Given the severity of the MessageMetaData, return the corresponding
-	 * severity of the validation framework.
-	 */
-	private static int getSeverity(int mmdSeverity) {
-		switch(mmdSeverity) {
-			case(MessageMetaData.ERROR): {
-				return IReporter.HIGH_SEVERITY;
-			}
-			
-			case(MessageMetaData.INFO): {
-				return IReporter.LOW_SEVERITY;
-			}
-			
-			default: {
-				return IReporter.NORMAL_SEVERITY;
-			}
-		}
-	}
-	
-	/**
-	 * Return the IValidator instance that is checking this file.
-	 */
-	public IValidator getValidator() {
-		return _validator;
-	}
-
-	/**
-	 * Return the name of this file that identifies this file uniquely.
-	 */
-	public String getQualifiedFileName() {
-		return getFileName();
-	}
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/APropertyFile.java b/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/APropertyFile.java
deleted file mode 100644
index 51d6b4b..0000000
--- a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/APropertyFile.java
+++ /dev/null
@@ -1,718 +0,0 @@
-package org.eclipse.jst.validation.sample.parser;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-import java.io.*;
-import java.util.*;
-
-/**
- * This class represents a .properties file; extensions of this class implement
- * environment-specific messages, such as how to report the known problems. This
- * class, and every class in the org.eclipse.jst.validation.sample.parser package, is independent
- * of the framework environment.
- */
-public abstract class APropertyFile {
-	private static final String EQUALS = "="; //$NON-NLS-1$
-
-	private List _propertyLines = null; // The List of PropertyLine instances.
-	private List _parseWarnings = null; // The List of MessageMetaData warnings found when parsing the .properties file.
-	private boolean _debug = false;
-
-	/**
-	 * Return a name that identifies this file uniquely.
-	 */
-	public abstract String getQualifiedFileName();
-	
-	/**
-	 * Tell the user that there is a problem - in WebSphere Studio, this
-	 * shows up as a row in the Task View; in the sample filesystem framework,
-	 * this appears as a message to System.out.
-	 */
-	public abstract void report(String str);
-	
-	/**
-	 * Tell the user that there is a problem - in WebSphere Studio, this
-	 * shows up as a row in the Task View; in the sample filesystem framework,
-	 * this appears as a message to System.out.
-	 */
-	public abstract void report(MessageMetaData mmd);
-	
-	protected APropertyFile() {
-		_propertyLines = new ArrayList();
-		_parseWarnings = new ArrayList();
-	}
-	
-	/**
-	 * Add the List of MessageMetaData to the list of warning messages.
-	 */
-	public void addParseWarnings(List list) {
-		_parseWarnings.addAll(list);
-	}
-
-	/**
-	 * Add a single warning message to the list of parse warnings.
-	 */
-	public void addParseWarning(MessageMetaData mmd) {
-		_parseWarnings.add(mmd);
-	}
-		
-	/**
-	 * Return the List of warning messages that report problems found
-	 * while parsing the .properties file.
-	 */
-	public List getParseWarnings() {
-		return _parseWarnings;
-	}
-	
-	
-	public String toString() {
-		return getQualifiedFileName();
-	}
-
-	/**
-	 * Should debug information be printed when parsing?
-	 */	
-	public boolean debug() {
-		return _debug;
-	}
-	
-	protected void setDebug(boolean d) {
-		_debug = d;
-	}
-	
-	public boolean equals(Object o) {
-		if(o == null) {
-			return false;
-		}
-		
-		if(!(o instanceof PropertyFile)) {
-			return false;
-		}
-		
-		PropertyFile file = (PropertyFile)o;
-		return getQualifiedFileName().equals(file.getQualifiedFileName());
-	}
-	
-	public int hashCode() {
-		return getQualifiedFileName().hashCode();
-	}
-
-	/**
-	 * Return the number of messages in the file, including duplicates & blanks.
-	 */
-	public int getNumProperties() {
-		return _propertyLines.size();
-	}
-
-	/**
-	 * Excluding message ids and error ids, output the number of words in the
-	 * .properties file.
-	 */
-	public int getNumWords() {
-		// NOT a fast method....how to optimize?
-		Iterator iterator = _propertyLines.iterator();
-		int count = 0;
-		while (iterator.hasNext()) {
-			PropertyLine line = (PropertyLine) iterator.next();
-			count += line.getNumWords();
-		}
-		return count;
-	}
-	
-	/**
-	 * Return a count of the number of unique message prefixes in the file.
-	 * (A message prefix starts the message text, e.g., ABCD0000E.)
-	 */
-	public int getNumUniquePrefixes() {
-		Set uniqueIds = new HashSet();
-		Iterator iterator = getPropertyLines().iterator();
-		while(iterator.hasNext()) {
-			PropertyLine line = (PropertyLine)iterator.next();
-			if(line.hasMessagePrefix()) {
-				uniqueIds.add(line.getMessagePrefix());
-			}
-		}
-		return uniqueIds.size();
-	}
-	
-	/**
-	 * Return a count of the number of message prefixes used in the file.
-	 * Usually this is the same as the number of unique prefixes, but if 
-	 * a .properties file has variations of a message (slightly different 
-	 * wording for a different context), then the number of prefixes will 
-	 * be larger than the number of unique prefixess.
-	 */
-	public int getNumPrefixes() {
-		int count = 0;
-		Iterator iterator = getPropertyLines().iterator();
-		while(iterator.hasNext()) {
-			PropertyLine line = (PropertyLine)iterator.next();
-			if(line.hasMessagePrefix()) {
-				count++;
-			}
-		}
-		return count;
-	}
-
-	/**
-	 * Return a count of the number of messages that do not use prefixes in the file.
-	 */
-	public int getNumWithoutPrefixes() {
-		int count = 0;
-		Iterator iterator = getPropertyLines().iterator();
-		while(iterator.hasNext()) {
-			PropertyLine line = (PropertyLine)iterator.next();
-			if(!line.hasMessagePrefix()) {
-				count++;
-			}
-		}
-		return count;
-	}
-
-	/**
-	 * Return a List of the PropertyLine instances contained in this file.
-	 */
-	public List getPropertyLines() {
-		return _propertyLines;
-	}
-	
-	/**
-	 * Return the PropertyLine instance that is identified by the 
-	 * given messageId.
-	 */
-	public PropertyLine getPropertyLine(String messageId) {
-		Collections.sort(_propertyLines, PropertyLineComparator.getMessageIdComparator());
-		int index = Collections.binarySearch(_propertyLines, messageId, PropertyLineComparator.getMessageIdComparator());
-		if(index < 0) {
-			return null;
-		}
-		
-		PropertyLine result = (PropertyLine)_propertyLines.get(index);
-		return result;
-	}
-
-	/**
-	 * Parse the file to create a collection of uniquely identified 
-	 * keys with their associated values. If there are any duplicate 
-	 * keys, the last value is the one that is stored. Store the 
-	 * value of the duplicate keys, and the line number on which 
-	 * each instance of the key (and its value) are located.
-	 */
-	protected void parseFile(File propertyFile) {
-		FileReader input = null;
-		LineNumberReader lineInput = null;
-		try {
-			input = new FileReader(propertyFile);
-		}
-		catch (FileNotFoundException e) {
-			// We can ignore this exception because we have already checked in the constructor that the
-			// file exists.
-		}
-
-		// Because we want to read in a line at a time from the file, convert the FileReader to a LineReader
-		lineInput = new LineNumberReader(input);
-		
-		parseFile(lineInput);
-		
-		try {
-			lineInput.close();
-		}
-		catch (IOException e) {
-		}
-		input = null;
-		lineInput = null;
-	}
-		
-	/**
-	 * Given a LineNumberReader on a .properties file, read the
-	 * file and note any problems that may need to be reported to
-	 * the user.
-	 */
-	protected void parseFile(LineNumberReader lineInput) {
-		_propertyLines.clear();
-		_parseWarnings.clear();
-
-		boolean isNewKey = true;
-		String key = null;
-		int lineNumber = 0;
-		String value = null;
-		int offset = 0; // each .properties line needs to know its offset so that columns in the line can be calculated.
-		int messageOffset = 0; // the offset, relative to the start of the line, where the message prefix starts
-		String line = null;
-		while (true) {
-			try {
-				line = lineInput.readLine(); // calculate the offset in the finally block
-				if (line == null)
-					break;
-				line = line.trim();
-
-				// ignore blank lines
-				if (line.equals("")) //$NON-NLS-1$
-					continue;
-
-				// strip off lines that begin with '#'
-				if (line.startsWith("#")) //$NON-NLS-1$
-					continue;
-
-				// strip off lines that begin with '/'
-				if (line.startsWith("/")) //$NON-NLS-1$
-					continue;
-
-				if (isNewKey) {
-					// We know that the line is of the form
-					//
-					// KEYNAME = VALUE
-					//
-					if (line.indexOf(EQUALS) != -1) {
-						// Make sure the line is not of the form " = Message" (i.e., missing the message id).
-						if(line.indexOf(EQUALS) == 0) {
-							throw new java.util.NoSuchElementException();
-						}
-						
-						// The user may or may not put spaces between the key
-						// name, the equals sign, and the value. This gives us four cases:
-						//    1. keyname=value
-						//    2. keyname= value
-						//    3. keyname =value
-						//    4. keyname = value
-						// The way to deal with all four cases is to find the index of the
-						// '=' sign, and the value is the remainder of the line after the
-						// sign.
-						//
-						key = line.substring(0, line.indexOf(EQUALS));
-						key = key.trim();
-
-						// add 1 to the EQUALS index because '=' is one character long
-						value = line.substring(line.indexOf(EQUALS) + 1);
-						value = value.trim();
-
-						messageOffset = line.indexOf(value);
-
-						lineNumber = lineInput.getLineNumber();
-					}
-					else {
-						// error in line syntax
-						throw new java.util.NoSuchElementException();
-					}
-				}
-				else {
-					// need to read in the multiple lines to get the multi-line value
-					value += line;
-				}
-
-				if (value.endsWith("\\")) { //$NON-NLS-1$
-					// multi-line value
-					// read in every line from the file until you reach an end-of-line
-					isNewKey = false;
-				}
-				else {
-					// end of multi-line value, or end of single-line value
-					isNewKey = true;
-					PropertyLine pline = new PropertyLine(this, offset, messageOffset, key, value, lineNumber);
-					_propertyLines.add(pline);
-				}
-			}
-			catch (IOException e) {
-				// When there is an IOException, we have reached the end of the file.
-				break;
-			}
-			catch (NullPointerException e) {
-				// If a line is not of the form KEYNAME = VALUE, there might be a null exception.
-				// Just continue onto the next line in the file
-				MessageMetaData mmd = new MessageMetaData(IValidationConstants.BUNDLENAME, MessageMetaData.ERROR, IValidationConstants.ABCD0080, null, this, lineInput.getLineNumber());
-				report(mmd);
-				break;
-			}
-			catch (java.util.NoSuchElementException e) {
-				// If a line is not of the form KEYNAME = VALUE, there might be a NoSuchElement exception.
-				// Just continue onto the next line in the file
-				MessageMetaData mmd = new MessageMetaData(IValidationConstants.BUNDLENAME, MessageMetaData.ERROR, IValidationConstants.ABCD0080, null, this, lineInput.getLineNumber());
-				report(mmd);
-			}
-			finally {
-				if(line != null) {
-					offset += line.length() + 2; // hack. 
-					// Can't get offset from BufferedReader, and since the reader strips 
-					// the '\n' and '\r' from the line before the line is returned, the 
-					// true length of the line can't be ascertained. This hack will not 
-					// work on Unix because unix's EOL char is different than Windows.
-					//
-					// When there's time, need to find an alternative to LineNumberReader.
-				}
-			}
-		}
-	}
-	
-	/**
-	 * Print a list of all message prefixes, e.g., ABCD0000E, that are used
-	 * in the .properties file.
-	 */
-	public void printAllMessagePrefixes() {
-		report("Line Number\tMessage prefix\tMessage id"); //$NON-NLS-1$
-		Collections.sort(_propertyLines, PropertyLineComparator.getMessagePrefixComparator());
-		Iterator iterator = _propertyLines.iterator();
-		while(iterator.hasNext()) {
-			PropertyLine line = (PropertyLine)iterator.next();
-			if((line.getMessagePrefix() != null) && (!line.getMessagePrefix().equals(""))) { //$NON-NLS-1$
-				StringBuffer buffer = new StringBuffer(String.valueOf(line.getLineNumber()));
-				buffer.append("\t"); //$NON-NLS-1$
-				buffer.append(line.getMessagePrefix());
-				buffer.append("\t"); //$NON-NLS-1$
-				buffer.append(line.getMessageId());
-				report(buffer.toString());
-			}
-		}
-	}
-
-	/**
-	 * Print a list of all of the message prefixes, e.g., ABCD1111E, 
-	 * that are not used in the file. A message prefix is considered
-	 * &quot;missing&quot; if a message prefix that precedes it, 
-	 * e.g. ABCD0000E, and a message prefix that follows it, 
-	 * e.g. ABCD2222E, are contained in the file, but the prefix is not.
-	 * This list is useful when adding a new message to the file;
-	 * the prefixes printed by this method are unused and one can be
-	 * selected for the new method.
-	 */
-	public void printAllMissingMessagePrefixes() {
-		int lastNumber = -1;
-		
-		Collections.sort(_propertyLines, PropertyLineComparator.getMessagePrefixComparator());
-		Iterator iterator = _propertyLines.iterator();
-		while(iterator.hasNext()) {
-			PropertyLine line = (PropertyLine)iterator.next();
-			String prefix = line.getMessagePrefix();
-			int prefixNumber = 0;
-			if(prefix == null) {
-				continue;
-			}
-			
-			if(prefix.equals("")) { //$NON-NLS-1$
-				continue;
-			}
-			
-			String prefixLetters = prefix.substring(0, 4); // "ABCD" of "ABCD0000W"
-			try {
-				// Re: magic numbers "4" and "8" below.
-				// Since the message prefix is of the form ABCD0000E,
-				// strip off the first four characters up to (and excluding) the 
-				// eighth character, "E".
-				prefixNumber = Integer.parseInt(prefix.substring(4, 8));
-			}
-			catch(NumberFormatException e) {
-				// just continue
-				continue;
-			}
-			if(lastNumber != -1) {
-				if(prefixNumber != (lastNumber + 1)) {
-					// Start at lastNumber + 1 because lastNumber exists.
-					// Exclude prefixNumber because prefixNumber exists.
-					for(int i=lastNumber+1; i<prefixNumber; i++) {
-						report(prefixLetters + i);
-					}
-				}
-			}
-			lastNumber = prefixNumber;
-		}
-	}
-
-	/**
-	 * Print all of the messages in the .properties file that use
-	 * a message prefix, e.g. ABCD0000E.
-	 */
-	public void printAllMessagesWithAMessagePrefix() {
-		report("MESSAGES WITH PREFIXES"); //$NON-NLS-1$
-		Collections.sort(_propertyLines, PropertyLineComparator.getLineNoComparator());
-		Iterator iterator = _propertyLines.iterator();
-		while(iterator.hasNext()) {
-			PropertyLine line = (PropertyLine)iterator.next();
-			if(line.hasMessagePrefix()) {
-				report(line.toString());
-			}
-		}
-	}
-
-	/**
-	 * Print all of the messages in the .properties file whose message
-	 * text does not begin with a message prefix, e.g., ABCD0000E.
-	 */
-	public void printAllMessagesWithoutAMessagePrefix() {
-		report("BLANK MESSAGE PREFIX"); //$NON-NLS-1$
-		Collections.sort(_propertyLines, PropertyLineComparator.getLineNoComparator());
-		Iterator iterator = _propertyLines.iterator();
-		while(iterator.hasNext()) {
-			PropertyLine line = (PropertyLine)iterator.next();
-			if(!line.hasMessagePrefix()) {
-				report(line.toString());
-			}
-		}
-	}
-	
-	/**
-	 * Print a list of all messages whose text is the empty string (&quot;&quot;).
-	 */
-	public void printAllMessagesWhichAreBlank() {
-		report("BLANK MESSAGES"); //$NON-NLS-1$
-		Collections.sort(_propertyLines, PropertyLineComparator.getLineNoComparator());
-		Iterator iterator = _propertyLines.iterator();
-		while(iterator.hasNext()) {
-			PropertyLine line = (PropertyLine)iterator.next();
-			if(line.getMessage().equals("")) { //$NON-NLS-1$
-				StringBuffer buffer = new StringBuffer("line number "); //$NON-NLS-1$
-				buffer.append(line.getLineNumber());
-				buffer.append(", message id "); //$NON-NLS-1$
-				buffer.append(line.getMessageId());
-				report(buffer.toString());
-			}
-		}
-	}
-	
-	/**
-	 * Print a list of the lines that have syntax errors, for example,
-	 * missing the equals sign between the message id and the message 
-	 * text.
-	 */
-	public void printSyntaxWarnings() {
-		List parseWarnings = getParseWarnings();
-		Iterator iterator = parseWarnings.iterator();
-		while (iterator.hasNext()) {
-			report((MessageMetaData)iterator.next());
-		}
-	}
-
-	/**
-	 * Print a list of all of the messages in the .properties file that
-	 * use the same message id. If more than one message uses the same
-	 * id, when the ResourceBundle is asked for that message id, it will
-	 * return the last message (i.e., the largest line number) with that
-	 * id in the file.
-	 */
-	public void printDuplicateMessageId() {
-		printDuplicateMessageId(true);
-	}
-	
-	/**
-	 * Print a list of all of the messages in the .properties file that
-	 * use the same message id. If more than one message uses the same
-	 * id, when the ResourceBundle is asked for that message id, it will
-	 * return the last message (i.e., the largest line number) with that
-	 * id in the file.
-	 * 
-	 * The boolean parameter is used to determine whether or not 
-	 * the &quot;DUPLICATE MESSAGE IDS&quot; title is emitted before 
-	 * the list of duplicates.
-	 */
-	public void printDuplicateMessageId(boolean printTitle) {
-		if(printTitle) {
-			report("DUPLICATE MESSAGE IDS"); //$NON-NLS-1$
-		}
-		Comparator c = PropertyLineComparator.getMessageIdComparator();
-		String messageId = IValidationConstants.ABCD0060;
-		Collections.sort(_propertyLines, c);
-		Iterator iterator = _propertyLines.iterator();
-		PropertyLine lastLine = null;
-		PropertyLine line = null;
-		boolean needToPrintLast = false;
-		while(iterator.hasNext()) {
-			lastLine = line;
-			line = (PropertyLine)iterator.next();
-			
-			if(c.compare(lastLine, line) == 0) {
-				needToPrintLast = true;
-				MessageMetaData mmd = new MessageMetaData(IValidationConstants.BUNDLENAME, MessageMetaData.WARNING, messageId, new String[]{lastLine.getMessageId()}, lastLine, lastLine.getLineNumber());
-				report(mmd);
-			}
-			else if(needToPrintLast) {
-				// The last duplicate line needs to be printed, because lastLine is always printed but line needs to be printed too.
-				needToPrintLast = false;
-				MessageMetaData mmd = new MessageMetaData(IValidationConstants.BUNDLENAME, MessageMetaData.WARNING, messageId, new String[]{lastLine.getMessageId()}, lastLine, lastLine.getLineNumber());
-				report(mmd);
-			}
-		}
-
-		if(needToPrintLast) {
-			// The last duplicate line needs to be printed, because lastLine is always printed but line needs to be printed too.
-			MessageMetaData mmd = new MessageMetaData(IValidationConstants.BUNDLENAME, MessageMetaData.WARNING, messageId, new String[]{line.getMessageId()}, line, line.getLineNumber());
-			report(mmd);
-		}
-	}
-	
-	/**
-	 * Print a list of all of the messages in the .properties file that
-	 * do not use a unique message prefix (e.g., ABCD0000E), with the 
-	 * exception of all messages which are intended to be duplicates.
-	 * Generally, users expect one message prefix per problem, so 
-	 * reused message prefixes can be confusing. Any message which 
-	 * deliberately reuses a message prefix must use a message id 
-	 * that starts with that prefix.
-	 */
-	public void printDuplicateMessagePrefix() {
-		printDuplicateMessagePrefix(true);
-	}
-	
-	/**
-	 * Print a list of all of the messages in the .properties file that
-	 * do not use a unique message prefix (e.g., ABCD0000E), with the 
-	 * exception of all messages which are intended to be duplicates.
-	 * Generally, users expect one message prefix per problem, so 
-	 * reused message prefixes can be confusing. Any message which 
-	 * deliberately reuses a message prefix must use a message id 
-	 * that starts with that prefix.
-	 * 
-	 * The boolean parameter is used to determine whether or not 
-	 * the &quot;DUPLICATE MESSAGE PREFIXESS&quot; title is emitted 
-	 * before the list of duplicates.
-	 */	
-	public void printDuplicateMessagePrefix(boolean printTitle) {
-		if(printTitle) {
-			report("DUPLICATE MESSAGE PREFIXES"); //$NON-NLS-1$
-		}
-		Comparator c = PropertyLineComparator.getMessagePrefixComparator();
-		Collections.sort(_propertyLines, c);
-		String messageId = IValidationConstants.ABCD0070;
-		Iterator iterator = _propertyLines.iterator();
-		PropertyLine lastLine = null;
-		PropertyLine line = null;
-		boolean needToPrintLast = false;
-		while(iterator.hasNext()) {
-			lastLine = line;
-			line = (PropertyLine)iterator.next();
-			
-			if(lastLine != null) {
-				if(!lastLine.getMessageId().startsWith(lastLine.getShortMessagePrefix())) {
-					if(c.compare(lastLine, line) == 0) {
-						needToPrintLast = true;
-						MessageMetaData mmd = new MessageMetaData(IValidationConstants.BUNDLENAME, MessageMetaData.WARNING, messageId, new String[]{lastLine.getMessagePrefix()}, lastLine, lastLine.getLineNumber());
-						report(mmd);
-					}
-					else if(needToPrintLast) {
-						// The last duplicate line needs to be printed, because lastLine is always printed but line needs to be printed too.
-						needToPrintLast = false;
-						MessageMetaData mmd = new MessageMetaData(IValidationConstants.BUNDLENAME, MessageMetaData.WARNING, messageId, new String[]{lastLine.getMessagePrefix()}, lastLine, lastLine.getLineNumber());
-						report(mmd);
-					}
-				}
-			}
-		}
-
-		if(lastLine != null) {
-			if(!lastLine.getMessageId().startsWith(lastLine.getShortMessagePrefix())) {
-				if(needToPrintLast) {
-					// The last duplicate line needs to be printed, because lastLine is always printed but line needs to be printed too.
-					MessageMetaData mmd = new MessageMetaData(IValidationConstants.BUNDLENAME, MessageMetaData.WARNING, messageId, new String[]{line.getMessagePrefix()}, line, line.getLineNumber());
-					report(mmd);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Print a list of message prefixes whose first characters match
-	 * the prefix parameter. This method is useful when you want to see
-	 * if a range of prefixes is in use or not.
-	 */
-	public void printMessagePrefixStartingWith(final String prefix) {
-		report("Find all error prefixes starting with " + prefix); //$NON-NLS-1$
-		Comparator c = PropertyLineComparator.getMessagePrefixComparator();
-		Collections.sort(_propertyLines, c);
-		Iterator iterator = _propertyLines.iterator();
-		PropertyLine line = null;
-		while(iterator.hasNext()) {
-			line = (PropertyLine)iterator.next();
-			if (line.getMessagePrefix().startsWith(prefix)) {
-				StringBuffer buffer = new StringBuffer(String.valueOf(line.getLineNumber()));
-				buffer.append("\t"); //$NON-NLS-1$
-				buffer.append(line.getMessagePrefix());
-				buffer.append("\t"); //$NON-NLS-1$
-				buffer.append(line.getMessageId());
-				report(buffer.toString());
-			}
-		}
-	}
-	
-	/**
-	 * Print the last prefix (i.e., the one with the largest number, 
-	 * e.g. ABCD2222 is larger than ABCD1111 or ABCD0000) in the file 
-	 * whose first characters match the prefix parameter. 
-	 */
-	public void printLastMessagePrefixStartingWith(final String prefix) {
-		report("Find last error prefix starting with " + prefix); //$NON-NLS-1$
-		Comparator c = PropertyLineComparator.getMessagePrefixComparator();
-		Collections.sort(_propertyLines, c);
-		PropertyLine[] lines = new PropertyLine[_propertyLines.size()];
-		_propertyLines.toArray(lines);
-		boolean found = false;
-		for(int i=lines.length; i>-1; i--) {
-			PropertyLine line = lines[i];
-			if (line.getMessagePrefix().startsWith(prefix)) {
-				report(line.toString());
-				found = true;
-				break;
-			}
-		}
-		if(!found) {
-			report("No error ids were found that started with " + prefix); //$NON-NLS-1$
-		}
-	}
-
-	/**
-	 * Given an estimate of the number of characters in a substitution parameter,
-	 * print a list of the number of characters in a given message, if each 
-	 * parameter is replaced with &quot;length&quot; characters.
-	 */
-	public void printExpectedStringLength(final int length) {
-		report("EXPECTED LENGTH OF MESSAGE WITH PARAMETERS " + length + " LONG"); //$NON-NLS-1$ //$NON-NLS-2$
-		Comparator c = PropertyLineComparator.getStringLengthComparator(length);
-		Collections.sort(_propertyLines, c);
-		Iterator iterator = _propertyLines.iterator();
-		while(iterator.hasNext()) {
-			PropertyLine line = (PropertyLine)iterator.next();
-
-			StringBuffer buffer = new StringBuffer("Length: "); //$NON-NLS-1$
-			buffer.append(line.getExpectedLength(length));
-			buffer.append("\t"); //$NON-NLS-1$
-			buffer.append(line.toStringWithExpectedLength(length));
-			report(buffer.toString());
-		}
-	}
-
-	/**
-	 * Print the number of characters in each message.
-	 */
-	public void printStringLength() {
-		// "0" means no substitution
-		printExpectedStringLength(0);
-	}
-
-	/**
-	 * Print the contents of the .properties file, sorted by message id.
-	 */
-	public void printContents() {
-		report("CONTENTS OF .properties FILE, SORTED BY MESSAGE ID"); //$NON-NLS-1$
-		Comparator c = PropertyLineComparator.getMessageIdComparator();
-		Collections.sort(_propertyLines, c);
-		Iterator iterator = _propertyLines.iterator();
-		while(iterator.hasNext()) {
-			PropertyLine line = (PropertyLine)iterator.next();
-			report(line.toString());
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/CompareProperties.java b/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/CompareProperties.java
deleted file mode 100644
index 1e51869..0000000
--- a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/CompareProperties.java
+++ /dev/null
@@ -1,369 +0,0 @@
-package org.eclipse.jst.validation.sample.parser;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-import java.util.*;
-
-/**
- * This class compares two .properties file and outputs a list
- * of the differences. This class is used to count the number
- * of words that have changed.
- */
-public class CompareProperties {
-	public static final String lineSeparator = java.lang.System.getProperty("line.separator"); //$NON-NLS-1$
-	private TreeSet _deleted = null;
-	private TreeMap _changed = null;
-	private TreeSet _added = null;
-	private PropertyFile _oldFile = null;
-	private PropertyFile _newFile = null;
-
-	/**
-	 * This class is used to store PropertyLine instances which have the same
-	 * message id, but different values. When the list of differences is output,
-	 * all values are output so that the user can compare the lines manually, to
-	 * see what's different.
-	 */
-	class CompareLine implements Comparable {
-		private ArrayList _lines;
-		private final String _messageId;
-
-		public CompareLine(String messageId) {
-			_messageId = messageId;
-			_lines = new ArrayList();
-		}
-
-		public void add(PropertyLine oldLine, PropertyLine newLine) {
-			_lines.add(new PropertyLine[]{oldLine, newLine});
-		}
-
-		public String toString() {
-			StringBuffer buffer = new StringBuffer();
-			Iterator iterator = _lines.iterator();
-			while (iterator.hasNext()) {
-				buffer.append(lineSeparator);
-				buffer.append("\t"); //$NON-NLS-1$
-				PropertyLine[] lines = (PropertyLine[])iterator.next();
-				
-				buffer.append(lines[0]);
-				buffer.append("\n"); //$NON-NLS-1$
-				buffer.append(lines[1]);
-			}
-			return buffer.toString();
-		}
-
-		/**
-		 * Since this is a changed string, return the absolute difference of words between the strings.
-		 */		
-		public int getNumWords() {
-			int numWords = 0;
-			Iterator iterator = _lines.iterator();
-			while (iterator.hasNext()) {
-				PropertyLine[] lines = (PropertyLine[])iterator.next();
-				numWords = numWords + compare(lines[0], lines[1]);
-			}
-			return numWords;
-		}
-		
-		private int compare(PropertyLine oldLine, PropertyLine newLine) {
-			// For every word in the old string, see if it exists in the new
-			// string. The position of the word doesn't matter - if the word
-			// exists in the new, then the word is not counted as a "changed"
-			// word. 
-			//    1. If the word exists, remove the word from the newLine and
-			//       advance to the next old token. (Remove word from newLine
-			//       in case the word existed twice in the old string but only
-			//       once in the new. The second oldWord should be counted as
-			//       a changed word.)
-			//    2. If the word doesn't exist, numChanged++ and advance to the
-			//       next old token.
-			//    3. Once all of the oldWords have been checked, tokenize the
-			//       remaining newWord and count the number of words in the string.
-			//       These words have been added and each one counts as a 
-			//       changed word.
-			int numChangedWords = 0;
-			StringTokenizer oldTokenizer = new StringTokenizer(oldLine.getMessage());
-
-			// Need to be careful...want the entire word, not oldWord="on" mistaken for newWord="one" or newWord="bond"
-			// Easier to create a list of new words to compare against.
-			StringTokenizer newTokenizer = new StringTokenizer(newLine.getMessage());
-			List newWords = new ArrayList(); // Can't use a set in case the newLine uses a word, e.g. "the", more than once.
-			while(newTokenizer.hasMoreTokens()) {
-				newWords.add(newTokenizer.nextToken());
-			}
-			
-			while(oldTokenizer.hasMoreTokens()) {
-				String oldWord = oldTokenizer.nextToken();
-				if(newWords.contains(oldWord)) {
-					newWords.remove(oldWord);
-				}
-				else {
-					numChangedWords++;
-				}
-			}
-
-			// Can count the tokens but not the elments.
-			numChangedWords += newWords.size();
-			return numChangedWords;
-		}
-
-		public String getMessageId() {
-			return _messageId;
-		}
-
-		public int compareTo(Object o) {
-			// by default, sort by message id
-			if (!(o instanceof CompareLine)) {
-				// then how on earth did this method get called??
-				// put it at the end of the list
-				return 1;
-			}
-
-			return getMessageId().compareTo(((CompareLine) o).getMessageId());
-		}
-	}
-
-	/**
-	 * Compare the two PropertyFile and print out a list of the differences; 
-	 * the first parameter is the older .properties file, and the second 
-	 * parameter is the newer .properties file.
-	 */
-	public CompareProperties(PropertyFile oldFile, PropertyFile newFile) {
-		_deleted = new TreeSet();
-		_changed = new TreeMap();
-		_added = new TreeSet();
-		
-		_oldFile = oldFile;
-		_newFile = newFile;
-
-		compare(oldFile, newFile);
-	}
-	
-	/**
-	 * In the older PropertyFile, the message text was different; cache the
-	 * older version of the PropertyLine and the newer version of the PropertyLine.
-	 */
-	private void addChanged(PropertyLine oldLine, PropertyLine newLine) {
-		CompareLine cl = (CompareLine) _changed.get(oldLine.getMessageId());
-		if (cl == null) {
-			cl = new CompareLine(oldLine.getMessageId());
-		}
-		cl.add(oldLine, newLine);
-		_changed.put(oldLine.getMessageId(), cl);
-	}
-	
-	/**
-	 * Compare the two property files and build the collections of variable names with
-	 * their associated values.
-	 */
-	public void compare(PropertyFile oldFile, PropertyFile newFile) {
-		_added.clear();
-		_deleted.clear();
-		_changed.clear();
-
-		// For each element in file 1, see if it exists in file 2
-		//   a) if it doesn't exist, add it to the list of "deleted" strings
-		//   b) if it exists, and if the value is different, add it to the list of "changed" strings
-		//   c) if it exists, and if the value is the same, add it to the list of "not changed" strings
-		//   d) delete the entry, if it exists, from file 2's hashtable so we don't check it twice.
-		// For each element in file 2 not checked already, it cannot exist in file 1, so add it to the list of "new" strings
-		//
-		// Need some way to abort comparison if either of the files contains duplicate
-		// message ids.
-		//
-		List oldKeys = new ArrayList(oldFile.getPropertyLines());
-		List newKeys = new ArrayList(newFile.getPropertyLines());
-		Collections.sort(oldKeys, PropertyLineComparator.getMessageIdComparator());
-		Collections.sort(newKeys, PropertyLineComparator.getMessageIdComparator());
-		Iterator oldIterator = oldKeys.iterator();
-		Iterator newIterator = newKeys.iterator();
-		PropertyLine oldLine = (oldIterator.hasNext()) ? (PropertyLine) oldIterator.next() : null;
-		PropertyLine newLine = (newIterator.hasNext()) ? (PropertyLine) newIterator.next() : null;
-		while ((oldLine != null) && (newLine != null)) {
-			// oldLine message id is either <, =, or > newLine message id.
-			// if <, message id has been deleted.
-			// if =, see if changed (or just compare message ids.)
-			// if >, new line is a new message id.
-			// to increment, increment only the < (whether it's oldLine or newLine).
-			int compare = oldLine.getMessageId().compareTo(newLine.getMessageId());
-			if (compare < 0) {
-				// deleted
-				_deleted.add(oldLine);
-				if (oldIterator.hasNext()) {
-					oldLine = (PropertyLine) oldIterator.next();
-				}
-				else {
-					oldLine = null;
-				}
-			}
-			else if (compare == 0) {
-				// existed before. Check if changed.
-				if (!oldLine.getMessage().equals(newLine.getMessage())) {
-					// changed
-					addChanged(oldLine, newLine);
-				}
-				if (oldIterator.hasNext() && newIterator.hasNext()) {
-					oldLine = (PropertyLine) oldIterator.next();
-					newLine = (PropertyLine) newIterator.next();
-				}
-				else {
-					oldLine = null;
-					newLine = null;
-				}
-
-			}
-			else {
-				// added
-				_added.add(newLine);
-				if (newIterator.hasNext()) {
-					newLine = (PropertyLine) newIterator.next();
-				}
-				else {
-					newLine = null;
-				}
-			}
-		}
-
-		if (oldLine != null) {
-			_deleted.add(oldLine);
-		}
-
-		if (newLine != null) {
-			_added.add(newLine);
-		}
-
-		while (oldIterator.hasNext()) {
-			// all of the rest have been deleted
-			_deleted.add(oldIterator.next());
-		}
-
-		while (newIterator.hasNext()) {
-			// all of the rest have been added
-			_added.add(newIterator.next());
-		}
-	}
-	
-	/**
-	 * Return a Collction of PropertyLine instances that exist in
-	 * the newer PropertyFile that aren't in the older PropertyFile.
-	 */
-	public Set getAdded() {
-		return _added;
-	}
-	
-	/**
-	 * Return a Collection of CompareLine instances that represent
-	 * the two PropertyLine instances; one from the older PropertyFile,
-	 * and one from the newer PropertyFile.
-	 */
-	public Collection getChanged() {
-		return _changed.values();
-	}
-	
-	/**
-	 * Return a Collection of PropertyLine instances that do not
-	 * exist in the newer PropertyFile yet that exist in the older
-	 * PropertyFile.
-	 */
-	public Set getDeleted() {
-		return _deleted;
-	}
-	
-	/**
-	 * Print out all of the collections of variable strings.
-	 */
-	public void printResults() {
-		// create an output log in the current directory, and in it list the strings in a section each.
-		int numNew = printStrings("NEW PROPERTIES", _added); //$NON-NLS-1$
-		
-		int numWordsDeleted = printStrings("DELETED PROPERTIES", _deleted); //$NON-NLS-1$
-		int numWordsChanged =  printStrings("CHANGED PROPERTIES", _changed.values()); //$NON-NLS-1$
-		float totalChange = numNew + numWordsDeleted + numWordsChanged;
-		float numWords = _newFile.getNumWords();
-		float percent = totalChange / numWords * 100;
-		
-		System.out.println();
-		System.out.println("Number of new words: " + numNew); //$NON-NLS-1$
-		System.out.println("Number of words in deleted messages: " + numWordsDeleted); //$NON-NLS-1$
-		System.out.println("Number of changed words in modified messages: " + numWordsChanged); //$NON-NLS-1$
-		System.out.println("Number of words in file " + _newFile.getQualifiedFileName() + ": " + numWords); //$NON-NLS-1$ //$NON-NLS-2$
-		System.out.println("Total change of words: " + totalChange + ", which is a " + percent + "% change."); //$NON-NLS-1$  //$NON-NLS-2$ //$NON-NLS-3$
-	}
-	
-	public void printResultsForTranslation() {
-		// create an output log in the current directory, and in it list the strings in a section each.
-		printStringsForTranslation("DELETED PROPERTIES", _deleted); //$NON-NLS-1$
-		printStringsForTranslation("NEW PROPERTIES", _added); //$NON-NLS-1$
-		printStringsForTranslation("CHANGED PROPERTIES", _changed.values()); //$NON-NLS-1$
-	}
-	
-	/**
-	 * Print the number of lines in the .properties file.
-	 */
-	private int printStrings(String header, Collection lines) {
-		System.out.println();
-		System.out.println(header);
-		int count = 0;
-		int numWords = 0;
-		Iterator iterator = lines.iterator();
-		while (iterator.hasNext()) {
-			Object line = iterator.next();
-			if(line instanceof PropertyLine) {
-				numWords += ((PropertyLine)line).getNumWords();
-			}
-			else {
-				// must be a compare line
-				numWords += ((CompareLine)line).getNumWords();
-			}
-			
-			count++;
-			System.out.println(line);
-		}
-		System.out.println("Number of properties: " + count); //$NON-NLS-1$
-		System.out.println();
-		return numWords;
-	}
-	
-	/**
-	 * Print the contents of the sorted collection of lines from the .properties file.
-	 */
-	private void printStringsForTranslation(String header, Collection lines) {
-		System.out.println();
-		System.out.println(header);
-		int count = 0;
-		Iterator iterator = lines.iterator();
-		while (iterator.hasNext()) {
-			count++;
-			Object line = iterator.next();
-			if (line instanceof PropertyLine) {
-				PropertyLine propline = (PropertyLine) line;
-				System.out.println(propline.getMessageId());
-			}
-			else if (line instanceof CompareLine) {
-				CompareLine propline = (CompareLine) line;
-				System.out.println(propline.getMessageId());
-			}
-			else {
-				System.out.println("instance of " + line.getClass().getName()); //$NON-NLS-1$
-			}
-		}
-		System.out.println("Total: " + count); //$NON-NLS-1$
-		System.out.println();
-	}
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/IValidationConstants.java b/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/IValidationConstants.java
deleted file mode 100644
index c8ae9e4..0000000
--- a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/IValidationConstants.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.eclipse.jst.validation.sample.parser;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-/**
- * This interface contains the message ids of all of the Properties
- * Validator's messages, and the name of the resource bundle that 
- * contains those messages. 
- */
-public interface IValidationConstants {
-	/*package*/ static final String BUNDLENAME = "propertiesValidator"; //$NON-NLS-1$
-	
-	/*package*/ static final String ABCD0000 = "ABCD0000"; //$NON-NLS-1$
-	/*package*/ static final String ABCD0010E = "ABCD0010E"; //$NON-NLS-1$
-	/*package*/ static final String ABCD0010W = "ABCD0010W"; //$NON-NLS-1$
-	/*package*/ static final String ABCD0020 = "ABCD0020"; //$NON-NLS-1$
-	/*package*/ static final String ABCD0030 = "ABCD0030"; //$NON-NLS-1$
-	/*package*/ static final String ABCD0040 = "ABCD0040"; //$NON-NLS-1$
-	/*package*/ static final String ABCD0050 = "ABCD0050"; //$NON-NLS-1$
-	/*package*/ static final String ABCD0060 = "ABCD0060"; //$NON-NLS-1$
-	/*package*/ static final String ABCD0070 = "ABCD0070"; //$NON-NLS-1$
-	/*package*/ static final String ABCD0080 = "ABCD0080"; //$NON-NLS-1$
-	/*package*/ static final String ABCD0090 = "ABCD0090"; //$NON-NLS-1$
-	/*package*/ static final String ABCD0110 = "ABCD0110"; //$NON-NLS-1$
-	/*package*/ static final String ABCD0120 = "ABCD0120"; //$NON-NLS-1$
-	/*package*/ static final String ABCD0130 = "ABCD0130"; //$NON-NLS-1$
-
-	/*package*/ static final String LINE_LOC = "LINE_LOC"; //$NON-NLS-1$
-}
diff --git a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/Main.java b/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/Main.java
deleted file mode 100644
index a4d6ee1..0000000
--- a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/Main.java
+++ /dev/null
@@ -1,451 +0,0 @@
-package org.eclipse.jst.validation.sample.parser;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-import java.io.File;
-
-/**
- * This class is used to perform validation or .properties file queries
- * without using an IValidator. 
- */
-public class Main {
-	public static void main(String[] argv) {
-		if(argv.length < 1) {
-			System.out.println("prop -tr [-a | -ac | -am | -an | -al PREFIX | -ap PREFIX | -au | -b | -di | -dp | -l | -le <positive integer> | -p ] f:\\dir1\\dir2\\myPropertiesFile.properties"); //$NON-NLS-1$
-			System.out.println("or "); //$NON-NLS-1$
-			System.out.println("prop [-c|-ct] f:\\dir1\\dir2\\myPropertiesFile.properties f:\\dir1\\dir2\\myNewPropertiesFile.properties"); //$NON-NLS-1$
-			System.out.println("   -a: print all error/warning/info prefixes in the file"); //$NON-NLS-1$
-			System.out.println("  -ac: print a count of messages with and without prefixes in the file"); //$NON-NLS-1$
-			System.out.println("  -am: print all messages with a prefix"); //$NON-NLS-1$
-			System.out.println("  -an: print all messages without an error prefix"); //$NON-NLS-1$
-			System.out.println("  -al: print the last error/warning/info prefix, starting with PREFIX, in the file"); //$NON-NLS-1$
-			System.out.println("  -ap: print any error/warning/info prefixes, starting with PREFIX, in the file"); //$NON-NLS-1$
-			System.out.println("  -au: print all error/warning/info prefixes that are not used in the file"); //$NON-NLS-1$
-			System.out.println("   -b: print any blank messages in the properties file"); //$NON-NLS-1$
-			System.out.println("   -c: compare the two property files listed. The first is the older, and the second is the newer."); //$NON-NLS-1$
-			System.out.println("  -ct: compare the two property files listed. The first is the older, and the second is the newer. Output a list of the added, deleted, and changed strings, but print only the message id."); //$NON-NLS-1$
-			System.out.println("  -di: print any duplicate message ids and syntax errors in the properties file"); //$NON-NLS-1$
-			System.out.println("  -dp: print any duplicate error/warning/info prefixes in the file"); //$NON-NLS-1$
-			System.out.println("   -l: print the length of each message in the file"); //$NON-NLS-1$
-			System.out.println("  -le: print the length of each message in the file if each parameter is <positive integer> characters long."); //$NON-NLS-1$
-			System.out.println("   -n: print the number of words in the file, including message prefixes and parameters"); //$NON-NLS-1$
-			System.out.println("   -p: print the contents of the property file, sorted by message id"); //$NON-NLS-1$
-			System.out.println("  -tr: print trace information while parsing the .properties file"); //$NON-NLS-1$
-			System.out.println();
-			System.out.println("The default action is to print the syntax errors, duplicates, and other types of errors in the given .properties file."); //$NON-NLS-1$
-			System.exit(-1);
-		}
-
-		// This is not robust error-checking by any stretch of the imagination!
-		int index = 0;
-		String option = argv[index++].toLowerCase();
-		boolean trace = false;
-		if(option.equals("-tr")) { //$NON-NLS-1$
-			trace = true;
-			option = argv[index++].toLowerCase();
-		}
-		
-		if (option.equals("-a") && (argv.length >= 2)) { //$NON-NLS-1$
-			String[] files = new String[argv.length-1];
-			System.arraycopy(argv, 1, files, 0, files.length);
-			printAllErrorPrefix(trace, files);
-		}
-		else if (option.equals("-ac") && (argv.length >= 2)) { //$NON-NLS-1$
-			String[] files = new String[argv.length-1];
-			System.arraycopy(argv, 1, files, 0, files.length);
-			printPrefixCount(trace, files);
-		}
-		else if (option.equals("-al") && (argv.length >= 3)) { //$NON-NLS-1$
-			String[] files = new String[argv.length-2];
-			System.arraycopy(argv, 2, files, 0, files.length);
-			printErrorPrefix(trace, argv[index], files);
-		}
-		else if (option.equals("-am") && (argv.length >= 2)) { //$NON-NLS-1$
-			String[] files = new String[argv.length-1];
-			System.arraycopy(argv, 1, files, 0, files.length);
-			printErrorMessages(trace, files);
-		}
-		else if (option.equals("-an") && (argv.length >= 2)) { //$NON-NLS-1$
-			String[] files = new String[argv.length-1];
-			System.arraycopy(argv, 1, files, 0, files.length);
-			printMessagesWithoutPrefixes(trace, files);
-		}
-		else if (option.equals("-ap") && (argv.length >= 3)) { //$NON-NLS-1$
-			String[] files = new String[argv.length-2];
-			System.arraycopy(argv, 2, files, 0, files.length);
-			printErrorPrefixRange(trace, argv[index], files);
-		}
-		else if (option.equals("-au") && (argv.length >= 2)) { //$NON-NLS-1$
-			String[] files = new String[argv.length-1];
-			System.arraycopy(argv, 1, files, 0, files.length);
-			printAllMissingErrorPrefix(trace, files);
-		}
-		else if (option.equals("-b") && (argv.length >= 2)) { //$NON-NLS-1$
-			String[] files = new String[argv.length-1];
-			System.arraycopy(argv, 1, files, 0, files.length);
-			printBlanks(trace, files);
-		}
-		else if (option.equals("-c") && (argv.length == 3)) { //$NON-NLS-1$
-			File oldFile = new File(argv[index++]);
-			File newFile = new File(argv[index]);
-			compareFiles(trace, oldFile, newFile);
-		}
-		else if (option.equals("-ct") && (argv.length == 3)) { //$NON-NLS-1$
-			File oldFile = new File(argv[index++]);
-			File newFile = new File(argv[index]);
-			compareFilesForTranslation(trace, oldFile, newFile);
-		}
-		else if (option.equals("-di") && (argv.length >= 2)) { //$NON-NLS-1$
-			String[] files = new String[argv.length-1];
-			System.arraycopy(argv, 1, files, 0, files.length);
-			printDuplicateIds(trace, files);
-		}
-		else if (option.equals("-dp") && (argv.length >= 2)) { //$NON-NLS-1$
-			String[] files = new String[argv.length-1];
-			System.arraycopy(argv, 1, files, 0, files.length);
-			printDuplicatePrefixes(trace, files);
-		}
-		else if (option.equals("-l") && (argv.length >= 2)) { //$NON-NLS-1$
-			String[] files = new String[argv.length-1];
-			System.arraycopy(argv, 1, files, 0, files.length);
-			printStringLength(trace, files);
-		}
-		else if (option.equals("-le") && (argv.length >= 3)) { //$NON-NLS-1$
-			String[] files = new String[argv.length-2];
-			System.arraycopy(argv, 2, files, 0, files.length);
-			printExpectedStringLength(trace, argv[index], files);
-		}
-		else if (option.equals("-n") && (argv.length >= 2)) { //$NON-NLS-1$
-			String[] files = new String[argv.length-1];
-			System.arraycopy(argv, 1, files, 0, files.length);
-			printWordCount(trace, files);
-		}
-		else if (option.equals("-p") && (argv.length >= 2)) { //$NON-NLS-1$
-			String[] files = new String[argv.length-1];
-			System.arraycopy(argv, 1, files, 0, files.length);
-			printFileContents(trace, files);
-		}
-		else {
-			printDefault(trace, argv);
-		}
-	}
-
-	public static void printAllErrorPrefix(boolean trace, String[] files) {
-		for (int i = 0; i < files.length; i++) {
-			try {
-				System.out.println("******************************************"); //$NON-NLS-1$
-				PropertyFile propFile = new PropertyFile(files[i], trace);
-				propFile.printAllMessagePrefixes();
-				System.out.println("******************************************"); //$NON-NLS-1$
-				System.out.println();
-			}
-			catch (java.io.IOException e) {
-				System.out.println(e.getMessage());
-			}
-		}
-	}
-
-	public static void printAllMissingErrorPrefix(boolean trace, String[] files) {
-		for (int i = 0; i < files.length; i++) {
-			try {
-				System.out.println("******************************************"); //$NON-NLS-1$
-				PropertyFile propFile = new PropertyFile(files[i], trace);
-				propFile.printAllMissingMessagePrefixes();
-				System.out.println("******************************************"); //$NON-NLS-1$
-				System.out.println();
-			}
-			catch (java.io.IOException e) {
-				System.out.println(e.getMessage());
-			}
-		}
-	}
-
-	public static void printBlanks(boolean trace, String[] files) {
-		for (int i = 0; i < files.length; i++) {
-			try {
-				System.out.println("******************************************"); //$NON-NLS-1$
-				PropertyFile propFile = new PropertyFile(files[i], trace);
-				propFile.printAllMessagesWhichAreBlank();
-				System.out.println("******************************************"); //$NON-NLS-1$
-				System.out.println();
-			}
-			catch (java.io.IOException e) {
-				System.out.println(e.getMessage());
-			}
-		}
-	}
-
-	public static void printMessagesWithoutPrefixes(boolean trace, String[] files) {
-		for (int i = 0; i < files.length; i++) {
-			try {
-				System.out.println("******************************************"); //$NON-NLS-1$
-				PropertyFile propFile = new PropertyFile(files[i], trace);
-				propFile.printAllMessagesWithoutAMessagePrefix();
-				System.out.println("******************************************"); //$NON-NLS-1$
-				System.out.println();
-			}
-			catch (java.io.IOException e) {
-				System.out.println(e.getMessage());
-			}
-		}
-	}
-
-	public static void compareFiles(boolean trace, File oldFile, File newFile) {
-		if(oldFile.isFile() && newFile.isFile()) {
-			try {
-				PropertyFile oldPropFile = new PropertyFile(oldFile.getAbsolutePath(), trace);
-				PropertyFile newPropFile = new PropertyFile(newFile.getAbsolutePath(), trace);
-				CompareProperties cp = new CompareProperties(oldPropFile, newPropFile);
-				cp.printResults();
-			}
-			catch (java.io.IOException e) {
-				System.out.println(e.getMessage());
-			}
-		}
-		else if(oldFile.isDirectory() && newFile.isDirectory()) {
-			String[] oldChildren = oldFile.list();
-			for(int i=0; i<oldChildren.length; i++) {
-				File newChild = new File(newFile, oldChildren[i]);
-				if(newChild.exists()) {
-					// Found a file or directory that is named the same in the old & new. Compare.
-					compareFiles(trace, new File(oldFile, oldChildren[i]), newChild);
-				}
-			}
-		}
-		else {
-			System.out.println("Compare two files or two directories. Do not compare a file to a directory (" + oldFile.getName() + ", " + newFile.getName() + ")."); //$NON-NLS-1$  //$NON-NLS-2$ //$NON-NLS-3$
-		}
-	}
-
-	public static void compareFilesForTranslation(boolean trace, File oldFile, File newFile) {
-		if(oldFile.isFile() && newFile.isFile()) {
-			try {
-				PropertyFile oldPropFile = new PropertyFile(oldFile.getAbsolutePath(), trace);
-				PropertyFile newPropFile = new PropertyFile(newFile.getAbsolutePath(), trace);
-				CompareProperties cp = new CompareProperties(oldPropFile, newPropFile);
-				cp.printResultsForTranslation();
-			}
-			catch (java.io.IOException e) {
-				System.out.println(e.getMessage());
-			}
-		}
-		else if(oldFile.isDirectory() && newFile.isDirectory()) {
-			String[] oldChildren = oldFile.list();
-			for(int i=0; i<oldChildren.length; i++) {
-				File newChild = new File(newFile, oldChildren[i]);
-				if(newChild.exists()) {
-					// Found a file or directory that is named the same in the old & new. Compare.
-					compareFilesForTranslation(trace, new File(oldFile, oldChildren[i]), newChild);
-				}
-			}
-		}
-		else {
-			System.out.println("Compare two files or two directories. Do not compare a file to a directory (" + oldFile.getName() + ", " + newFile.getName() + ")."); //$NON-NLS-1$  //$NON-NLS-2$ //$NON-NLS-3$
-		}
-	}
-
-	public static void printDuplicateIds(boolean trace, String[] files) {
-		for (int i = 0; i < files.length; i++) {
-			try {
-				System.out.println("******************************************"); //$NON-NLS-1$
-				PropertyFile propFile = new PropertyFile(files[i], trace);
-				propFile.printDuplicateMessageId();
-				System.out.println("******************************************"); //$NON-NLS-1$
-				System.out.println();
-			}
-			catch (java.io.IOException e) {
-				System.out.println(e.getMessage());
-			}
-		}
-	}
-
-	public static void printErrorPrefix(boolean trace, String prefix, String[] files) {
-		for (int i = 0; i < files.length; i++) {
-			try {
-				System.out.println("******************************************"); //$NON-NLS-1$
-				PropertyFile propFile = new PropertyFile(files[i], trace);
-				propFile.printLastMessagePrefixStartingWith(prefix);
-				System.out.println("******************************************"); //$NON-NLS-1$
-				System.out.println();
-			}
-			catch (java.io.IOException e) {
-				System.out.println(e.getMessage());
-			}
-		}
-	}
-
-	public static void printErrorPrefixRange(boolean trace, String prefix, String[] files) {
-		for (int i = 0; i < files.length; i++) {
-			try {
-				System.out.println("******************************************"); //$NON-NLS-1$
-				PropertyFile propFile = new PropertyFile(files[i], trace);
-				propFile.printMessagePrefixStartingWith(prefix);
-				System.out.println("******************************************"); //$NON-NLS-1$
-				System.out.println();
-			}
-			catch (java.io.IOException e) {
-				System.out.println(e.getMessage());
-			}
-		}
-	}
-
-	public static void printDuplicatePrefixes(boolean trace, String[] files) {
-		for (int i = 0; i < files.length; i++) {
-			try {
-				System.out.println("******************************************"); //$NON-NLS-1$
-				PropertyFile propFile = new PropertyFile(files[i], trace);
-				propFile.printDuplicateMessagePrefix();
-				System.out.println("******************************************"); //$NON-NLS-1$
-				System.out.println();
-			}
-			catch (java.io.IOException e) {
-				System.out.println(e.getMessage());
-			}
-		}
-	}
-
-	public static void printStringLength(boolean trace, String[] files) {
-		for (int i = 0; i < files.length; i++) {
-			try {
-				System.out.println("******************************************"); //$NON-NLS-1$
-				PropertyFile propFile = new PropertyFile(files[i], trace);
-				propFile.printStringLength();
-				System.out.println("******************************************"); //$NON-NLS-1$
-				System.out.println();
-			}
-			catch (java.io.IOException e) {
-				System.out.println(e.getMessage());
-			}
-		}
-	}
-
-	public static void printExpectedStringLength(boolean trace, String slength, String[] files) {
-		int length = 0;
-		
-		try {
-			length = new Integer(slength).intValue();
-		}
-		catch(NumberFormatException exc) {
-			System.out.println();
-			System.out.println("Parameter must be an integer."); //$NON-NLS-1$
-			System.out.println();
-			return;
-		}
-		
-		for (int i = 0; i < files.length; i++) {
-			try {
-				System.out.println("******************************************"); //$NON-NLS-1$
-				PropertyFile propFile = new PropertyFile(files[i], trace);
-				propFile.printExpectedStringLength(length);
-				System.out.println("******************************************"); //$NON-NLS-1$
-				System.out.println();
-			}
-			catch (java.io.IOException e) {
-				System.out.println(e.getMessage());
-			}
-		}
-	}
-
-	public static void printErrorMessages(boolean trace, String[] files) {
-		for (int i = 0; i < files.length; i++) {
-			try {
-				System.out.println("******************************************"); //$NON-NLS-1$
-				PropertyFile propFile = new PropertyFile(files[i], trace);
-				propFile.printAllMessagesWithAMessagePrefix();
-				System.out.println("******************************************"); //$NON-NLS-1$
-				System.out.println();
-			}
-			catch (java.io.IOException e) {
-				System.out.println(e.getMessage());
-			}
-		}
-	}
-
-	public static void printWordCount(boolean trace, String[] files) {
-		for (int i = 0; i < files.length; i++) {
-			try {
-				System.out.println("******************************************"); //$NON-NLS-1$
-				PropertyFile propFile = new PropertyFile(files[i], trace);
-				System.out.println(propFile.getQualifiedFileName() + ":: Number of words :: " + propFile.getNumWords()); //$NON-NLS-1$
-				System.out.println("******************************************"); //$NON-NLS-1$
-				System.out.println();
-			}
-			catch (java.io.IOException e) {
-				System.out.println(e.getMessage());
-			}
-		}
-	}
-
-	public static void printPrefixCount(boolean trace, String[] files) {
-		for (int i = 0; i < files.length; i++) {
-			try {
-				System.out.println("******************************************"); //$NON-NLS-1$
-				PropertyFile propFile = new PropertyFile(files[i], trace);
-				System.out.println("Usually the number of unique prefixes and the number of prefixes is the same, but if a .properties file has variations of a message (slightly different wording for a different context), then the number of prefix messages will be larger than the number of unique prefixes."); //$NON-NLS-1$
-				System.out.println(propFile.getQualifiedFileName() + ":: Number of unique prefixes :: " + propFile.getNumUniquePrefixes()); //$NON-NLS-1$
-				System.out.println(propFile.getQualifiedFileName() + ":: Number of messages with prefixes :: " + propFile.getNumPrefixes()); //$NON-NLS-1$
-				System.out.println(propFile.getQualifiedFileName() + ":: Number of messages without prefixes :: " + propFile.getNumWithoutPrefixes()); //$NON-NLS-1$
-				System.out.println("******************************************"); //$NON-NLS-1$
-				System.out.println();
-			}
-			catch (java.io.IOException e) {
-				System.out.println(e.getMessage());
-			}
-		}
-	}
-	public static void printFileContents(boolean trace, String[] files) {
-		for (int i = 0; i < files.length; i++) {
-			try {
-				System.out.println("******************************************"); //$NON-NLS-1$
-				PropertyFile propFile = new PropertyFile(files[i], trace);
-				propFile.printContents();
-				System.out.println("******************************************"); //$NON-NLS-1$
-				System.out.println();
-			}
-			catch (java.io.IOException e) {
-				System.out.println(e.getMessage());
-			}
-		}
-	}
-
-	public static void printDefault(boolean trace, String[] files) {
-		for (int i = 0; i < files.length; i++) {
-			try {
-				// print all errors, warnings, etc.
-				System.out.println("******************************************"); //$NON-NLS-1$
-				PropertyFile propFile = new PropertyFile(files[i], trace);
-				propFile.printSyntaxWarnings();
-				propFile.printDuplicateMessageId();
-				propFile.printDuplicateMessagePrefix();
-				System.out.println("******************************************"); //$NON-NLS-1$
-				System.out.println();
-			}
-			catch (java.io.IOException e) {
-				System.out.println(e.getMessage());
-			}
-		}
-	}
-
-	public static void print(String[] argv) {
-		for(int i =0;i<argv.length; i++) {
-			System.out.println(i + ". " + argv[i]); //$NON-NLS-1$
-		}
-	}
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/MessageMetaData.java b/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/MessageMetaData.java
deleted file mode 100644
index 343123c..0000000
--- a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/MessageMetaData.java
+++ /dev/null
@@ -1,209 +0,0 @@
-package org.eclipse.jst.validation.sample.parser;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-import java.util.*;
-
-
-/**
- * This class holds the metadata for an IMessage that must be 
- * reported to the user (i.e., a validation error, warning,
- * or information message). 
- */
-public class MessageMetaData {
-	public static final int INT_UNSET = -1;
-	public static final int ERROR = 1;
-	public static final int WARNING = 2;
-	public static final int INFO = 3;
-	
-	private String _bundleName = null;
-	private int _severity = INT_UNSET;
-	private String _messageId = null;
-	private String[] _parms = null;
-	private Object _targetObject = null;
-	private int _lineNumber = INT_UNSET;
-	private int _offset = INT_UNSET;
-	private int _length = INT_UNSET;
-	private String _text = null;
-	
-	/**
-	 * This constructor should be used if the message text has already
-	 * been translated.
-	 */
-	public MessageMetaData(String messageText) {
-		_text = messageText;
-	}
-	
-	/**
-	 * This constructor should be used if the message text is not translated
-	 * until just before the text should be shown to the user.
-	 * 
-	 * @param bundleName - The name of the resource bundle in which the message is contained
-	 * @param severity - One of the com.ibm.etools.validation.core.SeverityEnum constants; this parameter represents the severity of the IMessage.
-	 * @param messageId - The message id that uniquely identifies the message to be retrieved from the bundle.
-	 * @param parms - The parameters to be substituted into the java.text.MessageText's patterns.
-	 * @param targetObject - The target object of the IMessage (see com.ibm.etools.validation.core.IMessage).
-	 * @param lineNumber - The line number where the problem can be found.
-	 */
-	public MessageMetaData(String bundleName, int severity, String messageId, String[] parms, Object targetObject, int lineNumber) {
-		this(bundleName, severity, messageId, parms, targetObject, lineNumber, INT_UNSET, INT_UNSET);
-	}
-	
-	/**
-	 * This constructor should be used if the message text is not translated
-	 * until just before the text should be shown to the user.
-	 * 
-	 * @param bundleName - The name of the resource bundle in which the message is contained
-	 * @param severity - One of the com.ibm.etools.validation.core.SeverityEnum constants; this parameter represents the severity of the IMessage.
-	 * @param messageId - The message id that uniquely identifies the message to be retrieved from the bundle.
-	 * @param parms - The parameters to be substituted into the java.text.MessageText's patterns.
-	 * @param targetObject - The target object of the IMessage (see com.ibm.etools.validation.core.IMessage).
-	 * @param lineNumber - The line number where the problem can be found.
-	 * @param offset - In number of characters, how many characters from the start of the .properties file to the location of the problem.
-	 * @param length - In number of characters, how many characters from the offset to the end of the problem.
-	 */
-	public MessageMetaData(String bundleName, int severity, String messageId, String[] parms, Object targetObject, int lineNumber, int offset, int length) {
-		_bundleName = bundleName;
-		_severity = severity;
-		_messageId = messageId;
-		_parms = parms;
-		_targetObject = targetObject;
-		_lineNumber = lineNumber;
-		_offset = offset;
-		_length = length;
-	}
-	
-	public String getBundleName() {
-		return _bundleName;
-	}
-	
-	public int getSeverity() {
-		return _severity;
-	}
-	
-	public String getId() {
-		return _messageId;
-	}
-	
-	public String[] getParams() {
-		return _parms;
-	}
-	
-	public Object getTargetObject() {
-		return _targetObject;
-	}
-	
-	public int getLineNumber() {
-		return _lineNumber;
-	}
-	
-	public int getOffset() {
-		return _offset;
-	}
-
-	public int getLength() {
-		return _length;
-	}
-	
-	/**
-	 * Use the given ClassLoader to load this message's text
-	 * from the resource bundle.
-	 */
-	public String getText(ClassLoader classLoader) {
-		if(_text == null) {
-			return getText(Locale.getDefault(), classLoader);
-		}
-		return _text;
-	}
-
-	/**
-	 * Use the given ClassLoader to load this message's text,
-	 * for the Locale, from the resource bundle.
-	 */	
-	public String getText(Locale locale, ClassLoader classLoader) {
-		if(_text == null) {
-			return getText(getBundleName(), locale, classLoader, getId(), getParams());
-		}
-		
-		return _text;
-	}
-	
-	/**
-	 * Return the translated message.
-	 * 
-	 * @param bundleName The name of the resource bundle to search for the message.
-	 * @param locale The Locale for which the message should be loaded.
-	 * @param classLoader The ClassLoader which can locate the resource bundle.
-	 * @param messageId The unique id, in the resource bundle, that identifies the message.
-	 * @param parms The parameters to substitute into the pattern of the java.text.MessageFormat message.
-	 */
-	public static java.lang.String getText(String bundleName, Locale locale, ClassLoader classLoader, String messageId, String[] parms) {
-		String message = ""; //$NON-NLS-1$
-
-		if (locale == null) {
-			return message;
-		}
-
-		ResourceBundle bundle = getBundle(bundleName, locale, classLoader);
-		if (bundle == null) {
-			return message;
-		}
-
-		try {
-			message = bundle.getString(messageId);
-
-			if (parms != null) {
-				message = java.text.MessageFormat.format(message, parms);
-			}
-		}
-		catch (MissingResourceException exc) {
-			System.err.println(exc.getMessage());
-			System.err.println(messageId);
-		}
-		catch (NullPointerException exc) {
-			System.err.println(exc.getMessage());
-			System.err.println(messageId);
-		}
-
-		return message;
-	}
-
-	/**
-	 * Return the resource bundle which contains the messages, as identified by
-	 * @link #getBundleName()
-	 */
-	public static ResourceBundle getBundle(String bundleName, Locale locale, ClassLoader classLoader) {
-		ResourceBundle bundle = null;
-		try {
-			if (classLoader == null) {
-				bundle = ResourceBundle.getBundle(bundleName, locale);
-			}
-			else {
-				bundle = ResourceBundle.getBundle(bundleName, locale, classLoader);
-			}
-		}
-		catch (MissingResourceException e) {
-			e.printStackTrace();
-		}
-		return bundle;
-	}
-	
-}
-
diff --git a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/PropertyFile.java b/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/PropertyFile.java
deleted file mode 100644
index 8b60b14..0000000
--- a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/PropertyFile.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package org.eclipse.jst.validation.sample.parser;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-import java.io.File;
-
-/**
- * This PropertyFile is instantiated by code that isn't an IValidator.
- */
-public class PropertyFile extends APropertyFile {
-	private String _enclosingZipFileName = null;
-	private String _propertyFileName = null;
-	private String _fileName = null;
-	
-	public PropertyFile(String fileName) throws java.io.IOException {
-		this(fileName, false);
-	}
-
-	public PropertyFile(String fileName, boolean trace) throws java.io.IOException {
-		this(new File(fileName), trace);
-	}
-	
-	public PropertyFile(File propertyFile) throws java.io.IOException {
-		this(propertyFile, false);
-	}
-	
-	public PropertyFile(File propertyFile, boolean trace) throws java.io.IOException {
-		this(null, propertyFile, trace);
-	}
-	
-	public PropertyFile(String enclosingZipFileName, File propertyFile) throws java.io.IOException {
-		this(enclosingZipFileName, propertyFile, false);
-	}
-
-	public PropertyFile(String enclosingZipFileName, File propertyFile, boolean debug) throws java.io.IOException {
-		if (!propertyFile.exists())
-			throw new java.io.IOException("Cannot find file " + propertyFile.getName()); //$NON-NLS-1$
-		if (!propertyFile.isFile())
-			throw new java.io.IOException(propertyFile.getName() + " is not a file"); //$NON-NLS-1$
-		if (!propertyFile.canRead())
-			throw new java.io.IOException("Cannot read " + propertyFile.getName()); //$NON-NLS-1$
-		if (!propertyFile.getName().endsWith("properties")) //$NON-NLS-1$
-			throw new java.io.IOException("Can parse only .properties files; ignoring " + propertyFile.getName()); //$NON-NLS-1$
-
-		setDebug(debug);
-			
-		_enclosingZipFileName = enclosingZipFileName;
-		
-		_fileName = propertyFile.getName();
-		
-		report("File name: " + _fileName); //$NON-NLS-1$
-		parseFile(propertyFile);
-		report(""); //$NON-NLS-1$
-
-		propertyFile = null;
-	}
-	
-	/*
-	 * @see APropertyFile#report(String)
-	 */
-	public void report(String str) {
-		System.out.println(str);
-	}
-	
-	/*
-	 * @see APropertyFile#report(MessageMetaData)
-	 */
-	public void report(MessageMetaData message) {
-		StringBuffer buffer = new StringBuffer(message.getText(getClass().getClassLoader()));
-		buffer.append(ResourceHandler.getExternalizedMessage(IValidationConstants.BUNDLENAME, IValidationConstants.LINE_LOC, new String[]{String.valueOf(message.getLineNumber()), getQualifiedFileName()}));
-		report(buffer.toString());
-	}
-	
-	public String getQualifiedFileName() {
-		if (_propertyFileName == null) {
-			if (_enclosingZipFileName == null) {
-				_propertyFileName = _fileName;
-			}
-			else {
-				_propertyFileName = _enclosingZipFileName + "::" + _fileName; //$NON-NLS-1$
-			}
-		}
-		return _propertyFileName;
-	}
-
-	public String getFileName() {
-		return _fileName;
-	}
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/PropertyLine.java b/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/PropertyLine.java
deleted file mode 100644
index 490b2b8..0000000
--- a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/PropertyLine.java
+++ /dev/null
@@ -1,641 +0,0 @@
-package org.eclipse.jst.validation.sample.parser;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-import java.util.*;
-
-/**
- * PropertyLine represents a line in a PropertyFile. It has a message id,
- * a message value (the text of the property; this is the text which is
- * translated), a line number, and, optionally, an unique error id (of the
- * form ABCD1234{E|W|I}).
- */
-public class PropertyLine implements Comparable {
-	private String _messageId; // the message id (not translated)
-	private String _message = null; // the message value with the error id (translated)
-	private String _messagePrefix = null; // the prefix (e.g. ABCD1234{E|W|I}
-	private String _shortMessage = null; // the message value without the error id (translated)
-	private int _lineNumber = -1; // the line number of this message value
-	private int _numWords = -1;
-	private final String EMPTY = ""; //$NON-NLS-1$
-	private APropertyFile _file = null;
-	private int _offset = -1; // the offset, in the .properties file, where this line begins
-	private int _messageOffset = -1;  // the offset in the line, after the EQUALS, where the message prefix begins
-	
-	private static final char QUOTE = '\'';
-	private static final char OBRACKET = '{';
-	private static final char CBRACKET = '}';
-
-	// The Enum for the message severity can be one of these four values. If there is an error id,
-	// UNASSIGNED indicates an invalid value. 
-	public final static int UNASSIGNED = 0;
-	public final static int ERROR = 0x1;
-	public final static int WARNING = 0x2;
-	public final static int INFO = 0x3;
-
-	private int _severity = UNASSIGNED; // the severity of the message, if this message has an error id. UNASSIGNED means either that the severity was an invalid severity (not info, warn, or error), or that the message has no error id. Check the value of the error id to find out which of the two is the case.
-	private int _numParms = 0;
-	
-	private static final char[] BLANK = "                                                                                                    ".toCharArray(); // this string is 100 characters long. It's used to quickly get a blank string in the getBlank(int) method. Hopefully the user will never want more than 100 char in a given parameter. //$NON-NLS-1$
-
-	public PropertyLine(APropertyFile file, int offset, int messageOffset, String messageId, String message, int lineNumber) {
-		// Comment on the use of intern().
-		// Because it's likely that we'll be comparing this string a lot,
-		// load it into the Java constants space through intern(). Since we won't
-		// be modifying this string, it's safe to load it into the constants space.
-		//
-		_offset = offset; // the offset in the .properties file where this line begins
-		_messageOffset = messageOffset; // the offset in the line, after the EQUALS, where the message prefix begins
-		_messageId = messageId;
-		_message = message; // re: intern(). Ditto.
-		_lineNumber = lineNumber;
-		_file = file;
-
-		parse(message);
-	}
-
-	public int compareTo(Object o) {
-		// by default, sort by message id
-		if (!(o instanceof PropertyLine)) {
-			// then how on earth did this method get called??
-			// put it at the end of the list
-			return 1;
-		}
-
-		return getMessageId().compareTo(((PropertyLine) o).getMessageId());
-	}
-
-	public APropertyFile getFile() {
-		return _file;
-	}
-
-	public String getMessagePrefix() {
-		return _messagePrefix;
-	}
-	
-	public boolean hasMessagePrefix() {
-		if(_messagePrefix == null) {
-			return false;
-		}
-		
-		if(_messagePrefix.equals(EMPTY)) {
-			return false;
-		}
-		
-		return true;
-	}
-	
-	public int getLineNumber() {
-		return _lineNumber;
-	}
-	public String getMessage() {
-		return _message;
-	}
-	public String getMessageId() {
-		return _messageId;
-	}
-	public String getShortMessage() {
-		return _shortMessage;
-	}
-	
-	/**
-	 * This method returns the number of words in the message excluding 
-	 * the message error id prefix.
-	 */
-	public int getNumWords() {
-		if(_numWords == -1) {
-			_numWords = 0;
-			StringTokenizer tokenizer = new StringTokenizer(getShortMessage());
-			_numWords = tokenizer.countTokens();
-		}
-		return _numWords;
-	}
-	
-	/**
-	 * This method returns the number of characters in the 
-	 * message including the message prefix and parameters. (i.e., {0} would
-	 * be counted as three characters.)
-	 */
-	public int getLength() {
-		return getMessage().length();
-	}
-	
-	/**
-	 * This method returns the number of characters in the 
-	 * message including the message prefix and the expected 
-	 * number of characters. (That is, the lengthParm parameter
-	 * is used as an approximation of the length of each parameter
-	 * in the message.)
-	 */
-	public int getExpectedLength(int lengthParm) {
-		if(hasParameters() && (lengthParm > 0)) {
-			return getExpectedMessage(lengthParm).length();
-		}
-		else {
-			return getLength();
-		}
-	}
-	
-	/**
-	 * This method substitutes a blank stub of the given length
-	 * every place in the string where there is a parm.
-	 */
-	public String getExpectedMessage(int lengthParm) {
-		if(hasParameters() && (lengthParm > 0)) {
-			// message cannot be null or blank or it wouldn't have parameters
-			String blank = getBlank(lengthParm);
-			
-			int numParm = getNumParameters();
-			String[] parm = new String[numParm];
-			for(int i=0; i<parm.length; i++) {
-				parm[i] = blank;
-			}
-			
-			try {
-				return java.text.MessageFormat.format(getMessage(), parm);
-			}
-			catch(IllegalArgumentException exc) {
-				if(getFile().debug()) {
-					getFile().report(exc.getMessage());
-					getFile().report(getFile().getQualifiedFileName() + "::" + getMessageId()); //$NON-NLS-1$
-				}
-				return getMessage();
-			}
-		}
-		else {
-			return getMessage();
-		}
-	}
-	
-	/**
-	 * Return a blank string of the given length.
-	 */
-	public static String getBlank(int length) {
-		char[] blank = new char[length];
-		if(length > BLANK.length) {
-			for(int i=0; i<length; i++) {
-				blank[i] = ' ';
-			}
-		}
-		else {
-			System.arraycopy(BLANK, 0, blank, 0, length);
-		}
-		return new String(blank);
-	}
-
-	/**
-	 * Return true if the line has java.text.MessageFormat patterns.
-	 */
-	public boolean hasParameters() {
-		return getNumParameters() > 0;
-	}
-	
-	/**
-	 * Return the number of java.text.MessageFormat patterns in the property line.
-	 */
-	public int getNumParameters() {
-		return _numParms;
-	}
-	
-	/**
-	 * Return the number of characters, from the start of the file, to
-	 * the beginning of the message.
-	 */
-	public int getMessageOffset() {
-		return _messageOffset;
-	}
-	
-	/**
-	 * The offset, in the .properties file, where this line begins.
-	 */
-	public int getOffset() {
-		return _offset;
-	}
-	
-	/**
-	 * The severity of the message, if this message has an error id. 
-	 * UNASSIGNED means either that the severity was an invalid severity 
-	 * (not info, warn, or error), or that the message has no error id. Check 
-	 * the value of the error id to find out which of the two is the case.
-	 */
-	public int getSeverity() {
-		return _severity;
-	}
-
-	/**
-	* Parse the message value to extract the unique error id, if any exists.
-	* This method initializes some of the fields in this class.
-	*/
-	public void parse(String message) {
-		// To see why it's safe to call intern(), read the comment in the
-		// constructor.
-
-		// Case 1: ABCD0000E: Blah Blah Blah
-		// Case 2: ABCD0000E  Blah Blah Blah
-		// Case 3: ABCD0000E : Blah Blah Blah
-		// Case 4: ABCD0000E  Blah:Blah Blah
-		// Case 5: ABCD0000E :
-		// Case 6: Blah Blah Blah (i.e., no prefix)
-		// Case 7: ABCD0000E: Blah
-		// Case 8: ABCD0000E  Blah
-		// Case 9: ABCD0000E : Blah
-		// Case 10: ABCD0000E Blah
-		// Case 11: ABCD0000E
-
-		if (message == null) {
-			_messagePrefix = EMPTY;
-			_shortMessage = EMPTY;
-			return;
-		}
-
-		StringTokenizer tokenizer = new StringTokenizer(message);
-		int numTokens = tokenizer.countTokens();
-		if (numTokens == 0) {
-			_messagePrefix = EMPTY;
-			_shortMessage = message;
-		}
-		else {
-			String errorId = tokenizer.nextToken();
-			boolean prefixExists = false;
-
-			// Sometimes the ':' isn't there or isn't in the right place, so don't determine the message prefix based on that.
-			String afterPrefix = null;
-			if(errorId.length() >= 9) {
-				afterPrefix = errorId.substring(0, 9); // Must be of the form ABCD1234E, which is 9 char long
-				char[] temp = afterPrefix.toCharArray();
-				prefixExists = Character.isLetter(temp[0]) && Character.isUpperCase(temp[0]);
-				prefixExists = prefixExists && Character.isLetter(temp[1]) && Character.isUpperCase(temp[0]);
-				prefixExists = prefixExists && Character.isLetter(temp[2]) && Character.isUpperCase(temp[0]);
-				prefixExists = prefixExists && Character.isLetter(temp[3]) && Character.isUpperCase(temp[0]);
-				prefixExists = prefixExists && Character.isDigit(temp[4]);
-				prefixExists = prefixExists && Character.isDigit(temp[5]);
-				prefixExists = prefixExists && Character.isDigit(temp[6]);
-				prefixExists = prefixExists && Character.isDigit(temp[7]);
-				prefixExists = prefixExists && Character.isLetter(temp[8]) && Character.isUpperCase(temp[0]);
-
-				if (prefixExists) {
-					switch (temp[8]) {
-						case ('E') :
-							{
-								_severity = ERROR;
-								break;
-							}
-						case ('W') :
-							{
-								_severity = WARNING;
-								break;
-							}
-						case ('I') :
-							{
-								_severity = INFO;
-								break;
-							}
-	
-						default :
-							{
-								_severity = UNASSIGNED;
-								break;
-							}
-					}
-					_messagePrefix = afterPrefix;
-					
-					int colonIndex = errorId.indexOf(':');
-					boolean noColon = (colonIndex == -1);
-	
-					int shortMessageIndex = 10; // assume that only the ABCD0000E prefix will be stripped (i.e., no colon)
-					if(noColon) {
-						// No colon following message prefix immediately.
-						// Is there whitespace before the colon?
-						if (numTokens > 1) {
-							String nextToken = tokenizer.nextToken();
-							colonIndex = nextToken.indexOf(':');
-							noColon = ((colonIndex == -1) || (nextToken.trim().indexOf(':') != 0)); // case 4 trim condition will be true
-							
-							// ":" should follow the message prefix immediately
-							// Know there's a prefix, and that's 9 char
-							if(noColon) {
-								// Case 2, 4, 8 or 10
-//								MessageMetaData mmd = new MessageMetaData(IValidationConstants.BUNDLENAME, MessageMetaData.INFO, IValidationConstants.ABCD0120, new String[]{}, this, getLineNumber());
-//								getFile().addParseWarning(mmd);
-								shortMessageIndex = 10;
-							}
-							else {
-//								MessageMetaData mmd = new MessageMetaData(IValidationConstants.BUNDLENAME, MessageMetaData.INFO, IValidationConstants.ABCD0130, new String[]{}, this, getLineNumber());
-//								getFile().addParseWarning(mmd);
-								
-								if(numTokens > 2) {
-									// Case 3 or 9
-									nextToken = tokenizer.nextToken();
-									shortMessageIndex = message.indexOf(nextToken);
-								}
-								else {
-									// Case 5
-									shortMessageIndex = colonIndex + 1;
-								}								
-							}
-							_shortMessage = message.substring(shortMessageIndex, message.length());
-						}
-						else {
-							// Case 11
-							_shortMessage = EMPTY;
-						}
-					}
-					else {
-						// Case 1 or 7
-						shortMessageIndex = colonIndex + 1;
-						_shortMessage = message.substring(shortMessageIndex, message.length());
-					}
-				}
-	
-			}
-
-			if (!prefixExists) {
-				// Case 6
-				_messagePrefix = EMPTY;
-				_shortMessage = message;
-			}
-		}
-
-		getFile().addParseWarnings(parseMessage());
-	}
-
-	/**
-	 * Once the field that holds the message text has been set (i.e., parse(String)
-	 * has been called), this method parses the message text, finds any syntax or
-	 * other problems, and returns a List of MessageMetaData, with one MessageMetaData
-	 * for each problem.
-	 */
-	public List parseMessage() {
-		// now parse to see if all apostrophes are in pairs, if there are parameters or not, etc.
-		ArrayList intList = new ArrayList();
-		int numObrackets = 0;
-		int numCbrackets = 0;
-		int index = 0;
-		char token;
-		int singleQuoteIndex = -1;
-		int doubleQuoteIndex = -1;
-		int missingTerminatingQuoteIndex = -1;
-		boolean parmExists = false;
-		int numCharBeforeShort = getMessageOffset() + getMessage().indexOf(getShortMessage());
-		
-		while (index < getShortMessage().length()) {
-			token = getShortMessage().charAt(index++);
-			if (token == QUOTE) {
-				if (index < getShortMessage().length()) {
-					token = getShortMessage().charAt(index++);
-				}
-				else {
-					token = ' ';
-				}
-				
-				if ((token == OBRACKET) || (token == CBRACKET)){
-					if (index < getShortMessage().length()) {
-						token = getShortMessage().charAt(index++);
-					}
-					else {
-						token = ' ';
-					}
-					
-					// Does the { or } character have a terminating single quote?
-					if(token != QUOTE) {
-						missingTerminatingQuoteIndex = (numCharBeforeShort + index-1);
-					}
-				}
-				else if ((token == QUOTE)) {
-					doubleQuoteIndex = (numCharBeforeShort + index-1);
-				}
-				else  {
-					// '{' means that a { will be output,
-					// '}' means that a } will be output,
-					// '' means that a ' will be output.
-					
-					// Since the quote is a special character, and the opening bracket is a 
-					// special character, keep track of the number of open brackets. If the
-					// following character isn't a quote or opening bracket, warn the user 
-					// that it takes two apostrophes to see one apostrophe.
-					singleQuoteIndex = (numCharBeforeShort + index-1);
-				}
-				
-			}
-			else if (token == OBRACKET) {
-				numObrackets++;
-				parmExists = true;
-				StringBuffer numBuffer = null;
-				if (index < getShortMessage().length()) {
-					numBuffer = new StringBuffer();
-					while (index < getShortMessage().length()) {
-						char digit = getShortMessage().charAt(index);
-						if ((Character.isDigit(digit)) || (digit == '-') || (digit == '+')) {
-							numBuffer.append(digit);
-							index++;
-						}
-						else {
-							break;
-						}
-					}
-				}
-				else {
-					// not an error; just not a number. Could be one of the other 
-					// ChoiceFormat, or whatever, formats. Do not get the next 
-					// token, because we still need to process this one.
-					continue;
-				}
-
-				try {
-					if ((numBuffer != null) && (numBuffer.length() > 0)) {
-						Integer parmNum = Integer.valueOf(numBuffer.toString());
-						intList.add(parmNum);
-					}
-				}
-				catch (NumberFormatException exc) {
-					// not an error; just not a number. Could be one of the other 
-					// ChoiceFormat, or whatever, formats. Do not get the next 
-					// token, because we still need to process this one.
-				}
-			}
-			else if (token == CBRACKET) {
-				numCbrackets++;
-			}
-		}
-		
-		_numParms = Math.max(numObrackets, numCbrackets);
-
-		// find parse warnings
-		List messages = new ArrayList();
-		if (numObrackets != numCbrackets) {
-			MessageMetaData mmd = new MessageMetaData(IValidationConstants.BUNDLENAME, MessageMetaData.ERROR, IValidationConstants.ABCD0000, new String[]{String.valueOf(numObrackets), String.valueOf(numCbrackets)}, this, getLineNumber());
-			messages.add(mmd);
-		}
-		
-		if(missingTerminatingQuoteIndex != -1) {
-			MessageMetaData mmd = new MessageMetaData(IValidationConstants.BUNDLENAME, MessageMetaData.INFO, IValidationConstants.ABCD0110, new String[]{String.valueOf(missingTerminatingQuoteIndex)}, this, getLineNumber(), getOffset() + missingTerminatingQuoteIndex, 1); // magic number 1 because a quote is one character long
-			messages.add(mmd);
-		}
-
-		// Now sort the list, to see if there's any numbers missing, duplicated, or negative
-		Collections.sort(intList, new Comparator() {
-			public int compare(Object a, Object b) {
-				// negative = b before a
-				// zero = a = b
-				// positive = a before b
-				return ((Integer) a).intValue() - ((Integer) b).intValue();
-			}
-		});
-		Iterator iterator = intList.iterator();
-		int parmCount = 0;
-		int lastNumber = -1;
-		int largestNumber = -1;
-		while (iterator.hasNext()) {
-			Integer parm = (Integer) iterator.next();
-			if (parm.intValue() < 0) {
-				MessageMetaData mmd = new MessageMetaData(IValidationConstants.BUNDLENAME, MessageMetaData.ERROR, IValidationConstants.ABCD0010E, new String[]{String.valueOf(parm.intValue())}, this, getLineNumber());
-				messages.add(mmd);
-			}
-			else if (parm.intValue() == lastNumber) {
-				MessageMetaData mmd = new MessageMetaData(IValidationConstants.BUNDLENAME, MessageMetaData.INFO, IValidationConstants.ABCD0020, new String[]{String.valueOf(lastNumber)}, this, getLineNumber());
-				messages.add(mmd);
-			}
-			else if (parm.intValue() != parmCount) {
-				MessageMetaData mmd = new MessageMetaData(IValidationConstants.BUNDLENAME, MessageMetaData.INFO, IValidationConstants.ABCD0030, new String[]{String.valueOf(parmCount)}, this, getLineNumber());
-				messages.add(mmd);
-			}
-			else {
-				parmCount++;
-			}
-			lastNumber = parm.intValue();
-			largestNumber = Math.max(largestNumber, parm.intValue());
-		}
-		if(largestNumber > 0) {
-			// Not a choice format.
-			//
-			// Although the first default (counting the number of 
-			// brackets) is okay in most cases, sometimes a parameter 
-			// is missing, and so the number of paramters passed into 
-			// the MessageFormat needs to be larger. (e.g. {0} {2}, 
-			// need String[] to be {"", "", ""}, not {"", ""}). 
-			
-			// Need to add "1" to it because the numbers start at a 0 index.
-			_numParms = largestNumber + 1; 
-		}
-		
-		if(largestNumber > 9) {
-			// MessageFormat will not substitute in parameters after the 10 parameter (i.e., number 9).
-			MessageMetaData mmd = new MessageMetaData(IValidationConstants.BUNDLENAME, MessageMetaData.WARNING, IValidationConstants.ABCD0010W, new String[]{String.valueOf(largestNumber)}, this, getLineNumber());
-			messages.add(mmd);
-		}
-
-		if ((singleQuoteIndex > -1) && parmExists) {
-			MessageMetaData mmd = new MessageMetaData(IValidationConstants.BUNDLENAME, MessageMetaData.INFO, IValidationConstants.ABCD0040, new String[]{String.valueOf(singleQuoteIndex)}, this, getLineNumber(), getOffset() + singleQuoteIndex, 1); // magic number 1 because a quote is one character long
-			messages.add(mmd);
-		}
-		else if ((doubleQuoteIndex > -1) && !parmExists) {
-			MessageMetaData mmd = new MessageMetaData(IValidationConstants.BUNDLENAME, MessageMetaData.INFO, IValidationConstants.ABCD0050, new String[]{String.valueOf(doubleQuoteIndex)}, this, getLineNumber(), getOffset() + doubleQuoteIndex, 1); // magic number 1 because a quote is one character long
-			messages.add(mmd);
-		}
-
-		return messages;
-	}
-
-	/**
-	 * Format this .properties line for display.
-	 */
-	public String toString() {
-		StringBuffer buffer = null;
-		if(getFile() == null) {
-			buffer = new StringBuffer();
-		}
-		else {
-			buffer = new StringBuffer(getFile().getQualifiedFileName());
-		}
-		buffer.append("\tLine number: "); //$NON-NLS-1$
-		buffer.append(String.valueOf(getLineNumber()));
-		buffer.append("\t"); //$NON-NLS-1$
-		buffer.append(getMessageId());
-		buffer.append(" = "); //$NON-NLS-1$
-		buffer.append(getMessage());
-		return buffer.toString();
-	}
-	
-	/**
-	 * Format this .properties line for display, and substitute a stub,
-	 * of the specified length, into each java.text.MessageFormat pattern.
-	 */
-	public String toStringWithExpectedLength(int length) {
-		StringBuffer buffer = null;
-		if(getFile() == null) {
-			buffer = new StringBuffer();
-		}
-		else {
-			buffer = new StringBuffer(getFile().getQualifiedFileName());
-		}
-		buffer.append("\tLine number: "); //$NON-NLS-1$
-		buffer.append(String.valueOf(getLineNumber()));
-		buffer.append("\t"); //$NON-NLS-1$
-		buffer.append(getMessageId());
-		buffer.append(" = "); //$NON-NLS-1$
-		buffer.append(getExpectedMessage(length));
-		return buffer.toString();
-	}
-	
-	/**
-	 * Return the message prefix without the severity, e.g.,
-	 * ABCD0000 instead of ABCD0000E.
-	 */
-	public String getShortMessagePrefix() {
-		String prefix = getMessagePrefix();
-		if(prefix.equals("")) { //$NON-NLS-1$
-			return ""; //$NON-NLS-1$
-		}
-		
-		char prefixEnd = prefix.charAt(prefix.length() - 1);
-		if ((prefixEnd == 'E') || (prefixEnd == 'W') || (prefixEnd == 'I')) {
-			prefix = prefix.substring(0, prefix.length() - 1);
-		}
-		return prefix;
-	}
-	
-	/**
-	 * A PropertyLine is equal if it is in the same file and on the same line number.
-	 */
-	public boolean equals(Object o) {
-		if(o == null) {
-			return false;
-		}
-		
-		if(!(o instanceof PropertyLine)) {
-			return false;
-		}
-		
-		PropertyLine oLine = (PropertyLine)o;
-		if(!(getLineNumber() == oLine.getLineNumber())) {
-			return false;
-		}
-		
-		if(!getFile().equals(oLine.getFile())) {
-			return false;
-		}
-		
-		return true;
-	}
-	
-	public int hashCode() {
-		return (getFile().hashCode() + getLineNumber());
-	}
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/PropertyLineComparator.java b/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/PropertyLineComparator.java
deleted file mode 100644
index 7daad29..0000000
--- a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/PropertyLineComparator.java
+++ /dev/null
@@ -1,254 +0,0 @@
-package org.eclipse.jst.validation.sample.parser;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-import java.util.Comparator;
-
-/**
- * This class contains all of the Comparator classes that can be used
- * to sort PropertyLine instances in an APropertyFile. (For example,
- * to find duplicate message ids, the MessageIdComparator would be used
- * to sort the lines according to message id. The sorted list is 
- * traversed to find out if one line has an identical message id 
- * to the line that follows it, and if so, a parse warning is reported.)
- */
-public class PropertyLineComparator {
-	private static PropertyLineComparator inst = new PropertyLineComparator();
-	
-	private static final Comparator _messagePrefixComparator = inst.new MessagePrefixComparator();
-	private static final Comparator _messageIdComparator = inst.new MessageIdComparator();
-	private static Comparator _stringLengthComparator = new StringLengthComparator();
-	private static final Comparator _valueComparator = inst.new ValueComparator();
-	private static final Comparator _lineNoComparator = inst.new LineNoComparator();
-
-	private PropertyLineComparator() {
-	}	
-
-	/**
-	 * This class compares PropertyLine instances and sorts them according to 
-	 * their message prefix (e.g., ABCD0000E).
-	 */
-	private class MessagePrefixComparator implements java.util.Comparator {
-		public int compare(Object a, Object b) {
-			if((a == null) && (b == null)) {
-				return 0;
-			}
-			else if(a == null) {
-				return -1;
-			}
-			else if(b == null) {
-				return 1;
-			}
-			
-			// Can't just look to see if they're the same; need to mark
-			// them as the same even if the last letter (E|W|I) is different.
-			String aid = ((PropertyLine) a).getMessagePrefix();
-			String bid = ((PropertyLine) b).getMessagePrefix();
-			if((aid == null) && (bid == null)) {
-				return 0;
-			}
-			else if(aid == null) {
-				return -1;
-			}
-			else if(bid == null) {
-				return 1;
-			}
-				
-			aid = aid.toUpperCase().trim();
-			bid = bid.toUpperCase().trim();
-
-			if((aid.equals("")) && (bid.equals(""))) { //$NON-NLS-1$  //$NON-NLS-2$
-				return 0;
-			}
-			else if(aid.equals("")) { //$NON-NLS-1$
-				return -1;
-			}
-			else if(bid.equals("")) { //$NON-NLS-1$
-				return 1;
-			}
-
-			return ((PropertyLine)a).getShortMessagePrefix().toUpperCase().compareTo(((PropertyLine)b).getShortMessagePrefix().toUpperCase());
-		}
-	}
-	
-	/**
-	 * This comparator sorts PropertyLine by their message id.
-	 */
-	private class MessageIdComparator implements java.util.Comparator {
-		public int compare(Object a, Object b) {
-			if((a == null) && (b == null)) {
-				return 0;
-			}
-			else if(a == null) {
-				return -1;
-			}
-			else if(b == null) {
-				return 1;
-			}
-			
-			String aMessageId = null;
-			String bMessageId = null;
-			if(a instanceof PropertyLine) {
-				aMessageId = ((PropertyLine)a).getMessageId();
-			}
-			else {
-				aMessageId = (String)a;
-			}
-			
-			if(b instanceof PropertyLine) {
-				bMessageId = ((PropertyLine)b).getMessageId();
-			}
-			else {
-				bMessageId = (String)b;
-			}
-				
-			
-			if((aMessageId == null) && (bMessageId == null)) {
-				return 0;
-			}
-			else if(aMessageId == null) {
-				return -1;
-			}
-			else if(bMessageId == null) {
-				return 1;
-			}
-			else {
-				return aMessageId.compareTo(bMessageId);
-			}
-		}
-	}
-	
-	/**
-	 * Sort the PropertyLine by the length of characters in the message text;
-	 * if you want to substitute characters for the message parameters, 
-	 * set the length field.
-	 */
-	static class StringLengthComparator implements java.util.Comparator {
-		public static int length = 0;
-		
-		public int compare(Object a, Object b) {
-			// return a negative number if object a is less than object b
-			// return a zero if the objects are equal
-			// return a positive number if object a is greater than object b
-			if((a == null) && (b == null)) {
-				return 0;
-			}
-			else if(a == null) {
-				return -1;
-			}
-			else if(b == null) {
-				return 1;
-			}
-			
-			int aLength = ((PropertyLine)a).getExpectedLength(length);
-			int bLength = ((PropertyLine)b).getExpectedLength(length);
-				
-			return (aLength - bLength);
-		}
-	}
-	
-	/**
-	 * Alphabetize the message text of the PropertyLine.
-	 */
-	private class ValueComparator implements java.util.Comparator {
-		public int compare(Object a, Object b) {
-			if((a == null) && (b == null)) {
-				return 0;
-			}
-			else if(a == null) {
-				return -1;
-			}
-			else if(b == null) {
-				return 1;
-			}
-			
-			String aMessage = ((PropertyLine)a).getMessage();
-			String bMessage = ((PropertyLine)b).getMessage();
-			if((aMessage == null) && (bMessage == null)) {
-				return 0;
-			}
-			else if(aMessage == null) {
-				return -1;
-			}
-			else if(bMessage == null) {
-				return 1;
-			}
-				
-			return aMessage.compareTo(bMessage);
-		}
-	}
-	
-	/**
-	 * Sort by line number of the PropertyLine, with the smallest line
-	 * number first in the list.
-	 */
-	private class LineNoComparator implements java.util.Comparator {
-		public int compare(Object a, Object b) {
-			// return a negative number if object a is less than object b
-			// return a zero if the objects are equal
-			// return a positive number if object a is greater than object b
-			if((a == null) && (b == null)) {
-				return 0;
-			}
-			else if(a == null) {
-				return -1;
-			}
-			else if(b == null) {
-				return 1;
-			}
-			
-			int aLineNo = ((PropertyLine)a).getLineNumber();
-			int bLineNo = ((PropertyLine)b).getLineNumber();
-			if((aLineNo < 0) && (bLineNo < 0)) {
-				return 0;
-			}
-			else if(aLineNo < 0) {
-				return -1;
-			}
-			else if(bLineNo < 0) {
-				return 1;
-			}
-			
-			return (aLineNo - bLineNo);
-		}
-	}
-
-	public static Comparator getMessagePrefixComparator() {
-		return _messagePrefixComparator;
-	}
-
-	public static Comparator getMessageIdComparator() {
-		return _messageIdComparator;
-	}
-
-	public static Comparator getStringLengthComparator(int length) {
-		StringLengthComparator.length = length;
-		return _stringLengthComparator;
-	}
-
-	public static Comparator getValueComparator() {
-		return _valueComparator;
-	}
-	
-	public static Comparator getLineNoComparator() {
-		return _lineNoComparator;
-	}
-}
-
diff --git a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/ResourceHandler.java b/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/ResourceHandler.java
deleted file mode 100644
index 4dd7b55..0000000
--- a/tests/org.eclipse.jst.validation.sample/propertiesValidator/org/eclipse/jst/validation/sample/parser/ResourceHandler.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package org.eclipse.jst.validation.sample.parser;
-/*
- * Licensed Material - Property of IBM 
- * (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
- * US Government Users Restricted Rights - Use, duplication or disclosure 
- * restricted by GSA ADP Schedule Contract with IBM Corp. 
- *
- * DISCLAIMER OF WARRANTIES.
- * The following [enclosed] code is sample code created by IBM
- * Corporation. This sample code is not part of any standard or IBM
- * product and is provided to you solely for the purpose of assisting
- * you in the development of your applications.  The code is provided
- * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
- * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
- * THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
- * for any damages arising out of your use of the sample code, even
- * if it has been advised of the possibility of such damages.
- * 
- */
-
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-/**
- * This class retrieves the Strings from the .properties file appropriate
- * for the machine's Locale.
- */
-public final class ResourceHandler {
-	private static ResourceBundle _bundle = null;
-	
-	private ResourceHandler() {
-		super();
-	}
-	
-	/**
-	 * Return the resource bundle which contains the messages
-	 * in the resource identified by bundleName.
-	 */
-	private static ResourceBundle getBundle(String bundleName) {
-		if (_bundle == null) {
-			try {
-				_bundle = ResourceBundle.getBundle(bundleName);
-			}
-			catch (MissingResourceException exc) {
-				_bundle = null;
-				exc.printStackTrace();
-			}
-		}
-		return _bundle;
-	}
-
-	/**
-	 * Given the name of the bundle and the message id (key) into the
-	 * bundle, return the message text identified by the id.
-	 */	
-	public static String getExternalizedMessage(String bundleName, String key) {
-		try {
-			ResourceBundle bundle = getBundle(bundleName);
-			if (bundle == null) {
-				return key;
-			}
-
-			return bundle.getString(key);
-		}
-		catch (NullPointerException exc) {
-			exc.printStackTrace();
-		}
-		return key;
-	}
-	
-	/**
-	 * Given the name of the bundle, the message id (key) into the
-	 * bundle, and parameters to be substituted into the java.text.MessageFormat's
-	 * patterns, return the message with the parameters substituted in.
-	 */	
-	public static String getExternalizedMessage(String bundleName, String key, String[] parms) {
-		String res = ""; //$NON-NLS-1$
-		try {
-			res = java.text.MessageFormat.format(getExternalizedMessage(bundleName, key), parms);
-		}
-		catch (MissingResourceException exc) {
-			exc.printStackTrace();
-		}
-		catch (NullPointerException exc) {
-			exc.printStackTrace();
-		}
-		return res;
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.sample/propertiesValidator/propertiesValidator.properties b/tests/org.eclipse.jst.validation.sample/propertiesValidator/propertiesValidator.properties
deleted file mode 100644
index 43a5bde..0000000
--- a/tests/org.eclipse.jst.validation.sample/propertiesValidator/propertiesValidator.properties
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Licensed Material - Property of IBM 
-# (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
-# US Government Users Restricted Rights - Use, duplication or disclosure 
-# restricted by GSA ADP Schedule Contract with IBM Corp. 
-#
-#  DISCLAIMER OF WARRANTIES.
-#  The following [enclosed] code is sample code created by IBM
-#  Corporation. This sample code is not part of any standard or IBM
-#  product and is provided to you solely for the purpose of assisting
-#  you in the development of your applications.  The code is provided
-#  "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
-#  NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-#  FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
-#  THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
-#  for any damages arising out of your use of the sample code, even
-#  if it has been advised of the possibility of such damages.
-#
-
-ABCD0000 = ABCD0000E: Match the braces in the message. There are {0} '{' and {1} '}'. MessageFormat will throw a NullPointerException when there are mismatching braces.
-ABCD0010E = ABCD0010E: Change argument ('{'{0}'}') to an integer between 0 and 9 inclusive in the message. MessageFormat cannot process an integer parameter that is less than 0.
-ABCD0010W = ABCD0010W: Change argument ('{'{0}'}') to an integer between 0 and 9 inclusive in the message. MessageFormat ignores any parameters larger than 9.
-ABCD0020 = ABCD0020I: Remove redundant parameter '{'{0}'}' from the message. Make messages succinct.
-ABCD0030 = ABCD0030I: Check that argument '{'{0}'}' was omitted from the message deliberately. If it was omitted accidentally, and the code does not provide enough parameters, MessageFormat will throw a NullPointerException.
-ABCD0040 = ABCD0040I: Use two apostrophes in the message at column {0}. MessageFormat removes single apostrophes; for the message to display an apostrophe, two apostrophes must exist in the string. (An apostrophe is a reserved character of MessageFormat.)
-ABCD0050 = ABCD0050I: Use one apostrophe in the message at column {0}. MessageFormat processes only messages with parameters; without MessageFormat, the extra apostrophe will not be removed.
-
-ABCD0060 = ABCD0060W: Make {0} unique. When an id is used more than once in a file, ResourceBundle will use the value of the last message id.
-ABCD0070 = ABCD0070W: {0} may need to be unique. Conventionally, a message prefix applies to only one error condition.
-
-ABCD0080 = ABCD0080E: Fix the syntax error; each line must form MESSAGE_ID = MESSAGE.
-ABCD0090 = ABCD0090W: Check the read permissions of file {0}. The PropertiesValidator either cannot read or cannot find the file.
-
-ABCD0110 = ABCD0110I: Add a terminating apostrophe at column {0}. The '{' and '}' characters must be enclosed in apostrophes.
-
-ABCD0120 = ABCD0120I: Terminate message prefix {0} with a '':''. The IBM standard requires that message prefixes end with a colon.
-ABCD0130 = ABCD0130I: Remove the whitespace between {0} and the '':''. The IBM standard requires an absence of whitespace between the alphanumeric characters and the colon.
-
-# Outside WSAD, append the line number and file name to the end of the message.
-LINE_LOC = Line {0}, file {1}.
-
diff --git a/tests/org.eclipse.jst.validation.sample/test/test.properties b/tests/org.eclipse.jst.validation.sample/test/test.properties
deleted file mode 100644
index 90bc982..0000000
--- a/tests/org.eclipse.jst.validation.sample/test/test.properties
+++ /dev/null
@@ -1,67 +0,0 @@
-#
-# Licensed Material - Property of IBM 
-# (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
-# US Government Users Restricted Rights - Use, duplication or disclosure 
-# restricted by GSA ADP Schedule Contract with IBM Corp. 
-#
-#  DISCLAIMER OF WARRANTIES.
-#  The following [enclosed] code is sample code created by IBM
-#  Corporation. This sample code is not part of any standard or IBM
-#  product and is provided to you solely for the purpose of assisting
-#  you in the development of your applications.  The code is provided
-#  "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
-#  NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-#  FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
-#  THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
-#  for any damages arising out of your use of the sample code, even
-#  if it has been advised of the possibility of such damages.
-#
-
-# This file is used to test the Properties Validator.
-#
-
-MISMATCHED_BRACES = This line has '{0}' mismatching braces.
-MISMATCHED_BRACES_2 = This line has { a mismatching brace.
-MISMATCHED_BRACES_3 = This line has } a mismatching brace.
-MISMATCHED_BRACES_OKAY = This line has no '{' mismatching braces '}'.
-MISMATCHED_BRACES_OKAY2 = This line also has no mismatching braces {0} '{' '}'.
-
-TOO_MANY_ARGUMENTS = MessageFormat formats only 10 parameters {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10}.
-TOO_MANY_ARGUMENTS_2 = MessageFormat formats only 10 parameters {10}.
-
-NEGATIVE_ARGUMENT = This line uses a negative {-1} argument.
-B = okay
-REDUNDANT_ARGUMENT = This line uses a redundant {0} {0} argument.
-MISSED_PARM = This line uses {0} and {2} but not (1).
-NEEDS_DOUBLE_APOS = This line uses a single apostrophe (') but should use two {0}.
-NEEDS_SINGLE_APOS = This line uses a double apostrophe ('') but should use one.
-A = okay
-SYM
-DUPLICATE_ID = This line uses a duplicate message id.
-DUPLICATE_ID = This line also uses a duplicate message id.
-DUPLICATE_PREFIX = AAAA0000W: This line uses a duplicate message prefix.
-= jjj
-
-DUPLICATE_PREFIX2 = AAAA0000W: This line also uses a duplicate message prefix.
-Z_DUPLICATE = jjj
-Z_DUPLICATE = mmm
-
-# This is a comment
-Z_DUPLICATE = nnn
-C = okay
-F = a \
-b \
-c
-D = okay
-
-CASE1 = ABCD0000E: Blah Blah Blah
-CASE2 = ABCD0000E  Blah Blah Blah
-CASE3 = ABCD0000E : Blah Blah Blah
-CASE4 = ABCD0000E  Blah:Blah Blah
-CASE5 = ABCD0000E :
-CASE6 = Blah Blah Blah (i.e., no prefix)
-CASE7 = ABCD0000E: Blah
-CASE8 = ABCD0000E  Blah
-CASE9 = ABCD0000E : Blah
-CASE10 = ABCD0000E Blah
-CASE11 = ABCD0000E
diff --git a/tests/org.eclipse.jst.validation.sample/test/test2.properties b/tests/org.eclipse.jst.validation.sample/test/test2.properties
deleted file mode 100644
index fdc0f32..0000000
--- a/tests/org.eclipse.jst.validation.sample/test/test2.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-#
-# Licensed Material - Property of IBM 
-# (C) Copyright IBM Corp. 2002, 2003 - All Rights Reserved. 
-# US Government Users Restricted Rights - Use, duplication or disclosure 
-# restricted by GSA ADP Schedule Contract with IBM Corp. 
-#
-#  DISCLAIMER OF WARRANTIES.
-#  The following [enclosed] code is sample code created by IBM
-#  Corporation. This sample code is not part of any standard or IBM
-#  product and is provided to you solely for the purpose of assisting
-#  you in the development of your applications.  The code is provided
-#  "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
-#  NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-#  FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
-#  THIS CODE.  THIS CODE MAY CONTAIN ERRORS.  IBM shall not be liable
-#  for any damages arising out of your use of the sample code, even
-#  if it has been advised of the possibility of such damages.
-#
-
-#
-# This file is used to test the Properties Validator.
-#
-
-ID1 = This file has no errors in it.
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.validation.sample/tvtplugin.xml b/tests/org.eclipse.jst.validation.sample/tvtplugin.xml
deleted file mode 100644
index a5250a3..0000000
--- a/tests/org.eclipse.jst.validation.sample/tvtplugin.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<plugin
-   id="com.ibm.etools.validation.prop"
-   name="Properties Validator"
-   version="5.1.0"
-   class="com.ibm.etools.validation.properties.workbenchimpl.PropertiesValidatorPlugin">
-
-	<!--=================================================================-->
-	<!-- When testing TVT in EJBDeploy, because org.eclipse.help isn't   -->
-	<!-- packaged with EJBDeploy, this plugin is deactivated. However,   -->
-	<!-- because the TVT plugin doesn't ship the documentation, all      -->
-	<!-- references to the help can be removed.                          -->
-	<!--=================================================================-->
-	
-   <runtime>
-      <library name="runtime/propertiesValidator.jar">
-         <export name="*"/>
-      </library>
-      <library name="runtime/propertiesValFS.jar">
-         <export name="*"/>
-      </library>
-      <library name="runtime/propertiesValWB.jar">
-         <export name="*"/>
-      </library>
-      <library name="runtime/filesystemFWK.jar">
-         <export name="*"/>
-      </library>
-   </runtime>
-   
-    <requires>
-       <import plugin="org.eclipse.core.runtime" version="2.1" match="equivalent"/>
-       <import plugin="org.eclipse.core.resources" version="2.1" match="equivalent"/>
-       <import plugin="org.eclipse.jdt.core" version="2.1" match="equivalent"/>
-       <import plugin="com.ibm.etools.validation" export="true" version="5.1" match="equivalent"/>
-       <import plugin="com.ibm.etools.logging.util" version="5.1" match="equivalent"/>
-    </requires>
-
-    <!--=======================================-->
-    <!-- Properties Validator Contributions    -->
-    <!--=======================================-->
-    <extension
-       id="PropertiesValidator"
-       name="Properties Validator"
-       point="com.ibm.etools.validation.validator">
-       <validator>
-           <projectNature id="org.eclipse.jdt.core.javanature"/>
-           <filter objectClass="org.eclipse.core.resources.IFile" nameFilter="*.properties" action="add, change"/>
-           <run class="com.ibm.etools.validation.properties.PropertiesValidator" enabled="false" async="true"/>
-           <helper class="com.ibm.etools.validation.properties.workbenchimpl.PropertiesHelper"/>
-       </validator>
-    </extension>
-</plugin>
diff --git a/tests/org.eclipse.jst.validation.test/.classpath b/tests/org.eclipse.jst.validation.test/.classpath
deleted file mode 100644
index 19ff7d0..0000000
--- a/tests/org.eclipse.jst.validation.test/.classpath
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-    <classpathentry kind="src" path="jUnitWrapper"/>
-    <classpathentry kind="src" path="test"/>
-    <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-    <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/tests/org.eclipse.jst.validation.test/.cvsignore b/tests/org.eclipse.jst.validation.test/.cvsignore
deleted file mode 100644
index ba077a4..0000000
--- a/tests/org.eclipse.jst.validation.test/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
diff --git a/tests/org.eclipse.jst.validation.test/.project b/tests/org.eclipse.jst.validation.test/.project
deleted file mode 100644
index 7fec391..0000000
--- a/tests/org.eclipse.jst.validation.test/.project
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jst.validation.test</name>
-	<comment></comment>
-	<projects>
-		<project>com.ibm.etools.commontests.testcollector</project>
-		<project>com.ibm.etools.validation</project>
-		<project>com.ibm.etools.validation.prop</project>
-		<project>com.ibm.wtp.common</project>
-		<project>org.eclipse.jem.workbench</project>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/tests/org.eclipse.jst.validation.test/build.properties b/tests/org.eclipse.jst.validation.test/build.properties
deleted file mode 100644
index 89e6e00..0000000
--- a/tests/org.eclipse.jst.validation.test/build.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-source.runtime/test.jar = test/,\
-                          jUnitWrapper/
-bin.includes = plugin.xml,\
-               testInput/,\
-               test.xml,\
-               runtime/test.jar
-output.runtime/test.jar = bin/
-jars.compile.order = tests.jar
-              
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.validation.test/build/buildcontrol.properties b/tests/org.eclipse.jst.validation.test/build/buildcontrol.properties
deleted file mode 100644
index 94147de..0000000
--- a/tests/org.eclipse.jst.validation.test/build/buildcontrol.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-CONTACT=ruthdaly@ca.ibm.com
-ComponentShortName=ValTest
-ComponentFullName=Validation BVT Plugin
-ComponentCompetency=BVT
-JavaCompile.1=srcjar
-BuildVerification.1=dir
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.validation.test/build/package.xml b/tests/org.eclipse.jst.validation.test/build/package.xml
deleted file mode 100644
index a590d8b..0000000
--- a/tests/org.eclipse.jst.validation.test/build/package.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<project name="com.ibm.etools.validation.test" default="packagingPlugin" basedir="./..">
-    <target name="init">
-        <property name="packageDir" value=""/>
-        <property name="plugin.directory"  value="${basedir}"/>
-        <property name="plugin.id" value="com.ibm.etools.validation.test"/>
-        <property name="plugin.version"  value=""/>
-    </target>
-    <target name="packagingPlugin" depends="init">
-        <echo message="${plugin.id}"/>
-        <copy todir="${packageDir}/plugins/${plugin.id}_${plugin.version}">
-            <fileset dir="${plugin.directory}">
-                <include name="plugin.xml"/>
-                <include name="testvalidation.bat"/>
-                <include name="testvalidation.sh"/>
-                <include name="runtime/test.jar"/>
-                <include name="runtime/jUnitWrapper.jar"/>
-            </fileset>
-        </copy>
-    </target>
-</project>
diff --git a/tests/org.eclipse.jst.validation.test/build/sourcejar.txt b/tests/org.eclipse.jst.validation.test/build/sourcejar.txt
deleted file mode 100644
index 69bd473..0000000
--- a/tests/org.eclipse.jst.validation.test/build/sourcejar.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-test
-jUnitWrapper
-
-
-
-
diff --git a/tests/org.eclipse.jst.validation.test/build/wsBuild.xml b/tests/org.eclipse.jst.validation.test/build/wsBuild.xml
deleted file mode 100644
index dedb95a..0000000
--- a/tests/org.eclipse.jst.validation.test/build/wsBuild.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE project [
-	<!ENTITY baseBuild SYSTEM "file:../../wsBuildDef.xml">
-]>
-
-<project name="buildPlugin" default="build" basedir="./..">
-
-<!-- include the common xml build file -->
-&baseBuild;
-
-<!-- customize the jar creation here for multi-jar builds -->
-<target name="build" depends="prepare" if="plugin.id">
-    <antcall target="buildjar">
-        <param name="jarname" value="test"/>
-        <param name="jarclasspath" value="${plugin.classpath}"/>
-    </antcall>
-
-    <antcall target="buildjar">
-        <param name="jarname" value="jUnitWrapper"/>
-        <param name="jarclasspath" value="${plugin.classpath};${plugin.directory}/${plugin.library.directory}/test.jar"/>
-    </antcall>
-
-</target>
-
-</project>
diff --git a/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/AutomatedValidationBVT.java b/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/AutomatedValidationBVT.java
deleted file mode 100644
index 89bd66c..0000000
--- a/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/AutomatedValidationBVT.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Created on Feb 9, 2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.eclipse.jst.validation.test.junit;
-
-/**
- * @author jialin
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-
-import java.io.File;
-import java.net.URL;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.core.runtime.Platform;
-
-
-/**
- * @author jsholl
- *
- * To change this generated comment go to 
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-public class AutomatedValidationBVT extends TestSuite {
-
-    public static String baseDirectory = null;
-    
-    static {
-        try {
-            IPluginDescriptor pluginDescriptor = Platform.getPluginRegistry().getPluginDescriptor("org.eclipse.jst.validation.test");
-            URL url = pluginDescriptor.getInstallURL(); 
-        	AutomatedValidationBVT.baseDirectory = Platform.asLocalURL(url).getFile() + "validationResources" + File.separatorChar;
-		} catch (Exception e) { 
-			System.err.println("Using working directory since a workspace URL could not be located.");
-		} 
-    }
-
-    public static int unimplementedMethods;
-
-    public static void main(String[] args) {
-        unimplementedMethods = 0;
-        TestRunner.run(suite());
-        if (unimplementedMethods > 0) {
-            System.out.println("\nCalls to warnUnimpl: " + unimplementedMethods);
-        }
-    }
-
-    public AutomatedValidationBVT() {
-        super();
-        TestSuite suite = (TestSuite) AutomatedValidationBVT.suite();
-        for (int i = 0; i < suite.testCount(); i++) {
-            addTest(suite.testAt(i));
-        }
-    }
-
-    public static Test suite() {
-        TestSuite suite = new TestSuite("Test for org.eclipse.jst.validation.test");
-        suite.addTest(new BVTSuite());
-        return suite;
-    }
-}
diff --git a/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/BVTSuite.java b/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/BVTSuite.java
deleted file mode 100644
index 510c90a..0000000
--- a/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/BVTSuite.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.eclipse.jst.validation.test.junit;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.logging.Level;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jst.validation.test.BVTValidationPlugin;
-import org.eclipse.jst.validation.test.internal.registry.OperationTestcase;
-import org.eclipse.jst.validation.test.internal.registry.ValidatorTestcase;
-import org.eclipse.jst.validation.test.internal.util.BVTValidationUtility;
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-
-/**
- * Wraps the existing validation bvt code in a JUnit artifact
- * so that the tests can be run within JUnit. Instances of this
- * class wrap all of the ValidatorSuite instances that must be run.
- */
-public class BVTSuite extends TestSuite {
-	private Map _validatorSuites = null;
-	
-	public BVTSuite() {
-		_validatorSuites = new HashMap();
-		loadValidatorSuites();
-		loadOperationSuites();
-	}
-	
-	private void loadValidatorSuites() {
-		IProgressMonitor monitor = new NullProgressMonitor();
-		
-		ValidatorTestcase[] tmds = BVTValidationUtility.getValidatorTests(monitor);
-		for(int i=0; i<tmds.length; i++) {
-			ValidatorTestcase tmd = tmds[i];
-
-			if(tmd.isVisible()) {
-				ValidatorMetaData vmd = tmd.getValidatorMetaData();
-				ValidatorSuite vs = (ValidatorSuite)_validatorSuites.get(vmd);
-				if(vs == null) {
-					vs = new ValidatorSuite(vmd);
-				}
-				ValidatorTest vt = new ValidatorTest(tmd, vs);
-				vs.addTest(vt);
-				_validatorSuites.put(vmd, vs);
-			}
-		}
-		
-		Iterator iterator = _validatorSuites.values().iterator();
-		while(iterator.hasNext()) {
-			ValidatorSuite vs = (ValidatorSuite)iterator.next();
-			addTest(vs);
-		}
-	}
-	
-	private void loadOperationSuites() {
-		IProgressMonitor monitor = new NullProgressMonitor();
-		
-		OperationTestcase[] tmds = BVTValidationUtility.getOperationTests(monitor);
-		OperationSuite os = new OperationSuite();
-		for(int i=0; i<tmds.length; i++) {
-			OperationTestcase tmd = tmds[i];
-
-			if(tmd.isVisible()) {
-				OperationTest ot = new OperationTest(tmd, os);
-				os.addTest(ot);
-			}
-		}
-		
-		addTest(os);
-	}
-
-	public static Test suite() {
-		// Turn logging to SEVERE
-		BVTValidationPlugin.getPlugin().getMsgLogger().setLevel(Level.SEVERE);
-		return new BVTSuite();
-	}
-
-	public String toString() {
-		return "Validation BVT Suite"; //$NON-NLS-1$
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/BuildInfo.java b/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/BuildInfo.java
deleted file mode 100644
index aef06d1..0000000
--- a/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/BuildInfo.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.eclipse.jst.validation.test.junit;
-public class BuildInfo {
-  public static final String copyright = "Licensed Materials -- Property of IBM\n(c) Copyright International Business Machines Corporation, 2001,2003\nUS Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.";
-  public static final String fgBuildLevel = "20031112_1915-WB212-AD-V511D-W5";
-  public static String level() { return fgBuildLevel; }
-  public static String getWSABuildLevel() { return fgBuildLevel; }
-}
diff --git a/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/JUnitBuffer.java b/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/JUnitBuffer.java
deleted file mode 100644
index ae9fe60..0000000
--- a/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/JUnitBuffer.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Created on Apr 16, 2003
- *
- * To change this generated comment go to 
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.jst.validation.test.junit;
-
-import java.io.File;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jst.validation.test.BVTValidationPlugin;
-import org.eclipse.jst.validation.test.BufferedTaskStatus;
-import org.eclipse.jst.validation.test.setup.IBuffer;
-
-
-/**
- * When the tests are run as part of JUnit, redirect the output
- * to the JUnit test case.
- */
-public class JUnitBuffer implements IBuffer {
-	private String _logFileName = null;
-	private BufferedTaskStatus _status = null;
-	
-	JUnitBuffer(String logFileName) {
-		_status = new BufferedTaskStatus(getLogFileName(logFileName), new NullProgressMonitor());
-	}
-	
-	public void setProgressMonitor(IProgressMonitor monitor) {
-		_status.setProgressMonitor(monitor);
-	}
-	
-	private String getLogFileName(String logFileName) {
-		if(_logFileName == null) {
-			logFileName = logFileName.replace(' ', '_');
-			IPath stateLocation = BVTValidationPlugin.getPlugin().getStateLocation();
-			File log = new File(stateLocation.toOSString(), logFileName); //$NON-NLS-1$
-			_logFileName = log.getAbsolutePath();
-		}
-		return _logFileName;
-	}
-	
-	public String getLogFileName() {
-		return _status.getLogFileName();
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.ITestStatus#clear()
-	 */
-	public void clear() {
-		_status.clear();
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.IBuffer#delineate(java.lang.String)
-	 */
-	public void delineate(String taskName) {
-		_status.delineate(taskName);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.IBuffer#getProgressMonitor()
-	 */
-	public IProgressMonitor getProgressMonitor() {
-		return _status.getProgressMonitor();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.IBuffer#report()
-	 */
-	public void report() {
-		_status.report();
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.IBuffer#write(java.lang.String)
-	 */
-	public void write(String message) {
-		_status.write(message);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.ITestStatus#addElapsedTime(java.lang.String, long)
-	 */
-	public void addElapsedTime(String taskName, long elapsedTime) {
-		_status.addElapsedTime(taskName, elapsedTime);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.ITestStatus#addExecutionStatus(java.lang.String, int, org.eclipse.jst.validation.test.setup.IBuffer, java.lang.String)
-	 */
-	public void addExecutionStatus(String testcaseName, String subTaskName, int passOrFail, IBuffer buffer, String message) {
-		_status.addExecutionStatus(testcaseName, subTaskName, passOrFail, buffer, message);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.ITestStatus#addGlobalExecutionStatus(java.lang.String, int)
-	 */
-	public void addExecutionStatus(String testPassName, boolean pass) {
-		_status.addExecutionStatus(testPassName, pass);
-	}
-
-	public void addExecutionStatus(String testPassName, String subTaskName, boolean pass) {
-		_status.addExecutionStatus(testPassName, subTaskName, pass);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.ITestStatus#isSuccessful()
-	 */
-	public boolean isSuccessful() {
-		return _status.isSuccessful();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.ITestStatus#isSuccessful()
-	 */
-	public boolean isSuccessful(String testName) {
-		return _status.isSuccessful(testName);
-	}
-
-}
diff --git a/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/OperationSuite.java b/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/OperationSuite.java
deleted file mode 100644
index cff7d0b..0000000
--- a/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/OperationSuite.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.eclipse.jst.validation.test.junit;
-
-import junit.framework.TestResult;
-import junit.framework.TestSuite;
-
-/**
- * Instances of this class wrap all of the operations, in plugin.xml,
- * for the validation framework.
- */
-public class OperationSuite extends TestSuite {
-	private JUnitBuffer _buffer = null;
-
-	public OperationSuite() {
-	}
-	
-	public String toString() {
-		return "Validation Framework Tests"; //$NON-NLS-1$
-	}
-
-	public JUnitBuffer getBuffer() {
-		if(_buffer == null) {
-			_buffer = new JUnitBuffer(toString() + System.currentTimeMillis() + ".log"); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		return _buffer;
-	}
-
-	/* (non-Javadoc)
-	 * @see junit.framework.Test#run(junit.framework.TestResult)
-	 */
-	public void run(TestResult result) {
-		super.run(result);
-		getBuffer().report(); // report only after all of the tests in this suite have finished
-		getBuffer().clear();
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/OperationTest.java b/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/OperationTest.java
deleted file mode 100644
index 6c0b76b..0000000
--- a/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/OperationTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package org.eclipse.jst.validation.test.junit;
-
-import junit.framework.TestCase;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jst.validation.test.internal.registry.OperationTestcase;
-import org.eclipse.jst.validation.test.internal.registry.TestcaseUtility;
-import org.eclipse.jst.validation.test.internal.util.BVTRunner;
-
-
-/**
- * Instances of this class run an IWorkspaceRunnable that tests the
- * validation framework.
- */
-public class OperationTest extends TestCase {
-	private OperationSuite _suite = null;
-	private OperationTestcase _tmd = null;
-
-	public OperationTest(OperationTestcase tmd, OperationSuite suite) {
-		super(tmd.getName()); // the method named "test" runs the test.
-		_tmd = tmd;
-		_suite = suite;
-	}
-	
-	public JUnitBuffer getBuffer() {
-		return _suite.getBuffer();
-	}
-	
-	public String toString() {
-		return _tmd.getName();
-	}
-	
-	/* (non-Javadoc)
-	 * @see junit.framework.TestCase#runTest()
-	 */
-	protected void runTest() throws Throwable {
-		try {
-			IProject project = TestcaseUtility.findProject(_tmd);
-			if((project == null) || !project.exists()) {
-				// File needs to be imported (i.e., set up the test).
-				if(!BVTRunner.singleton().setupTests(getBuffer(), _tmd, false)) {
-					fail("Could not import input from directory " + TestcaseUtility.getInputDir(_tmd)); //$NON-NLS-1$
-				}
-			}
-			
-			if(!project.isAccessible()) {
-				fail("Project " + project.getName() + " is not accessible."); //$NON-NLS-1$ //$NON-NLS-2$
-			}
-			
-			_tmd.run(getBuffer(), project);
-			if(!getBuffer().isSuccessful(_tmd.getName())) {
-				fail(_tmd.getName() + " failed. Read the log for details. " + getBuffer().getLogFileName()); //$NON-NLS-1$
-			}
-		}
-		finally {
-			// Whether this test case fails or not, send its results to the log.
-			getBuffer().delineate(_tmd.getName());
-		}
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/ValidatorSuite.java b/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/ValidatorSuite.java
deleted file mode 100644
index b6fea36..0000000
--- a/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/ValidatorSuite.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.eclipse.jst.validation.test.junit;
-
-import junit.framework.TestResult;
-import junit.framework.TestSuite;
-
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-
-/**
- * Instances of this class wrap all of the <test> instances,
- * contributed in plugin.xml, for one validator.
- */
-public class ValidatorSuite extends TestSuite {
-	private ValidatorMetaData _vmd = null;
-	private JUnitBuffer _buffer = null;
-
-	public ValidatorSuite(ValidatorMetaData vmd) {
-		_vmd = vmd;
-	}
-	
-	public String toString() {
-		return _vmd.getValidatorDisplayName();
-	}
-	
-	public JUnitBuffer getBuffer() {
-		if(_buffer == null) {
-			_buffer = new JUnitBuffer(toString() + System.currentTimeMillis() + ".log"); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		return _buffer;
-	}
-
-	/* (non-Javadoc)
-	 * @see junit.framework.Test#run(junit.framework.TestResult)
-	 */
-	public void run(TestResult result) {
-		super.run(result);
-		getBuffer().report(); // report only after all of the tests in this suite have finished
-		getBuffer().clear();
-	}
-}
-
diff --git a/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/ValidatorTest.java b/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/ValidatorTest.java
deleted file mode 100644
index 839b222..0000000
--- a/tests/org.eclipse.jst.validation.test/jUnitWrapper/org/eclipse/jst/validation/test/junit/ValidatorTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package org.eclipse.jst.validation.test.junit;
-
-import junit.framework.TestCase;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jst.validation.test.internal.registry.TestcaseUtility;
-import org.eclipse.jst.validation.test.internal.registry.ValidatorTestcase;
-import org.eclipse.jst.validation.test.internal.util.BVTRunner;
-
-
-/**
- * Instances of this class represent one <test>, contributed in
- * plugin.xml, for one validator.
- */
-public class ValidatorTest extends TestCase {
-	private ValidatorTestcase _tmd = null;
-	private ValidatorSuite _suite = null;
-
-	public ValidatorTest(ValidatorTestcase tmd, ValidatorSuite suite) {
-		super(tmd.getName()); // the method named "test" runs the test.
-		_tmd = tmd;
-		_suite = suite;
-	}
-	
-	public JUnitBuffer getBuffer() {
-		return _suite.getBuffer();
-	}
-	
-	public String toString() {
-		return _tmd.getProjectName();
-	}
-
-	/* (non-Javadoc)
-	 * @see junit.framework.TestCase#runTest()
-	 */
-	protected void runTest() throws Throwable {
-		try {
-			IProject project = TestcaseUtility.findProject(_tmd);
-			if((project == null) || !project.exists()) {
-				// File needs to be imported (i.e., set up the test).
-				if(!BVTRunner.singleton().setupTests(getBuffer(), _tmd, false)) {
-					fail("Could not import input from directory " + TestcaseUtility.getInputDir(_tmd)); //$NON-NLS-1$
-				}
-			}
-
-			if(!project.isAccessible()) {
-				fail("Project " + project.getName() + " is not accessible."); //$NON-NLS-1$ //$NON-NLS-2$
-			}
-			
-			_tmd.run(getBuffer(), project);
-			if(!getBuffer().isSuccessful(_tmd.getName())) {
-				fail(_tmd.getName() + " failed. Read the log for details. " + getBuffer().getLogFileName()); //$NON-NLS-1$
-			}
-		}
-		finally {
-			// Whether this test case fails or not, send its results to the log.
-			getBuffer().delineate(_tmd.getName());
-		}
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.test/plugin.xml b/tests/org.eclipse.jst.validation.test/plugin.xml
deleted file mode 100644
index 54543c6..0000000
--- a/tests/org.eclipse.jst.validation.test/plugin.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<plugin
-   id="org.eclipse.jst.validation.test"
-   name="Validation Testing Component"
-   version="1.0.0"
-   class="org.eclipse.jst.validation.test.BVTValidationPlugin">
-
-   <runtime>
-      <library name="runtime/test.jar">
-         <export name="*"/>
-      </library>
-   </runtime>
-   <requires>
-      <import plugin="org.eclipse.core.boot" export="true"/>
-      <import plugin="org.eclipse.core.resources" export="true"/>
-      <import plugin="org.eclipse.core.runtime" export="true"/>
-      <import plugin="org.eclipse.wst.validation" export="true"/>
-      <import plugin="org.eclipse.jst.validation.sample"/>
-      <import plugin="org.junit" export="true" optional="true"/>
-      <import plugin="org.eclipse.jem.workbench"/>
-      <import plugin="org.eclipse.core.runtime.compatibility"/>
-      <import plugin="org.eclipse.jdt.core"/>
-      <import plugin="org.eclipse.wst.common.frameworks"/>
-   </requires>
-
-
-<!--============================-->
-<!-- Validation Contributions   -->
-<!--============================-->
-<!-- Validation extension points -->
-   <extension-point id="test" name="validator test"/>
-   <extension-point id="testSetup" name="testSetup"/>
-   <extension-point id="opTest" name="operation test"/>
-
-<!-- ====================================================== -->
-<!--           JUnit BVT Test Suite                         -->
-<!-- ====================================================== -->
-<!--   <extension
-         point="org.eclipse.wst.common.tests.collector.suites">
-      <suite
-            suiteName="Validation BVT Suite"
-            suiteClass="org.eclipse.jst.validation.test.junit.BVTSuite">
-      </suite>
-   </extension> -->
-<!-- batch BVT -->
-   <extension
-         id="bvt_batch"
-         point="org.eclipse.core.runtime.applications">
-      <application>
-         <run
-               class="org.eclipse.jst.validation.test.BVTValidationBatch">
-         </run>
-      </application>
-   </extension>
-
-</plugin>
diff --git a/tests/org.eclipse.jst.validation.test/src/jUnitWrapper-src.jar b/tests/org.eclipse.jst.validation.test/src/jUnitWrapper-src.jar
deleted file mode 100644
index 280b69c..0000000
--- a/tests/org.eclipse.jst.validation.test/src/jUnitWrapper-src.jar
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.validation.test/src/test-src.jar b/tests/org.eclipse.jst.validation.test/src/test-src.jar
deleted file mode 100644
index cccfdcc..0000000
--- a/tests/org.eclipse.jst.validation.test/src/test-src.jar
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.jst.validation.test/test.xml b/tests/org.eclipse.jst.validation.test/test.xml
deleted file mode 100644
index cdcaa7b..0000000
--- a/tests/org.eclipse.jst.validation.test/test.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="testsuite" default="run" basedir=".">
-  <!--==============================================================-->
-  <!-- The property ${eclipse-home} should be passed into this script. -->
-  <!-- Set a meaningful default value for when it is not.           -->
-  <!--==============================================================-->
-  <!-- <property name="eclipse-home" value="${basedir}\.."/> -->
-
-  <!--==============================================================-->
-  <!-- Set the environment properties.                              -->
-  <!--==============================================================-->
-  <property name="plugin-name" value="org.eclipse.jst.validation.test"/>
-  <property name="library-file"
-            value="${eclipse-home}/plugins/org.eclipse.test_3.1.0/library.xml"/>
-  <property name="extraVMargs" value="-DXmx700M"/>
-
-  <!--===============================================================-->
-  <!-- This target initializes all of the tests that will run.       -->
-  <!-- Initialization for individual tests should be done within the --> 
-  <!-- body of the suite target.                                     -->
-  <!--===============================================================-->
-  <target name="init">
-      <tstamp/>
-      <delete>
-         <fileset dir="${eclipse-home}" includes="org.*.xml"/>
-      </delete>
-  </target>
-
-  <!--==============================================================-->
-  <!-- This target defines the tests that need to run.              -->
-  <!--==============================================================-->
-  <target name="suite">
-      <property name="workspace" value="${eclipse-home}/jst_folder"/>
-      <delete dir="${workspace}" quiet="true"/>
-      <ant target="core-test" antfile="${library-file}" dir="${eclipse-home}">
-      <property name="data-dir" value="${workspace}"/>
-      <property name="plugin-name" value="${plugin-name}"/>
-      <property name="classname" value="org.eclipse.jst.validation.test.junit.AutomatedValidationBVT"/>
-   	  <property name="plugin-path" value="${eclipse-home}/plugins/${plugin-name}"/>
-   	  <property name="extraVMargs" value="${extraVMargs}"/>
-    </ant>
-  </target>
-
-  <!--==================================================================-->
-  <!-- This target holds code to cleanup the testing environment after  -->
-  <!-- all of the tests have been run. You can use this target to       -->
-  <!-- delete temporary files that have been created.                   -->
-  <!--==================================================================-->
-  <target name="cleanup">
-  </target>
-
-  <!--==================================================================-->
-  <!-- This target runs the test suite. Any actions that need to happen -->
-  <!-- after all the tests have been run should go here.                -->
-  <!--==================================================================-->
-  <target name="run" depends="init,suite,cleanup">
-    <ant target="collect" antfile="${library-file}" dir="${eclipse-home}">
-      <property name="includes" value="org.*.xml"/>
-      <property name="output-file" value="${plugin-name}.xml"/>
-    </ant>
-  </target>
-
-</project>
-
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/BVTValidationBatch.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/BVTValidationBatch.java
deleted file mode 100644
index e533c99..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/BVTValidationBatch.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.eclipse.jst.validation.test;
-
-import java.util.logging.Level;
-
-import org.eclipse.core.boot.IPlatformRunnable;
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jst.validation.test.internal.util.BVTRunner;
-import org.eclipse.jst.validation.test.internal.util.BVTValidationUtility;
-
-import com.ibm.wtp.common.logger.proxy.Logger;
-/**
- */
-public class BVTValidationBatch implements IPlatformRunnable {
-	private String _dir = null; // The test cases (.ear, .jar) are identified through a relative directory, and this is the parent of that relative directory.
-	private boolean _verbose = false;
-	static Boolean _passed = null;
-	
-	boolean isVerbose() {
-		return _verbose;
-	}
-	
-	void setVerbose(boolean v) {
-		_verbose = v;
-	}
-	
-	String getDir() {
-		return _dir;
-	}
-	
-	void setDir(String dir) {
-		_dir = dir;
-	}
-	
-	private void parseUserSettings(Object args) {
-		if(args == null) {
-			// nothing to set
-			return;
-		}
-		
-		if(args instanceof String[]) {
-			String[] userSettings = (String[])args;
-			if(userSettings.length == 0) {
-				return;
-			}
-			
-			for(int i=0; i<userSettings.length; i++) {
-				if(userSettings[i].equals("-dir")) { //$NON-NLS-1$
-					setDir(userSettings[i+1]);
-				}
-				
-				if(userSettings[i].equals("-trace")) { //$NON-NLS-1$
-					setVerbose(true);
-				}
-			}
-
-			// turn on framework validation logging
-			if(isVerbose()) {
-				BVTValidationPlugin.getPlugin().getMsgLogger().setLevel(Level.FINEST);
-			}
-		}
-	}
-
-
-	/**
-	 * Parse the user's settings, import the test cases, and run the test cases.
-	 */
-	public Object run(Object args) throws BVTValidationException {
-		parseUserSettings(args);
-
-		IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
-			public void run(IProgressMonitor monitor) {		
-				try {
-					monitor.subTask("Workspace is located at: " + BVTValidationPlugin.getPlugin().getStateLocation().toOSString()); //$NON-NLS-1$
-			
-					ConsoleBuffer buffer = new ConsoleBuffer();
-					BVTRunner.singleton().setupTests(buffer, isVerbose());
-					
-					int numTests = BVTValidationUtility.numValidatorTests(monitor, ResourcesPlugin.getWorkspace().getRoot().getProjects());
-					int numPassed = BVTRunner.singleton().test(buffer, ResourcesPlugin.getWorkspace().getRoot().getProjects());
-					_passed = ((numPassed == numTests) ? Boolean.TRUE : Boolean.FALSE);
-				}
-				catch(BVTValidationException exc) {
-					Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-					if(logger.isLoggingLevel(Level.SEVERE)) {
-						logger.write(Level.SEVERE, exc.getMessage());
-						logger.write(Level.SEVERE, exc);
-						if(exc.getTargetException() != null) {
-							logger.write(Level.SEVERE, exc.getTargetException());
-						}
-					}
-				}
-			}
-		};
-		
-		try {
-			ConsoleProgressMonitor monitor = new ConsoleProgressMonitor();
-			ResourcesPlugin.getWorkspace().run(runnable, monitor);
-		}
-		catch(CoreException exc) {
-			throw new BVTValidationException(exc);
-		}
-		return _passed;
-	}
-	
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/BVTValidationException.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/BVTValidationException.java
deleted file mode 100644
index ed809d9..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/BVTValidationException.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.eclipse.jst.validation.test;
-
-public class BVTValidationException extends Exception {
-	private Throwable _target = null;
-	
-	public BVTValidationException(Throwable t) {
-		setTargetException(t);
-	}
-	
-	public BVTValidationException(String s) {
-		super(s);
-	}
-	
-	public BVTValidationException(String s, Throwable target) {
-		super(s);
-		setTargetException(target);
-	}
-	
-	public Throwable getTargetException() {
-		return _target;
-	}
-	
-	public void setTargetException(Throwable target) {
-		_target = target;
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/BVTValidationPlugin.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/BVTValidationPlugin.java
deleted file mode 100644
index 6352f90..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/BVTValidationPlugin.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package org.eclipse.jst.validation.test;
-
-
-/**
- * Plugin for TVT testing.
- */
-public class BVTValidationPlugin extends org.eclipse.wst.common.frameworks.internal.WTPPlugin {
-	private static BVTValidationPlugin _inst = null;
-	public static final String PLUGIN_ID = "org.eclipse.jst.validation.test"; //$NON-NLS-1$
-//	private boolean _debug = false;
-//	private static final String LOG_FILE_NAME = "fvtlog.xml";
-
-	/**
-	 * ValidationTVTPlugin constructor comment.
-	 * @param descriptor org.eclipse.core.runtime.IPluginDescriptor
-	 */
-	public BVTValidationPlugin() {
-		super();
-		if(_inst == null) {
-			_inst = this;
-		}
-	}
-	
-	public static BVTValidationPlugin getPlugin() {
-		return _inst;
-	}
-/*	
-	private void initializeLog(int logLevel) {
-		IPath pluginStateLocation = getPlugin().getStateLocation();
-		IPath logFilePath = pluginStateLocation.append(LOG_FILE_NAME);
-		String logName = logFilePath.toOSString();
-		BVTValidationPlugin.getPlugin().getMsgLogger().setFileName(logName);
-		ValidationPlugin.getPlugin().getMsgLogger().setFileName(logName);
-	}
-*/	
-/*	public MsgLogger getMsgLogger() {
-		if (_logger == null) {
-			_logger = (MsgLogger) MsgLogger.getFactory().getLogger(PluginHelperImpl.getMsgLoggerName(this), this);
-			
-			if(!_logger.isLoggingLevel(Level.SEVERE)) {
-				// Turn logging on
-				_logger.setLevel(Level.SEVERE);
-				_logger.setFileName(org.eclipse.core.runtime.Platform.getLocation().addTrailingSeparator().append(".metadata").addTrailingSeparator().toOSString().concat("LoggingUtil.log"));
-			}
-			
-		}
-		return _logger;
-	}
-	*/
-	/**
-	 * Retrieves a hashtable of a logger's preferences initially from the com.ibm.etools.logging.util.loggingDefaults  
-	 * extension point if specified in the com.ibm.etools.logging.util plugin.xml file.  If specified, the 
-	 * com.ibm.etools.logging.util.loggingOptions extension point preferences in the parameter plugin's
-	 * plugin.xml file are returned.  
-	 * 
-	 * The logger's preferences are stored in the return hashtable using the static instance variables 
-	 * in LoggerStateHashKeys as keys.
-	 * 
-	 * @param plugin the Plugin polled for their logger's preferences in the plugin.xml file
-	 * @return hashtable of a logger's preferences
-	 */
-	/*public Hashtable getMsgLoggerConfig(Plugin plugin) {
-		return (new PluginHelperImpl().getMsgLoggerConfig(plugin));
-	}*/
-	
-	/**
-	 * Sets the logger's preferences based on values in the parameter hashtable.
-	 *
-	 * The logger's preferences are stored in the parameter hashtable using the static 
-	 * instance variables in LoggerStateHashKeys as keys.
-	 * 
-	 * @param msgLoggerConfig hashtable of the logger's preferences
-	 */
-/*	public void setMsgLoggerConfig(Hashtable msgLoggerConfig) {
-		getMsgLogger().setMsgLoggerConfig(msgLoggerConfig);
-	}*/
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.common.WTPPlugin#getPluginID()
-	 */
-	public String getPluginID() {
-	    return PLUGIN_ID;
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/BufferedTaskStatus.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/BufferedTaskStatus.java
deleted file mode 100644
index 3254686..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/BufferedTaskStatus.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package org.eclipse.jst.validation.test;
-
-import java.util.Iterator;
-import java.util.Map;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jst.validation.test.internal.registry.TestcaseUtility;
-import org.eclipse.jst.validation.test.setup.IBuffer;
-
-
-public class BufferedTaskStatus extends TaskStatus implements IBuffer {
-	public static final String NEWLINE = System.getProperty("line.separator"); //$NON-NLS-1$
-	private IProgressMonitor _monitor = null;
-	private StringBuffer _buffer = null;
-	private String _logFileName = null;
-	
-	public BufferedTaskStatus() {
-	}
-	
-	public BufferedTaskStatus(String logFileName) {
-		this(logFileName, null);
-	}
-	
-	public BufferedTaskStatus(String logFileName, IProgressMonitor monitor) {
-		_buffer = new StringBuffer();
-		setProgressMonitor(monitor);
-		setLogFileName(logFileName);
-	}
-	
-	public void clear() {
-		super.clear();
-		_buffer = null;
-		_buffer = new StringBuffer();
-		_monitor.done();
-		_monitor = null;
-	}
-
-	public String getLogFileName() {
-		return _logFileName;
-	}
-	
-	public void setLogFileName(String name) {
-		_logFileName = name;
-	}
-	
-	public StringBuffer getBuffer() {
-		return _buffer;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.IBuffer#getProgressMonitor()
-	 */
-	public IProgressMonitor getProgressMonitor() {
-		if(_monitor == null) {
-			_monitor = new NullProgressMonitor();
-		}
-		return _monitor;
-	}
-	
-	public void setProgressMonitor(IProgressMonitor m) {
-		_monitor = m;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.IBuffer#report()
-	 */
-	public void report() {
-		_buffer.append(NEWLINE);
-		_buffer.append(">>>>>>>>>>>>>>>>TEST SUITE RESULTS>>>>>>>>>>>>>>>>"); //$NON-NLS-1$
-		_buffer.append(NEWLINE);
-		_buffer.append(NEWLINE);
-
-		if(getElapsedTime().size() > 0) {
-			Iterator iterator = getElapsedTime().keySet().iterator();
-			long total = 0;
-			_buffer.append(">>>>>>>>>>>>>>>>ELAPSED TIME>>>>>>>>>>>>>>>>"); //$NON-NLS-1$
-			_buffer.append(NEWLINE);
-			while(iterator.hasNext()) {
-				String taskName = (String)iterator.next();
-				Long elapsedTime = (Long)getElapsedTime().get(taskName);
-				total += elapsedTime.longValue();
-				_buffer.append("Total elapsed time of task "); //$NON-NLS-1$
-				_buffer.append(taskName);
-				_buffer.append(" is "); //$NON-NLS-1$
-				_buffer.append(elapsedTime);
-				_buffer.append(NEWLINE);
-			}
-			_buffer.append("Total time of all tasks is " + total + ", which is " + (total/1000/60) + " minutes."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			_buffer.append(NEWLINE);
-		}
-
-		int totNumPass = 0;
-		Map taskStatus = getTaskStatus();
-		Iterator iterator = taskStatus.keySet().iterator();
-		_buffer.append(NEWLINE);
-		_buffer.append(">>>>>>>>>>>>>>>>PASS/FAIL SUMMARY>>>>>>>>>>>>>>>>"); //$NON-NLS-1$
-		_buffer.append(NEWLINE);
-		while(iterator.hasNext()) {
-			String taskName = (String)iterator.next();
-			TestStatus ts = (TestStatus)taskStatus.get(taskName);
-			_buffer.append(ts);
-			_buffer.append(NEWLINE);
-			if(ts.isSuccessful()) {
-				totNumPass++;
-			}
-		}
-		
-		_buffer.append(NEWLINE);
-		_buffer.append(NEWLINE);
-		_buffer.append("Total Number Of Tests: "); //$NON-NLS-1$
-		_buffer.append(numTests());
-		_buffer.append(NEWLINE);
-		_buffer.append("Number Passed: "); //$NON-NLS-1$
-		_buffer.append(totNumPass);
-		_buffer.append(NEWLINE);
-		
-		if(getLogFileName() != null) {
-			_buffer.append("This report is stored in the following log file: "); //$NON-NLS-1$
-			_buffer.append(getLogFileName());
-	
-			TestcaseUtility.flush(getLogFileName(), _buffer.toString(), true);
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.IBuffer#delineate()
-	 */
-	public void delineate(String testcaseName) {
-		TaskStatus. TestStatus ts = getTestStatus(testcaseName);
-		if(ts == null) {
-			// nothing to report
-			return;
-		}
-		StringBuffer errorsBuffer = new StringBuffer();
-		errorsBuffer.append(ts.numFailure());
-		errorsBuffer.append(" errors were reported and "); //$NON-NLS-1$
-		errorsBuffer.append(ts.numWarnings());
-		errorsBuffer.append(" warnings were reported. Read "); //$NON-NLS-1$
-		errorsBuffer.append(getLogFileName());
-		errorsBuffer.append(" for details."); //$NON-NLS-1$
-		write(errorsBuffer.toString());
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.IBuffer#write(java.lang.String)
-	 */
-	public void write(String message) {
-		// Can't write to the JUnit log. Can only write to the log by failing the
-		// test case with a message; instead, write to the buffer, and send this
-		// information to a log in the validation.test plugin's state location.
-		_buffer.append(message);
-		_buffer.append(NEWLINE);
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/BuildInfo.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/BuildInfo.java
deleted file mode 100644
index 532c6ef..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/BuildInfo.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.eclipse.jst.validation.test;
-public class BuildInfo {
-  public static final String copyright = "Licensed Materials -- Property of IBM\n(c) Copyright International Business Machines Corporation, 2001,2003\nUS Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.";
-  public static final String fgBuildLevel = "20031112_1915-WB212-AD-V511D-W5";
-  public static String level() { return fgBuildLevel; }
-  public static String getWSABuildLevel() { return fgBuildLevel; }
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/ConsoleBuffer.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/ConsoleBuffer.java
deleted file mode 100644
index 8b8bdcb..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/ConsoleBuffer.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package org.eclipse.jst.validation.test;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jst.validation.test.setup.IBuffer;
-
-
-/**
- * Sends the TestCaseGeneratorOperation output to System.out.
- */
-public class ConsoleBuffer implements IBuffer {
-	private BufferedTaskStatus _status = null;
-	
-	public ConsoleBuffer() {
-		_status = new BufferedTaskStatus(); // no log file
-	}
-
-	/**
-	 * @see org.eclipse.jst.validation.test.setup.IBuffer#report()
-	 */
-	public void report() {
-		_status.report();
-		System.out.println(_status.getBuffer().toString());
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.ITestStatus#clear()
-	 */
-	public void clear() {
-		_status.clear();
-	}
-	
-	public String getLogFileName() {
-		return _status.getLogFileName();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.IBuffer#delineate(java.lang.String)
-	 */
-	public void delineate(String taskName) {
-		_status.delineate(taskName);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.IBuffer#getProgressMonitor()
-	 */
-	public IProgressMonitor getProgressMonitor() {
-		return _status.getProgressMonitor();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.IBuffer#write(java.lang.String)
-	 */
-	public void write(String message) {
-		_status.write(message);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.ITestStatus#addElapsedTime(java.lang.String, long)
-	 */
-	public void addElapsedTime(String taskName, long elapsedTime) {
-		_status.addElapsedTime(taskName, elapsedTime);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.ITestStatus#addExecutionStatus(java.lang.String, int, org.eclipse.jst.validation.test.setup.IBuffer, java.lang.String)
-	 */
-	public void addExecutionStatus(String testcaseName, String subTaskName, int passOrFail, IBuffer buffer, String message) {
-		_status.addExecutionStatus(testcaseName, subTaskName, passOrFail, buffer, message);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.ITestStatus#addGlobalExecutionStatus(java.lang.String, int)
-	 */
-	public void addExecutionStatus(String testPassName, boolean pass) {
-		_status.addExecutionStatus(testPassName, pass);
-	}
-
-	public void addExecutionStatus(String testPassName, String subTaskName, boolean pass) {
-		_status.addExecutionStatus(testPassName, subTaskName, pass);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.ITestStatus#isSuccessful()
-	 */
-	public boolean isSuccessful() {
-		return _status.isSuccessful();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.ITestStatus#isSuccessful()
-	 */
-	public boolean isSuccessful(String testName) {
-		return _status.isSuccessful(testName);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.IBuffer#setProgressMonitor(org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	public void setProgressMonitor(IProgressMonitor monitor) {
-		_status.setProgressMonitor(monitor);
-	}
-
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/ConsoleProgressMonitor.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/ConsoleProgressMonitor.java
deleted file mode 100644
index a6d9f6f..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/ConsoleProgressMonitor.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package org.eclipse.jst.validation.test;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-
-/**
- * This progress monitor directs all task information to std.out.
- */
-public class ConsoleProgressMonitor implements IProgressMonitor {
-	private int _totalWork = 0;
-	private int _workDoneSoFar = 0;
-	private boolean _cancelRequested = false;
-	
-
-	/**
-	 * @see org.eclipse.core.runtime.IProgressMonitor#beginTask(String, int)
-	 */
-	public void beginTask(String name, int totalWork) {
-		_totalWork = totalWork;
-		report(name);
-	}
-
-	/**
-	 * @see org.eclipse.core.runtime.IProgressMonitor#done()
-	 */
-	public void done() {
-		int workRemaining = _totalWork - _workDoneSoFar;
-		worked(workRemaining);
-	}
-
-	/**
-	 * @see org.eclipse.core.runtime.IProgressMonitor#internalWorked(double)
-	 */
-	public void internalWorked(double work) {
-	}
-
-	/**
-	 * @see org.eclipse.core.runtime.IProgressMonitor#isCanceled()
-	 */
-	public boolean isCanceled() {
-		return _cancelRequested;
-	}
-
-	/**
-	 * @see org.eclipse.core.runtime.IProgressMonitor#setCanceled(boolean)
-	 */
-	public void setCanceled(boolean value) {
-		_cancelRequested = value;
-	}
-
-	/**
-	 * @see org.eclipse.core.runtime.IProgressMonitor#setTaskName(String)
-	 */
-	public void setTaskName(String name) {
-		report(name);
-	}
-
-	/**
-	 * @see org.eclipse.core.runtime.IProgressMonitor#subTask(String)
-	 */
-	public void subTask(String name) {
-		report(name);
-	}
-
-	/**
-	 * @see org.eclipse.core.runtime.IProgressMonitor#worked(int)
-	 */
-	public void worked(int work) {
-		_workDoneSoFar += work;
-	}
-
-	private void report(String message) {
-		System.out.println(message);
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/IOperationRunnable.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/IOperationRunnable.java
deleted file mode 100644
index cd7b66d..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/IOperationRunnable.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.eclipse.jst.validation.test;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.jst.validation.test.setup.IBuffer;
-
-
-/**
- * Instances of this interface are run as part of the Test Collector BVT.
- */
-public interface IOperationRunnable extends IWorkspaceRunnable {
-	public void setBuffer(IBuffer b);
-	public void setProject(IProject p);
-	public void setName(String testName);
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/TaskStatus.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/TaskStatus.java
deleted file mode 100644
index e2989d6..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/TaskStatus.java
+++ /dev/null
@@ -1,269 +0,0 @@
-package org.eclipse.jst.validation.test;
-
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.eclipse.jst.validation.test.setup.IBuffer;
-import org.eclipse.jst.validation.test.setup.ITestStatus;
-
-
-/**
- * All of the IBuffer instances need to be able to track elapsed time
- * and execution status. Each buffer can create an internal instance of
- * this class to perform those tasks.
- */
-public class TaskStatus implements ITestStatus {
-	private Map _elapsedTime = null;
-	private Map _taskStatus = null;
-
-	public TaskStatus() {
-		_elapsedTime = new HashMap();
-		_taskStatus = new HashMap();
-	}
-	
-	/**
-	 * @see org.eclipse.jst.validation.test.setup.IBuffer#addElapsedTime(String, long)
-	 */
-	public void addElapsedTime(String taskName, long elapsedTime) {
-		Long time = (Long)_elapsedTime.get(taskName);
-		if(time == null) {
-			time = new Long(elapsedTime);
-		}
-		else {
-			time = new Long(time.longValue() + elapsedTime);
-		}
-		_elapsedTime.put(taskName, time);
-	}
-	
-	public void addExecutionStatus(String taskName, boolean pass) {
-		addExecutionStatus(taskName, null, pass);
-	}
-	
-	public void addExecutionStatus(String taskName, String subTaskName, boolean pass) {
-		int success = (pass) ? ITestStatus.PASS : ITestStatus.FAIL;
-		addExecutionStatus(taskName, subTaskName, success, null, null);
-	}
-	
-	public int numTests() {
-		return _taskStatus.size();
-	}
-	
-	protected Map getElapsedTime() {
-		return _elapsedTime;
-	}
-	
-	protected Map getTaskStatus() {
-		return _taskStatus;
-	}
-	
-	public void addExecutionStatus(String testcaseName, String subTaskName, int severity, IBuffer buffer, String message) {
-		TestStatus ts = getTestStatus(testcaseName);
-		if(ts == null) {
-			ts = new TestStatus(testcaseName);
-			_taskStatus.put(testcaseName, ts);
-		}
-		if(subTaskName == null) {
-			ts.addExecutionStatus(severity);
-		}
-		else {
-			ts.addExecutionStatus(subTaskName, severity);
-		}
-
-		if(message != null) {
-			buffer.write(message);
-		}
-	}
-	
-	protected TestStatus getTestStatus(String testcaseName) {
-		return (TestStatus)_taskStatus.get(testcaseName);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.setup.ITestStatus#isSuccessful()
-	 */
-	public boolean isSuccessful() {
-		if(_taskStatus.size() == 0) {
-			return true;
-		}
-		
-		Iterator iterator = _taskStatus.keySet().iterator();
-		while(iterator.hasNext()) {
-			String tsName = (String)iterator.next();
-			TestStatus ts = (TestStatus)_taskStatus.get(tsName);
-			if(ts == null || !ts.isSuccessful()) {
-				return false;
-			}
-		}
-		
-		return true;
-	}
-	
-	public boolean isSuccessful(String testName) {
-		if(_taskStatus.size() == 0) {
-			return true;
-		}
-		
-		TestStatus ts = (TestStatus)_taskStatus.get(testName);
-		if(ts == null || !ts.isSuccessful()) {
-			return false;
-		}
-		
-		return true;
-	}
-
-	public void clear() {
-		_taskStatus.clear();
-		_elapsedTime.clear();
-	}
-	
-	protected class TestCount {
-		public int numRan = 0;
-		public int numWarn = 0; // Number of warning messages reported for a test case.
-		public int numFail = 0; // Number of failure messages reported for a test case.
-		public int numPass = 0; // Number of test cases that passed.
-	}
-
-	/**
-	 * Instances of this class track the number of test runs and the 
-	 * number of test cases that pass.
-	 */
-	protected class TestStatus implements Comparator {
-		private String _testcaseName = null;
-		private Map _testStatus = null;
-		
-		/**
-		 * Name must not be null.
-		 */
-		public TestStatus(String name) {
-			_testcaseName = name;
-			_testStatus = new HashMap();
-		}
-		
-		public void addExecutionStatus(String subTaskName, int severity) {
-			TestCount soFar = (TestCount)_testStatus.get(subTaskName);
-			if(soFar == null) {
-				soFar = new TestCount();
-			}
-			soFar.numRan++;
-			switch(severity) {
-				case(ITestStatus.WARN): {
-					soFar.numWarn++;
-					soFar.numPass++;
-					break;
-				}
-				
-				case(ITestStatus.FAIL): {
-					soFar.numFail++;
-					break;
-				}
-				
-				case(ITestStatus.PASS): {
-					soFar.numPass++;
-				}
-				
-				default: {
-					// change nothing
-					break;
-				}
-			}
-			
-			_testStatus.put(subTaskName, soFar);
-		}
-		
-		public void addExecutionStatus(int severity) {
-			addExecutionStatus(null, severity);
-		}
-		
-		public String getTestcaseName() {
-			return _testcaseName;
-		}
-		
-		public int numWarnings() {
-			int numWarnings = 0;
-			Iterator iterator = _testStatus.values().iterator();
-			while(iterator.hasNext()) {
-				TestCount tc = (TestCount)iterator.next();
-				numWarnings += tc.numWarn;
-			}
-			return numWarnings;
-		}
-		
-		public int numFailure() {
-			int numFail = 0;
-			Iterator iterator = _testStatus.values().iterator();
-			while(iterator.hasNext()) {
-				TestCount tc = (TestCount)iterator.next();
-				numFail += tc.numFail;
-			}
-			return numFail;
-		}
-		
-		public boolean isSuccessful() {
-			Iterator iterator = _testStatus.values().iterator();
-			while(iterator.hasNext()) {
-				TestCount tc = (TestCount)iterator.next();
-				if(tc.numFail != 0) {
-					return false;
-				}
-			}
-			return true;
-		}
-		
-		public String toString() {
-			int total = 0;
-			int pass = 0;
-			int fail = 0;
-			int warn = 0;
-			
-			Iterator iterator = _testStatus.values().iterator();
-			while(iterator.hasNext()) {
-				TestCount tc = (TestCount)iterator.next();
-				total++;
-				fail += tc.numFail;
-				warn += tc.numWarn;
-				pass += tc.numPass;
-			}
-			
-			StringBuffer buffer = new StringBuffer(getTestcaseName());
-			buffer.append(" Total:"); //$NON-NLS-1$
-			buffer.append(total);
-			buffer.append(" [Pass: "); //$NON-NLS-1$
-			buffer.append(pass);
-			buffer.append(" Fail: "); //$NON-NLS-1$
-			buffer.append(fail);
-			buffer.append(" Warn: "); //$NON-NLS-1$
-			buffer.append(warn);
-			buffer.append("]"); //$NON-NLS-1$
-			return buffer.toString();
-		}
-		
-		public boolean equals(Object o) {
-			if(o instanceof TestStatus) {
-				TestStatus s = (TestStatus)o;
-				return(_testcaseName.equals(s.getTestcaseName()));
-			}
-			
-			return false;
-		}
-		
-		public int hashCode() {
-			return getTestcaseName().hashCode();
-		}
-		
-		/* (non-Javadoc)
-		 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
-		 */
-		public int compare(Object o1, Object o2) {
-			if(!(o1 instanceof TestStatus) && (o2 instanceof TestStatus)) {
-				// Should never happen, but if it does, say that these non-TestStatus objects are equal.
-				return 0;
-			}
-
-			TestStatus a = (TestStatus)o1;
-			TestStatus b = (TestStatus)o2;
-			return a.getTestcaseName().compareTo(b.getTestcaseName());			
-		}
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/ValidationTypeEnum.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/ValidationTypeEnum.java
deleted file mode 100644
index cfe10c3..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/ValidationTypeEnum.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.eclipse.jst.validation.test;
-
-import org.eclipse.core.resources.IncrementalProjectBuilder;
-
-/**
- * Enumeration of the types of validations that can be run.
- */
-public final class ValidationTypeEnum {
-	private ValidationTypeEnum() {
-		// Do not permit instances of this class to be created.
-	}
-	
-	public static final int RUN_VALIDATION = 0; // Manual full invocation of a validation by a user. All validators must support this type of validation.
-	public static final int FULL_VALIDATION = IncrementalProjectBuilder.FULL_BUILD; // Manual invocation of a full build by a user that triggers a full validation. Validators can, but are not required to, support this type of validation.
-	public static final int INCREMENTAL_VALIDATION = IncrementalProjectBuilder.INCREMENTAL_BUILD; // Manual invocation of an incremental build by a user that triggers an incremental validation. Validators can, but are not required to, support this type of validation.
-	public static final int AUTO_VALIDATION = IncrementalProjectBuilder.AUTO_BUILD; // Automatic invocation of an incremental build that triggers an incremental validation. Validators can, but are not required to, support this type of validation.
-	
-	public static final String RUN_VALIDATION_NAME = "RUN_VALIDATION"; //$NON-NLS-1$
-	public static final String ASYNC_NAME = "ASYNC"; //$NON-NLS-1$
-	public static final String INCREMENTAL_VALIDATION_NAME = "INCREMENTAL_BUILD"; //$NON-NLS-1$
-	public static final String FULL_VALIDATION_NAME = "FULL_BUILD"; //$NON-NLS-1$
-	public static final String AUTO_VALIDATION_NAME = "AUTO_BUILD"; //$NON-NLS-1$
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/BVTValidationRegistryReader.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/BVTValidationRegistryReader.java
deleted file mode 100644
index 6581c34..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/BVTValidationRegistryReader.java
+++ /dev/null
@@ -1,895 +0,0 @@
-package org.eclipse.jst.validation.test.internal.registry;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.IPluginRegistry;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jst.validation.test.BVTValidationPlugin;
-import org.eclipse.jst.validation.test.IOperationRunnable;
-import org.eclipse.jst.validation.test.setup.IBuffer;
-import org.eclipse.jst.validation.test.setup.IImportOperation;
-import org.eclipse.wst.validation.internal.ValidationRegistryReader;
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-
-import com.ibm.wtp.common.logger.proxy.Logger;
-
-/**
- * BVTValidationRegistryReader is a singleton who reads the plugin registry
- * for Validator extensions. The read is done once (in the constructor). 
- * 
- * 
- * <extension
- *		point = "com.ibm.etools.validation.fvt.test"
- *		id = "ValidatorFVT"
- *		name = "Validator FVT Test">
- *			<test project="projectName" 
- * 				  validator="com.ibm.etools.validation.ejb.EJBValidator"
- * 				  version="1.1">
- *				<message id="CHKJ2816" resource="ejb-jar.xml" location="216"/>
- *				<message id="CHKJ2816" resource="ejb-jar.xml" location="237"/>
- *				<message id="CHKJ2816" resource="ejb-jar.xml" location="258"/>
- *				<message id="CHKJ2816" resource="ejb-jar.xml" location="279"/>
- *				<message id="CHKJ2816" resource="ejb-jar.xml" location="300"/>
- *			</test>
- * 			... as many <test> as needed
- * </extension>
- */
-public final class BVTValidationRegistryReader implements RegistryConstants {
-	private static BVTValidationRegistryReader inst = null;
-	private static OperationTestReader _opReader = null;
-	private static TestSetupReader _setupReader = null;
-	private static ValidationTestReader _valReader = null;
-
-	/**
-	 * The registry is read once - when this class is instantiated.
-	 */
-	private BVTValidationRegistryReader() {
-		super();
-	}
-
-	/**
-	 * Return all visible test cases for all projects.
-	 */
-	public ITestcaseMetaData[] getTests(IProgressMonitor monitor) {
-		Set tests = new HashSet();
-		ValidatorTestcase[] vts = getValidatorTests(monitor, (String)null);
-		for(int j=0; j<vts.length; j++) {
-			tests.add(vts[j]);
-		}
-		
-		OperationTestcase[] ots = getOperationTests(monitor, (String)null);
-		for(int k=0; k<ots.length; k++) {
-			tests.add(ots[k]);
-		}
-
-		ITestcaseMetaData[] result = new ITestcaseMetaData[tests.size()];
-		tests.toArray(result);
-		return result;
-	}
-	
-	/**
-	 * Return all visible test cases for a project.
-	 */
-	public ITestcaseMetaData[] getTests(IProgressMonitor monitor, IProject[] projects) {
-		Set tests = new HashSet();
-		for(int i=0; i<projects.length; i++) {
-			IProject project = projects[i];
-			ValidatorTestcase[] vts = getValidatorTests(monitor, project);
-			for(int j=0; j<vts.length; j++) {
-				tests.add(vts[j]);
-			}
-			
-			OperationTestcase[] ots = getOperationTests(monitor, project);
-			for(int k=0; k<ots.length; k++) {
-				tests.add(ots[k]);
-			}
-		}
-		
-		ITestcaseMetaData[] result = new ITestcaseMetaData[tests.size()];
-		tests.toArray(result);
-		return result;
-	}
-	
-
-	/**
-	 * Return all validator tests for a project.
-	 */
-	public ValidatorTestcase[] getAllValidatorTests(IProgressMonitor monitor, IProject project) throws IllegalArgumentException {
-		ValidationTestReader reader = getValidationTestReader();
-		return reader.getValidatorTests(monitor, project.getName());
-	}
-
-	/**
-	 * Return all test cases of the named validators on the given project.
-	 */	
-	public ValidatorTestcase[] getAllValidatorTests(IProgressMonitor monitor, IProject project, String[] validatorNames) {
-		Set testSet = new HashSet();		
-		ValidatorTestcase[] tests = getAllValidatorTests(monitor, project);
-		for(int i=0; i<validatorNames.length; i++) {
-			String validator = validatorNames[i];
-			for(int j=0; j<tests.length; j++) {
-				ValidatorTestcase tmd = tests[j];
-				if(tmd.getValidatorClass().equals(validator)) {
-					testSet.add(tmd);
-					break;
-				}
-			}
-		}
-		
-		ValidatorTestcase[] result = new ValidatorTestcase[testSet.size()];
-		testSet.toArray(result);
-		return result;
-	}
-	
-	/**
-	 * Return all of the visible test cases that register messages against this project.
-	 */
-	public ValidatorTestcase[] getValidatorTests(IProgressMonitor monitor, IProject project) throws IllegalArgumentException {
-		return getValidatorTests(monitor, project.getName());
-	}
-
-	private ValidationTestReader getValidationTestReader() {
-		if(_valReader == null) {
-			_valReader = new ValidationTestReader();
-		}
-		return _valReader;
-	}
-	
-	private OperationTestReader getOperationTestReader() {
-		if(_opReader == null) {
-			_opReader = new OperationTestReader();
-		}
-		return _opReader;
-	}
-	
-	private TestSetupReader getTestSetupReader() {
-		if (_setupReader == null) {
-			_setupReader = new TestSetupReader();
-		}
-		return _setupReader;
-	}
-	
-	/**
-	 * Return the test cases named testName, or if testName is null, return all test cases.
-	 */
-	public ValidatorTestcase[] getValidatorTests(IProgressMonitor monitor, String testName) throws IllegalArgumentException {
-		return getValidationTestReader().getVisibleValidatorTests(monitor, testName);
-	}
-	
-	/**
-	 * Return the test cases that register messages against this project.
-	 */
-	public OperationTestcase[] getOperationTests(IProgressMonitor monitor, IProject project) throws IllegalArgumentException {
-		return getOperationTests(monitor, project.getName());
-	}
-
-	/**
-	 * Return the test cases named testName, or if testName is null, return all test cases.
-	 */
-	public OperationTestcase[] getOperationTests(IProgressMonitor monitor, String testName) throws IllegalArgumentException {
-		return getOperationTestReader().getOperationTests(monitor, testName);
-	}
-
-	/**
-	 * If files need to be imported, import them now (into projects that are named
-	 * the same as the files.)
-	 * 
-	 * If ITestcaseMetaData is not null, return the TestSetupImport for that particular test.
-	 * If ITestcaseMetaData is null, return all TestSetupImport.
-	 */
-	public TestSetupImport[] getTestSetup(IBuffer buffer, String dir, ITestcaseMetaData tmd, boolean verbose) {
-		return getTestSetupReader().getTestSetup(buffer, dir, tmd, verbose);
-	}
-
-	/**
-	 * Returns the singleton ValidationTVTRegistryReader.
-	 */
-	public static BVTValidationRegistryReader getReader() {
-		if (inst == null) {
-			inst = new BVTValidationRegistryReader();
-		}
-		return inst;
-	}
-
-	private class ValidationTestReader {
-		private Map _validatorTests = null;
-		
-		ValidationTestReader() {
-		}
-		
-		public ValidatorTestcase[] getVisibleValidatorTests(IProgressMonitor monitor, String testName) throws IllegalArgumentException {
-			ValidatorTestcase[] vts = getValidatorTests(monitor, testName);
-			ValidatorTestcase[] temp = new ValidatorTestcase[vts.length];
-			int count = 0;
-			for(int i=0; i<vts.length; i++) {
-				ValidatorTestcase vt = vts[i];
-				if(vt.isVisible()) {
-					temp[count++] = vt;
-				}
-			}
-			ValidatorTestcase[] result = new ValidatorTestcase[count];
-			System.arraycopy(temp, 0, result, 0, count);
-			return result;
-		}
-		
-		public ValidatorTestcase[] getValidatorTests(IProgressMonitor monitor, String testName) throws IllegalArgumentException {
-			if (_validatorTests == null) {
-				_validatorTests = new HashMap();
-				readTestcaseRegistry(monitor);
-			}
-	
-			Collection tmds = null;
-			if (testName == null) {
-				tmds = new HashSet();
-				Iterator iterator = _validatorTests.values().iterator();
-				while (iterator.hasNext()) {
-					tmds.addAll((Collection) iterator.next());
-				}
-			}
-			else {
-				tmds = (Collection) _validatorTests.get(testName);
-			}
-			if ((tmds == null) || (tmds.size() == 0)) {
-				return new ValidatorTestcase[0];
-			}
-			ValidatorTestcase[] result = new ValidatorTestcase[tmds.size()];
-			tmds.toArray(result);
-			return result;
-		}
-
-		/**
-		 * Return the name of the test case if it exists. Otherwise, return null.
-		 */
-		private String getProject(IConfigurationElement element) {
-			if (element == null) {
-				return null;
-			}
-
-			return element.getAttribute(ATT_PROJECT);
-		}
-
-		private MessageMetaData[] getMessages(ValidatorTestcase tmd, IConfigurationElement testElement) {
-			IConfigurationElement[] messages = testElement.getChildren(TAG_MESSAGE);
-			if ((messages == null) || (messages.length == 0)) {
-				// No messages are expected.
-				return null;
-			}
-
-			MessageMetaData[] mmdList = new MessageMetaData[messages.length];
-			int count = 0;
-			for (int i = 0; i < messages.length; i++) {
-				IConfigurationElement message = messages[i];
-				String prefix = message.getAttribute(ATT_PREFIX);
-				if (prefix == null) {
-					Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						logger.write(Level.SEVERE, "Every <message> must have a prefix."); //$NON-NLS-1$
-					}
-					continue;
-				}
-
-				// The following attributes are optional.			
-				String resourceName = message.getAttribute(ATT_RESOURCE);
-				String location = message.getAttribute(ATT_LOCATION);
-				String text = message.getAttribute(ATT_TEXT);
-				int lineNumber = -1;
-				MessageMetaData mmd = null;
-				if ((location != null)) {
-					try {
-						lineNumber = Integer.parseInt(location);
-						mmd = new MessageMetaData(tmd, prefix, resourceName, lineNumber, text);
-					}
-					catch (NumberFormatException exc) {
-						// Don't need to log - the location just isn't a number.
-					}
-				}
-
-				if (mmd == null) {
-					mmd = new MessageMetaData(tmd, prefix, resourceName, location, text);
-				}
-
-				mmdList[count++] = mmd;
-			}
-
-			if (count == mmdList.length) {
-				return mmdList;
-			}
-			else {
-				MessageMetaData[] result = new MessageMetaData[count];
-				System.arraycopy(mmdList, 0, result, 0, count);
-				return result;
-			}
-		}
-
-		private void addTest(IProgressMonitor monitor, IExtension extension, IConfigurationElement[] testElements) {
-			monitor.subTask("Reading test cases; please wait..."); //$NON-NLS-1$
-			String pluginId = extension.getDeclaringPluginDescriptor().getUniqueIdentifier();
-			for (int i = 0; i < testElements.length; i++) {
-				monitor.subTask("Reading test case " + (i + 1) + " of " + testElements.length); //$NON-NLS-1$ //$NON-NLS-2$
-				IConfigurationElement test = testElements[i];
-
-				String projectName = getProject(test);
-				if (projectName == null) {
-					Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						logger.write(Level.SEVERE, "Every test must name the project that it verifies. " + test.toString()); //$NON-NLS-1$
-					}
-					continue;
-				}
-
-				ValidatorMetaData vmd = getValidatorMetaData(test);
-				if (vmd == null) {
-					// already logged, so just read the next test case.
-					continue;
-				}
-
-				String inputFileName = getInputFileName(test);
-				if (inputFileName == null) {
-					Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						logger.write(Level.SEVERE, "Every test must name the file to be imported and then tested." + test.toString()); //$NON-NLS-1$
-					}
-					continue;
-				}
-
-				boolean visible = getVisible(test);
-
-				ValidatorTestcase tmd = new ValidatorTestcase(pluginId, projectName, vmd, inputFileName, visible);
-				tmd.setMessages(getMessages(tmd, test));
-
-				// Now add the test case to the Map, with the project name as the key into 
-				// the map.
-				Set prjTmd = (Set) _validatorTests.get(projectName);
-				if (prjTmd == null) {
-					prjTmd = new HashSet();
-				}
-				prjTmd.add(tmd);
-				_validatorTests.put(projectName, prjTmd);
-			}
-		}
-
-		/**
-		 * Retrieve an instance of the class with the given fully-qualified name.
-		 * If no such class can be found, return null.
-		 */
-		private ValidatorMetaData getValidatorMetaData(IConfigurationElement element) {
-			if (element == null) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, "IConfigurationElement is null"); //$NON-NLS-1$
-				}
-				return null;
-			}
-
-			String validatorClass = element.getAttribute(ATT_VALIDATOR);
-			try {
-				if (validatorClass == null) {
-					Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						logger.write(Level.SEVERE, "Cannot locate validator attribute"); //$NON-NLS-1$
-					}
-				}
-				ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validatorClass);
-				if (vmd == null) {
-					Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						logger.write(Level.SEVERE, "Could not find validator " + validatorClass); //$NON-NLS-1$
-					}
-				}
-				return vmd;
-			}
-			catch (Throwable exc) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, "Throwable caught while retrieving IValidator " + validatorClass); //$NON-NLS-1$
-					logger.write(Level.SEVERE, exc);
-				}
-				return null;
-			}
-		}
-
-		/**
-		 * Reads the registry to find the test cases that have been implemented.
-		 */
-		private void readTestcaseRegistry(IProgressMonitor monitor) {
-			// Get the extensions that have been registered.
-			IExtensionPoint validatorEP = getTestcaseExtensionPoint();
-			if (validatorEP == null) {
-				// error logged in getValidatorTVTExtensionPoint
-				return;
-			}
-			IExtension[] extensions = validatorEP.getExtensions();
-
-			// find all runtime implementations
-			for (int i = 0; i < extensions.length; i++) {
-				readTestcaseExtension(monitor, extensions[i]);
-			}
-		}
-
-		/**
-		 * Reads one extension by looping through its configuration elements.
-		 */
-		private void readTestcaseExtension(IProgressMonitor monitor, IExtension extension) {
-			IConfigurationElement[] elements = extension.getConfigurationElements();
-			if ((elements == null) || (elements.length == 0)) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, "No tests found for " + extension.getLabel()); //$NON-NLS-1$
-				}
-				return;
-			}
-			addTest(monitor, extension, elements);
-		}
-
-		/**
-		 * Returns the operation extension point
-		 */
-		private IExtensionPoint getTestcaseExtensionPoint() {
-			IPluginRegistry registry = Platform.getPluginRegistry();
-			IExtensionPoint extensionPoint = registry.getExtensionPoint(PLUGIN_ID, VALIDATOR_TESTCASE_EXT_PT_ID);
-			if (extensionPoint == null) {
-				// If this happens it means that someone removed the "validator" extension point declaration 
-				// from our plugin.xml file.
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, PLUGIN_ID + "." + VALIDATOR_TESTCASE_EXT_PT_ID + " has been removed from the validation TVT plugin.xml file"); //$NON-NLS-1$ //$NON-NLS-2$
-				}
-			}
-			return extensionPoint;
-		}
-
-		/**
-		 * Retrieve the name of the input which must be imported before the test case can be run.
-		 * Return null if no input name is set.
-		 */
-		private boolean getVisible(IConfigurationElement element) {
-			if (element == null) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, "getVisible::IConfigurationElement is null"); //$NON-NLS-1$
-				}
-				return false;
-			}
-
-			String attrib = element.getAttribute(ATT_VISIBLE);
-			if (attrib == null) {
-				// default is visible
-				return true;
-			}
-
-			return Boolean.valueOf(attrib).booleanValue();
-		}
-
-		/**
-		 * Retrieve the name of the input which must be imported before the test case can be run.
-		 * Return null if no input name is set.
-		 */
-		private String getInputFileName(IConfigurationElement element) {
-			if (element == null) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, "getInputFileName::IConfigurationElement is null"); //$NON-NLS-1$
-				}
-				return null;
-			}
-
-			return element.getAttribute(ATT_INPUT);
-		}
-
-	}
-
-	private class OperationTestReader {
-		private Map _operationTests = null;
-
-		OperationTestReader() {
-		}
-		
-		/**
-		 * Return the test cases named testName, or if testName is null, return all test cases.
-		 */
-		public OperationTestcase[] getOperationTests(IProgressMonitor monitor, String testName) throws IllegalArgumentException {
-			if (_operationTests == null) {
-				_operationTests = new HashMap();
-				readOperationTestcaseRegistry(monitor);
-			}
-
-			Collection tmds = null;
-			if (testName == null) {
-				tmds = new HashSet();
-				Iterator iterator = _operationTests.values().iterator();
-				while (iterator.hasNext()) {
-					tmds.addAll((Collection) iterator.next());
-				}
-			}
-			else {
-				tmds = (Collection) _operationTests.get(testName);
-			}
-			if ((tmds == null) || (tmds.size() == 0)) {
-				return new OperationTestcase[0];
-			}
-			OperationTestcase[] result = new OperationTestcase[tmds.size()];
-			tmds.toArray(result);
-			return result;
-		}
-
-		/**
-		 * Retrieve the name of the input which must be imported before the test case can be run.
-		 * Return null if no input name is set.
-		 */
-		private String getInputFileName(IConfigurationElement element) {
-			if (element == null) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, "getInputFileName::IConfigurationElement is null"); //$NON-NLS-1$
-				}
-				return null;
-			}
-
-			return element.getAttribute(ATT_INPUT);
-		}
-
-		private void addOperationTest(IProgressMonitor monitor, IExtension extension, IConfigurationElement[] testElements) {
-			monitor.subTask("Reading test cases; please wait..."); //$NON-NLS-1$
-			String pluginId = extension.getDeclaringPluginDescriptor().getUniqueIdentifier();
-			for (int i = 0; i < testElements.length; i++) {
-				monitor.subTask("Reading test case " + (i + 1) + " of " + testElements.length); //$NON-NLS-1$ //$NON-NLS-2$
-				IConfigurationElement test = testElements[i];
-
-				String projectName = getProject(test);
-				if (projectName == null) {
-					Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						logger.write(Level.SEVERE, "Every test must name the project that it verifies. " + test.toString()); //$NON-NLS-1$
-					}
-					continue;
-				}
-
-				IOperationRunnable op = getOperation(test);
-				if (op == null) {
-					// already logged, so just read the next test case.
-					continue;
-				}
-
-				String inputFileName = getInputFileName(test);
-				if (inputFileName == null) {
-					Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						logger.write(Level.SEVERE, "Every test must name the file to be imported and then tested." + test.toString()); //$NON-NLS-1$
-					}
-					continue;
-				}
-
-				String id = extension.getLabel();
-
-				OperationTestcase tmd = new OperationTestcase(pluginId, projectName, id, inputFileName, op);
-
-				// Now add the test case to the Map, with the project name as the key into 
-				// the map.
-				Set prjTmd = (Set) _operationTests.get(projectName);
-				if (prjTmd == null) {
-					prjTmd = new HashSet();
-				}
-				prjTmd.add(tmd);
-				_operationTests.put(projectName, prjTmd);
-			}
-		}
-
-		/**
-		 * Reads one extension by looping through its configuration elements.
-		 */
-		private void readOperationTestcaseExtension(IProgressMonitor monitor, IExtension extension) {
-			IConfigurationElement[] elements = extension.getConfigurationElements();
-			if ((elements == null) || (elements.length == 0)) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, "No tests found for " + extension.getLabel()); //$NON-NLS-1$
-				}
-				return;
-			}
-			addOperationTest(monitor, extension, elements);
-		}
-
-		/**
-		 * Reads the registry to find the test cases that have been implemented.
-		 */
-		private void readOperationTestcaseRegistry(IProgressMonitor monitor) {
-			// Get the extensions that have been registered.
-			IExtensionPoint opEP = getOperationTestcaseExtensionPoint();
-			if (opEP == null) {
-				// error logged in getValidatorTVTExtensionPoint
-				return;
-			}
-			IExtension[] extensions = opEP.getExtensions();
-
-			// find all runtime implementations
-			for (int i = 0; i < extensions.length; i++) {
-				readOperationTestcaseExtension(monitor, extensions[i]);
-			}
-		}
-
-		/**
-		 * Return the name of the test case if it exists. Otherwise, return null.
-		 */
-		private String getProject(IConfigurationElement element) {
-			if (element == null) {
-				return null;
-			}
-
-			return element.getAttribute(ATT_PROJECT);
-		}
-
-		/**
-		 * Returns the TestCase extension point
-		 */
-		private IExtensionPoint getOperationTestcaseExtensionPoint() {
-			IPluginRegistry registry = Platform.getPluginRegistry();
-			IExtensionPoint extensionPoint = registry.getExtensionPoint(PLUGIN_ID, VALIDATOR_OPERATION_TESTCASE_EXT_PT_ID);
-			if (extensionPoint == null) {
-				// If this happens it means that someone removed the "optest" extension point declaration 
-				// from our plugin.xml file.
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, PLUGIN_ID + "." + VALIDATOR_OPERATION_TESTCASE_EXT_PT_ID + " has been removed from the validation TVT plugin.xml file"); //$NON-NLS-1$ //$NON-NLS-2$
-				}
-			}
-			return extensionPoint;
-		}
-
-		/**
-		 * Retrieve an instance of the class with the given fully-qualified name.
-		 * If no such class can be found, return null.
-		 */
-		private IOperationRunnable getOperation(IConfigurationElement element) {
-			if (element == null) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, "IConfigurationElement is null"); //$NON-NLS-1$
-				}
-				return null;
-			}
-
-			String opClass = element.getAttribute(ATT_OPERATION);
-			try {
-				if (opClass == null) {
-					Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						logger.write(Level.SEVERE, "Cannot locate operation attribute"); //$NON-NLS-1$
-					}
-				}
-
-				IOperationRunnable op = (IOperationRunnable) element.createExecutableExtension(ATT_OPERATION);
-				if (op == null) {
-					Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						logger.write(Level.SEVERE, "Could not find operation " + opClass); //$NON-NLS-1$
-					}
-				}
-				return op;
-			}
-			catch (Throwable exc) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, "Throwable caught while retrieving IValidator " + opClass); //$NON-NLS-1$
-					logger.write(Level.SEVERE, exc);
-				}
-				return null;
-			}
-		}
-
-	}
-
-	private class TestSetupReader {
-		private TestSetupImport[] _testSetup = null;
-
-		TestSetupReader() {
-		}
-		
-		/**
-		 * Retrieve the name of the input which must be imported before the test case can be run.
-		 * Return null if no input name is set.
-		 */
-		private String getInputFileName(IConfigurationElement element) {
-			if (element == null) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, "getInputFileName::IConfigurationElement is null"); //$NON-NLS-1$
-				}
-				return null;
-			}
-
-			return element.getAttribute(ATT_INPUT);
-		}
-
-		/**
-		 * If files need to be imported, import them now (into projects that are named
-		 * the same as the files.)
-		 * 
-		 * If ITestcaseMetaData is not null, return the TestSetupImport for that particular test.
-		 * If ITestcaseMetaData is null, return all TestSetupImport.
-		 */
-		public TestSetupImport[] getTestSetup(IBuffer buffer, String dir, ITestcaseMetaData tmd, boolean verbose) {
-			if (_testSetup == null) {
-				readSetupRegistry(buffer, verbose);
-			}
-			if (tmd != null) {
-				for (int j = 0; j < _testSetup.length; j++) {
-					TestSetupImport tsi = _testSetup[j];
-					if (tsi.getFileName().endsWith(tmd.getInputFileName())) {
-						return new TestSetupImport[] { tsi };
-					}
-				}
-				return new TestSetupImport[0];
-			}
-			return _testSetup;
-		}
-	
-		private void addSetup(IBuffer buffer, IConfigurationElement[] importElements, boolean verbose) {
-			if ((importElements == null) || (importElements.length == 0)) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					String message = "No test setup found"; //$NON-NLS-1$
-					logger.write(Level.SEVERE, message);
-					buffer.write(message);
-				}
-				return;
-			}
-
-			TestSetupImport[] temp = new TestSetupImport[importElements.length];
-			int count = 0;
-			for (int i = 0; i < importElements.length; i++) {
-				IConfigurationElement importElement = importElements[i];
-				String inputFileName = getInputFileName(importElement);
-				if (inputFileName == null) {
-					// Already logged in getInputFileName
-					continue;
-				}
-
-				IImportOperation op = getImportOperation(buffer, importElement);
-				if (op == null) {
-					buffer.write("Import operation cannot be found. Ignoring import."); //$NON-NLS-1$
-					continue;
-				}
-				TestSetupImport ts = new TestSetupImport(op, inputFileName);
-				temp[count++] = ts;
-			}
-
-			if (_testSetup == null) {
-				if (count == temp.length) {
-					_testSetup = temp;
-				}
-				else {
-					_testSetup = new TestSetupImport[count];
-					System.arraycopy(temp, 0, _testSetup, 0, count);
-				}
-			}
-			else {
-				TestSetupImport[] newTestSetup = new TestSetupImport[_testSetup.length + count];
-				System.arraycopy(_testSetup, 0, newTestSetup, 0, _testSetup.length);
-				System.arraycopy(temp, 0, newTestSetup, _testSetup.length, count);
-				_testSetup = newTestSetup;
-			}
-		}
-
-		/**
-		 * Reads one extension by looping through its configuration elements.
-		 */
-		private void readSetupExtension(IBuffer buffer, IExtension extension, boolean verbose) {
-			IConfigurationElement[] elements = extension.getConfigurationElements();
-			addSetup(buffer, elements, verbose);
-		}
-
-		/**
-		 * Returns the TestCaseSetup extension point
-		 */
-		private IExtensionPoint getSetupExtensionPoint() {
-			IPluginRegistry registry = Platform.getPluginRegistry();
-			IExtensionPoint extensionPoint = registry.getExtensionPoint(PLUGIN_ID, VALIDATOR_SETUP_EXT_PT_ID);
-			if (extensionPoint == null) {
-				// If this happens it means that someone removed the "validator" extension point declaration 
-				// from our plugin.xml file.
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, PLUGIN_ID + "." + VALIDATOR_SETUP_EXT_PT_ID + " has been removed from the validation TVT plugin.xml file"); //$NON-NLS-1$ //$NON-NLS-2$
-				}
-			}
-			return extensionPoint;
-		}
-
-		/**
-		 * Reads the registry to find the test setup that must be performed.
-		 */
-		private void readSetupRegistry(IBuffer buffer, boolean verbose) {
-			// Get the extensions that have been registered.
-			IExtensionPoint validatorEP = getSetupExtensionPoint();
-			if (validatorEP == null) {
-				// error logged in getValidatorTVTExtensionPoint
-				buffer.write("Extension point is missing. Cannot import test cases."); //$NON-NLS-1$
-				return;
-			}
-			IExtension[] extensions = validatorEP.getExtensions();
-			if (extensions.length == 0) {
-				buffer.write("No extensions found. Cannot import test cases."); //$NON-NLS-1$
-				return;
-			}
-
-			// find all runtime implementations
-			buffer.getProgressMonitor().subTask("Reading setup <import> extensions; please wait..."); //$NON-NLS-1$
-			for (int i = 0; i < extensions.length; i++) {
-				buffer.getProgressMonitor().subTask("Reading setup <import> " + (i + 1) + " of " + extensions.length); //$NON-NLS-1$ //$NON-NLS-2$
-				readSetupExtension(buffer, extensions[i], verbose);
-			}
-		}
-
-		/**
-		 * Return an instance of the operation which is used to import the input.
-		 */
-		private IImportOperation getImportOperation(IBuffer buffer, IConfigurationElement element) {
-			if (element == null) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					String message = "IConfigurationElement is null"; //$NON-NLS-1$
-					logger.write(Level.SEVERE, message);
-					buffer.write(message);
-				}
-			}
-
-			String opClass = element.getAttribute(ATT_OPERATION);
-			try {
-				if (opClass == null) {
-					Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						String message = "Because there is no operation attribute, assuming that the input is a workspace."; //$NON-NLS-1$
-						logger.write(Level.SEVERE, message);
-						buffer.write(message);
-					}
-					return null;
-				}
-
-				Object temp = element.createExecutableExtension(ATT_OPERATION);
-				if (temp == null) {
-					Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						String message = "operation " + opClass + " cannot be created. Ignoring the test case."; //$NON-NLS-1$ //$NON-NLS-2$
-						logger.write(Level.SEVERE, message);
-						buffer.write(message);
-					}
-					return null;
-				}
-				else if (temp instanceof IImportOperation) {
-					return (IImportOperation) temp;
-				}
-				else {
-					Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-					if (logger.isLoggingLevel(Level.SEVERE)) {
-						String message = "operation must be an instance of IImportOperation. Ignoring the test case."; //$NON-NLS-1$
-						logger.write(Level.SEVERE, message);
-						buffer.write(message);
-					}
-					return null;
-				}
-			}
-			catch (Throwable exc) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if (logger.isLoggingLevel(Level.SEVERE)) {
-					String message = "Throwable caught while retrieving IImportOperation " + opClass + " Ignoring the test case."; //$NON-NLS-1$ //$NON-NLS-2$
-					logger.write(Level.SEVERE, message);
-					logger.write(Level.SEVERE, exc);
-					buffer.write(message);
-				}
-				return null;
-			}
-		}
-
-	}
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/BuildInfo.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/BuildInfo.java
deleted file mode 100644
index d14a7a6..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/BuildInfo.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.eclipse.jst.validation.test.internal.registry;
-public class BuildInfo {
-  public static final String copyright = "Licensed Materials -- Property of IBM\n(c) Copyright International Business Machines Corporation, 2001,2003\nUS Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.";
-  public static final String fgBuildLevel = "20031112_1915-WB212-AD-V511D-W5";
-  public static String level() { return fgBuildLevel; }
-  public static String getWSABuildLevel() { return fgBuildLevel; }
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/ITestcaseMetaData.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/ITestcaseMetaData.java
deleted file mode 100644
index 9458462..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/ITestcaseMetaData.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.eclipse.jst.validation.test.internal.registry;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jst.validation.test.setup.IBuffer;
-
-
-/**
- * This interface represents a test case that either should be run
- * as part of the Validation BVT Suite, or that is part of a test
- * case that is run by the Validation BVT Suite.
- */
-public interface ITestcaseMetaData {
-	/**
-	 * Return true if this test case should be shown as a test on 
-	 * the test collector menu.
-	 */
-	public boolean isVisible();
-	
-	/**
-	 * Return the project that this test case is designed to run on.
-	 */
-	public IProject getProject();
-	
-	/**
-	 * Return the name of the project that this test case is designed 
-	 * to run on.
-	 */
-	public String getProjectName();
-	
-	/**
-	 * Return the id of the plugin that declared this test case.
-	 */
-	public String getDeclaringPluginId();
-	
-	/**
-	 * Return the name of this test case.
-	 */
-	public String getName();
-	
-	/**
-	 * Return the name of the file that must be imported for this test case
-	 * to run on.
-	 */
-	public String getInputFileName();
-	
-	/**
-	 * Import the file, if necessary, and run this test. The test case
-	 * reports whether or not the test passes to the ITestBuffer.
-	 */
-	public void run(IBuffer buffer, IProject project);
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/MessageMetaData.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/MessageMetaData.java
deleted file mode 100644
index 663bbae..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/MessageMetaData.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.eclipse.jst.validation.test.internal.registry;
-
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-
-
-
-public class MessageMetaData {
-	public static final int LINENO_UNSET = -1;
-	private String _messagePrefix = null;
-	private String _resource = null;
-	private int _lineNumber = LINENO_UNSET;
-	private String _location = null;
-	private String _text = null; // When this test case was generated, what was the text of the marker? This information is needed when message prefixes change; the test case will fail because the prefix doesn't match, but it's easy to see that the old prefix tested the same thing as the new prefix.
-	private ValidatorTestcase _tmd = null; // pointer back to the testcase parent
-	
-	public MessageMetaData(ValidatorTestcase tmd, String prefix, String resource, int lineNumber, String text) {
-		this(tmd, prefix, resource, text);
-		_lineNumber = lineNumber;
-	}
-	
-	public MessageMetaData(ValidatorTestcase tmd, String prefix, String resource, String location, String text) {
-		this(tmd, prefix, resource, text);
-		_location = location;
-	}
-	
-	public MessageMetaData(ValidatorTestcase tmd, String prefix, String resource, String text) {
-		_tmd = tmd;
-		_messagePrefix = prefix;
-		_resource = resource;
-		_text = (text == null) ? "" : text; //$NON-NLS-1$
-	}
-	
-	public ValidatorTestcase getValidatorTestcase() {
-		return _tmd;
-	}
-	
-	public String getMessagePrefix() {
-		return _messagePrefix;
-	}
-	
-	public String getResource() {
-		return _resource;
-	}
-	
-	public int getLineNumber() {
-		return _lineNumber;
-	}
-	
-	public String getLocation() {
-		return _location;
-	}
-	
-	public ValidatorMetaData getValidator() {
-		return getValidatorTestcase().getValidatorMetaData();
-	}
-	
-	public String getText() {
-		return _text;
-	}
-	
-	public boolean isSetLineNumber() {
-		return (_lineNumber != LINENO_UNSET);
-	}
-	
-	public boolean isSetLocation() {
-		return isSet(_location);
-	}
-	
-	public boolean isSetResource() {
-		return isSet(_resource);
-	}
-	
-	private boolean isSet(String value) {
-		if(value == null) {
-			return false;
-		}
-		
-		if(value.trim().equals("")) { //$NON-NLS-1$
-			return false;
-		}
-		
-		return true;
-	}
-
-	public String toString() {
-		return MessageUtility.toString(this);
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/MessageUtility.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/MessageUtility.java
deleted file mode 100644
index e856876..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/MessageUtility.java
+++ /dev/null
@@ -1,714 +0,0 @@
-package org.eclipse.jst.validation.test.internal.registry;
-
-import java.text.MessageFormat;
-import java.util.Comparator;
-import java.util.StringTokenizer;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jst.validation.sample.parser.PropertyLine;
-import org.eclipse.jst.validation.test.BVTValidationPlugin;
-import org.eclipse.jst.validation.test.setup.IBuffer;
-import org.eclipse.wst.validation.internal.ConfigurationConstants;
-import org.eclipse.wst.validation.internal.ConfigurationManager;
-import org.eclipse.wst.validation.internal.ValidationRegistryReader;
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-
-import com.ibm.wtp.common.logger.proxy.Logger;
-
-public class MessageUtility {
-	private final static String _TESTCASE_MESSAGE_TEMPLATE_ = "<message prefix=\"{0}\" resource=\"{1}\" location=\"{2}\" text=\"{3}\"/>"; //$NON-NLS-1$
-	private final static String _TESTCASE_MARKER_TEMPLATE_ =  "<marker prefix=\"{0}\" resource=\"{1}\" location=\"{2}\" text=\"{3}\"/>"; //$NON-NLS-1$
-	private static MessageComparator _messageComparator = null;
-	private static MessageIdComparator _messageIdComparator = null;
-	private static MessagePrefixComparator _messagePrefixComparator = null;
-	
-	private MessageUtility() {
-	}
-	
-	public static String toString(MessageMetaData mmd) {
-		String location = (mmd.isSetLineNumber()) ? String.valueOf(mmd.getLineNumber()) : mmd.getLocation();
-		return toString(mmd.getMessagePrefix(), mmd.getResource(), location, mmd.getText(), _TESTCASE_MESSAGE_TEMPLATE_);
-	}
-	
-	public static String toString(IMarker marker) {
-		Integer lineNumber = MessageUtility.getLineNumber(marker);
-		String location = (lineNumber == null) ? (location = MessageUtility.getLocation(marker)) : (location = lineNumber.toString());
-		return toString(getMessagePrefix(marker), getResource(marker), location, getMessage(marker), _TESTCASE_MARKER_TEMPLATE_);
-	}
-	
-	private static String toString(String fmssgPrefix, String fresource, String flocation, String ftext, String template) {
-		String mssgPrefix = (fmssgPrefix == null) ? "" : fmssgPrefix; //$NON-NLS-1$
-		String resource = (fresource == null) ? "" : fresource; //$NON-NLS-1$
-		String location = (flocation == null) ? "" : flocation; //$NON-NLS-1$
-		String text = (ftext == null) ? "" : ftext; //$NON-NLS-1$
-		return MessageFormat.format(template, new String[]{mssgPrefix, resource, location, text});
-	}
-	
-	public static String getProject(IMarker marker) {
-		return marker.getResource().getProject().getName();
-	}
-	
-
-	public static String getResource(IMarker marker) {
-		return marker.getResource().getProjectRelativePath().toString();
-	}
-	
-
-	// Based on the last letter of the message prefix, what severity
-	// should this marker be?
-	public static Integer getSeverity(IMarker marker) throws CoreException {
-		String message = (String)marker.getAttribute(IMarker.MESSAGE);
-		if(message == null) {
-			return null;
-		}
-		
-		String[] tokens = parse(message);
-		String severity = tokens[1];
-		Integer result;
-		if(severity.equals("E")) { //$NON-NLS-1$
-			result = new Integer(IMarker.SEVERITY_ERROR);
-		}
-		else if(severity.equals("W")) { //$NON-NLS-1$
-			result = new Integer(IMarker.SEVERITY_WARNING);
-		}
-		else if(severity.equals("I")) { //$NON-NLS-1$
-			result = new Integer(IMarker.SEVERITY_INFO);
-		}
-		else {
-			result = null;
-		}
-		return result;
-	}
-	
-	public static String getMessage(IMarker marker) {
-		try {
-			return (String)marker.getAttribute(IMarker.MESSAGE);
-		}
-		catch(CoreException e) {
-			Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE, e);
-			}
-			return null;
-		}
-	}
-	
-	public static String getMessagePrefix(IMarker marker) {
-		String message = getMessage(marker);
-		if(message == null) {
-			return null;
-		}
-		
-		String[] tokens = parse(message);
-		return tokens[0];
-	}
-	
-	// This method is needed for the fuzzy compare. Need to 
-	// strip the ".java" or ".class" extension off of the resource
-	// name so that the class name can be searched for in the marker's
-	// location text.
-	public static String getResource(MessageMetaData mmd) {
-		String resource = mmd.getResource();
-		int index = resource.indexOf(".java"); //$NON-NLS-1$
-		if(index > -1) {
-			return resource.substring(0, index);
-		}
-		
-		index = resource.indexOf(".class"); //$NON-NLS-1$
-		if(index > -1) {
-			return resource.substring(0, index);
-		}
-		
-		return resource;
-	}
-	
-	public static ValidatorMetaData getValidator(IMarker marker) {
-		String validatorClass = ConfigurationManager.getManager().getValidator(marker);
-		ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validatorClass);
-		return vmd;
-	}
-	
-	/**
-	 * Parse the message value, to extract the unique error id, if any.
-	 * String[0] is the message prefix, String [1] is the error char, String[2] is the rest of the string after the ':'
-	 */
-	public static String[] parse(String message) {
-		if (message == null) {
-			return new String[]{"", "", ""}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-
-		StringTokenizer tokenizer = new StringTokenizer(message);
-		int numTokens = tokenizer.countTokens();
-		if (numTokens == 0) {
-			return new String[]{"", "", message}; //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		else {
-			String errorId = tokenizer.nextToken();
-			boolean isErrorIndex = false;
-
-			int errorIdIndex = errorId.indexOf(':');
-			if (errorIdIndex > 0) {
-				String tempString = errorId.substring(0, errorIdIndex);
-				char[] temp = tempString.toCharArray();
-				if (temp.length == 9) { // Must be of the form ABCD1234E, which is 9 char long
-
-					isErrorIndex = Character.isLetter(temp[0]);
-					isErrorIndex = isErrorIndex && Character.isLetter(temp[1]);
-					isErrorIndex = isErrorIndex && Character.isLetter(temp[2]);
-					isErrorIndex = isErrorIndex && Character.isLetter(temp[3]);
-					isErrorIndex = isErrorIndex && Character.isDigit(temp[4]);
-					isErrorIndex = isErrorIndex && Character.isDigit(temp[5]);
-					isErrorIndex = isErrorIndex && Character.isDigit(temp[6]);
-					isErrorIndex = isErrorIndex && Character.isDigit(temp[7]);
-					isErrorIndex = isErrorIndex && Character.isLetter(temp[8]);
-
-					if (isErrorIndex) {
-						String shortMessage;
-						if (numTokens > 1) {
-							shortMessage = message.substring(errorIdIndex + 1, message.length()).intern();
-						}
-						else {
-							shortMessage = ""; //$NON-NLS-1$
-						}
-						return new String[]{tempString.substring(0, 8), new String(new char[]{temp[8]}), shortMessage};
-					}
-				}
-			}
-
-			if (!isErrorIndex) {
-				return new String[]{"", "", message}; //$NON-NLS-1$ //$NON-NLS-2$
-			}
-		}
-		
-		return new String[]{"", "", message}; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	public static Integer getLineNumber(IMarker marker) {
-		try {
-			return (Integer)marker.getAttribute(IMarker.LINE_NUMBER);
-		}
-		catch(CoreException e) {
-			return null;
-		}
-	}
-	
-	public static String getTargetObject(IMarker marker) {
-		try {
-			String targetObject = (String)marker.getAttribute(ConfigurationConstants.VALIDATION_MARKER_TARGETOBJECT);
-			if((targetObject != null) && (targetObject.equals(""))) { //$NON-NLS-1$
-				// Empty string means that there was no target object.
-				return null;
-			}
-			return targetObject;
-		}
-		catch(CoreException e) {
-			return null;
-		}
-	}
-	
-	/**
-	 * Sort first on validator, 
-	 * then project, 
-	 * then message prefix,
-	 * then location,
-	 * then resource. (The resource may be different in batch and UI, so compare location & resource at the same time.)
-	 * 
-	 * @param verbose If true, verbose output while comparing lists.
-	 */	
-	public static Comparator getMessageComparator(final IBuffer buffer, final boolean verbose) {
-		if(_messageComparator == null) {
-			_messageComparator = new MessageUtility(). new MessageComparator();
-		}
-		_messageComparator.setVerbose(verbose);
-		_messageComparator.setBuffer(buffer);
-		return _messageComparator;
-	}
-	
-	/**
-	 * Sort first on the version, then on the message prefix.
-	 */	
-	public static Comparator getMessageIdComparator(final IBuffer buffer, final boolean verbose) {
-		if(_messageIdComparator == null) {
-			_messageIdComparator = new MessageUtility(). new MessageIdComparator();
-		}
-		_messageIdComparator.setVerbose(verbose);
-		_messageIdComparator.setBuffer(buffer);
-		return _messageIdComparator;
-	}
-
-	public static String getLocation(IMarker marker) {
-		try {
-			return (String)marker.getAttribute(IMarker.LOCATION);
-		}
-		catch(CoreException e) {
-			Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE, e);
-			}
-			return null;
-		}
-	}
-
-	private class MessageComparator implements Comparator {
-		private boolean _verbose = false;
-		private IBuffer _buffer = null;
-		
-		public boolean isVerbose() {
-			return _verbose;
-		}
-		
-		public void setVerbose(boolean v) {
-			_verbose = v;
-		}
-		
-		public IBuffer getBuffer() {
-			return _buffer;
-		}
-		
-		public void setBuffer(IBuffer b) {
-			_buffer = b;
-		}
-		
-		public int compare(Object a, Object b) {
-			if((a == null) && (b == null)) {
-				return 0;
-			}
-			else if(a == null) {
-				return 1;
-			}
-			else if(b == null) {
-				return -1;
-			}
-			
-			
-			// Sort first on the message prefix, then on the location, then project, then resource
-			if((a instanceof String) && (b instanceof String)) {
-				return compare((String)a, (String)b);
-			}
-			else if ((a instanceof IMarker) && (b instanceof IMarker)) {
-				IMarker aM = (IMarker)a;
-				IMarker bM = (IMarker)b;
-				int result = compare(aM, bM);
-				if(isVerbose()) {
-					getBuffer().write("compare(" + MessageUtility.toString(aM) + ", " + MessageUtility.toString(bM) + " = " + result); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				}
-				return result;
-			}
-			else if ((a instanceof IMarker) && (b instanceof MessageMetaData)) {
-				IMarker aM = (IMarker)a;
-				MessageMetaData mmd = (MessageMetaData)b;
-				int result = compare(aM, mmd);
-				if(isVerbose()) {
-					getBuffer().write("compare(" + MessageUtility.toString(aM) + ", " + MessageUtility.toString(mmd) + " = " + result); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				}
-				return result;
-			}
-			else if((a instanceof MessageMetaData) && (b instanceof IMarker)) {
-				MessageMetaData mmd = (MessageMetaData)a;
-				IMarker bM = (IMarker)b;
-				int result = compare(mmd, bM);
-				if(isVerbose()) {
-					getBuffer().write("compare(" + MessageUtility.toString(mmd) + ", " + MessageUtility.toString(bM) + " = " + result); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				}						
-				return result;
-			}
-			else if((a instanceof MessageMetaData) && (b instanceof MessageMetaData)) {
-				MessageMetaData aMMD = (MessageMetaData)a;
-				MessageMetaData bMMD = (MessageMetaData)b;
-				int result = compare(aMMD, bMMD);
-				if(isVerbose()) {
-					getBuffer().write("compare(" + MessageUtility.toString(aMMD) + ", " + MessageUtility.toString(bMMD) + " = " + result); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				}
-				return result;
-			}
-			
-			// else put it at the end of the list
-			return 1;
-		}
-		
-		public int compare(String aStr, String bStr) {
-			if((aStr == null) && (bStr == null)) {
-				return 0;
-			}
-			else if(aStr == null) {
-				return 1;
-			}
-			else if(bStr == null) {
-				return -1;
-			}
-			return aStr.compareTo(bStr);
-		}
-		
-		public int compare(int aInt, int bInt) {
-			return aInt - bInt;
-		}
-		
-		public int compare(ValidatorMetaData aVMD, ValidatorMetaData bVMD) {
-			if((aVMD == null) && (bVMD == null)) {
-				return 0;
-			}
-			else if(aVMD == null) {
-				return 1;
-			}
-			else if(bVMD == null) {
-				return -1;
-			}
-			return compare(aVMD.getValidatorUniqueName(), bVMD.getValidatorUniqueName());
-		}
-
-		public int compare(IMarker aMarker, IMarker bMarker) {
-			if((aMarker == null) && (bMarker == null)) {
-				return 0;
-			}
-			else if(aMarker == null) {
-				return 1;
-			}
-			else if(bMarker == null) {
-				return -1;
-			}
-			
-			int valCmp = compare(getValidator(aMarker), getValidator(bMarker));
-			if(valCmp != 0) {
-				return valCmp;
-			}
-
-			int prjCmp = compare(getProject(aMarker), getProject(bMarker));
-			if(prjCmp != 0) {
-				return prjCmp;
-			}
-			
-			int idCmp = compare(getMessagePrefix(aMarker), getMessagePrefix(bMarker));
-			if(idCmp != 0) {
-				return idCmp;
-			}
-
-			int cmp = compareResourceAndLocation(aMarker, bMarker);
-			return cmp;
-		}
-		
-		public int compare(IMarker marker, MessageMetaData mmd) {
-			if((marker == null) && (mmd == null)) {
-				return 0;
-			}
-			else if(marker == null) {
-				return 1;
-			}
-			else if(mmd == null) {
-				return -1;
-			}
-
-			int valCmp = compare(getValidator(marker), mmd.getValidator());
-			if(valCmp != 0) {
-				return valCmp;
-			}
-
-			int prjCmp = compare(getProject(marker), mmd.getValidatorTestcase().getProjectName());
-			if(prjCmp != 0) {
-				return prjCmp;
-			}
-			
-			int idCmp = compare(getMessagePrefix(marker), mmd.getMessagePrefix());
-			if(idCmp != 0) {
-				return idCmp;
-			}
-
-			int cmp = compareResourceAndLocation(marker, mmd);
-			return cmp;
-		}
-		
-		public int compare(MessageMetaData mmd, IMarker marker) {
-			if((mmd == null) && (marker == null)) {
-				return 0;
-			}
-			else if(mmd == null) {
-				return 1;
-			}
-			else if(marker == null) {
-				return -1;
-			}
-
-			int valCmp = compare(mmd.getValidator(), getValidator(marker));
-			if(valCmp != 0) {
-				return valCmp;
-			}
-
-			int prjCmp = compare(mmd.getValidatorTestcase().getProjectName(), getProject(marker));
-			if(prjCmp != 0) {
-				return prjCmp;
-			}
-
-			int idCmp = compare(mmd.getMessagePrefix(), getMessagePrefix(marker));
-			if(idCmp != 0) {
-				return idCmp;
-			}
-
-			int cmp = compareResourceAndLocation(mmd, marker);
-			return cmp;
-		}
-		
-		public int compare(MessageMetaData aMMD, MessageMetaData bMMD) {
-			if((aMMD == null) && (bMMD == null)) {
-				return 0;
-			}
-			else if(aMMD == null) {
-				return 1;
-			}
-			else if(bMMD == null) {
-				return -1;
-			}
-			
-			int valCmp = compare(aMMD.getValidator(), bMMD.getValidator());
-			if(valCmp != 0) {
-				return valCmp;
-			}
-
-			int prjCmp = compare(aMMD.getValidatorTestcase().getProjectName(), bMMD.getValidatorTestcase().getProjectName());
-			if(prjCmp != 0) {
-				return prjCmp;
-			}
-			
-			int idCmp = compare(aMMD.getMessagePrefix(), bMMD.getMessagePrefix());
-			if(idCmp != 0) {
-				return idCmp;
-			}
-
-			int cmp = compareResourceAndLocation(aMMD, bMMD);
-			return cmp;
-		}
-		
-		public int compareResourceAndLocation(IMarker aMarker, IMarker bMarker) {
-			int resCmp = compare(getResource(aMarker), getResource(bMarker));
-			if(resCmp != 0) {
-				return resCmp;
-			}
-			
-			Integer aLineNo = getLineNumber(aMarker);
-			Integer bLineNo = getLineNumber(bMarker);
-			if((aLineNo != null) && (bLineNo!= null)) {
-				return compare(aLineNo, bLineNo);
-			}
-			
-			String aLocation = getLocation(aMarker);
-			String bLocation = getLocation(bMarker);
-			if((aLocation != null) && (bLocation != null)) {
-				return compare(aLocation, bLocation);
-			}
-			
-			// If one has a line number and the other has a text location, can't compare
-			// the location, so just assume that they're equal.
-			return resCmp;
-		}
-		
-		public int compareResourceAndLocation(IMarker marker, MessageMetaData mmd) {
-			int resCmp = compare(getResource(marker), mmd.getResource());
-			if(resCmp != 0) {
-				return resCmp;
-			}
-			
-			if(mmd.isSetLineNumber()) {
-				Integer aLineNo = getLineNumber(marker);
-				int bLineNo = mmd.getLineNumber();
-				if(aLineNo != null) {
-					return compare(aLineNo.intValue(), bLineNo);
-				}
-			}
-
-			if(mmd.isSetLocation()) {
-				String aLocation = getLocation(marker);
-				String bLocation = mmd.getLocation();
-				if((aLocation != null) && (bLocation != null)) {
-					return compare(aLocation, bLocation);
-				}
-			}
-			
-			// If one has a line number and the other has a text location, can't compare
-			// the location, so just assume that they're equal.
-			return resCmp;
-		}
-		
-		public int compareResourceAndLocation(MessageMetaData mmd, IMarker marker) {
-			int resCmp = compare(mmd.getResource(), getResource(marker));
-			if(resCmp != 0) {
-				return resCmp;
-			}
-
-			if(mmd.isSetLineNumber()) {
-				int aLineNo = mmd.getLineNumber();
-				Integer bLineNo = getLineNumber(marker);
-				if(bLineNo!= null) {
-					return compare(aLineNo, bLineNo.intValue());
-				}
-			}
-
-			if(mmd.isSetLocation()) {
-				String aLocation = mmd.getLocation();
-				String bLocation = getLocation(marker);
-				if((aLocation != null) && (bLocation != null)) {
-					return compare(aLocation, bLocation);
-				}
-			}
-			
-			// If one has a line number and the other has a text location, can't compare
-			// the location, so just assume that they're equal.
-			return resCmp;
-		}
-		
-		public int compareResourceAndLocation(MessageMetaData aMMD, MessageMetaData bMMD) {
-			int resCmp = compare(aMMD.getResource(), bMMD.getResource());
-			if(resCmp != 0) {
-				return resCmp;
-			}
-
-			if(aMMD.isSetLineNumber() && bMMD.isSetLineNumber()) {
-				int aLineNo = aMMD.getLineNumber();
-				int bLineNo = bMMD.getLineNumber();
-				return compare(aLineNo, bLineNo);
-			}
-
-			if(aMMD.isSetLocation() && bMMD.isSetLocation()) {
-				String aLocation = aMMD.getLocation();
-				String bLocation = bMMD.getLocation();
-				if((aLocation != null) && (bLocation != null)) {
-					return compare(aLocation, bLocation);
-				}
-			}
-			
-			// If one has a line number and the other has a text location, can't compare
-			// the location, so just assume that they're equal.
-			return resCmp;
-		}
-	}
-	
-	public static MessagePrefixComparator getMessagePrefixComparator() {
-		if(_messagePrefixComparator == null) {
-			_messagePrefixComparator = new MessagePrefixComparator();
-		}
-		return _messagePrefixComparator;
-	}
-	
-	static class MessagePrefixComparator implements Comparator {
-		public int compare(Object a, Object b) {
-			String aPrefix = null;
-			String bPrefix = null;
-			if(a instanceof PropertyLine) {
-				aPrefix = ((PropertyLine)a).getMessagePrefix();
-			}
-			else if(a instanceof MessageMetaData) {
-				aPrefix = ((MessageMetaData)a).getMessagePrefix();
-			}
-			
-			if(b instanceof PropertyLine) {
-				bPrefix = ((PropertyLine)b).getMessagePrefix();
-			}
-			else if(b instanceof MessageMetaData) {
-				bPrefix = ((MessageMetaData)b).getMessagePrefix();
-			}
-
-			if(aPrefix.length() == 9) {
-				aPrefix = aPrefix.substring(0, 9);
-			}
-			
-			if(bPrefix.length() == 9) {
-				bPrefix = bPrefix.substring(0, 9);
-			}
-			
-			return aPrefix.compareTo(bPrefix);
-		}
-	}
-		
-	class MessageIdComparator implements Comparator {
-		private boolean _verbose = false;
-		private IBuffer _buffer = null;
-		
-		public boolean isVerbose() {
-			return _verbose;
-		}
-		
-		public void setVerbose(boolean v) {
-			_verbose = v;
-		}
-		
-		public IBuffer getBuffer() {
-			return _buffer;
-		}
-		
-		public void setBuffer(IBuffer b) {
-			_buffer = b;
-		}
-		
-		public String getMessageId(IMarker marker) {
-			try {
-				return (String)marker.getAttribute(ConfigurationConstants.VALIDATION_MARKER_MESSAGEID);
-			}
-			catch(CoreException exc) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if(logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, exc);
-				}
-				return ""; //$NON-NLS-1$
-			}
-		}
-		
-		public int compare(String aStr, String bStr) {
-			if((aStr == null) && (bStr == null)) {
-				return 0;
-			}
-			else if(aStr == null) {
-				return 1;
-			}
-			else if(bStr == null) {
-				return -1;
-			}
-			return aStr.compareTo(bStr);
-		}
-		
-		public int compare(Object a, Object b) {
-			if((a == null) && (b == null)) {
-				return 0;
-			}
-			else if(a == null) {
-				return 1;
-			}
-			else if(b == null) {
-				return -1;
-			}
-			
-			
-			// Sort first on the version, then on the message prefix
-			if((a instanceof String) && (b instanceof String)) {
-				String aStr = (String)a;
-				String bStr = (String)b;
-				return compare(aStr, bStr);
-			}
-			else if ((a instanceof PropertyLine) && (b instanceof PropertyLine)) {
-				PropertyLine aM = (PropertyLine)a;
-				PropertyLine bM = (PropertyLine)b;
-				
-				return compare(aM.getMessageId(), bM.getMessageId());
-			}
-			else if ((a instanceof PropertyLine) && (b instanceof IMarker)) {
-				PropertyLine aM = (PropertyLine)a;
-				IMarker bM = (IMarker)b;
-				
-				return compare(aM.getMessageId(), getMessageId(bM));
-			}
-			else if((a instanceof IMarker) && (b instanceof PropertyLine)) {
-				IMarker aM = (IMarker)a;
-				PropertyLine bM = (PropertyLine)b;
-				
-				return compare(getMessageId(aM), bM.getMessageId());
-			}
-			else if((a instanceof IMarker) && (b instanceof IMarker)) {
-				IMarker aM = (IMarker)a;
-				IMarker bM = (IMarker)b;
-
-				return compare(getMessageId(aM), getMessageId(bM));
-			}
-			
-			// else put it at the end of the list
-			return 1;
-		}
-	};
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/OperationTestcase.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/OperationTestcase.java
deleted file mode 100644
index 9d1c7b3..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/OperationTestcase.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package org.eclipse.jst.validation.test.internal.registry;
-
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jst.validation.test.BVTValidationPlugin;
-import org.eclipse.jst.validation.test.IOperationRunnable;
-import org.eclipse.jst.validation.test.setup.IBuffer;
-
-import com.ibm.wtp.common.logger.proxy.Logger;
-
-/**
- * Instead of testing a validator, an operation test case tests the 
- * validation framework.
- */
-public class OperationTestcase implements ITestcaseMetaData {
-	private String _pluginId = null; // The plugin id that has contributed this test case.
-	private String _projectName = null; // the name of the project that this test case tests
-	private String _inputFileName = null;
-	private String _opName = null; // the name of the test case
-	private IOperationRunnable _runnable = null;
-
-	public OperationTestcase(String pluginId, String projectName, String opName, String inputFileName, IOperationRunnable runnable) {
-		_pluginId = pluginId;
-		_projectName = projectName;
-		_inputFileName = inputFileName;
-		_opName = opName;
-		_runnable = runnable;
-	}
-	
-	public String getName() {
-		return _opName;
-	}
-	
-	public boolean isVisible() {
-		return true; // framework test cases are always visible on the test collector menu
-	}
-	
-	public String getDeclaringPluginId() {
-		return _pluginId;
-	}
-	
-	public String getProjectName() {
-		return _projectName;
-	}
-	
-	public IProject getProject() {
-		return TestcaseUtility.findProject(this);
-	}
-	
-	public String getInputFileName() {
-		return _inputFileName;
-	}
-	
-	public IOperationRunnable getRunnable() {
-		return _runnable;
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.validation.test.internal.registry.ITestcaseMetaData#run(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.jst.validation.test.setup.IBuffer, org.eclipse.core.resources.IProject)
-	 */
-	public void run(IBuffer buffer, IProject project) {
-		try {
-			getRunnable().setBuffer(buffer);
-			getRunnable().setProject(project);
-			getRunnable().setName(getName());
-			ResourcesPlugin.getWorkspace().run(getRunnable(), buffer.getProgressMonitor());
-		}
-		catch(CoreException exc) {
-			Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE, exc); //$NON-NLS-1$
-			}
-		}
-	}
-
-	public String toString() {
-		return getName();
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/RegistryConstants.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/RegistryConstants.java
deleted file mode 100644
index 134032e..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/RegistryConstants.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.eclipse.jst.validation.test.internal.registry;
-
-/**
- * Validation constants needed to declare an extension point, and
- * to implement an extension.
- */
-public interface RegistryConstants {
-	public static final String PLUGIN_ID = org.eclipse.jst.validation.test.BVTValidationPlugin.PLUGIN_ID;
-	
-	public static final String VALIDATOR_TESTCASE_EXT_PT_ID = "test"; // extension point declaration of the validator test case //$NON-NLS-1$
-	public static final String VALIDATOR_SETUP_EXT_PT_ID = "testSetup"; // extension point declaration of the test case setup mechanism (i.e., import the EAR or JAR) //$NON-NLS-1$
-	public static final String VALIDATOR_OPERATION_TESTCASE_EXT_PT_ID = "opTest"; // extension point declaration of the operation test case //$NON-NLS-1$
-	
-	public static final Double EJB20 = new Double(2.0); // EJB 2.0 input or 1.3 EAR
-	public static final Double EJB11 = new Double(1.1); // EJB 1.1 input or 1.2 EAR
-	public static final Double EJB = null; // common EJB level, such as reflection errors
-	public static final String EJB20_MSSG = "ejb20"; // in a .properties line, if the message id contains this string, it's an EJB 2.0 rule //$NON-NLS-1$
-	public static final String EJB11_MSSG = "ejb11"; // in a .properties line, if the message id contains this string, it's an EJB 1.1 rule //$NON-NLS-1$
-	public static final String EJB_MSSG = null; // in a .properties file, if the message is neither EJB20 nor EJB11, the rule is cross-specs. (e.g. reflection errors) //$NON-NLS-1$
-	
-
-	/*package*/ static final String ATT_VALIDATOR = "validator"; // the validator  //$NON-NLS-1$
-	/*package*/ static final String ATT_PLUGIN = "plugin"; // identifies the plugin which has the class //$NON-NLS-1$
-	/*package*/ static final String TAG_TEST = "test"; //$NON-NLS-1$
-	/*package*/ static final String TAG_IMPORT = "import"; //$NON-NLS-1$
-	/*package*/ static final String ATT_OPERATION = "operation"; // the fully-qualified name of the IImportOperation which is used to import the input //$NON-NLS-1$
-	/*package*/ static final String ATT_INPUT = "input"; //$NON-NLS-1$
-	/*package*/ static final String ATT_VERSION = "version"; // the version of the input, e.g. EJB 1.1 vs. EJB 2.0 //$NON-NLS-1$
-	/*package*/ static final String TAG_MESSAGE = "message"; //$NON-NLS-1$
-	/*package*/ static final String ATT_PREFIX = "prefix"; //$NON-NLS-1$
-	/*package*/ static final String ATT_SEVERITY = "severity"; //$NON-NLS-1$
-	/*package*/ static final String ATT_PROJECT = "project"; //$NON-NLS-1$
-	/*package*/ static final String ATT_RESOURCE = "resource"; //$NON-NLS-1$
-	/*package*/ static final String ATT_LOCATION = "location"; //$NON-NLS-1$
-	/*package*/ static final String ATT_TEXT = "text"; //$NON-NLS-1$
-	/*package*/ static final String ATT_VISIBLE = "visible"; // Is this test visible on the Test Collector menu? //$NON-NLS-1$
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/TestSetupImport.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/TestSetupImport.java
deleted file mode 100644
index eb60c1a..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/TestSetupImport.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.eclipse.jst.validation.test.internal.registry;
-
-import java.io.File;
-import java.lang.reflect.InvocationTargetException;
-import java.util.logging.Level;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jst.validation.test.BVTValidationPlugin;
-import org.eclipse.jst.validation.test.setup.IImportOperation;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-import com.ibm.wtp.common.logger.LogEntry;
-import com.ibm.wtp.common.logger.proxy.Logger;
-
-/**
- * This class holds the metadata needed to import an .ear or
- * a .jar file to set up a test case in batch mode.
- */
-public class TestSetupImport {
-	private String _fileName = null;
-	private IImportOperation _importOperation = null;
-
-	public TestSetupImport(IImportOperation op, String fileName) {
-		_importOperation = op;
-		_fileName = fileName;
-	}
-
-	public File getInputFile(String dir) {
-		File file = new File(dir, getFileName());
-		if(!file.exists()) {
-			Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE, "File " + file.getAbsolutePath() + " must exist and have read access."); //$NON-NLS-1$ //$NON-NLS-2$
-			}
-			return null;
-		}
-		
-		return file;
-	}
-	
-	public String getFileName() {
-		return _fileName;
-	}
-	
-	public IImportOperation getOperation() {
-		return _importOperation;
-	}
-	
-	/**
-	 * Return true if the file was found and imported successfully.
-	 */
-	public boolean importFile(IProgressMonitor monitor, String dir) {
-		Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-		int executionMap = 0x0;
-		boolean imported = true;
-		try {
-			File file = getInputFile(dir);
-			executionMap |= 0x1;
-			try {
-				IImportOperation op = getOperation();
-				executionMap |= 0x2;
-				imported = op.run(monitor, file);
-				executionMap |= 0x4;
-			}
-			catch (InterruptedException exc) {
-				executionMap |= 0x8;
-				imported = false;
-				if(logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-			catch (InvocationTargetException exc) {
-				executionMap |= 0x10;
-				imported = false;
-				if(logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-					if(exc.getTargetException() != null) {
-						entry.setTargetException(exc.getTargetException());
-						logger.write(Level.SEVERE, entry);
-					}
-				}
-			}
-			catch (Throwable exc) {
-				executionMap |= 0x20;
-				imported = false;
-				if(logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-		}
-		finally {
-			if(!imported) {
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setExecutionMap(executionMap);
-				entry.setText("TestSetup for " + dir + " was unsuccessful."); //$NON-NLS-1$ //$NON-NLS-2$
-				logger.write(Level.SEVERE, entry);
-			}
-			
-		}
-		return imported;
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/TestcaseMetaData.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/TestcaseMetaData.java
deleted file mode 100644
index 5fd1bf2..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/TestcaseMetaData.java
+++ /dev/null
@@ -1,161 +0,0 @@
-package org.eclipse.jst.validation.test.internal.registry;
-
-import java.io.File;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.core.runtime.IPluginRegistry;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jst.validation.test.BVTValidationPlugin;
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-
-import com.ibm.wtp.common.logger.proxy.Logger;
-
-public class TestcaseMetaData {
-	private String _pluginId = null; // The plugin id that has contributed this test case.
-	private ValidatorMetaData _vmd = null;
-	private MessageMetaData[] _messages = null;
-	private String _project = null; // the name of the project that this test case tests
-	private String[] _resourceNames = null; // the resources listed in the MessageMetaData of this test case.
-	private String _inputFileName = null;
-	private String _name = null; // the name of the test case
-	
-	public TestcaseMetaData(String pluginName, String project, ValidatorMetaData vmd, String inputFileName) {
-		_pluginId = pluginName;
-		_project = project;
-		_vmd = vmd;
-		_inputFileName = inputFileName;
-	}
-	
-	public String getDeclaringPluginId() {
-		return _pluginId;
-	}
-	
-	public String getProject() {
-		return _project;
-	}
-	
-	public IProject findProject() {
-		return ResourcesPlugin.getWorkspace().getRoot().getProject(_project);
-	}
-	
-	public String getInputFileName() {
-		return _inputFileName;
-	}
-	
-	public int getNumMessages() {
-		return getMessages().size();
-	}
-	
-	// The messages need to be stored in a list instead of an array because
-	// the list is sorted before searching & displaying.
-	public List getMessages() {
-		List copy = new ArrayList();
-		for(int i=0; i<_messages.length; i++) {
-			copy.add(_messages[i]);
-		}
-		
-		return copy;
-	}
-	
-	// Return the resources in this project for which there is a message in this test case.
-	// No resource instance will be in the resource more than once.
-	public IResource[] getResources(IProject project) {
-		Set temp = new HashSet(); // use a set in case there is more than one message registered against a resource (don't want duplicates in the list).
-		String[] resourceNames = getResourceNames();
-		for(int i=0; i<resourceNames.length; i++) {
-			String resourceName = resourceNames[i];
-			IResource resource = project.findMember(resourceName);
-			if(resource != null) {
-				// resource exists
-				temp.add(resource);
-			}
-		}
-		
-		IResource[] result = new IResource[temp.size()];
-		temp.toArray(result);
-		return result;
-	}
-	
-	public String[] getResourceNames() {
-		if(_resourceNames == null) {
-			_resourceNames = new String[_messages.length];
-			for(int i=0; i<_messages.length; i++) {
-				_resourceNames[i] = _messages[i].getResource();
-			}
-		}
-		return _resourceNames;
-	}
-	
-	/**
-	 * When an empty TMD is used to test an operation, and the operation needs the IResource[]
-	 * affected by the TMD to know whether or not the operation passes (i.e., one of the ValidatorSubsetOperation
-	 * constructors takes an IResource[], and the IResource[] must not be empty or null), then
-	 * this method is used to set the "resources" affected by the test case.
-	 */
-	public void setResourceNames(String[] resourceNames) {
-		_resourceNames = resourceNames;
-	}
-	
-	public void setMessages(MessageMetaData[] messages) {
-		// If messages are null, that means that the test case expects no validation errors.
-		_messages = ((messages == null) ? new MessageMetaData[0] : messages);
-	}
-	
-	public ValidatorMetaData getValidatorMetaData() {
-		return _vmd;
-	}
-	
-	public String getValidatorClass() {
-		return getValidatorMetaData().getValidatorUniqueName();
-	}
-
-	public String getName() {
-		if(_name == null) {
-			_name = _vmd.getValidatorDisplayName() + "::" + getProject(); //$NON-NLS-1$
-		}
-		return _name;
-	}	
-	
-	public String getInputDir() {
-		// If the directory where the testcase input isn't specified, 
-		// assume that the input is in a subdirectory, named "testInput",
-		// of the testcase's plugin.
-		IPluginRegistry registry = Platform.getPluginRegistry();
-		IPluginDescriptor descriptor = registry.getPluginDescriptor(getDeclaringPluginId());
-		if(descriptor != null) {
-			// Because Platform.asLocalURL throws an IOException if the URL resolves
-			// to a directory, find the plugin.xml file and then strip off the file name 
-			// to find the testInput directory.
-			try {
-				String pluginXmlPath = Platform.asLocalURL(new URL(descriptor.getInstallURL(), "plugin.xml")).getPath(); //$NON-NLS-1$
-				File pluginXml = new File(pluginXmlPath);
-				if(pluginXml.exists()) {
-					File inputDir = new File(pluginXml.getParent(), "testInput"); //$NON-NLS-1$
-					if (inputDir.exists() && inputDir.isDirectory()) {
-						return inputDir.getPath();
-					}
-				}
-			}
-			catch(java.io.IOException exc) {
-			    Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if(logger.getLevel() == Level.SEVERE) {
-					logger.write(Level.SEVERE, exc);
-				}
-			}
-		}
-		
-		// Should never get here, but if we do, assume that the input 
-		// directory is the current directory.
-		return System.getProperty("user.dir"); //$NON-NLS-1$
-	}
-}
-
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/TestcaseUtility.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/TestcaseUtility.java
deleted file mode 100644
index 90f1b90..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/TestcaseUtility.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.eclipse.jst.validation.test.internal.registry;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.net.URL;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.core.runtime.IPluginRegistry;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jst.validation.test.BVTValidationPlugin;
-
-import com.ibm.wtp.common.logger.proxy.Logger;
-
-/**
- * Utility class that contains convenience methods for test cases.
- */
-public final class TestcaseUtility {
-	/**
-	 * Load the project that this test case is supposed to run on.
-	 */
-	public static IProject findProject(ITestcaseMetaData tmd) {
-		if(tmd == null) {
-			return null;
-		}
-		
-		return ResourcesPlugin.getWorkspace().getRoot().getProject(tmd.getProjectName());
-	}
-
-	/**
-	 * Return the directory where the input for this test case can be located.
-	 */
-	public static String getInputDir(ITestcaseMetaData tmd) {
-		// If the directory where the testcase input isn't specified, 
-		// assume that the input is in a subdirectory, named "testInput",
-		// of the testcase's plugin.
-		IPluginRegistry registry = Platform.getPluginRegistry();
-		IPluginDescriptor descriptor = registry.getPluginDescriptor(tmd.getDeclaringPluginId());
-		if(descriptor != null) {
-			// Because Platform.asLocalURL throws an IOException if the URL resolves
-			// to a directory, find the plugin.xml file and then strip off the file name 
-			// to find the testInput directory.
-			try {
-				String pluginXmlPath = Platform.asLocalURL(new URL(descriptor.getInstallURL(), "plugin.xml")).getPath(); //$NON-NLS-1$
-				File pluginXml = new File(pluginXmlPath);
-				if(pluginXml.exists()) {
-					File inputDir = new File(pluginXml.getParent(), "testInput"); //$NON-NLS-1$
-					if (inputDir.exists() && inputDir.isDirectory()) {
-						return inputDir.getPath();
-					}
-				}
-			}
-			catch(java.io.IOException exc) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if(logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, exc);
-				}
-			}
-		}
-		
-		// Should never get here, but if we do, assume that the input 
-		// directory is the current directory.
-		return System.getProperty("user.dir"); //$NON-NLS-1$
-	}
-
-	/**
-	 * logFileName must point to a fully-qualified file.
-	 */
-	public static void flush(String logFileName, String buffer, boolean append) {
-		try {
-			FileWriter writer = new FileWriter(logFileName, append);
-			writer.write(buffer); // Write the entire report to the state log.
-			writer.close();
-		}
-		catch(IOException exc) {
-			Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE, exc);
-			}
-		}
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/ValidatorTestcase.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/ValidatorTestcase.java
deleted file mode 100644
index 4327409..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/registry/ValidatorTestcase.java
+++ /dev/null
@@ -1,481 +0,0 @@
-package org.eclipse.jst.validation.test.internal.registry;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jst.validation.test.BVTValidationException;
-import org.eclipse.jst.validation.test.BVTValidationPlugin;
-import org.eclipse.jst.validation.test.ValidationTypeEnum;
-import org.eclipse.jst.validation.test.internal.util.BVTRunner;
-import org.eclipse.jst.validation.test.setup.IBuffer;
-import org.eclipse.wst.validation.core.IFileDelta;
-import org.eclipse.wst.validation.internal.ConfigurationManager;
-import org.eclipse.wst.validation.internal.GlobalConfiguration;
-import org.eclipse.wst.validation.internal.TaskListUtility;
-import org.eclipse.wst.validation.internal.VThreadManager;
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-import org.eclipse.wst.validation.internal.operations.ValidatorSubsetOperation;
-
-import com.ibm.wtp.common.logger.proxy.Logger;
-
-public class ValidatorTestcase implements ITestcaseMetaData {
-	private String _pluginId = null; // The plugin id that has contributed this test case.
-	private ValidatorMetaData _vmd = null;
-	private MessageMetaData[] _messages = null;
-	private String _projectName = null; // the name of the project that this test case tests
-	private String[] _resourceNames = null; // the resources listed in the MessageMetaData of this test case.
-	private String _inputFileName = null;
-	private String _name = null; // the name of the test case
-	private boolean _visible = true; // Is this test case visible on the Test Collector menu
-	
-	public ValidatorTestcase(String pluginName, String project, ValidatorMetaData vmd, String inputFileName, boolean visible) {
-		_pluginId = pluginName;
-		_projectName = project;
-		_vmd = vmd;
-		_inputFileName = inputFileName;
-		_visible = visible;
-	}
-	
-	public boolean isVisible() {
-		return _visible;
-	}
-	
-	public String getDeclaringPluginId() {
-		return _pluginId;
-	}
-	
-	public String getProjectName() {
-		return _projectName;
-	}
-	
-	public IProject getProject() {
-		return TestcaseUtility.findProject(this);
-	}
-	
-	public String getInputFileName() {
-		return _inputFileName;
-	}
-	
-	/**
-	 * Return the number of messages
-	 */
-	public int getNumMessages() {
-		return getMessages(ValidationTypeEnum.RUN_VALIDATION).size();
-	}
-	
-	/**
-	 * Return the list of messages that should be reported for the given build
-	 * type. (e.g. if the validator does not support incremental validation,
-	 * then instead of returning the list of expected messages, return an empty 
-	 * list.)
-	 */
-	public List getMessages(int buildType) {
-		// The messages need to be stored in a list instead of an array because
-		// the list is sorted before searching & displaying.
-		switch(buildType) {
-			case(ValidationTypeEnum.AUTO_VALIDATION):
-			case(ValidationTypeEnum.INCREMENTAL_VALIDATION): {
-				if(!getValidatorMetaData().isIncremental()) {
-					return Collections.EMPTY_LIST;
-				}
-				// Otherwise, return the default copy below.
-				break;
-			}
-
-			case(ValidationTypeEnum.FULL_VALIDATION): {
-				if(!getValidatorMetaData().isFullBuild()) {
-					return Collections.EMPTY_LIST;
-				}
-				// Otherwise, return the default copy below.
-				break;
-			}
-
-			case(ValidationTypeEnum.RUN_VALIDATION):
-			default: {
-				// Return the default copy below.
-			}
-			
-		}
-		
-		List copy = new ArrayList();
-		for(int i=0; i<_messages.length; i++) {
-			copy.add(_messages[i]);
-		}
-		
-		return copy;
-	}
-	
-	// Return the resources in this project for which there is a message in this test case.
-	// No resource instance will be in the resource more than once.
-	public IResource[] getResources(IProject project) {
-		Set temp = new HashSet(); // use a set in case there is more than one message registered against a resource (don't want duplicates in the list).
-		String[] resourceNames = getResourceNames();
-		for(int i=0; i<resourceNames.length; i++) {
-			String resourceName = resourceNames[i];
-			IResource resource = project.findMember(resourceName);
-			if(resource != null) {
-				// resource exists
-				temp.add(resource);
-			}
-		}
-		
-		IResource[] result = new IResource[temp.size()];
-		temp.toArray(result);
-		return result;
-	}
-	
-	public String[] getResourceNames() {
-		if(_resourceNames == null) {
-			_resourceNames = new String[_messages.length];
-			for(int i=0; i<_messages.length; i++) {
-				_resourceNames[i] = _messages[i].getResource();
-			}
-		}
-		return _resourceNames;
-	}
-	
-	/**
-	 * When an empty TMD is used to test an operation, and the operation needs the IResource[]
-	 * affected by the TMD to know whether or not the operation passes (i.e., one of the ValidatorSubsetOperation
-	 * constructors takes an IResource[], and the IResource[] must not be empty or null), then
-	 * this method is used to set the "resources" affected by the test case.
-	 */
-	public void setResourceNames(String[] resourceNames) {
-		_resourceNames = resourceNames;
-	}
-	
-	public void setMessages(MessageMetaData[] messages) {
-		// If messages are null, that means that the test case expects no validation errors.
-		_messages = ((messages == null) ? new MessageMetaData[0] : messages);
-	}
-	
-	public ValidatorMetaData getValidatorMetaData() {
-		return _vmd;
-	}
-	
-	public String getValidatorClass() {
-		return getValidatorMetaData().getValidatorUniqueName();
-	}
-
-	public String getName() {
-		if(_name == null) {
-			_name = _vmd.getValidatorDisplayName() + "::" + getProjectName(); //$NON-NLS-1$
-		}
-		return _name;
-	}	
-	
-	public void run(IBuffer buffer, IProject project) {
-		String status = ">>>>>RUN VALIDATION TEST PASS [" + project.getName() + "]>>>>>";	//$NON-NLS-1$ //$NON-NLS-2$			
-		buffer.getProgressMonitor().subTask(status);
-		buffer.write(status);
-		buffer.addExecutionStatus(getName(), ValidationTypeEnum.RUN_VALIDATION_NAME, validate(buffer, project, ValidationTypeEnum.RUN_VALIDATION, ValidationTypeEnum.RUN_VALIDATION_NAME));
-		status = ">>>>>END RUN VALIDATION TEST PASS [" + project.getName() + "]>>>>>";	//$NON-NLS-1$ //$NON-NLS-2$
-		buffer.getProgressMonitor().subTask(status);
-		buffer.write(status);
-		
-		status = ">>>>>FULL BUILD TEST PASS [" + project.getName() + "]>>>>>";			//$NON-NLS-1$ //$NON-NLS-2$		
-		buffer.getProgressMonitor().subTask(status);
-		buffer.write(status);
-		buffer.addExecutionStatus(getName(), ValidationTypeEnum.FULL_VALIDATION_NAME, validate(buffer, project, ValidationTypeEnum.FULL_VALIDATION, ValidationTypeEnum.FULL_VALIDATION_NAME));
-		status = ">>>>>END FULL BUILD TEST PASS [" + project.getName() + "]>>>>>";	//$NON-NLS-1$ //$NON-NLS-2$
-		buffer.getProgressMonitor().subTask(status);
-		buffer.write(status);
-		
-		status = ">>>>>INCREMENTAL BUILD TEST PASS [" + project.getName() + "]>>>>>";	//$NON-NLS-1$ //$NON-NLS-2$
-		buffer.getProgressMonitor().subTask(status);
-		buffer.write(status);
-		buffer.addExecutionStatus(getName(), ValidationTypeEnum.INCREMENTAL_VALIDATION_NAME, validate(buffer, project, ValidationTypeEnum.INCREMENTAL_VALIDATION, ValidationTypeEnum.INCREMENTAL_VALIDATION_NAME));
-		status = ">>>>>END INCREMENTAL BUILD TEST PASS [" + project.getName() + "]>>>>>";	//$NON-NLS-1$ //$NON-NLS-2$
-		buffer.getProgressMonitor().subTask(status);
-		buffer.write(status);
-		
-		status = ">>>>>AUTO BUILD TEST PASS [" + project.getName() + "]>>>>>";	//$NON-NLS-1$ //$NON-NLS-2$
-		buffer.getProgressMonitor().subTask(status);
-		buffer.write(status);
-		buffer.addExecutionStatus(getName(), ValidationTypeEnum.AUTO_VALIDATION_NAME, validate(buffer, project, ValidationTypeEnum.AUTO_VALIDATION, ValidationTypeEnum.AUTO_VALIDATION_NAME));
-		status = ">>>>>END AUTO BUILD TEST PASS [" + project.getName() + "]>>>>>";	//$NON-NLS-1$ //$NON-NLS-2$
-		buffer.getProgressMonitor().subTask(status);
-		buffer.write(status);
-		
-		if(getValidatorMetaData().isAsync()) {
-			status = ">>>>>ASYNCHRONOUS VALIDATION TEST PASS [" + project.getName() + "]>>>>>";	//$NON-NLS-1$ //$NON-NLS-2$
-			buffer.getProgressMonitor().subTask(status);
-			buffer.write(status);
-			buffer.addExecutionStatus(getName(), ValidationTypeEnum.ASYNC_NAME, asyncValidate(buffer, project, ValidationTypeEnum.ASYNC_NAME));
-			status = ">>>>>END ASYNCHRONOUS VALIDATION TEST PASS [" + project.getName() + "]>>>>>";	//$NON-NLS-1$ //$NON-NLS-2$
-			buffer.getProgressMonitor().subTask(status);
-			buffer.write(status);
-		}
-		else {
-			// By default, "pass" the asynchrous tests of any validator that cannot run asynchronous tests.
-			buffer.addExecutionStatus(getName(), ValidationTypeEnum.ASYNC_NAME, true);
-		}
-	}
-	
-	private boolean validate(IBuffer buffer, IProject project, int validationTypeEnum, String taskName) {
-		long start = System.currentTimeMillis();
-		boolean passed = true;
-		try {
-			passed = BVTRunner.singleton().test(buffer, project, this, validationTypeEnum);
-		}
-		catch(BVTValidationException exc) {
-			Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE, exc);
-				if(exc.getTargetException() != null) {
-					logger.write(Level.SEVERE, exc.getTargetException());
-				}
-			}
-		}
-		finally {
-			long end = System.currentTimeMillis();
-			buffer.addElapsedTime(taskName, (end - start));
-			buffer.write("Total time for validator " + getValidatorMetaData().getValidatorDisplayName() + " of project " + project.getName() + " in " + taskName + " mode was " + (end - start) + " milliseconds."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-		}
-		return passed;
-	}
-	
-	private boolean asyncValidate(IBuffer buffer, IProject project, String subTaskName) {
-		boolean passed = true;
-		long start = System.currentTimeMillis();
-		long end = 0;
-		try {
-			GlobalConfiguration gconf = ConfigurationManager.getManager().getGlobalConfiguration();
-			boolean autoValidate = gconf.isAutoValidate();
-			boolean buildValidate = gconf.isBuildValidate();
-			try {
-				// Turn off auto-validate so that the project isn't validated automatically.
-				gconf.setAutoValidate(false);
-				gconf.setBuildValidate(false);
-				gconf.passivate();
-				
-				// Two tests: 
-				//   1. Run validation on copies of the original project: "projectName.fork" and "projectName.noFork"
-				//      Compare the markers of the copies to the FVT TestcaseMetaData, and the validator passes if the 
-				//		results of each copy matches the TestcaseMetaData.
-				//   2. Run validation on copies, but this time introduce changes during the validation.
-				//		Extract the names of resources from the testcase metadata, find those resources, and
-				//		add/delete/rename/move/close/change them.
-				
-				boolean pass1 = validateAndCompare(buffer, project, subTaskName);
-				boolean pass2 = validateChangeAndCompare(buffer, project, IFileDelta.CHANGED, subTaskName);
-				boolean pass3 = validateChangeAndCompare(buffer, project, IFileDelta.DELETED, subTaskName);
-				passed = (pass1 && pass2 && pass3);
-			}
-			catch(CoreException exc) {
-				// Couldn't create copy.Just continue with the next test.
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if(logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, exc);
-				}
-			}
-			catch(BVTValidationException exc) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if(logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, exc);
-					if(exc.getTargetException() != null) {
-						logger.write(Level.SEVERE, exc.getTargetException());
-					}
-				}
-			}
-			catch(Throwable exc) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if(logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, exc);
-				}
-			}
-			finally {
-				gconf.setAutoValidate(autoValidate);
-				gconf.setBuildValidate(buildValidate);
-				gconf.passivate();
-			}
-		}
-		catch(InvocationTargetException exc) {
-			Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE, exc);
-				if(exc.getTargetException() != null) {
-					logger.write(Level.SEVERE, exc.getTargetException());
-				}
-			}
-		}
-		finally {
-			end = System.currentTimeMillis();
-			buffer.addElapsedTime(ValidationTypeEnum.ASYNC_NAME, (end - start));
-			buffer.write("Total time for validator " + getValidatorMetaData().getValidatorDisplayName() + " of project " + project.getName() + " in asynchronous mode was " + (end - start) + " milliseconds."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-			
-		}
-		return passed;
-	}
-
-	/**
-	 * Run validation, using several operations (both forked and not forked), on the IProject.
-	 * Return true if the result, after the last operation is complete, is the expected result.
-	 */
-	private boolean validateAndCompare(IBuffer buffer, IProject project, String subTaskName) throws CoreException, BVTValidationException {
-		// Now compare the IProject's result to the expected TestcaseMetaData result.
-		// Validate
-		ValidatorSubsetOperation noForkOp = new ValidatorSubsetOperation(project, true, false);
-		noForkOp.setValidators(getValidatorMetaData().getValidatorNames());
-		noForkOp.run(buffer.getProgressMonitor());
-		
-		if(buffer.getProgressMonitor().isCanceled()) {
-			return false;
-		}
-
-		ValidatorSubsetOperation forkOp = new ValidatorSubsetOperation(project, true, true);
-		forkOp.setValidators(getValidatorMetaData().getValidatorNames());
-		forkOp.run(buffer.getProgressMonitor());
-		
-		if(buffer.getProgressMonitor().isCanceled()) {
-			return false;
-		}
-
-		ValidatorSubsetOperation noForkOp2 = new ValidatorSubsetOperation(project, true, false);
-		noForkOp2.setValidators(getValidatorMetaData().getValidatorNames());
-		noForkOp2.run(buffer.getProgressMonitor());
-
-		if(buffer.getProgressMonitor().isCanceled()) {
-			return false;
-		}
-
-		ValidatorSubsetOperation forkOp2 = new ValidatorSubsetOperation(project, true, true);
-		forkOp2.setValidators(getValidatorMetaData().getValidatorNames());
-		forkOp2.run(buffer.getProgressMonitor());
-		
-		if(buffer.getProgressMonitor().isCanceled()) {
-			return false;
-		}
-
-		ValidatorSubsetOperation forkOp3 = new ValidatorSubsetOperation(project, true, true);
-		forkOp3.setValidators(getValidatorMetaData().getValidatorNames());
-		forkOp3.run(buffer.getProgressMonitor());
-		
-		// Wait until all of the threads have complete.
-		buffer.getProgressMonitor().subTask("Waiting for all forked threads to finish..."); //$NON-NLS-1$
-		while(!VThreadManager.getManager().isDone() && !buffer.getProgressMonitor().isCanceled()) {}
-		buffer.getProgressMonitor().subTask("All threads are complete. Beginning the comparison."); //$NON-NLS-1$
-		
-		if(buffer.getProgressMonitor().isCanceled()) {
-			return false;
-		}
-
-		// Compare
-		IMarker[] markers = TaskListUtility.getValidationTasks(project, getValidatorMetaData().getValidatorNames());
-
-		if(buffer.getProgressMonitor().isCanceled()) {
-			return false;
-		}
-
-		return BVTRunner.singleton().verify(buffer, getName(), subTaskName, project, getMessages(ValidationTypeEnum.RUN_VALIDATION), markers); 
-	}
-
-	private boolean validateChangeAndCompare(IBuffer buffer, IProject project, int ifileDeltaType, String subTaskName) throws BVTValidationException, CoreException {
-		boolean passed = true;
-		
-		ValidatorMetaData[] vmds = new ValidatorMetaData[]{getValidatorMetaData()};
-		
-		ValidatorSubsetOperation noForkOpOrig = new ValidatorSubsetOperation(project, true, false);
-		noForkOpOrig.setValidators(getValidatorMetaData().getValidatorNames());
-		noForkOpOrig.run(buffer.getProgressMonitor());
-
-		if(buffer.getProgressMonitor().isCanceled()) {
-			return false;
-		}
-
-		ValidatorSubsetOperation noForkOpChanged = new ValidatorSubsetOperation(project, vmds, getResources(project), ifileDeltaType, false, false); // false = do not force if there's no deltas to validate
-		noForkOpChanged.run(buffer.getProgressMonitor());
-
-		if(buffer.getProgressMonitor().isCanceled()) {
-			return false;
-		}
-
-		ValidatorSubsetOperation forkOpOrig = new ValidatorSubsetOperation(project, true, true);
-		forkOpOrig.setValidators(getValidatorMetaData().getValidatorNames());
-		forkOpOrig.run(buffer.getProgressMonitor());
-
-		if(buffer.getProgressMonitor().isCanceled()) {
-			return false;
-		}
-
-		ValidatorSubsetOperation forkOpChanged = new ValidatorSubsetOperation(project, vmds,  getResources(project), ifileDeltaType, false, true); // false = do not force if there's no deltas to validate
-		forkOpChanged.run(buffer.getProgressMonitor());
-		
-		if(buffer.getProgressMonitor().isCanceled()) {
-			return false;
-		}
-
-		ValidatorSubsetOperation noForkOp2Orig = new ValidatorSubsetOperation(project, true, false);
-		noForkOp2Orig.setValidators(getValidatorMetaData().getValidatorNames());
-		noForkOp2Orig.run(buffer.getProgressMonitor());
-
-		if(buffer.getProgressMonitor().isCanceled()) {
-			return false;
-		}
-
-		ValidatorSubsetOperation noForkOp2Changed = new ValidatorSubsetOperation(project, vmds,  getResources(project), ifileDeltaType, false, false); // false = do not force if there's no deltas to validate
-		noForkOp2Changed.run(buffer.getProgressMonitor());
-
-		if(buffer.getProgressMonitor().isCanceled()) {
-			return false;
-		}
-
-		ValidatorSubsetOperation forkOp2Orig = new ValidatorSubsetOperation(project, true, true);
-		forkOp2Orig.setValidators(getValidatorMetaData().getValidatorNames());
-		forkOp2Orig.run(buffer.getProgressMonitor());
-		
-		if(buffer.getProgressMonitor().isCanceled()) {
-			return false;
-		}
-
-		ValidatorSubsetOperation forkOp2Changed = new ValidatorSubsetOperation(project, vmds,  getResources(project), ifileDeltaType, false, true); // false = do not force if there's no deltas to validate
-		forkOp2Changed.run(buffer.getProgressMonitor());
-
-		if(buffer.getProgressMonitor().isCanceled()) {
-			return false;
-		}
-
-		ValidatorSubsetOperation forkOp3Orig = new ValidatorSubsetOperation(project, true, true);
-		forkOp3Orig.setValidators(getValidatorMetaData().getValidatorNames());
-		forkOp3Orig.run(buffer.getProgressMonitor());
-		
-		if(buffer.getProgressMonitor().isCanceled()) {
-			return false;
-		}
-
-		ValidatorSubsetOperation forkOp3Changed = new ValidatorSubsetOperation(project, vmds, getResources(project), ifileDeltaType, false, true); // false = do not force if there's no deltas to validate
-		forkOp3Changed.run(buffer.getProgressMonitor());
-		
-		// Wait until all of the threads have complete.
-		buffer.getProgressMonitor().subTask("Waiting for all forked threads to finish..."); //$NON-NLS-1$
-		while(!VThreadManager.getManager().isDone() && !buffer.getProgressMonitor().isCanceled()) {}
-		if(buffer.getProgressMonitor().isCanceled()) {
-			buffer.getProgressMonitor().subTask("Comparison cancelled. Performing cleanup."); //$NON-NLS-1$
-			return false;
-		}
-		buffer.getProgressMonitor().subTask("All threads are complete. Beginning the comparison."); //$NON-NLS-1$
-		
-		// Compare
-		IMarker[] markers = TaskListUtility.getValidationTasks(project, getValidatorMetaData().getValidatorNames());
-
-		// Now compare the IProject's result to the expected TestcaseMetaData result.
-		// Don't write _passed = _passed && get...
-		// When the _passed == false, then java didn't bother running the test.
-		passed = BVTRunner.singleton().verify(buffer, getName(), subTaskName, project, getMessages(ValidationTypeEnum.RUN_VALIDATION), markers);
-		
-		ResourcesPlugin.getWorkspace().deleteMarkers(markers);
-	
-		return passed;
-		
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/util/BVTRunner.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/util/BVTRunner.java
deleted file mode 100644
index 83313ca..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/util/BVTRunner.java
+++ /dev/null
@@ -1,689 +0,0 @@
-package org.eclipse.jst.validation.test.internal.util;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jst.validation.test.BVTValidationException;
-import org.eclipse.jst.validation.test.BVTValidationPlugin;
-import org.eclipse.jst.validation.test.ValidationTypeEnum;
-import org.eclipse.jst.validation.test.internal.registry.BVTValidationRegistryReader;
-import org.eclipse.jst.validation.test.internal.registry.ITestcaseMetaData;
-import org.eclipse.jst.validation.test.internal.registry.MessageMetaData;
-import org.eclipse.jst.validation.test.internal.registry.MessageUtility;
-import org.eclipse.jst.validation.test.internal.registry.OperationTestcase;
-import org.eclipse.jst.validation.test.internal.registry.TestSetupImport;
-import org.eclipse.jst.validation.test.internal.registry.TestcaseUtility;
-import org.eclipse.jst.validation.test.internal.registry.ValidatorTestcase;
-import org.eclipse.jst.validation.test.setup.IBuffer;
-import org.eclipse.jst.validation.test.setup.ITestStatus;
-import org.eclipse.wst.validation.internal.InternalValidatorManager;
-import org.eclipse.wst.validation.internal.TaskListUtility;
-import org.eclipse.wst.validation.internal.VThreadManager;
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-import org.eclipse.wst.validation.internal.operations.OneValidatorOperation;
-import org.eclipse.wst.validation.internal.operations.ValidationOperation;
-import org.eclipse.wst.validation.internal.operations.ValidatorManager;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-import com.ibm.wtp.common.logger.LogEntry;
-import com.ibm.wtp.common.logger.proxy.Logger;
-
-/**
- */
-public final class BVTRunner {
-	private static BVTRunner _inst = null;
-	private List _extra = null; // The extra markers reported (stored in a list to make reading easier).
-	private List _missing = null; // The missing MMD that were supposed to be reported (stored in a list to make reading easier).
-
-	public static BVTRunner singleton() {
-		if(_inst == null) {
-			_inst = new BVTRunner();
-		}
-		return _inst;
-	}
-	
-	private BVTRunner() {
-		super();
-		_extra = new ArrayList();
-		_missing = new ArrayList();
-	}
-	
-	private boolean isVerbose() {
-		Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-		if(logger.isLoggingLevel(Level.FINEST)) {
-			return true;
-		}
-		return false;
-	}
-
-	private char getSeverityChar(Integer severity) {
-		if(severity == null) {
-			return '?';
-		}
-		
-		switch(severity.intValue()) {
-			case(IMarker.SEVERITY_ERROR): {
-				return 'E';
-			}
-			
-			case(IMarker.SEVERITY_WARNING): {
-				return 'W';
-			}
-			
-			case(IMarker.SEVERITY_INFO): {
-				return 'I';
-			}
-			
-			default: {
-				return '?';
-			}
-		}
-	}
-	
-	private String[] getNames(IProject[] projects) {
-		if(projects == null) {
-			return new String[0];
-		}
-		String[] names = new String[projects.length];
-		for(int i=0; i<projects.length; i++) {
-			IProject project = projects[i];
-			names[i] = project.getName();
-		}
-		return names;
-	}
-
-	private void debug(IBuffer buffer, IMarker[] messages) {
-		if(messages == null) {
-			buffer.write("Nothing to debug because nothing was reported"); //$NON-NLS-1$
-		}
-		
-		for(int i=0; i<messages.length; i++) {
-			IMarker marker = messages[i];
-			buffer.write(MessageUtility.toString(marker));
-		}
-	}
-
-	protected IProgressMonitor getDebugMonitor(IProgressMonitor monitor) {
-		if(isVerbose()) {
-			return monitor;
-		}
-		else {
-			return new NullProgressMonitor(); // if verbose is true, show progress messages for the creation & validation of the project. Otherwise show only the BVT status.
-		}
-	}
-	
-	/**
-	 * When invoking the test from the UI, the input has already been imported, so just test it.
-	 * The name of the test is derived from the name of the project.
-	 * Return the number of tests that passed.
-	 */	
-	public int test(IBuffer buffer, IProject[] projects) throws BVTValidationException {	
-		String[] testNames = getNames(projects);
-		BVTValidationRegistryReader reader = BVTValidationRegistryReader.getReader();
-		
-		buffer.getProgressMonitor().beginTask("Running BVT tests", projects.length); //$NON-NLS-1$
-		int totalTests = 0;
-		int totalPassed = 0;
-		for(int i=0; i<projects.length; i++) {
-			buffer.getProgressMonitor().subTask("Testing project " + (i+1) + " of " + projects.length); //$NON-NLS-1$ //$NON-NLS-2$
-			IProject project = projects[i];
-			ValidatorTestcase[] tests = reader.getValidatorTests(buffer.getProgressMonitor(), testNames[i]);
-			if((tests == null) || (tests.length == 0)) {
-				buffer.getProgressMonitor().subTask("There are no tests to run."); //$NON-NLS-1$
-				continue;
-			}
-			
-			int numTestsPassed = 0;
-			for(int j=0; j<tests.length; j++) {
-				ValidatorTestcase tmd = tests[j];
-				if(test(buffer, project, tmd, ValidationTypeEnum.RUN_VALIDATION)) {
-					numTestsPassed++;
-					buffer.getProgressMonitor().subTask("Test " + (j+1) + " of " + tests.length + " passed."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				}
-				else {
-					buffer.getProgressMonitor().subTask("Test " + (j+1) + " of " + tests.length + " failed."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				}
-				buffer.getProgressMonitor().worked(1);
-			}
-			
-			totalTests += tests.length;
-			totalPassed += numTestsPassed;
-			
-			buffer.write(numTestsPassed + " of " + tests.length + " tests passed."); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		buffer.write("\n>>>>>>>>>>TEST RESULTS>>>>>>>>>>"); //$NON-NLS-1$
-		buffer.write(totalPassed + " of " + totalTests + " tests passed."); //$NON-NLS-1$ //$NON-NLS-2$
-		buffer.getProgressMonitor().done();
-		
-		return totalPassed;
-	}
-	
-	/**
-	 * Construct a ValidationOperation on the IProject, invoke the operation, and verify that the
-	 * resulting IMarkers match the expected messages in the tmd.
-	 */	
-	public boolean test(IBuffer buffer, IProject project, ValidatorTestcase tmd, int validationEnumType) throws BVTValidationException {
-		switch(validationEnumType) {
-			case(ValidationTypeEnum.RUN_VALIDATION): {
-				return test(buffer, tmd.getName(), ValidationTypeEnum.RUN_VALIDATION_NAME, tmd.getMessages(validationEnumType), new OneValidatorOperation(project, tmd.getValidatorClass(), true, false), InternalValidatorManager.getManager().getValidatorNames(new ValidatorMetaData[]{tmd.getValidatorMetaData()})); // true=force, false=no for
-			}
-			
-			case(ValidationTypeEnum.FULL_VALIDATION): {
-				return build(buffer, project, tmd, validationEnumType, ValidationTypeEnum.FULL_VALIDATION_NAME);
-			}
-			
-			case(ValidationTypeEnum.INCREMENTAL_VALIDATION): {
-				return build(buffer, project, tmd, validationEnumType, ValidationTypeEnum.INCREMENTAL_VALIDATION_NAME);
-			}
-			
-			case(ValidationTypeEnum.AUTO_VALIDATION): {
-				return build(buffer, project, tmd, validationEnumType, ValidationTypeEnum.AUTO_VALIDATION_NAME);
-			}
-			
-			default: {
-				buffer.addExecutionStatus(tmd.getName(), null, ITestStatus.FAIL, buffer, "Unrecognized validation option:" + validationEnumType); //$NON-NLS-1$
-				return false;
-			}
-		}
-	}
-	
-	private boolean build(IBuffer buffer, final IProject project, final ValidatorTestcase tmd, final int validationEnumType, String subTaskName) throws BVTValidationException {
-		try {
-			IProgressMonitor nullMonitor = new NullProgressMonitor();
-			ResourcesPlugin.getWorkspace().run(
-			new IWorkspaceRunnable(){
-				public void run(IProgressMonitor monitor) {
-					try {
-						IResource[] resources = tmd.getResources(project);
-						for(int i=0; i<resources.length; i++) {
-							IResource res = resources[i];
-							res.touch(monitor);
-						}
-					}
-					catch(CoreException exc) {
-						Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-						if(logger.isLoggingLevel(Level.SEVERE)) {
-							logger.write(exc);
-						}
-					}
-				}
-			}, nullMonitor);
-		}
-		catch(CoreException exc) {
-			Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(exc);
-			}
-			buffer.addExecutionStatus(tmd.getName(), subTaskName, ITestStatus.FAIL, buffer, "CoreException caught; stack trace in LoggingUtil.log"); //$NON-NLS-1$
-			return false;
-		}
-
-		try {
-			// Do not build using only the validation builder because some validators
-			// (i.e., the EJB Validator) depend on the output of other builders 
-			// (i.e., the Java Builder).
-			project.build(validationEnumType, new NullProgressMonitor());
-		}
-		catch(CoreException exc) {
-			Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(exc);
-			}
-			buffer.write("CoreException caught; stack trace in LoggingUtil.log"); //$NON-NLS-1$
-			return false;
-		}
-
-		IMarker[] messages = TaskListUtility.getValidationTasks(project, InternalValidatorManager.getManager().getValidatorNames(new ValidatorMetaData[]{tmd.getValidatorMetaData()}));
-		return verify(buffer, tmd.getName(), subTaskName, project, tmd.getMessages(validationEnumType), messages);
-	}
-	
-	/**
-	 * Run the given ValidationOperation and ensure that the results match the results of the given test case.
-	 * Return true if the results match and false if they don't.
-	 * 
-	 * This method is public because it's needed for the TestOpConstr operation.
-	 */
-	public boolean test(IBuffer buffer, String testName, String subTaskName, List expectedMessages, ValidationOperation op, String[] validatorNames) throws BVTValidationException {
-		IProgressMonitor debugMonitor = getDebugMonitor(buffer.getProgressMonitor());
-		boolean passed = true;
-		try {
-			
-			if(op == null) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if(logger.isLoggingLevel(Level.WARNING)) {
-					logger.write(Level.WARNING, "Cannot run tests because the Operation is null."); //$NON-NLS-1$
-				}
-				passed = false;
-			}
-			else {
-				try {
-						ValidatorManager.getManager().setNoMessageLimit(op.getProject());
-					
-						ResourcesPlugin.getWorkspace().run(op, debugMonitor); 
-						
-						if(op.isFork()) {
-							// Wait until all forked threads are complete
-							while(!VThreadManager.getManager().isDone()){};
-						}
-			
-						// Load the enabled validators from the test, not the operation,
-						// because the test has the messages for a single validator, and
-						// if the messages from all enabled validators are retrieved,
-						// then "extra" messages, reported by validators whose messages
-						// aren't expected by the test, fail the test case. 
-						IMarker[] messages = TaskListUtility.getValidationTasks(op.getProject(), validatorNames);
-						passed = verify(buffer, testName, subTaskName, op.getProject(), expectedMessages, messages);
-				}
-				catch(Throwable exc) {
-					Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-					if(logger.isLoggingLevel(Level.SEVERE)) {
-						logger.write(Level.SEVERE, exc);
-					}
-					passed = false;
-				}
-			}
-		}
-		catch(Throwable exc) {
-			Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE, exc);
-			}
-			passed = false;
-		}
-		return passed;
-	}
-
-	public boolean setupTests(IBuffer buffer, boolean verbose) {
-		ValidatorTestcase[] vts = BVTValidationRegistryReader.getReader().getValidatorTests(buffer.getProgressMonitor(), (String)null);
-		OperationTestcase[] ots = BVTValidationRegistryReader.getReader().getOperationTests(buffer.getProgressMonitor(), (String)null);
-		boolean successful = true;
-		for(int i=0; i<vts.length; i++) {
-			ValidatorTestcase vtest = vts[i];
-			successful = setupTests(buffer, vtest, false) && successful;
-		}
-		
-		for(int j=0; j<ots.length; j++) {
-			OperationTestcase otest = ots[j];
-			successful = setupTests(buffer, otest, false) && successful;
-		}
-		
-		return successful;
-	}
-	
-	/**
-	 * Return true if all of the test cases' input were found and imported.
-	 */
-	public boolean setupTests(IBuffer buffer, ITestcaseMetaData tmd, boolean verbose) {
-		int executionMap = 0x0;
-		boolean imported = true;
-		Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-		try {
-			BVTValidationRegistryReader reader = BVTValidationRegistryReader.getReader();
-	
-			// Each import operation deletes any project before it re-imports it.
-			String dir = TestcaseUtility.getInputDir(tmd);
-			TestSetupImport[] setup = reader.getTestSetup(buffer, dir, tmd, verbose);
-			if((setup == null) || (setup.length == 0)) {
-				String message = "Cannot import input that does not exist. Check that directory " + dir + " exists."; //$NON-NLS-1$ //$NON-NLS-2$ 
-				buffer.write(message);
-				executionMap |= 0x1;
-				imported = false;
-				if(logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setExecutionMap(executionMap);
-					entry.setText(message);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-			else {
-				buffer.getProgressMonitor().beginTask("Importing files; please wait...", setup.length); //$NON-NLS-1$
-				for(int i=0; i<setup.length; i++) {
-					buffer.getProgressMonitor().subTask("Importing file " + (i+1) + " of " + setup.length); //$NON-NLS-1$ //$NON-NLS-2$
-					if(!setup[i].importFile(buffer.getProgressMonitor(), dir)) {
-						// One of the input files couldn't be imported.
-						executionMap |= 0x2;
-						imported = false;
-						if(logger.isLoggingLevel(Level.SEVERE)) {
-							LogEntry entry = ValidationPlugin.getLogEntry();
-							entry.setExecutionMap(executionMap);
-							entry.setText("Import failed for dir " + dir); //$NON-NLS-1$
-							logger.write(Level.SEVERE, entry);
-						}
-						continue;
-					}
-					buffer.getProgressMonitor().worked(1);
-				}
-				buffer.getProgressMonitor().done();
-			}
-		}
-		finally {
-			if(!imported) {
-				String tmdName = (tmd == null) ? "?" : tmd.getName(); //$NON-NLS-1$
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setExecutionMap(executionMap);
-				entry.setText("Test setup for " + tmdName + " was unsuccessful."); //$NON-NLS-1$ //$NON-NLS-2$
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-		return imported;
-	}
-
-	/**
-	 * Return true if the expected messages (tmdMmdList) matches the reported messages (ml2).
-	 */
-	public boolean compare(IBuffer buffer, String testName, String subTaskName, List tmdMmdList, IMarker[] ml2) {
-		// Convert one of the arrays into a list so that it can be sorted.
-		int numMatched = 0;
-		List mmdList = new ArrayList(tmdMmdList); // create a copy of the tmd's expected output so that the tmd's output remains intact
-		int numExpected = mmdList.size();
-		int numReported = ml2.length;
-		boolean passed = true;
-	
-
-		try {		
-			Collections.sort(mmdList, MessageUtility.getMessageComparator(buffer, isVerbose()));
-	
-			try {
-				for(int i=0; i<ml2.length; i++) {
-					IMarker marker = ml2[i];
-					MessageMetaData matching = getMatchingMetaData(buffer, mmdList, marker);
-					if(matching == null) {
-						_extra.add(marker);
-						continue;
-					}
-					else {
-						// Every time a mmd is matched to a marker, remove the mmd
-						// from the list so that mmds without a marker can be flagged.
-						mmdList.remove(matching);
-						numMatched++;
-					}
-				}
-	
-				if(mmdList.size() != 0) {
-					_missing.addAll(mmdList);
-				}
-			}
-			catch(Throwable exc) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if(logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, exc);
-				}
-				passed = false;
-			}
-			finally {
-				passed = passed && ((_missing.size() == 0) && (_extra.size() == 0));
-				
-				// Report the missing markers after the MMD list is sorted
-				Collections.sort(_missing, MessageUtility.getMessageComparator(buffer, isVerbose()));
-				Iterator iterator = _missing.iterator();
-				while(iterator.hasNext()) {
-					MessageMetaData mmd = (MessageMetaData)iterator.next();
-					buffer.addExecutionStatus(testName, subTaskName, ITestStatus.FAIL, buffer, "ERROR[missing message]: " + MessageUtility.toString(mmd)); //$NON-NLS-1$
-				}
-				
-				// Report the extra markers after they're sorted.
-				Collections.sort(_extra, MessageUtility.getMessageComparator(buffer, isVerbose()));
-				iterator = _extra.iterator();
-				while(iterator.hasNext()) {
-					IMarker marker = (IMarker)iterator.next();
-					buffer.addExecutionStatus(testName, subTaskName, ITestStatus.FAIL, buffer, "ERROR[extra message]: " + MessageUtility.toString(marker) + ", Text is: \"" + MessageUtility.getMessage(marker) + "\""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				}
-		
-				if(numExpected != numReported) {
-					buffer.write("Wrong number of messages reported. Expected " + numExpected + " and got " + numReported); //$NON-NLS-1$ //$NON-NLS-2$
-				}
-	
-				buffer.write("Number of extra messages: " + _extra.size()); //$NON-NLS-1$
-				buffer.write("Number of missing messages: " + _missing.size()); //$NON-NLS-1$
-				buffer.write("Number of matched messages: " + numMatched); //$NON-NLS-1$
-			}
-		}
-		finally {
-			mmdList.clear();
-			_extra.clear(); // Clear the list of extra markers (stored in a list to make reading easier).
-			_missing.clear(); // Clear the list of missing markers (stored in a list to make reading easier).
-		}
-		return passed;
-	}
-	
-	public boolean verify(IBuffer buffer, String testName, String subTaskName, IProject project, List mmdListOrig, IMarker[] messages) {
-		buffer.write("Test case: " + testName); //$NON-NLS-1$
-
-		int numMatched = 0;
-		int numExpected = 0;
-		int numReported = 0;
-		boolean passed = true;
-		List mmdList = new ArrayList(mmdListOrig); // Need to modify the list, but do not want to modify the original, so create a copy.
-		try {
-			// First, check that the number of messages match.
-			if(messages == null) {
-				passed = false;
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if(logger.isLoggingLevel(Level.INFO)) {
-					logger.write(Level.INFO, "No messages were reported."); //$NON-NLS-1$
-				}
-				return passed;
-			}
-			
-			numExpected = mmdList.size();
-			numReported = messages.length;
-			
-			Collections.sort(mmdList, MessageUtility.getMessageComparator(buffer, isVerbose()));
-
-			for(int i=0; i<messages.length; i++) {
-				IMarker marker = messages[i];
-				MessageMetaData mmd = getMatchingMetaData(buffer, mmdList, marker);
-	
-				if(mmd == null) {
-					_extra.add(marker);
-					continue;
-				}
-				else {
-					// Every time a mmd is matched to a marker, remove the mmd
-					// from the list so that mmds without a marker can be flagged.
-					mmdList.remove(mmd);
-					if(isVerbose()) {
-						buffer.write("matched " + MessageUtility.toString(marker) + " to " + MessageUtility.toString(mmd)); //$NON-NLS-1$ //$NON-NLS-2$
-					}
-					numMatched++;
-				}
-				
-				// Check severity
-				try {
-					// Fail a test case based on severity mismatch because EJB deploy
-					// relies on the severity to determine whether or not deployment
-					// can continue?
-					verifySeverity(buffer, testName, subTaskName, mmd, marker);
-				}
-				catch(CoreException e) {
-					passed = false;
-					Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-					if(logger.isLoggingLevel(Level.SEVERE)) {
-						logger.write(Level.SEVERE, e);
-					}
-					buffer.write("ERROR[Testcase::" + testName + "]. CoreException caught while verifying severity"); //$NON-NLS-1$ //$NON-NLS-2$
-					continue;
-				}
-				
-				// Check resource
-				try {
-					// Don't fail a test case based on resource, because the "location" column will
-					// uniquely identify the location of the message, anyway. Should still let the 
-					// user know, though.
-					verifyResource(buffer, testName, subTaskName, mmd, marker);
-				}
-				catch(CoreException e) {
-					passed = false;
-					buffer.write("ERROR[Testcase::" + testName + "]. CoreException caught while verifying resource"); //$NON-NLS-1$ //$NON-NLS-2$
-					Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-					if(logger.isLoggingLevel(Level.SEVERE)) {
-						logger.write(Level.SEVERE, e);
-					}
-					continue;
-				}
-				
-				// Check location
-				try {
-					// Don't fail a test case based on location, because the line number calculation
-					// is different in UI & batch, and the test cases are based on UI test results.
-					// Should still alert the user, though.
-					verifyLocation(buffer, testName, subTaskName,  mmd, marker);
-				}
-				catch(CoreException e) {
-					passed = false;
-					Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-					if(logger.isLoggingLevel(Level.SEVERE)) {
-						logger.write(Level.SEVERE, e);
-					}
-					buffer.write("ERROR[Testcase::" + testName + "]. CoreException caught while verifying line number"); //$NON-NLS-1$ //$NON-NLS-2$
-					continue;
-				}
-			}
-			
-			if(mmdList.size() != 0) {
-				_missing.addAll(mmdList);
-			}
-		}
-		catch(Throwable exc) {
-			Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE, exc);
-			}
-			passed = false;
-		}
-		finally {
-			if(!((_missing.size() == 0) && (_extra.size() == 0))) {
-				passed = false;
-			}
-			
-			if(passed) {
-				buffer.write("PASS[Testcase::" + testName + "]"); //$NON-NLS-1$ //$NON-NLS-2$
-				buffer.addExecutionStatus(testName, subTaskName, true); // If fail, will be reported in the extra & missing below.
-			}
-			else {
-				buffer.write("FAIL[Testcase::" + testName + "]"); //$NON-NLS-1$ //$NON-NLS-2$
-
-				// No point in listing the mmdList because it's empty by the time the finally block is reached
-				if(isVerbose()) {
-					buffer.write("List of markers reported:"); //$NON-NLS-1$
-					debug(buffer, messages);
-				}
-			}
-			
-			// Report the missing markers after the MMD list is sorted
-			Collections.sort(_missing, MessageUtility.getMessageComparator(buffer, isVerbose()));
-			Iterator iterator = _missing.iterator();
-			while(iterator.hasNext()) {
-				MessageMetaData mmd = (MessageMetaData)iterator.next();
-				buffer.addExecutionStatus(testName, subTaskName, ITestStatus.FAIL, buffer, "ERROR[missing message]: " + MessageUtility.toString(mmd)); //$NON-NLS-1$
-			}
-			
-			// Report the extra markers after they're sorted.
-			Collections.sort(_extra, MessageUtility.getMessageComparator(buffer, isVerbose()));
-			iterator = _extra.iterator();
-			while(iterator.hasNext()) {
-				IMarker marker = (IMarker)iterator.next();
-				buffer.addExecutionStatus(testName, subTaskName, ITestStatus.FAIL, buffer, "ERROR[extra message]: " + MessageUtility.toString(marker) + ", Text is: \"" + MessageUtility.getMessage(marker) + "\""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			}
-	
-			if(numExpected != numReported) {
-				buffer.write("Wrong number of messages reported. Expected " + numExpected + " and got " + numReported); //$NON-NLS-1$ //$NON-NLS-2$
-			}
-
-			buffer.write("Number of extra messages: " + _extra.size()); //$NON-NLS-1$
-			buffer.write("Number of missing messages: " + _missing.size()); //$NON-NLS-1$
-			buffer.write("Number of matched messages: " + numMatched); //$NON-NLS-1$
-			buffer.write("End of test case: " + testName); //$NON-NLS-1$
-			_extra.clear(); // Clear the list of extra markers (stored in a list to make reading easier).
-			_missing.clear(); // Clear the list of missing markers (stored in a list to make reading easier).
-		}
-		return passed;
-	}
-	
-	private int verifySeverity(IBuffer buffer, String testName, String subTaskName, MessageMetaData mmd, IMarker marker) throws CoreException {
-		// If prefixSeverity is null, marker has no prefix, therefore it has no severity
-		Integer prefixSeverity = MessageUtility.getSeverity(marker);
-		if(prefixSeverity != null) {
-			Integer severity = (Integer)marker.getAttribute(IMarker.SEVERITY); // IMarker.SEVERITY_ERROR, IMarker.SEVERITY_WARNING, IMarker.SEVERITY_INFO
-			boolean severityEqual = true;
-			if((severity == null) && (prefixSeverity == null)) {
-				severityEqual = true;
-			}
-			else if(severity == null) {
-				severityEqual = false;
-			}
-			else if(prefixSeverity == null) {
-				severityEqual = false;
-			}
-			else {
-				severityEqual = severity.equals(prefixSeverity);
-			}
-			
-			if(!severityEqual) {
-				buffer.addExecutionStatus(testName, subTaskName, ITestStatus.WARN, buffer, "WARNING[mismatching severity]: expected " + getSeverityChar(prefixSeverity) + ", got " + getSeverityChar(severity) + " on marker " + MessageUtility.toString(marker)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				return ITestStatus.WARN;
-			}
-		}
-			
-		return ITestStatus.PASS;
-	}
-	
-	private int verifyResource(IBuffer buffer, String testName, String subTaskName, MessageMetaData mmd, IMarker marker) throws CoreException {
-		String resource = MessageUtility.getResource(marker);
-		if(!resource.equals(mmd.getResource())) {
-			buffer.addExecutionStatus(testName, subTaskName, ITestStatus.WARN, buffer, "INFO[wrong resource]: expected " + mmd.getResource() + ", got " + resource + " on marker " + MessageUtility.toString(marker)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			return ITestStatus.WARN;
-		}
-		return ITestStatus.PASS;
-	}
-	
-	private int verifyLocation(IBuffer buffer, String testName, String subTaskName, MessageMetaData mmd, IMarker marker) throws CoreException {
-		// Either compare two line numbers or two text locations, but not a line number to a text location.
-		if(mmd.isSetLineNumber()) {
-			Integer lineNumber = MessageUtility.getLineNumber(marker);
-			if(lineNumber == null) {
-				// Marker has a text location, not a line number.
-				return ITestStatus.PASS;
-			}
-			
-			if(lineNumber.intValue() != mmd.getLineNumber()) {
-				buffer.addExecutionStatus(testName, subTaskName, ITestStatus.WARN, buffer, "INFO[wrong location]: expected " + mmd.getLineNumber() + ", got " + lineNumber + " on marker " + MessageUtility.toString(marker)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				return ITestStatus.WARN;
-			}
-		}
-		else if(mmd.isSetLocation()) {
-			String location = MessageUtility.getLocation(marker);
-			if(location == null) {
-				// marker has a line number, not a text location
-				return ITestStatus.PASS;
-			}
-			
-			if(!(mmd.getLocation().equals(location))) {
-				buffer.addExecutionStatus(testName, subTaskName, ITestStatus.WARN, buffer, "INFO[wrong location]: expected " + mmd.getLocation() + ", got " + location + " on marker " + MessageUtility.toString(marker)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				return ITestStatus.WARN;
-			}
-		}
-		
-		return ITestStatus.PASS;
-	}
-	
-	
-	private MessageMetaData getMatchingMetaData(IBuffer buffer, List mmdList, IMarker marker) {
-		int result = Collections.binarySearch(mmdList, marker, MessageUtility.getMessageComparator(buffer, isVerbose()));
-		if(result < 0) {
-			return null;
-		}
-		return (MessageMetaData)mmdList.get(result);
-	}
-}
\ No newline at end of file
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/util/BVTValidationUtility.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/util/BVTValidationUtility.java
deleted file mode 100644
index beff0ed..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/util/BVTValidationUtility.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * (c) Copyright 2001 MyCorporation.
- * All Rights Reserved.
- */
-package org.eclipse.jst.validation.test.internal.util;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jst.validation.test.BVTValidationException;
-import org.eclipse.jst.validation.test.BVTValidationPlugin;
-import org.eclipse.jst.validation.test.internal.registry.BVTValidationRegistryReader;
-import org.eclipse.jst.validation.test.internal.registry.ITestcaseMetaData;
-import org.eclipse.jst.validation.test.internal.registry.OperationTestcase;
-import org.eclipse.jst.validation.test.internal.registry.TestcaseUtility;
-import org.eclipse.jst.validation.test.internal.registry.ValidatorTestcase;
-import org.eclipse.wst.validation.internal.ConfigurationConstants;
-import org.eclipse.wst.validation.internal.ValidationRegistryReader;
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-
-/**
- * @version 	1.0
- * @author
- */
-public final class BVTValidationUtility {
-	private BVTValidationUtility() {
-	}
-	
-	public static ValidatorMetaData getValidatorMetaData(IMarker marker) {
-		String validatorClassName = null;
-		try {
-			validatorClassName = marker.getAttribute(ConfigurationConstants.VALIDATION_MARKER_OWNER).toString();
-			ValidatorMetaData vmd = ValidationRegistryReader.getReader().getValidatorMetaData(validatorClassName);
-			return vmd;
-		}
-		catch (CoreException exc) {
-		}
-		return null;		
-	}
-	
-	private static IMarker[] getValidationTasks(IResource resource) {
-		try {
-			IMarker[] allMarkers = resource.findMarkers(ConfigurationConstants.VALIDATION_MARKER, false, IResource.DEPTH_INFINITE); // false means only consider PROBLEM_MARKER, not variants of PROBLEM_MARKER. Since addTask only adds PROBLEM_MARKER, we don't need to consider its subtypes.
-			return allMarkers;
-		}
-		catch (CoreException exc) {
-			return null;
-		}
-	}
-	
-	public static void removeAllValidationMarkers() {
-		IWorkspace workspace = ResourcesPlugin.getWorkspace();
-		IWorkspaceRoot root = workspace.getRoot();
-		IMarker[] markers = getValidationTasks(root);
-		if(markers != null) {
-			try {
-				workspace.deleteMarkers(markers);
-			}
-			catch(CoreException e) {
-			}
-		}
-	}
-
-	public static String getProjectName(File file) {
-		String fileName = file.getName();
-		int extIndex = fileName.indexOf('.');
-		if(extIndex > 0) {
-			return fileName.substring(0, extIndex);
-		}
-		else {
-			return fileName;
-		}
-	}
-
-	public static String getQualifiedLogName(String logFileName) {
-		String dir = BVTValidationPlugin.getPlugin().getStateLocation().toOSString();
-		File dirWithFile = new File(dir, logFileName);
-		return dirWithFile.toString();
-	}
-	
-	public static IProject[] getProjects(ITestcaseMetaData[] tmds) {
-		List sortedList = new ArrayList();
-		for(int i=0; i<tmds.length; i++) {
-			IProject p = TestcaseUtility.findProject(tmds[i]);
-			if((p != null) && (p.exists()) && (p.isOpen()) && !sortedList.contains(p)) {
-				sortedList.add(p);
-			}
-		}
-		Collections.sort(sortedList, new Comparator() {
-			public int compare(Object a, Object b){
-				if((a == null) && (b == null)) {
-					return 0;
-				}
-				else if(a == null) {
-					return 1;
-				}
-				else if(b == null) {
-					return -1;
-				}
-			
-				if((a instanceof IProject) && (b instanceof IProject)) {
-					return ((IProject)a).getName().compareTo(((IProject)b).getName());
-				}
-				
-				return -1; // should never reach here...both Objects should always be IProjects
-			}
-		});
-		IProject[] result = new IProject[sortedList.size()];
-		sortedList.toArray(result);
-		return result;
-	}
-
-	public static ITestcaseMetaData[] getTests(ITestcaseMetaData[] tmds, IProject p) {
-		ITestcaseMetaData[] temp = new ITestcaseMetaData[tmds.length];
-		int count = 0;
-		for(int i=0; i<tmds.length; i++) {
-			ITestcaseMetaData tmd = tmds[i];
-			if(tmd.getProjectName().equals(p.getName())) {
-				temp[count++] = tmd;
-			}
-		}
-		
-		ITestcaseMetaData[] result = new ITestcaseMetaData[count];
-		System.arraycopy(temp, 0, result, 0, count);
-		return result;
-	}
-
-	/**
-	 * Return the total number of validator tests.
-	 */	
-	public static int numValidatorTests(IProgressMonitor monitor, IProject[] projects) throws BVTValidationException {	
-		BVTValidationRegistryReader reader = BVTValidationRegistryReader.getReader();
-		
-		int totalTests = 0;
-		for(int i=0; i<projects.length; i++) {
-			IProject project = projects[i];
-			ValidatorTestcase[] tests = reader.getValidatorTests(monitor, project);
-			if((tests == null) || (tests.length == 0)) {
-				continue;
-			}
-			
-			totalTests += tests.length;
-		}
-		
-		return totalTests;
-	}
-	
-	/**
-	 * Return all public (visible) test cases for a particular project.
-	 */
-	public static ValidatorTestcase[] getValidatorTests(IProgressMonitor monitor, IProject[] projects) {
-		Set testSet = new HashSet();		
-		for(int i=0; i<projects.length; i++) {
-			IProject project = projects[i];
-			ValidatorTestcase[] tests = getValidatorTests(monitor, project);
-			if(tests.length == 0) {
-				continue;
-			}
-			
-			for(int j=0; j<tests.length; j++) {
-				ValidatorTestcase vt = tests[j];
-				testSet.add(vt);
-			}
-		}
-		
-		ValidatorTestcase[] result = new ValidatorTestcase[testSet.size()];
-		testSet.toArray(result);
-		return result;
-	}
-
-	/**
-	 * Return all visible validator test cases for a project.
-	 */
-	public static ValidatorTestcase[] getValidatorTests(IProgressMonitor monitor, IProject project) {
-		BVTValidationRegistryReader reader = BVTValidationRegistryReader.getReader();
-
-		ValidatorTestcase[] tests = reader.getValidatorTests(monitor, project);
-		if(tests == null) {
-			return new ValidatorTestcase[0];
-		}
-		
-		return tests;
-	}
-
-	/**
-	 * Return all of the tests.
-	 */
-	public static OperationTestcase[] getOperationTests(IProgressMonitor monitor) {
-		return BVTValidationRegistryReader.getReader().getOperationTests(monitor, (String)null);
-	}
-	
-	public static OperationTestcase[] getOperationTests(IProgressMonitor monitor, IProject project) {
-		BVTValidationRegistryReader reader = BVTValidationRegistryReader.getReader();
-
-		OperationTestcase[] tests = reader.getOperationTests(monitor, project);
-		if(tests == null) {
-			return new OperationTestcase[0];
-		}
-		
-		return tests;
-	}
-
-	/**
-	 * Return all of the tests.
-	 */
-	public static ValidatorTestcase[] getValidatorTests(IProgressMonitor monitor) {
-		return BVTValidationRegistryReader.getReader().getValidatorTests(monitor, (String)null);
-	}
-	
-	/**
-	 * Return all of the tests, visible and invisible, owned by the validator metadata.
-	 */
-	public static ValidatorTestcase[] getValidatorTests(IProgressMonitor monitor, ValidatorMetaData vmd) {
-		ValidatorTestcase[] allTests = BVTValidationRegistryReader.getReader().getValidatorTests(monitor, (String)null);
-		ValidatorTestcase[] temp = new ValidatorTestcase[allTests.length];
-		int count = 0;
-		for(int i=0; i<allTests.length; i++) {
-			ValidatorTestcase testvmd = allTests[i];
-			if(vmd.equals(testvmd.getValidatorMetaData())) {
-				temp[count++] = testvmd;
-			}
-		}
-		ValidatorTestcase[] result = new ValidatorTestcase[count];
-		System.arraycopy(temp, 0, result, 0, count);
-		return result;
-	}
-	
-	public static ValidatorMetaData[] getValidatorsThatHaveTests(IProgressMonitor monitor) {
-		ValidatorTestcase[] tests = getValidatorTests(monitor);
-		Set temp = new HashSet();
-		for(int i=0; i<tests.length; i++) {
-			ValidatorTestcase vt = tests[i];
-			temp.add(vt.getValidatorMetaData());
-		}
-		
-		ValidatorMetaData[] vmds = new ValidatorMetaData[temp.size()];
-		temp.toArray(vmds);
-		return vmds;
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/util/BuildInfo.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/util/BuildInfo.java
deleted file mode 100644
index 1b612aa..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/util/BuildInfo.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.eclipse.jst.validation.test.internal.util;
-public class BuildInfo {
-  public static final String copyright = "Licensed Materials -- Property of IBM\n(c) Copyright International Business Machines Corporation, 2001,2003\nUS Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.";
-  public static final String fgBuildLevel = "20031112_1915-WB212-AD-V511D-W5";
-  public static String level() { return fgBuildLevel; }
-  public static String getWSABuildLevel() { return fgBuildLevel; }
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/util/RunTestsOperation.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/util/RunTestsOperation.java
deleted file mode 100644
index 8b2b032..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/internal/util/RunTestsOperation.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.eclipse.jst.validation.test.internal.util;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jst.validation.test.internal.registry.ITestcaseMetaData;
-import org.eclipse.jst.validation.test.setup.IBuffer;
-
-
-/**
- * Run the BVT of the validator: a full test, an incremental test,
- * and an asynchronous test, if applicable.
- * 
- * This class must NOT be wrapped in an IWorkspaceRunnable or 
- * there will be deadlock during the asynchronous validation test!
- * (Read the comment above VThreadManager::isDone() for details.)
- */
-public class RunTestsOperation {
-	private static RunTestsOperation _inst = null;
-	
-	private RunTestsOperation() {
-	}
-	
-	public static RunTestsOperation singleton() {
-		if(_inst == null) {
-			_inst = new RunTestsOperation();
-		}
-		return _inst;
-	}
-	
-	/**
-	 * @see org.eclipse.core.resources.IWorkspaceRunnable#run(IProgressMonitor)
-	 */
-	public void run(IBuffer buffer, ITestcaseMetaData[] allTmds) {
-		IProject[] projects = BVTValidationUtility.getProjects(allTmds);
-		for(int i=0; i<projects.length; i++) {
-			IProject project = projects[i];
-			ITestcaseMetaData[] tmds = BVTValidationUtility.getTests(allTmds, project);
-			
-			for(int j=0; j<tmds.length; j++) {
-				ITestcaseMetaData tmd = tmds[j];
-				tmd.run(buffer, project);
-			}
-		}
-	}
-	
-
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/AImportOperation.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/AImportOperation.java
deleted file mode 100644
index 2253f54..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/AImportOperation.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package org.eclipse.jst.validation.test.setup;
-
-import java.io.File;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jst.validation.test.BVTValidationPlugin;
-import org.eclipse.jst.validation.test.internal.util.BVTValidationUtility;
-import org.eclipse.wst.validation.internal.operations.ValidatorManager;
-import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
-
-import com.ibm.wtp.common.logger.LogEntry;
-import com.ibm.wtp.common.logger.proxy.Logger;
-
-/**
- * Abstract class that provides some of the functionality required to create
- * a project and populate it with the contents of a file.
- */
-public abstract class AImportOperation implements IImportOperation {
-	private void preRun(IProgressMonitor monitor) {
-		ValidatorManager.getManager().suspendAllValidation(true);
-	}
-	
-	private void postRun(IProgressMonitor monitor) {
-		ValidatorManager.getManager().suspendAllValidation(false);
-	}
-	
-	protected void deleteOldProject(IProgressMonitor monitor, String projectName) {
-		// delete any existing project of this name
-		IProject existingProject = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
-		if (existingProject.exists()) {
-			try {
-				existingProject.delete(true, null); // null=no progress mon (don't scare users)
-			}
-			catch (CoreException exc) {
-				Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-				if(logger.isLoggingLevel(Level.SEVERE)) {
-					logger.write(Level.SEVERE, exc);
-				}
-			}
-		}
-	}
-	
-	public boolean run(IProgressMonitor monitor, File file) {
-		boolean imported = true;
-		int executionMap = 0x0;
-		IProject project = null;
-		Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-		try {
-			if(monitor == null) {
-				monitor = new NullProgressMonitor();
-			}
-			
-			preRun(monitor);
-			
-			try {
-				String projectName = BVTValidationUtility.getProjectName(file);
-				deleteOldProject(monitor, projectName);
-				project = createNewProject(monitor, projectName, file);
-				
-				if((project == null) || (!project.isAccessible())) {
-					executionMap |= 0x1;
-					imported = false;
-					String message = "Cannot import file because IProject is null or not accessible."; //$NON-NLS-1$
-					monitor.subTask(message);
-					if(logger.isLoggingLevel(Level.SEVERE)) {
-						LogEntry entry = ValidationPlugin.getLogEntry();
-						entry.setExecutionMap(executionMap);
-						entry.setText(message);
-						logger.write(Level.SEVERE, entry);
-					}
-
-				}
-				else {				
-					imported = importFile(monitor, project, file);
-					executionMap |= 0x2;
-				}
-			}
-			catch (Throwable exc) {
-				executionMap |= 0x4;
-				imported = false;
-				if(logger.isLoggingLevel(Level.SEVERE)) {
-					LogEntry entry = ValidationPlugin.getLogEntry();
-					entry.setTargetException(exc);
-					logger.write(Level.SEVERE, entry);
-				}
-			}
-			finally {
-				postRun(monitor);
-			}
-		}
-		finally {
-			if(!imported) {
-				String projectName = (project == null) ? file.getName() : project.getName();
-				LogEntry entry = ValidationPlugin.getLogEntry();
-				entry.setExecutionMap(executionMap);
-				entry.setText("AImportOperation for " + projectName + " was unsuccessful."); //$NON-NLS-1$ //$NON-NLS-2$
-				logger.write(Level.SEVERE, entry);
-			}
-		}
-		return imported;
-	}
-	
-	protected abstract IProject createNewProject(IProgressMonitor monitor, String projectName, File inputFile);
-	
-	/**
-	 * Return true if the file was imported successfully.
-	 */
-	protected abstract boolean importFile(IProgressMonitor monitor, IProject project, File file);
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/BuildInfo.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/BuildInfo.java
deleted file mode 100644
index 745dcbe..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/BuildInfo.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.eclipse.jst.validation.test.setup;
-public class BuildInfo {
-  public static final String copyright = "Licensed Materials -- Property of IBM\n(c) Copyright International Business Machines Corporation, 2001,2003\nUS Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.";
-  public static final String fgBuildLevel = "20031112_1915-WB212-AD-V511D-W5";
-  public static String level() { return fgBuildLevel; }
-  public static String getWSABuildLevel() { return fgBuildLevel; }
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/CheckForUntestedPropertiesOperation.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/CheckForUntestedPropertiesOperation.java
deleted file mode 100644
index 3545937..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/CheckForUntestedPropertiesOperation.java
+++ /dev/null
@@ -1,149 +0,0 @@
-package org.eclipse.jst.validation.test.setup;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPluginDescriptor;
-import org.eclipse.core.runtime.IPluginRegistry;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jst.validation.sample.parser.PropertyLine;
-import org.eclipse.jst.validation.sample.workbenchimpl.PluginPropertyFile;
-import org.eclipse.jst.validation.test.BVTValidationPlugin;
-import org.eclipse.jst.validation.test.ValidationTypeEnum;
-import org.eclipse.jst.validation.test.internal.registry.MessageUtility;
-import org.eclipse.jst.validation.test.internal.registry.ValidatorTestcase;
-import org.eclipse.jst.validation.test.internal.util.BVTValidationUtility;
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-
-import com.ibm.wtp.common.logger.proxy.Logger;
-/**
- * Generate a FVT test case for every EJB Validator validation marker on each
- * selected project.
- */
-public final class CheckForUntestedPropertiesOperation implements IWorkspaceRunnable {
-	private ValidatorMetaData _vmd = null;
-	private IBuffer _buffer = null;
-	private String _resourceBundleName = null;
-	public CheckForUntestedPropertiesOperation(IBuffer buffer, ValidatorMetaData vmd, String resourceBundleName) {
-		setValidatorMetaData(vmd);
-		setBuffer(buffer);
-		setResourceBundleName(resourceBundleName);
-	}
-	public IBuffer getBuffer() {
-		return _buffer;
-	}
-	void setBuffer(IBuffer b) {
-		_buffer = b;
-	}
-	public ValidatorMetaData getValidatorMetaData() {
-		return _vmd;
-	}
-	private String getPluginId(ValidatorMetaData vmd) {
-		try {
-			// TODO Remove this hack once a getter has been added to ValidatorMetaData for its pluginId.
-			if (vmd != null) {
-				ClassLoader cl = vmd.getValidator().getClass().getClassLoader();
-				IPluginRegistry registry = Platform.getPluginRegistry();
-				IPluginDescriptor[] descriptors = registry.getPluginDescriptors();
-				for (int i = 0; i < descriptors.length; i++) {
-					IPluginDescriptor desc = descriptors[i];
-					if (desc.getPluginClassLoader().equals(cl)) {
-						return desc.getUniqueIdentifier();
-					}
-				}
-			}
-		} catch (InstantiationException exc) {
-			Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE, exc);
-			}
-		}
-		return null;
-	}
-	void setValidatorMetaData(ValidatorMetaData vmd) {
-		_vmd = vmd;
-	}
-	public String getResourceBundleName() {
-		return _resourceBundleName;
-	}
-	void setResourceBundleName(String name) {
-		_resourceBundleName = name;
-	}
-	/**
-	 * @see org.eclipse.core.resources.IWorkspaceRunnable#run(IProgressMonitor)
-	 */
-	public void run(IProgressMonitor monitor) throws CoreException {
-		List pLines = null;
-		List untestedLines = new ArrayList();
-		List testedLines = new ArrayList();
-		Comparator comparator = MessageUtility.getMessagePrefixComparator();
-		// Assume that the BVT tests were run on the projects before this menu
-		// action was clicked.
-		// Load and parse the .properties file to know what message ids to look
-		// for.
-		String propFileName = getResourceBundleName();
-		ValidatorMetaData vmd = getValidatorMetaData();
-		monitor.subTask("Attempting to load file: " + propFileName); //$NON-NLS-1$
-		String pluginId = getPluginId(vmd);
-		if (pluginId == null) {
-			monitor.subTask("Cannot load plugin id for validator " + vmd.getValidatorDisplayName()); //$NON-NLS-1$
-			Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-			if (logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE, "Cannot load plugin id for validator " + vmd.getValidatorDisplayName()); //$NON-NLS-1$
-			}
-			return;
-		}
-		PluginPropertyFile pFile = new PluginPropertyFile(pluginId, propFileName);
-		monitor.worked(1);
-		monitor.subTask("Parsing."); //$NON-NLS-1$
-		pLines = pFile.getPropertyLines();
-		Collections.sort(pLines, comparator); // false = no verbose output
-		monitor.worked(1);
-		monitor.subTask("Loading test messages."); //$NON-NLS-1$
-		ValidatorTestcase[] tmds = BVTValidationUtility.getValidatorTests(monitor, vmd);
-		for (int k = 0; k < tmds.length; k++) {
-			ValidatorTestcase tmd = tmds[k];
-			List mssg = tmd.getMessages(ValidationTypeEnum.RUN_VALIDATION);
-			testedLines.addAll(mssg);
-		}
-		Collections.sort(testedLines, comparator);
-		monitor.subTask("Comparing."); //$NON-NLS-1$
-		Iterator iterator = pLines.iterator();
-		while (iterator.hasNext()) {
-			if (monitor.isCanceled()) {
-				return;
-			}
-			PropertyLine line = (PropertyLine)iterator.next();
-			int index = Collections.binarySearch(testedLines, line, comparator);
-			if (index < 0) {
-				// not found.
-				untestedLines.add(line);
-			}
-		}
-		monitor.worked(1);
-		// now see if the list of untested lines has entries.
-		Collections.sort(untestedLines, comparator);
-		Iterator untestediterator = untestedLines.iterator();
-		if (untestediterator.hasNext()) {
-			getBuffer().write("List of messages which are not tested (" + untestedLines.size() + " of " + pLines.size() + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		} else {
-			getBuffer().write("All messages are tested."); //$NON-NLS-1$
-		}
-		while (untestediterator.hasNext()) {
-			if (monitor.isCanceled()) {
-				return;
-			}
-			PropertyLine line = (PropertyLine)untestediterator.next();
-			getBuffer().write(line.toString());
-		}
-		untestedLines.clear(); // clear the list for the next project
-		testedLines.clear();
-		monitor.worked(1);
-	}
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/IBuffer.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/IBuffer.java
deleted file mode 100644
index 2d0bc81..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/IBuffer.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package org.eclipse.jst.validation.test.setup;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-
-/**
- * If information needs to be reported to the user, but that information is long,
- * and the user needs to see it all at the same time (e.g., test case results),
- * then the information is reported to implementations of this class. 
- * Implementations can choose to report the information immediately 
- * (e.g., to System.out), or can append each message, and report the message
- * only once everything is complete. 
- */
-public interface IBuffer extends ITestStatus {
-	/**
-	 * Return the progress monitor that is used for reporting progress
-	 * status as the long-running process executes.
-	 */
-	public IProgressMonitor getProgressMonitor();
-	
-	/**
-	 * Display the message to the user; the buffer implementation may 
-	 * display the message immediately, or may display the message only
-	 * when report() is called.
-	 */
-	public void write(String message);
-	
-	/**
-	 * Between one task and the next, usually between test cases, add a delineating
-	 * mark to show the beginning and end of each task clearly. The parameter 
-	 * passed in, taskName, is the name of the task that is ending.
-	 */
-	public void delineate(String taskName);
-		
-	/**
-	 * If information was not reported immediately, calling this method
-	 * forces the buffer to be reported to the user. The contents of the
-	 * buffer are not cleared; a subseqent call to this method will 
-	 * repeat what has been reported before. Any calls to elapsedTime
-	 * will be reported.
-	 */
-	public void report();
-	
-	/**
-	 * Clear any stored messages from the buffer, but not any elapsedTime 
-	 * numbers from the store.
-	 */
-	public void clear();
-	
-	/**
-	 * Return the fully-qualified name of the log file, or null if none.
-	 */
-	public String getLogFileName();
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/IImportOperation.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/IImportOperation.java
deleted file mode 100644
index 31d0d05..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/IImportOperation.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.eclipse.jst.validation.test.setup;
-
-import java.io.File;
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-
-/**
- * All validation FVT tests must provide an IImportOperation implementation
- * to import the input file.
- */
-public interface IImportOperation {
-	/**
-	 * Runs this operation without forcing a UI dependency. Return true if the file
-	 * was found and imported successfully.
-	 *
-	 * @param monitor the progress monitor to use to display progress and receive
-	 *   requests for cancelation
-	 * @param inputFile the file which needs to be imported into the workbench
-	 * @exception InvocationTargetException if the run method must propagate a checked exception,
-	 * 	it should wrap it inside an <code>InvocationTargetException</code>; runtime exceptions are automatically
-	 *  wrapped in an <code>InvocationTargetException</code> by the calling context
-	 * @exception InterruptedException if the operation detects a request to cancel, 
-	 *  using <code>IProgressMonitor.isCanceled()</code>, it should exit by throwing 
-	 *  <code>InterruptedException</code>
-	 *
-	 * @see IRunnableWithProgress
-	 */
-	public boolean run(IProgressMonitor monitor, File inputFile) throws InvocationTargetException, InterruptedException;
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/ITestStatus.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/ITestStatus.java
deleted file mode 100644
index ba2b936..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/ITestStatus.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.eclipse.jst.validation.test.setup;
-
-/**
- * Instances of this interface track the execution of a test case,
- * and are used to report a summary of the execution of all of the
- * test cases at the end of a set of test runs.
- */
-public interface ITestStatus {
-	public final int PASS = 0;
-	public final int WARN = 1;
-	public final int FAIL = 2;
-	
-	/**
-	 * To track how long a task takes, call this method with a unique name
-	 * of the task. If the task already exists, the elapsedTime is added
-	 * to the existing time.
-	 */
-	public void addElapsedTime(String taskName, long elapsedTime);
-	
-	/**
-	 * If pass is true, PASS is used; if pass is false, FAIL is used.
-	 */
-	public void addExecutionStatus(String testPassName, boolean pass);
-	
-	/**
-	 * If pass is true, PASS is used; if pass is false, FAIL is used.
-	 * While still considered part of test case "testPassName", this 
-	 * splits this part of the test case into a section named "subTaskName".
-	 */
-	public void addExecutionStatus(String testPassName, String subTaskName, boolean pass);
-	
-	/**
-	 * As each test is executed, this method is used to track how many of that
-	 * type of test pass or fail. passOrFail can be one of three values: PASS, WARN, or FAIL.
-	 * If value is PASS, then the test case passes, and no message needs to be displayed to the user.
-	 * If value is WARN, then the test case passes, and a warning message must be displayed to the user.
-	 * If value is FAIL, then the test case fails, and a failure message must be displayed to the user.
-	 */
-	public void addExecutionStatus(String testcaseName, String subTaskName, int passOrFail, IBuffer buffer, String message);
-	
-	/**
-	 * Return true if all of the test cases run so far have passed; otherwise
-	 * return false. If no test cases have run, return true.
-	 */
-	public boolean isSuccessful();
-	
-	/**
-	 * Return true if a particular test case passed.
-	 */
-	public boolean isSuccessful(String testName);
-	
-	/**
-	 * Reset all variables to the default value to prepare this test status for reuse.
-	 */
-	public void clear();
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/JARImportOperation.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/JARImportOperation.java
deleted file mode 100644
index 7eaa8bc..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/JARImportOperation.java
+++ /dev/null
@@ -1,184 +0,0 @@
-package org.eclipse.jst.validation.test.setup;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Enumeration;
-import java.util.logging.Level;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-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.IProjectDescription;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jst.validation.test.BVTValidationPlugin;
-import org.eclipse.wst.validation.internal.operations.ValidatorManager;
-
-import com.ibm.wtp.common.logger.proxy.Logger;
-
-/**
- * Create a Java project by importing a JAR file.
- */
-public class JARImportOperation extends AImportOperation {
-	// Most of the code in this class was stolen from the JDT. See org.eclipse.jdt.internal.ui.wizards.buildpaths.BuildPathsBlock.
-	public static void createProject(IProject project, IPath locationPath, IProgressMonitor monitor) throws CoreException {
-		if (monitor == null) {
-			monitor= new NullProgressMonitor();
-		}				
-
-		// create the project
-		try {
-			if (!project.exists()) {
-				IProjectDescription desc= project.getWorkspace().newProjectDescription(project.getName());
-				if (Platform.getLocation().equals(locationPath)) {
-					locationPath= null;
-				}
-				desc.setLocation(locationPath);
-				project.create(desc, monitor);
-				monitor= null;
-			}
-			if (!project.isOpen()) {
-				project.open(monitor);
-				monitor= null;
-			}
-		} finally {
-			if (monitor != null) {
-				monitor.done();
-			}
-		}
-	}
-
-	public static void addJavaNature(IProject project, IProgressMonitor monitor) throws CoreException {
-		if (!project.hasNature(JavaCore.NATURE_ID)) {
-			IProjectDescription description = project.getDescription();
-			String[] prevNatures= description.getNatureIds();
-			String[] newNatures= new String[prevNatures.length + 1];
-			System.arraycopy(prevNatures, 0, newNatures, 0, prevNatures.length);
-			newNatures[prevNatures.length]= JavaCore.NATURE_ID;
-			description.setNatureIds(newNatures);
-			project.setDescription(description, monitor);
-		} else {
-			monitor.worked(1);
-		}
-	}
-	
-	private void configureProject(IProgressMonitor monitor, IProject project) {
-		try {
-			// Set the classpath to the default.
-			IJavaProject jp = JavaCore.create(project);
-			jp.setRawClasspath(null, new SubProgressMonitor(monitor, 7));		
-
-			// Now add rt.jar to it
-			IClasspathEntry[] existingClasspath = jp.getRawClasspath();
-			IClasspathEntry[] classpath= new IClasspathEntry[existingClasspath.length + 1];
-			System.arraycopy(existingClasspath, 0, classpath, 0, existingClasspath.length);
-			IClasspathEntry rtJar = JavaCore.newVariableEntry(new Path("JRE_LIB"), new Path("JRE_SRC"), null); //$NON-NLS-1$ //$NON-NLS-2$
-			classpath[existingClasspath.length] = rtJar;
-			jp.setRawClasspath(classpath, new SubProgressMonitor(monitor, 7));
-			
-			// Enable this java project with the Validation Builder so that automatic validation 
-			// can run on it.
-			ValidatorManager.addProjectBuildValidationSupport(project);
-		}
-		catch(JavaModelException exc) {
-			Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE, exc);
-			}
-		}
-	}
-	
-	/**
-	 * @see org.eclipse.jst.validation.test.setup.AImportOperation#createNewProject(IProgressMonitor, String, File)
-	 */
-	protected IProject createNewProject(IProgressMonitor monitor, String projectName, File inputFile) {
-		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
-		try {
-			createProject(project, null, monitor);
-			addJavaNature(project, monitor);
-			configureProject(monitor, project);
-		}
-		catch(CoreException exc) {
-			Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE, exc);
-			}
-		}
-		return project;
-	}
-	
-	protected void createFolder(IProgressMonitor monitor, IProject project, IPath pathname) throws CoreException {
-		IFolder folder = project.getFolder(pathname);
-		IContainer container = folder.getParent();
-		if(!container.exists()) {
-			createFolder(monitor, project, container.getProjectRelativePath());
-		}
-		if(!folder.exists()) {
-			// Don't overwrite existing files.
-			folder.create(true, true, monitor); // true=force, true=local
-		}
-	}
-	
-	protected void createFile(IProgressMonitor monitor, IProject project, IPath pathname, InputStream stream) throws CoreException {
-		IFile nfile = project.getFile(pathname);
-		IContainer container = nfile.getParent();
-		if(!container.exists()) {
-			createFolder(monitor, project, container.getProjectRelativePath());
-		}
-		if(!nfile.exists()) {
-			// Don't overwrite existing files.
-			nfile.create(stream, true, monitor);
-		}
-	}
-	
-	/**
-	 * @see org.eclipse.jst.validation.test.setup.AImportOperation#importFile(IProgressMonitor, IProject, File)
-	 */
-	protected boolean importFile(IProgressMonitor monitor, IProject project, File file) {
-		// Import the file 
-		try {
-			ZipFile zipFile = new ZipFile(file);
-			Enumeration zipEntries = zipFile.entries();
-			while(zipEntries.hasMoreElements()) {
-				ZipEntry zipEntry = (ZipEntry)zipEntries.nextElement();
-				IPath pathname = new Path(zipEntry.getName());
-				if(zipEntry.isDirectory()) {
-					createFolder(monitor, project, pathname);
-				}
-				else {
-					createFile(monitor, project, pathname, zipFile.getInputStream(zipEntry));
-				}
-			}
-			return true;
-		}
-		catch(IOException exc) {
-			Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE, exc);
-			}
-			return false;
-		}
-		catch(CoreException exc) {
-			Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE, exc);
-			}
-			return false;
-		}
-	}
-
-}
diff --git a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/TestCaseGeneratorOperation.java b/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/TestCaseGeneratorOperation.java
deleted file mode 100644
index 65648eb..0000000
--- a/tests/org.eclipse.jst.validation.test/test/org/eclipse/jst/validation/test/setup/TestCaseGeneratorOperation.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package org.eclipse.jst.validation.test.setup;
-
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jst.validation.test.BVTValidationPlugin;
-import org.eclipse.jst.validation.test.internal.registry.MessageUtility;
-import org.eclipse.wst.validation.core.SeverityEnum;
-import org.eclipse.wst.validation.internal.TaskListUtility;
-import org.eclipse.wst.validation.internal.ValidatorMetaData;
-
-import com.ibm.wtp.common.logger.proxy.Logger;
-
-/**
- * Generate an FVT test case, for a selected IProject or IProjects, to
- * be pasted into plugin.xml.
- */
-public final class TestCaseGeneratorOperation implements IWorkspaceRunnable {
-	private final static String _TESTCASE_TEMPLATE_ = "\t\t\t<test \n\t\t\t\tproject=\"{0}\"\n\t\t\t\tinput=\"\"\n\t\t\t\tvalidator=\"{1}\">\n{2}\t\t\t</test>\n"; //$NON-NLS-1$
-	private final static String _TESTCASE_MESSAGE_TEMPLATE_ = "\t\t\t\t<message prefix=\"{0}\" resource=\"{1}\" location=\"{2}\" text=\"{3}\"/>\n"; //$NON-NLS-1$
-	private Map _vmdBuffer = null; // map where the ValidatorMetaData is the key and the value is a StringBuffer
-	private IProject[] _projects = null;
-	private IBuffer _buffer = null;
-	
-	public TestCaseGeneratorOperation(IProject[] projects, IBuffer buffer) {
-		setProjects(projects);
-		setBuffer(buffer);
-		_vmdBuffer = new HashMap();
-	}
-	
-	/**
-	 * Get the buffer where the test case generated output will be sent.
-	 */
-	public IBuffer getBuffer() {
-		return _buffer;
-	}
-	
-	public void setBuffer(IBuffer b) {
-		_buffer = b;
-	}
-	
-	public IProject[] getProjects() {
-		return _projects;
-	}
-	
-	public void setProjects(IProject[] projects) {
-		_projects = projects;
-	}
-
-	/**
-	 * @see org.eclipse.core.resources.IWorkspaceRunnable#run(IProgressMonitor)
-	 */
-	public void run(IProgressMonitor arg0) throws CoreException {
-		try {
-			generate(getProjects());
-		}
-		catch(Throwable exc) {
-			Logger logger = BVTValidationPlugin.getPlugin().getMsgLogger();
-			if(logger.isLoggingLevel(Level.SEVERE)) {
-				logger.write(Level.SEVERE, exc);
-			}
-			getBuffer().write("A Throwable was caught; could not generate the test case. Check the LoggingUtil.log file for details."); //$NON-NLS-1$
-		}
-		finally {
-			_vmdBuffer.clear();
-		}
-	}
-	
-	protected void generate(IProject[] projects) {
-		// First, load all of the validation markers from the selected projects, 
-		// and group them by the validator.
-		for(int i=0; i<projects.length; i++) {
-			IProject project = projects[i];
-			IMarker[] markers = TaskListUtility.getValidationTasks(project, SeverityEnum.ALL_MESSAGES);
-			if((markers == null) || (markers.length == 0)){
-				getBuffer().write("Cannot generate a test case for project " + project.getName() + " until \"Run Validation\" has been run. Enable only the validator whose test case is to be generated, right-click, and \"Run Validation\". Once the validation messages have been reported, a test case can be generated from those messages."); //$NON-NLS-1$ //$NON-NLS-2$
-				continue;
-			}
-			
-			// A test case = one validator on one project => what markers
-			List markerList = new ArrayList();
-			for(int j=0; j<markers.length; j++) {
-				markerList.add(markers[j]);
-			}
-			
-			// Sort the markers by validator, project, prefix, location & resource
-			Collections.sort(markerList, MessageUtility.getMessageComparator(getBuffer(), false));
-
-			Iterator iterator = markerList.iterator();
-			while(iterator.hasNext()) {
-				IMarker marker = (IMarker)iterator.next();			
-				ValidatorMetaData vmd = MessageUtility.getValidator(marker);
-				if(vmd != null) {
-					StringBuffer messageBuffer = getBuffer(vmd);
-					String messageId = MessageUtility.getMessagePrefix(marker);
-					String resource = MessageUtility.getResource(marker);
-					Integer lineNumber = MessageUtility.getLineNumber(marker);
-					String location = (lineNumber == null) ? (location = MessageUtility.getLocation(marker)) : (location = lineNumber.toString());
-					String text = MessageUtility.getMessage(marker); // Emit the text of the message so that, if the message prefixes are changed in the future, it's easy to see that the same test is run with a different prefix, and that the test didn't really fail.
-					text = text.replace('<', '['); // remove the XML reserved characters.
-					text = text.replace('>', ']');
-					text = text.replace('"', '\'');
-					messageBuffer.append(MessageFormat.format(_TESTCASE_MESSAGE_TEMPLATE_, new String[]{messageId, resource, location, text}));
-				}
-			}
-			
-			iterator = _vmdBuffer.keySet().iterator(); // iterate over the vmds
-			while(iterator.hasNext()) {
-				ValidatorMetaData vmd = (ValidatorMetaData)iterator.next();
-				StringBuffer buffer = (StringBuffer)_vmdBuffer.get(vmd);
-				String testcaseTemplate = MessageFormat.format(_TESTCASE_TEMPLATE_, new String[]{project.getName(), vmd.getValidatorUniqueName(), buffer.toString()});
-				
-				getBuffer().write(testcaseTemplate);
-				
-				buffer.delete(0, buffer.length()); // clear the buffer for the next project
-			}
-		}
-	}
-	
-	private StringBuffer getBuffer(ValidatorMetaData vmd) {
-		StringBuffer buffer = (StringBuffer)_vmdBuffer.get(vmd);
-		if(buffer == null) {
-			buffer = new StringBuffer();
-			_vmdBuffer.put(vmd, buffer);
-		}
-		return buffer;
-	}
-
-}
diff --git a/tests/org.eclipse.jst.validation.test/testInput/Properties/aProperties.jar b/tests/org.eclipse.jst.validation.test/testInput/Properties/aProperties.jar
deleted file mode 100644
index 096f4ce..0000000
--- a/tests/org.eclipse.jst.validation.test/testInput/Properties/aProperties.jar
+++ /dev/null
Binary files differ
