[jboss-cvs] JBossAS SVN: r69880 - in projects/microcontainer/trunk: classloading-vfs and 57 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Feb 18 08:35:09 EST 2008


Author: adrian at jboss.org
Date: 2008-02-18 08:35:09 -0500 (Mon, 18 Feb 2008)
New Revision: 69880

Added:
   projects/microcontainer/trunk/classloading-vfs/
   projects/microcontainer/trunk/classloading-vfs/.classpath
   projects/microcontainer/trunk/classloading-vfs/.project
   projects/microcontainer/trunk/classloading-vfs/.settings/
   projects/microcontainer/trunk/classloading-vfs/.settings/org.eclipse.jdt.core.prefs
   projects/microcontainer/trunk/classloading-vfs/pom.xml
   projects/microcontainer/trunk/classloading-vfs/src/
   projects/microcontainer/trunk/classloading-vfs/src/etc/
   projects/microcontainer/trunk/classloading-vfs/src/etc/default.mf
   projects/microcontainer/trunk/classloading-vfs/src/main/
   projects/microcontainer/trunk/classloading-vfs/src/main/org/
   projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/
   projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/
   projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/plugins/
   projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/plugins/vfs/
   projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/plugins/vfs/PackageVisitor.java
   projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/
   projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/
   projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/dependency/
   projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/dependency/VFSClassLoaderPolicyModule.java
   projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/metadata/
   projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/metadata/VFSClassLoaderFactory.java
   projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/metadata/VFSClassLoaderFactory10.java
   projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/metadata/package-info.java
   projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/policy/
   projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/policy/VFSClassLoaderPolicy.java
   projects/microcontainer/trunk/classloading-vfs/src/resources/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/lib/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/lib/util.jar/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testear1x.ear
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/notempty
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package1/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package1/notempty
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/notempty
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/subpackage1/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/subpackage1/notempty
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/subpackage2/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/subpackage2/notempty
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/subpackage3/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/subpackage3/notempty
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar2/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar2/package1/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar2/package1/notempty
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testwar1.war/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testwar1.war/META-INF/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testwar1.war/META-INF/MANIFEST.MF
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testwar1.war/WEB-INF/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testwar1.war/WEB-INF/classes/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testwar1.war/WEB-INF/classes/test/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testwar1.war/WEB-INF/classes/test/Servlet.class
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testwar1.war/WEB-INF/test-resource.txt
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/Common.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/test/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/test/A1.0.0.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/test/B1.0.0.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/test/SmokeTest.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportImportMixed.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportOneModuleNoVersion.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportOneModuleVersioned.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportOnePackageNoVersion.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportOnePackageVersioned.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportThreeModules.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportThreePackages.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportOneModuleNoVersion.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportOneModuleVersioned.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportOnePackageNoVersion.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportOnePackageVersioned.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportThreeModules.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportThreePackages.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportVersionRange.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleBlackList.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleCache.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleContext.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleDomain.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleExcluded.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleExcludedExport.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleExportAll.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleImportAll.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleIncluded.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleJ2seClassLoadingCompliance.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleName.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleParentDomain.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleRoots.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleSystem.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleVersion.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/OptionalRequirement.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ReExportRequirement.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/UsesRequirement.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/WildcardCapability.xml
   projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/WildcardRequirement.xml
   projects/microcontainer/trunk/classloading-vfs/src/tests/
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/ClassLoadingVFSTestSuite.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/VFSClassLoadingMicrocontainerTest.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/VFSClassLoadingMicrocontainerTestDelegate.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/support/
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/support/a/
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/support/a/A.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/support/b/
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/support/b/B.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/support/c/
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/support/c/C.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/DomainUnitTestCase.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/ImportAllUnitTestCase.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/ModuleDependencyUnitTestCase.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/PackageDependencyUnitTestCase.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/ReExportModuleUnitTestCase.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/ReExportPackageUnitTestCase.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/UsesPackageUnitTestCase.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/VFSClassLoaderFactoryUnitTestCase.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/AbstractJBossXBTest.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/JBossXBTestDelegate.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/SchemaPrinter.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/TestSchemaResolver.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/support/
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/support/TestCapability.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/support/TestRequirement.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/support/package-info.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/test/
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/test/VFSClassLoaderFactoryXMLUnitTestCase.java
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/policy/
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/policy/test/
   projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/policy/test/ExportAllUnitTestCase.java
Log:
Initial Import

Added: projects/microcontainer/trunk/classloading-vfs/.classpath
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/.classpath	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/.classpath	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/main"/>
+	<classpathentry excluding="**/*.java" kind="src" output="target/tests-classes" path="src/resources/tests"/>
+	<classpathentry kind="src" output="target/tests-classes" path="src/tests"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="var" path="M2_REPO/jboss/jboss-common-logging-log4j/2.0.4.GA/jboss-common-logging-log4j-2.0.4.GA.jar" sourcepath="M2_REPO/jboss/jboss-common-logging-log4j/2.0.4.GA/jboss-common-logging-log4j-2.0.4.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jboss-classloading-spi/5.0.0.Beta3/jboss-classloading-spi-5.0.0.Beta3.jar" sourcepath="M2_REPO/org/jboss/jboss-classloading-spi/5.0.0.Beta3/jboss-classloading-spi-5.0.0.Beta3-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.3.GA/jboss-common-core-2.2.3.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-common-core/2.2.3.GA/jboss-common-core-2.2.3.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/apache-httpclient/commons-httpclient/2.0.2/commons-httpclient-2.0.2.jar"/>
+	<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar" sourcepath="M2_REPO/junit/junit/3.8.1/junit-3.8.1-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar" sourcepath="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/jboss-test/1.0.4.GA/jboss-test-1.0.4.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-test/1.0.4.GA/jboss-test-1.0.4.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/ant/ant-junit/1.6.5/ant-junit-1.6.5.jar"/>
+	<classpathentry kind="var" path="M2_REPO/jboss/jboss-common-logging-spi/2.0.4.GA/jboss-common-logging-spi-2.0.4.GA.jar" sourcepath="M2_REPO/jboss/jboss-common-logging-spi/2.0.4.GA/jboss-common-logging-spi-2.0.4.GA-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/apache-slide/webdavlib/2.0/webdavlib-2.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/ant/ant/1.6.5/ant-1.6.5.jar" sourcepath="M2_REPO/ant/ant/1.6.5/ant-1.6.5-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/apache-xerces/xercesImpl/2.7.1/xercesImpl-2.7.1.jar"/>
+   <classpathentry kind="var" path="M2_REPO/apache-xerces/xml-apis/2.7.1/xml-apis-2.7.1.jar"/>
+   <classpathentry kind="var" path="M2_REPO/javax/xml/bind/jaxb-api/2.0/jaxb-api-2.0.jar"/>
+   <classpathentry kind="var" path="M2_REPO/javax/xml/bind/jsr173_api/1.0/jsr173_api-1.0.jar"/>
+   <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.jar" sourcepath="M2_REPO/javax/activation/activation/1.1/activation-1.1-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/jboss/jboss-logging-spi/2.0.3.GA/jboss-logging-spi-2.0.3.GA.jar" sourcepath="M2_REPO/jboss/jboss-logging-spi/2.0.3.GA/jboss-logging-spi-2.0.3.GA-sources.jar"/>
+   <classpathentry kind="var" path="M2_REPO/org/jboss/jbossxb/2.0.0.CR5/jbossxb-2.0.0.CR5.jar"/>
+   <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-vfs/2.0.0.Beta7/jboss-vfs-2.0.0.Beta7.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/jboss-classloader"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/jboss-container"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/jboss-dependency"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/jboss-kernel"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/jboss-classloading"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Added: projects/microcontainer/trunk/classloading-vfs/.project
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/.project	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/.project	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,13 @@
+<projectDescription>
+  <name>jboss-classloading vfs</name>
+  <comment>JBoss VFS ClassLoading</comment>
+  <projects/>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
+</projectDescription>

Added: projects/microcontainer/trunk/classloading-vfs/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/.settings/org.eclipse.jdt.core.prefs	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/.settings/org.eclipse.jdt.core.prefs	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,5 @@
+#Fri Sep 21 17:50:00 BST 2007
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5

Added: projects/microcontainer/trunk/classloading-vfs/pom.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/pom.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/pom.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,81 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <parent>
+    <groupId>org.jboss.microcontainer</groupId>
+    <artifactId>jboss-microcontainer</artifactId>
+    <version>2.0.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>jboss-classloading-vfs</artifactId>
+  <packaging>jar</packaging>
+  <name>JBoss Microcontainer ClassLoading VFS</name>
+  <url>http://www.jboss.com/products/jbossmc</url>
+  <description>JBoss ClassLoading VFS</description>
+  <build>
+    <testResources>
+      <testResource>
+        <directory>src/resources/tests</directory>
+      </testResource>
+    </testResources>
+  </build>
+  <!-- Do not add version information here, use ../build/pom.xml instead -->
+  <dependencies>
+    <!-- Global dependencies -->
+    <dependency>
+      <groupId>org.jboss.microcontainer</groupId>
+      <artifactId>jboss-container</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.microcontainer</groupId>
+      <artifactId>jboss-dependency</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.microcontainer</groupId>
+      <artifactId>jboss-kernel</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.microcontainer</groupId>
+      <artifactId>jboss-classloader</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.microcontainer</groupId>
+      <artifactId>jboss-classloading</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss</groupId>
+      <artifactId>jboss-vfs</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss</groupId>
+      <artifactId>jboss-common-core</artifactId>
+      <exclusions>
+        <exclusion>
+          <groupId>jboss</groupId>
+          <artifactId>jboss-common-logging-spi</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>jboss</groupId>
+      <artifactId>jboss-logging-spi</artifactId>
+    </dependency>
+	  <!-- Test dependencies -->
+    <dependency>
+      <groupId>org.jboss</groupId>
+      <artifactId>jboss-test</artifactId>
+      <exclusions>
+        <exclusion>
+          <groupId>jboss</groupId>
+          <artifactId>jboss-common-core</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>jboss</groupId>
+          <artifactId>jboss-common-logging-spi</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+	    <groupId>junit</groupId>
+	    <artifactId>junit</artifactId>
+    </dependency>
+  </dependencies>  
+</project>

Added: projects/microcontainer/trunk/classloading-vfs/src/etc/default.mf
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/etc/default.mf	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/etc/default.mf	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Created-By: @java.vm.version@ (@java.vm.vendor@)
+Specification-Title: @specification.title@
+Specification-Version: @specification.version@
+Specification-Vendor: @specification.vendor@
+Implementation-Title: @implementation.title@
+Implementation-URL: @implementation.url@
+Implementation-Version: @implementation.version@
+Implementation-Vendor: @implementation.vendor@
+Implementation-Vendor-Id: @implementation.vendor.id@

Added: projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/plugins/vfs/PackageVisitor.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/plugins/vfs/PackageVisitor.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/plugins/vfs/PackageVisitor.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,200 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.classloading.plugins.vfs;
+
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.jboss.classloader.spi.filter.ClassFilter;
+import org.jboss.classloading.spi.metadata.ExportAll;
+import org.jboss.virtual.VirtualFile;
+import org.jboss.virtual.VirtualFileVisitor;
+import org.jboss.virtual.VisitorAttributes;
+
+/**
+ * Visits a virtual file system recursively
+ * to determine package names based on the exportAll policy
+ * 
+ * @author <a href="adrian at jboss.org">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class PackageVisitor implements VirtualFileVisitor
+{
+   /** The packages */
+   private Set<String> packages = new HashSet<String>();
+   
+   /** The export all */
+   private ExportAll exportAll;
+   
+   /** The root */
+   private String rootPath;
+   
+   /** The root with slash*/
+   private String rootPathWithSlash;
+
+   /** The included packages */
+   private ClassFilter included;
+
+   /** The excluded packages */
+   private ClassFilter excluded;
+   
+   /** The excluded export packages */
+   private ClassFilter excludedExport;
+   
+   /**
+    * Determine the packages
+    * 
+    * @param roots the roots
+    * @param exportAll the exportAll
+    * @param included the included packages
+    * @param excluded the excluded packages
+    * @param excludedExport the excluded export packages
+    * @return the packages
+    */
+   public static Set<String> determineAllPackages(VirtualFile[] roots, ExportAll exportAll, ClassFilter included, ClassFilter excluded, ClassFilter excludedExport)
+   {
+      PackageVisitor visitor = new PackageVisitor(exportAll, included, excluded, excludedExport);
+      for (VirtualFile root : roots)
+      {
+         try
+         {
+            visitor.setRoot(root);
+            root.visit(visitor);
+         }
+         catch (Exception e)
+         {
+            throw new Error("Error visiting " + root, e);
+         }
+      }
+      return visitor.getPackages();
+   }
+
+   /**
+    * Create a new PackageVisitor.
+    *
+    * @param exportAll the export all policy
+    * @param included the included packages
+    * @param excluded the excluded packages
+    * @param excludedExport the excluded export packages
+    * @throws IllegalArgumentException for a null exportAll policy
+    */
+   PackageVisitor(ExportAll exportAll, ClassFilter included, ClassFilter excluded, ClassFilter excludedExport)
+   {
+      if (exportAll == null)
+         throw new IllegalArgumentException("Null export policy");
+      this.exportAll = exportAll;
+      this.included = included;
+      this.excluded = excluded;
+      this.excludedExport = excludedExport; 
+   }
+
+   /**
+    * Set the root
+    * 
+    * @param root the root
+    * @throws IllegalArgumentException for a null root
+    */
+   void setRoot(VirtualFile root)
+   {
+      if (root == null)
+         throw new IllegalArgumentException("Null root");
+      rootPath = root.getPathName();
+      rootPathWithSlash = rootPath + "/";
+   }
+   
+   /**
+    * Get the packages.
+    * 
+    * @return the packages.
+    */
+   Set<String> getPackages()
+   {
+      return packages;
+   }
+
+   public VisitorAttributes getAttributes()
+   {
+      VisitorAttributes attributes = new VisitorAttributes();
+      attributes.setIncludeRoot(true);
+      attributes.setRecurseFilter(VisitorAttributes.RECURSE_ALL);
+      return attributes;
+   }
+   
+   public void visit(VirtualFile file)
+   {
+      try
+      {
+         // We only want only directories
+         if (file.isLeaf() == false)
+         {
+            boolean empty = true;
+            // Include empty directories?
+            if (exportAll == ExportAll.ALL)
+               empty = false;
+            else
+            {
+               // Determine whether there is anything there
+               List<VirtualFile> children = file.getChildren();
+               if (children != null && children.isEmpty() == false)
+               {
+                  for (VirtualFile child : children)
+                  {
+                     // We must have a leaf to be non-empty
+                     if (child.isLeaf())
+                     {
+                        empty = false;
+                        break;
+                     }
+                  }
+               }
+            }
+            // This looks interesting
+            if (empty == false)
+            {
+               String path = file.getPathName();
+               if (path.equals(rootPath))
+                  path = "";
+               else if (path.startsWith(rootPathWithSlash))
+                  path = path.substring(rootPathWithSlash.length());
+               String pkg = path.replace('/', '.');
+               
+               // Check for inclusions/exclusions
+               if (included != null && included.matchesPackageName(pkg) == false)
+                  return;
+               if (excluded != null && excluded.matchesPackageName(pkg))
+                  return;
+               if (excludedExport != null && excludedExport.matchesPackageName(pkg))
+                  return;
+               
+               // Ok this is a pacakge for export
+               packages.add(pkg);
+            }
+         }
+      }
+      catch (IOException e)
+      {
+         throw new Error("Error visiting " + file, e);
+      }
+   }
+}
\ No newline at end of file

Added: projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/dependency/VFSClassLoaderPolicyModule.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/dependency/VFSClassLoaderPolicyModule.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/dependency/VFSClassLoaderPolicyModule.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,212 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.classloading.spi.vfs.dependency;
+
+import java.net.URI;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.jboss.classloader.spi.filter.ClassFilter;
+import org.jboss.classloading.plugins.vfs.PackageVisitor;
+import org.jboss.classloading.spi.dependency.policy.ClassLoaderPolicyModule;
+import org.jboss.classloading.spi.metadata.Capability;
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory;
+import org.jboss.classloading.spi.metadata.ExportAll;
+import org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory;
+import org.jboss.classloading.spi.vfs.policy.VFSClassLoaderPolicy;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.kernel.spi.dependency.KernelControllerContextAware;
+import org.jboss.virtual.VFS;
+import org.jboss.virtual.VirtualFile;
+
+/**
+ * VFSClassLoaderPolicyModule.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class VFSClassLoaderPolicyModule extends ClassLoaderPolicyModule implements KernelControllerContextAware
+{
+   /** The serialVersionUID */
+   private static final long serialVersionUID = 1L;
+
+   /** The roots */
+   private List<String> roots;
+   
+   /** Our cached vfs roots */
+   private VirtualFile[] vfsRoots;
+   
+   /**
+    * Create a new VFSClassLoaderPolicyModule.
+    * 
+    * @param classLoadingMetaData the classloading metadata
+    * @param contextName the context name
+    */
+   public VFSClassLoaderPolicyModule(VFSClassLoaderFactory classLoadingMetaData, String contextName)
+   {
+      super(classLoadingMetaData, contextName);
+   }
+   
+   /**
+    * Get the roots.
+    * 
+    * @return the roots.
+    */
+   public List<String> getRoots()
+   {
+      return roots;
+   }
+
+   /**
+    * Set the roots.
+    * 
+    * @param roots the roots.
+    */
+   public void setRoots(List<String> roots)
+   {
+      this.roots = roots;
+   }
+
+   @Override
+   protected List<Capability> determineCapabilities()
+   {
+      // While we are here, check the roots
+      VirtualFile[] roots = determineVFSRoots();
+
+      List<Capability> capabilities = super.determineCapabilities();
+      if (capabilities != null)
+         return capabilities;
+         
+      // We need to work it out
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      capabilities = new CopyOnWriteArrayList<Capability>();
+
+      // We have a module capability
+      Object version = getVersion();
+      Capability capability = factory.createModule(getName(), version);
+      capabilities.add(capability);
+      
+      // Do we determine package capabilities
+      ClassFilter included = getIncluded();
+      ClassFilter excluded = getExcluded();
+      ClassFilter excludedExport = getExcludedExport();
+      ExportAll exportAll = getExportAll();
+      if (exportAll != null)
+      {
+         Set<String> exportedPackages = PackageVisitor.determineAllPackages(roots, exportAll, included, excluded, excludedExport);
+         for (String packageName : exportedPackages)
+         {
+            capability = factory.createPackage(packageName, version);
+            capabilities.add(capability);
+         }
+      }
+      
+      return capabilities;
+   }
+
+   public void setKernelControllerContext(KernelControllerContext context) throws Exception
+   {
+      setControllerContext(context);
+   }
+
+   public void unsetKernelControllerContext(KernelControllerContext context) throws Exception
+   {
+      setControllerContext(null);
+   }
+
+   @Override
+   protected VFSClassLoaderFactory getClassLoadingMetaData()
+   {
+      return (VFSClassLoaderFactory) super.getClassLoadingMetaData();
+   }
+   
+   /**
+    * Get the virtual file roots
+    * 
+    * @return the roots
+    */
+   protected VirtualFile[] determineVFSRoots()
+   {
+      if (vfsRoots != null)
+         return vfsRoots;
+      
+      if (roots == null)
+      {
+         vfsRoots = new VirtualFile[0];
+      }
+      else
+      {
+         VirtualFile[] vfsRoots = new VirtualFile[roots.size()];
+         for (int i = 0; i < roots.size(); ++i)
+         {
+            String root = roots.get(i);
+            try
+            {
+               URI uri = new URI(root);
+               vfsRoots[i] = VFS.getRoot(uri);
+            }
+            catch (RuntimeException e)
+            {
+               throw e;
+            }
+            catch (Exception e)
+            {
+               throw new RuntimeException("Error creating VFS file for " + root, e);
+            }
+         }
+         this.vfsRoots = vfsRoots;
+      }
+      return vfsRoots;
+   }
+
+   @Override
+   public VFSClassLoaderPolicy getPolicy()
+   {
+      return (VFSClassLoaderPolicy) super.getPolicy();
+   }
+   
+   @Override
+   protected VFSClassLoaderPolicy determinePolicy()
+   {
+      VirtualFile[] roots = determineVFSRoots();
+      VFSClassLoaderPolicy policy = VFSClassLoaderPolicy.createVFSClassLoaderPolicy(getContextName(), roots);
+      String[] packageNames = getPackageNames();
+      policy.setExportedPackages(packageNames);
+      policy.setIncluded(getIncluded());
+      policy.setExcluded(getExcluded());
+      policy.setExcludedExport(getExcludedExport());
+      policy.setExportAll(getExportAll());
+      policy.setImportAll(isImportAll());
+      policy.setCacheable(isCacheable());
+      policy.setBlackListable(isBlackListable());
+      policy.setDelegates(getDelegates());
+      return policy;
+   }
+
+   @Override
+   protected void reset()
+   {
+      super.reset();
+      vfsRoots = null;
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/metadata/VFSClassLoaderFactory.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/metadata/VFSClassLoaderFactory.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/metadata/VFSClassLoaderFactory.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,196 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.classloading.spi.vfs.metadata;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
+import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaData;
+import org.jboss.classloading.spi.version.Version;
+import org.jboss.classloading.spi.vfs.dependency.VFSClassLoaderPolicyModule;
+
+/**
+ * VFSClassLoaderFactory.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class VFSClassLoaderFactory extends ClassLoadingMetaData implements BeanMetaDataFactory
+{
+   /** The serialVersionUID */
+   private static final long serialVersionUID = -4446195023830263521L;
+
+   /** The default name for the classloading system */
+   public static final String DEFAULT_CLASSLOADER_SYSTEM_NAME = "ClassLoaderSystem";
+   
+   /** The name of the classloader system */
+   private String classLoaderSystemName = DEFAULT_CLASSLOADER_SYSTEM_NAME;
+   
+   /** The context name */
+   private String contextName = null;
+   
+   /** The roots */
+   private List<String> roots = new CopyOnWriteArrayList<String>();
+
+   /**
+    * Create a new VFSClassLoaderFactory.
+    */
+   public VFSClassLoaderFactory()
+   {
+   }
+
+   /**
+    * Create a new VFSClassLoaderFactory.
+    * 
+    * @param name the name
+    */
+   public VFSClassLoaderFactory(String name)
+   {
+      this(name, Version.DEFAULT_VERSION);
+   }
+
+   /**
+    * Create a new VFSClassLoaderFactory.
+    * 
+    * @param name the name
+    * @param version the version
+    */
+   public VFSClassLoaderFactory(String name, String version)
+   {
+      this(name, Version.parseVersion(version));
+   }
+
+   /**
+    * Create a new VFSClassLoaderFactory.
+    * 
+    * @param name the name
+    * @param version the version
+    */
+   public VFSClassLoaderFactory(String name, Version version)
+   {
+      setName(name);
+      setVersion(version);
+   }
+   
+   /**
+    * Get the classLoaderSystemName.
+    * 
+    * @return the classLoaderSystemName.
+    */
+   public String getClassLoaderSystemName()
+   {
+      return classLoaderSystemName;
+   }
+
+   /**
+    * Set the classLoaderSystemName.
+    * 
+    * @param classLoaderSystemName the classLoaderSystemName.
+    */
+   @XmlAttribute(name="system")
+   public void setClassLoaderSystemName(String classLoaderSystemName)
+   {
+      if (classLoaderSystemName == null)
+         classLoaderSystemName = DEFAULT_CLASSLOADER_SYSTEM_NAME;
+      this.classLoaderSystemName = classLoaderSystemName;
+   }
+
+   /**
+    * Get the contextName.
+    * 
+    * @return the contextName.
+    */
+   public String getContextName()
+   {
+      return contextName;
+   }
+
+   /**
+    * Set the contextName.
+    * 
+    * @param contextName the contextName.
+    */
+   @XmlAttribute(name="context")
+   public void setContextName(String contextName)
+   {
+      this.contextName = contextName;
+   }
+
+   /**
+    * Get the roots.
+    * 
+    * @return the roots.
+    */
+   public List<String> getRoots()
+   {
+      return roots;
+   }
+
+   /**
+    * Set the roots.
+    * 
+    * @param roots the roots.
+    */
+   @XmlElement(name="root")
+   public void setRoots(List<String> roots)
+   {
+      if (roots == null)
+         roots = new CopyOnWriteArrayList<String>();
+      this.roots = roots;
+   }
+
+   public List<BeanMetaData> getBeans()
+   {
+      // Determine some properties
+      String contextName = getContextName();
+      if (contextName == null)
+         contextName = getName() + ":" + getVersion().toString(); 
+      String moduleName = contextName + "$MODULE";
+      
+      // Create the module
+      BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(moduleName, VFSClassLoaderPolicyModule.class.getName());
+      builder.addConstructorParameter(VFSClassLoaderFactory.class.getName(), this);
+      builder.addConstructorParameter(String.class.getName(), moduleName);
+      builder.addPropertyMetaData("roots", roots);
+      builder.setNoClassLoader();
+      builder.addUninstall("removeClassLoader");
+      BeanMetaData module = builder.getBeanMetaData();
+      
+      // Create the classloader
+      builder = BeanMetaDataBuilder.createBuilder(contextName, ClassLoader.class.getName());
+      builder.setNoClassLoader();
+      builder.setFactory(moduleName);
+      builder.setFactoryMethod("registerClassLoaderPolicy");
+      builder.addConstructorParameter(ClassLoaderSystem.class.getName(), builder.createInject(classLoaderSystemName));
+      BeanMetaData classLoader = builder.getBeanMetaData();
+      
+      return Arrays.asList(classLoader, module);
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/metadata/VFSClassLoaderFactory10.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/metadata/VFSClassLoaderFactory10.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/metadata/VFSClassLoaderFactory10.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,41 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.classloading.spi.vfs.metadata;
+
+import javax.xml.bind.annotation.XmlNsForm;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.jboss.xb.annotations.JBossXmlSchema;
+
+/**
+ * VFSClassLoaderFactory.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+ at JBossXmlSchema(namespace="urn:jboss:classloader:1.0", elementFormDefault=XmlNsForm.QUALIFIED)
+ at XmlRootElement(name="classloader")
+public class VFSClassLoaderFactory10 extends VFSClassLoaderFactory
+{
+   /** The serialVersionUID */
+   private static final long serialVersionUID = -4446195023830263521L;
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/metadata/package-info.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/metadata/package-info.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/metadata/package-info.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,32 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+ at JBossXmlAdaptedTypes
+({
+   @JBossXmlAdaptedType(type=Version.class, valueAdapter=VersionValueAdapter.class)
+})
+package org.jboss.classloading.spi.vfs.metadata;
+
+import org.jboss.classloading.plugins.metadata.VersionValueAdapter;
+import org.jboss.classloading.spi.version.Version;
+import org.jboss.xb.annotations.JBossXmlAdaptedType;
+import org.jboss.xb.annotations.JBossXmlAdaptedTypes;
+

Added: projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/policy/VFSClassLoaderPolicy.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/policy/VFSClassLoaderPolicy.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/policy/VFSClassLoaderPolicy.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,575 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.classloading.spi.vfs.policy;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.security.CodeSource;
+import java.security.PermissionCollection;
+import java.security.Policy;
+import java.security.ProtectionDomain;
+import java.security.cert.Certificate;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.jar.Manifest;
+
+import org.jboss.classloader.spi.ClassLoaderPolicy;
+import org.jboss.classloader.spi.DelegateLoader;
+import org.jboss.classloader.spi.PackageInformation;
+import org.jboss.classloader.spi.filter.ClassFilter;
+import org.jboss.classloader.spi.filter.FilteredDelegateLoader;
+import org.jboss.classloading.plugins.vfs.PackageVisitor;
+import org.jboss.classloading.spi.metadata.ExportAll;
+import org.jboss.logging.Logger;
+import org.jboss.virtual.VFSUtils;
+import org.jboss.virtual.VirtualFile;
+
+/**
+ * VFSClassLoaderPolicy.
+ * 
+ * @author <a href="adrian at jboss.org">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class VFSClassLoaderPolicy extends ClassLoaderPolicy
+{
+   /** The log */
+   private static Logger log = Logger.getLogger(VFSClassLoaderPolicy.class);
+
+   /** Tag for no manifest */
+   private static final Manifest NO_MANIFEST = new Manifest();
+
+   /** A name for the policy */
+   private String name;
+   
+   /** The delegates */
+   private List<? extends DelegateLoader> delegates;
+   
+   /** The roots */
+   private VirtualFile[] roots;
+
+   /** Whether to export all */
+   private ExportAll exportAll;
+
+   /** The included */
+   private ClassFilter included;
+
+   /** The excluded */
+   private ClassFilter excluded;
+   
+   /** The excluded for export */
+   private ClassFilter excludedExport;
+   
+   /** The exported packages */
+   private String[] exportedPackages;
+
+   /** The import all */
+   private boolean importAll;
+
+   /** Whether we are cachable */
+   private boolean cacheable = true;
+   
+   /** Whether we are blacklistable */
+   private boolean blackListable = true;
+   
+   /** Manifest cache */
+   private Map<URL, Manifest> manifestCache = new ConcurrentHashMap<URL, Manifest>();
+   
+   /**
+    * Determine a name from the roots
+    * 
+    * @param roots the roots
+    * @return the name
+    */
+   private static String determineName(VirtualFile[] roots)
+   {
+      if (roots == null)
+         return "";
+      
+      try
+      {
+         for (VirtualFile root : roots)
+            return root.toURL().toString();
+      }
+      catch (Exception ignored)
+      {
+      }
+      return "";
+   }
+   
+   /**
+    * Create a new VFSClassLoaderPolicy.
+    * 
+    * @param roots the roots
+    * @return the classloader policy
+    * @throws IllegalArgumentException for null roots
+    */
+   public static VFSClassLoaderPolicy createVFSClassLoaderPolicy(VirtualFile... roots)
+   {
+      return new VFSClassLoaderPolicy(roots);
+   }
+   
+   /**
+    * Create a new VFSClassLoaderPolicy.
+    * 
+    * @param name a name of the policy
+    * @param roots the roots
+    * @return the classloader policy
+    * @throws IllegalArgumentException for null roots
+    */
+   public static VFSClassLoaderPolicy createVFSClassLoaderPolicy(String name, VirtualFile... roots)
+   {
+      return new VFSClassLoaderPolicy(name, roots);
+   }
+
+   /**
+    * Create a new VFSClassLoaderPolicy.
+    * 
+    * @param roots the roots
+    * @throws IllegalArgumentException for null roots
+    */
+   public VFSClassLoaderPolicy(VirtualFile[] roots)
+   {
+      this(determineName(roots), roots);
+   }
+
+   /**
+    * Create a new VFSClassLoaderPolicy.
+    * 
+    * @param name the name
+    * @param roots the roots
+    * @throws IllegalArgumentException for null roots
+    */
+   public VFSClassLoaderPolicy(String name, VirtualFile[] roots)
+   {
+      if (name == null)
+         throw new IllegalArgumentException("Null name");
+      if (roots == null)
+         throw new IllegalArgumentException("Null roots");
+      for (VirtualFile root : roots)
+      {
+         if (root == null)
+            throw new IllegalArgumentException("Null root in " + Arrays.asList(roots));
+      }
+
+      this.name = name;
+      this.roots = roots;
+   }
+
+   @Override
+   public String getName()
+   {
+      return name;
+   }
+
+   @Override
+   public List<? extends DelegateLoader> getDelegates()
+   {
+      return delegates;
+   }
+
+   /**
+    * Set the delegates.
+    * 
+    * @param delegates the delegates.
+    */
+   public void setDelegates(List<? extends DelegateLoader> delegates)
+   {
+      this.delegates = delegates;
+   }
+
+   /**
+    * Get the included.
+    * 
+    * @return the included.
+    */
+   public ClassFilter getIncluded()
+   {
+      return included;
+   }
+
+   /**
+    * Set the included.
+    * 
+    * @param included the included.
+    */
+   public void setIncluded(ClassFilter included)
+   {
+      this.included = included;
+   }
+
+   /**
+    * Get the excluded.
+    * 
+    * @return the excluded.
+    */
+   public ClassFilter getExcluded()
+   {
+      return excluded;
+   }
+
+   /**
+    * Set the excluded.
+    * 
+    * @param excluded the excluded.
+    */
+   public void setExcluded(ClassFilter excluded)
+   {
+      this.excluded = excluded;
+   }
+
+   /**
+    * Get the excludedExport.
+    * 
+    * @return the excludedExport.
+    */
+   public ClassFilter getExcludedExport()
+   {
+      return excludedExport;
+   }
+
+   /**
+    * Set the excludedExport.
+    * 
+    * @param excludedExport the excludedExport.
+    */
+   public void setExcludedExport(ClassFilter excludedExport)
+   {
+      this.excludedExport = excludedExport;
+   }
+
+   /**
+    * Get the exportAll.
+    * 
+    * @return the exportAll.
+    */
+   public ExportAll getExportAll()
+   {
+      return exportAll;
+   }
+
+   /**
+    * Set the exportAll.
+    * 
+    * @param exportAll the exportAll.
+    */
+   public void setExportAll(ExportAll exportAll)
+   {
+      this.exportAll = exportAll;
+      if (exportAll != null)
+      {
+         if (exportedPackages == null)
+         {
+            Set<String> exported = PackageVisitor.determineAllPackages(roots, exportAll, included, excluded, excludedExport);
+            exportedPackages = exported.toArray(new String[exported.size()]);
+         }
+      }
+   }
+
+   /**
+    * Get the exported packages
+    * 
+    * @return the exported packages
+    */
+   public String[] getExportedPackages()
+   {
+      return exportedPackages;
+   }
+
+   /**
+    * Set the exportedPackages.
+    * 
+    * @param exportedPackages the exportedPackages.
+    */
+   public void setExportedPackages(String[] exportedPackages)
+   {
+      this.exportedPackages = exportedPackages;
+   }
+
+   @Override
+   public String[] getPackageNames()
+   {
+      return exportedPackages;
+   }
+
+   @Override
+   public boolean isImportAll()
+   {
+      return importAll;
+   }
+
+   /**
+    * Set the importAll.
+    * 
+    * @param importAll the importAll.
+    */
+   public void setImportAll(boolean importAll)
+   {
+      this.importAll = importAll;
+   }
+
+   @Override
+   public boolean isCacheable()
+   {
+      return cacheable;
+   }
+
+   /**
+    * Set the cacheable.
+    * 
+    * @param cacheable the cacheable.
+    */
+   public void setCacheable(boolean cacheable)
+   {
+      this.cacheable = cacheable;
+   }
+
+   @Override
+   public boolean isBlackListable()
+   {
+      return blackListable;
+   }
+
+   /**
+    * Set the blackListable.
+    * 
+    * @param blackListable the blackListable.
+    */
+   public void setBlackListable(boolean blackListable)
+   {
+      this.blackListable = blackListable;
+   }
+
+   @Override
+   public DelegateLoader getExported()
+   {
+      if (getExportAll() != null)
+         return new FilteredDelegateLoader(this, ClassFilter.EVERYTHING);
+      return super.getExported();
+   }
+
+   @Override
+   public URL getResource(String path)
+   {
+      if (checkFilters(path, "getResource"))
+         return null;
+      
+      VirtualFile child = findChild(path);
+      if (child != null)
+      {
+         try
+         {
+            return child.toURL();
+         }
+         catch (Exception ignored)
+         {
+            log.debug("Error determining URL for " + child, ignored);
+            return null;
+         }
+      }
+      return null;
+   }
+   
+   @Override
+   public InputStream getResourceAsStream(String path)
+   {
+      if (checkFilters(path, "getResourceAsStream"))
+         return null;
+
+      VirtualFile child = findChild(path);
+      if (child != null)
+      {
+         try
+         {
+            return child.openStream();
+         }
+         catch (Exception ignored)
+         {
+            log.debug("Error opening stream for " + child, ignored);
+            return null;
+         }
+      }
+      return null;
+   }
+
+   @Override
+   public void getResources(String name, Set<URL> urls) throws IOException
+   {
+      if (checkFilters(name, "getResources"))
+         return;
+
+      for (VirtualFile root : roots)
+      {
+         try
+         {
+            VirtualFile child = root.getChild(name);
+            if (child != null)
+               urls.add(child.toURL());
+         }
+         catch (Exception e)
+         {
+            log.debug("Error getting resources for " + root, e);
+         }
+      }
+   }
+
+   /**
+    * Find a child from a path
+    * 
+    * @param path the path
+    * @return the child if found in the roots
+    */
+   protected VirtualFile findChild(String path)
+   {
+      for (VirtualFile root : roots)
+      {
+         try
+         {
+            VirtualFile child = root.getChild(path);
+            if (child != null)
+               return child;
+         }
+         catch (Exception ignored)
+         {
+            // not found
+         }
+      }
+      return null;
+   }
+
+   /**
+    * Find a root from a path
+    * 
+    * @param path the path
+    * @return the root if found in the roots
+    */
+   protected VirtualFile findRoot(String path)
+   {
+      for (VirtualFile root : roots)
+      {
+         try
+         {
+            if (root.getChild(path) != null)
+               return root;
+         }
+         catch (Exception ignored)
+         {
+            // not found
+         }
+      }
+      return null;
+   }
+   
+   @Override
+   public PackageInformation getPackageInformation(String packageName)
+   {
+      String path = packageName.replace('.', '/');
+      VirtualFile root = findRoot(path);
+      Manifest manifest = null;
+      URL rootURL = null;
+      if (root != null)
+      {
+         try
+         {
+            rootURL = root.toURL();
+            manifest = manifestCache.get(rootURL);
+            if (manifest == null)
+            {
+               manifest = VFSUtils.getManifest(root);
+               if (manifest == null)
+                  manifestCache.put(rootURL, NO_MANIFEST);
+               else
+                  manifestCache.put(rootURL, manifest);
+            }
+            
+            if (manifest == NO_MANIFEST)
+               manifest = null;
+         }
+         catch (Exception ignored)
+         {
+            if (log.isTraceEnabled())
+               log.trace("Unable to retrieve manifest for " + path + " url=" + rootURL + " error="  + ignored.getMessage());
+         }
+      }
+      return new PackageInformation(packageName, manifest);
+   }
+
+   @Override
+   protected void toLongString(StringBuilder builder)
+   {
+      builder.append(" roots=").append(Arrays.asList(roots)).append(" ");
+      super.toLongString(builder);
+      if (exportAll != null)
+         builder.append(exportAll);
+   }
+
+   @Override
+   protected ProtectionDomain getProtectionDomain(String className, String path)
+   {
+      VirtualFile clazz = findChild(path);
+      if (clazz == null)
+      {
+         log.trace("Unable to determine class file for " + className);
+         return null;
+      }
+      try
+      {
+         VirtualFile root = clazz.getVFS().getRoot();
+         URL codeSourceURL = root.toURL();
+         Certificate[] certs = null; // TODO JBMICROCONT-182 determine certificates
+         CodeSource cs = new CodeSource(codeSourceURL, certs);
+         PermissionCollection permissions = Policy.getPolicy().getPermissions(cs);
+         return new ProtectionDomain(cs, permissions);
+      }
+      catch (Exception e)
+      {
+         throw new Error("Error determining protection domain for " + clazz, e);
+      }
+   }
+   
+   /**
+    * Check the filters
+    * 
+    * @param path the path to check
+    * @param context the context
+    * @return true if it fails the filters
+    */
+   protected boolean checkFilters(String path, String context)
+   {
+      if (included != null && included.matchesResourcePath(path) == false)
+      {
+         if (log.isTraceEnabled())
+            log.trace(this + " " + context + " path=" + path + " doesn't match include filter: " + included);
+         return true;
+      }
+      if (excluded != null && excluded.matchesResourcePath(path))
+      {
+         if (log.isTraceEnabled())
+            log.trace(this + " " + context + "  path=" + path + " matches exclude filter: " + excluded);
+         return true;
+      }
+      return false;
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testear1x.ear
===================================================================
(Binary files differ)


Property changes on: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testear1x.ear
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/notempty
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/notempty	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/notempty	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1 @@
+testjar1.
\ No newline at end of file

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package1/notempty
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package1/notempty	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package1/notempty	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1 @@
+testjar1.package1
\ No newline at end of file

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/notempty
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/notempty	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/notempty	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1 @@
+testjar1.package2
\ No newline at end of file

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/subpackage1/notempty
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/subpackage1/notempty	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/subpackage1/notempty	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1 @@
+testjar1.package2.subpackage1
\ No newline at end of file

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/subpackage2/notempty
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/subpackage2/notempty	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/subpackage2/notempty	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1 @@
+testjar1.package2.subpackage2
\ No newline at end of file

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/subpackage3/notempty
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/subpackage3/notempty	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar1/package2/subpackage3/notempty	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1 @@
+testjar1.package2.subpackage3
\ No newline at end of file

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar2/package1/notempty
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar2/package1/notempty	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testjar2/package1/notempty	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1 @@
+testjar2.package1
\ No newline at end of file

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testwar1.war/META-INF/MANIFEST.MF
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testwar1.war/META-INF/MANIFEST.MF	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testwar1.war/META-INF/MANIFEST.MF	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,2 @@
+Manifest-Version: 1.0
+Class-Path: testjar1 lib/util.jar

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testwar1.war/WEB-INF/classes/test/Servlet.class
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testwar1.war/WEB-INF/classes/test/Servlet.class	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testwar1.war/WEB-INF/classes/test/Servlet.class	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1 @@
+A servlet class
\ No newline at end of file

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testwar1.war/WEB-INF/test-resource.txt
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testwar1.war/WEB-INF/test-resource.txt	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/classloader/testwar1.war/WEB-INF/test-resource.txt	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1 @@
+A WEB-INF resource
\ No newline at end of file

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/Common.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/Common.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/Common.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+
+   <bean name="ClassLoaderSystem" class="org.jboss.classloader.spi.ClassLoaderSystem">
+      <constructor factoryClass="org.jboss.test.classloading.vfs.metadata.VFSClassLoadingMicrocontainerTest" factoryMethod="getClassLoaderSystem"/>
+   </bean>
+
+   <bean name="ClassLoading" class="org.jboss.classloading.spi.dependency.ClassLoading">
+      <incallback method="addModule" state="Configured"/>
+      <uncallback method="removeModule" state="Configured"/>
+   </bean>
+
+   <bean name="SchemaResolverConfig" class="org.jboss.xb.binding.sunday.unmarshalling.SchemaResolverConfig">
+      <property name="bindingClasses">
+         <map keyClass="java.lang.String" valueClass="java.lang.String">
+            <entry>
+               <key>urn:jboss:classloader:1.0</key>
+               <value>org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory10</value>
+            </entry>
+         </map>
+      </property>
+   </bean>
+
+</deployment>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/test/A1.0.0.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/test/A1.0.0.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/test/A1.0.0.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0" xmlns:cl="urn:jboss:classloader:1.0">
+
+   <cl:classloader name="a" version="1.0.0"/>
+
+</deployment>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/test/B1.0.0.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/test/B1.0.0.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/test/B1.0.0.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+
+   <classloader name="b" version="1.0.0" xmlns="urn:jboss:classloader:1.0">
+      <requirements>
+         <module name="a" version="1.0.0"/>
+      </requirements>
+   </classloader>
+
+</deployment>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/test/SmokeTest.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/test/SmokeTest.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/test/SmokeTest.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns="urn:jboss:bean-deployer:2.0" xmlns:cl="urn:jboss:classloader:1.0">
+
+   <cl:classloader name="test"/>
+
+</deployment>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportImportMixed.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportImportMixed.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportImportMixed.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <capabilities>
+      <module name="test2" version="2.0.0"/>
+      <package name="test2" version="2.0.0"/>
+      <module name="test1" version="1.0.0"/>
+      <package name="test1" version="1.0.0"/>
+   </capabilities>
+   <requirements>
+      <module name="test2" from="2.0.0"/>
+      <package name="test2" from="2.0.0"/>
+      <module name="test1" from="1.0.0"/>
+      <package name="test1" from="1.0.0"/>
+   </requirements>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportOneModuleNoVersion.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportOneModuleNoVersion.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportOneModuleNoVersion.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <capabilities>
+      <module name="export1"/>
+   </capabilities>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportOneModuleVersioned.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportOneModuleVersioned.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportOneModuleVersioned.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <capabilities>
+      <module name="export1" version="1.0.0"/>
+   </capabilities>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportOnePackageNoVersion.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportOnePackageNoVersion.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportOnePackageNoVersion.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <capabilities>
+      <package name="export1"/>
+   </capabilities>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportOnePackageVersioned.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportOnePackageVersioned.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportOnePackageVersioned.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <capabilities>
+      <package name="export1" version="1.0.0"/>
+   </capabilities>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportThreeModules.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportThreeModules.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportThreeModules.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <capabilities>
+      <module name="export1" version="1.0.0"/>
+      <module name="export2" version="2.0.0"/>
+      <module name="export3" version="3.0.0"/>
+   </capabilities>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportThreePackages.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportThreePackages.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ExportThreePackages.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <capabilities>
+      <package name="export1" version="1.0.0"/>
+      <package name="export2" version="2.0.0"/>
+      <package name="export3" version="3.0.0"/>
+   </capabilities>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportOneModuleNoVersion.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportOneModuleNoVersion.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportOneModuleNoVersion.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <requirements>
+      <module name="export1"/>
+   </requirements>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportOneModuleVersioned.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportOneModuleVersioned.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportOneModuleVersioned.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <requirements>
+      <module name="export1" from="1.0.0" to="2.0.0"/>
+   </requirements>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportOnePackageNoVersion.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportOnePackageNoVersion.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportOnePackageNoVersion.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <requirements>
+      <package name="export1"/>
+   </requirements>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportOnePackageVersioned.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportOnePackageVersioned.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportOnePackageVersioned.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <requirements>
+      <package name="export1" from="1.0.0" to="2.0.0"/>
+   </requirements>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportThreeModules.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportThreeModules.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportThreeModules.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <requirements>
+      <module name="export1" from="1.0.0" to="1.1.0"/>
+      <module name="export2" from="2.0.0" to="2.1.0"/>
+      <module name="export3" from="3.0.0" to="3.1.0"/>
+   </requirements>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportThreePackages.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportThreePackages.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportThreePackages.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <requirements>
+      <package name="export1" from="1.0.0" to="1.1.0"/>
+      <package name="export2" from="2.0.0" to="2.1.0"/>
+      <package name="export3" from="3.0.0" to="3.1.0"/>
+   </requirements>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportVersionRange.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportVersionRange.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ImportVersionRange.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <requirements>
+      <module name="export1"/>
+      <module name="export2" from="1.0.0"/>
+      <module name="export3" to="1.0.0"/>
+      <module name="export4" from="1.0.0" to="2.0.0"/>
+      <module name="export5" from="1.0.0" from-inclusive="false" to="2.0.0" to-inclusive="false"/>
+      <module name="export6" from="1.0.0" from-inclusive="false" to="2.0.0" to-inclusive="true"/>
+      <module name="export7" from="1.0.0" from-inclusive="true" to="2.0.0" to-inclusive="false"/>
+      <module name="export8" from="1.0.0" from-inclusive="true" to="2.0.0" to-inclusive="true"/>
+   </requirements>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleBlackList.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleBlackList.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleBlackList.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test"
+              blackList="false">
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleCache.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleCache.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleCache.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test"
+              cache="false">
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleContext.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleContext.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleContext.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test"
+              context="Context">
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleDomain.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleDomain.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleDomain.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test"
+              domain="testDomain">
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleExcluded.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleExcluded.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleExcluded.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test" excluded="Excluded">
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleExcludedExport.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleExcludedExport.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleExcludedExport.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test" excludedExport="ExcludedExport">
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleExportAll.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleExportAll.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleExportAll.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test"
+              export-all="ALL">
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleImportAll.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleImportAll.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleImportAll.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test"
+              import-all="true">
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleIncluded.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleIncluded.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleIncluded.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test" included="Included">
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleJ2seClassLoadingCompliance.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleJ2seClassLoadingCompliance.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleJ2seClassLoadingCompliance.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test"
+              parent-first="false">
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleName.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleName.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleName.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleParentDomain.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleParentDomain.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleParentDomain.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test"
+              parent-domain="testParentDomain">
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleRoots.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleRoots.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleRoots.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <root>root1</root>
+   <root>root2</root>
+   <root>root3</root>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleSystem.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleSystem.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleSystem.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test"
+              system="System">
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleVersion.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleVersion.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ModuleVersion.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test"
+              version="1.0.0">
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/OptionalRequirement.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/OptionalRequirement.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/OptionalRequirement.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <requirements>
+      <module name="test1" from="1.0.0" optional="true"/>
+      <package name="test1" from="1.0.0" optional="true"/>
+   </requirements>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ReExportRequirement.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ReExportRequirement.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/ReExportRequirement.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <requirements>
+      <module name="test1" from="1.0.0" reExport="true"/>
+      <package name="test1" from="1.0.0" reExport="true"/>
+   </requirements>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/UsesRequirement.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/UsesRequirement.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/UsesRequirement.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <requirements>
+      <uses name="test1" from="1.0.0"/>
+   </requirements>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/WildcardCapability.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/WildcardCapability.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/WildcardCapability.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <capabilities>
+      <module name="test1" version="1.0.0"/>
+      <package name="test1" version="1.0.0"/>
+      <test xmlns="urn:jboss:test:classloader:capability:1.0" name="test" version="1.0.0"/>
+   </capabilities>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/WildcardRequirement.xml
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/WildcardRequirement.xml	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/resources/tests/org/jboss/test/classloading/vfs/metadata/xml/test/WildcardRequirement.xml	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<classloader xmlns="urn:jboss:classloader:1.0"
+              name="test">
+   <requirements>
+      <module name="test1" from="1.0.0"/>
+      <package name="test1" from="1.0.0"/>
+      <test xmlns="urn:jboss:test:classloader:requirement:1.0" name="test" from="1.0.0"/>
+   </requirements>
+</classloader>

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/ClassLoadingVFSTestSuite.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/ClassLoadingVFSTestSuite.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/ClassLoadingVFSTestSuite.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,79 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classloading;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+import org.jboss.test.classloading.vfs.metadata.test.DomainUnitTestCase;
+import org.jboss.test.classloading.vfs.metadata.test.ImportAllUnitTestCase;
+import org.jboss.test.classloading.vfs.metadata.test.ModuleDependencyUnitTestCase;
+import org.jboss.test.classloading.vfs.metadata.test.PackageDependencyUnitTestCase;
+import org.jboss.test.classloading.vfs.metadata.test.ReExportModuleUnitTestCase;
+import org.jboss.test.classloading.vfs.metadata.test.ReExportPackageUnitTestCase;
+import org.jboss.test.classloading.vfs.metadata.test.UsesPackageUnitTestCase;
+import org.jboss.test.classloading.vfs.metadata.test.VFSClassLoaderFactoryUnitTestCase;
+import org.jboss.test.classloading.vfs.metadata.xml.test.VFSClassLoaderFactoryXMLUnitTestCase;
+import org.jboss.test.classloading.vfs.policy.test.ExportAllUnitTestCase;
+
+/**
+ * ClassLoading VFS Test Suite.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 37459 $
+ */
+public class ClassLoadingVFSTestSuite extends TestSuite
+{
+   /**
+    * For running the testsuite from the command line
+    * 
+    * @param args the command line args
+    */
+   public static void main(String[] args)
+   {
+      TestRunner.run(suite());
+   }
+
+   /**
+    * Create the testsuite
+    * 
+    * @return the testsuite
+    */
+   public static Test suite()
+   {
+      TestSuite suite = new TestSuite("ClassLoading VFS Tests");
+
+      suite.addTest(ExportAllUnitTestCase.suite());
+      suite.addTest(VFSClassLoaderFactoryXMLUnitTestCase.suite());
+      suite.addTest(DomainUnitTestCase.suite());
+      suite.addTest(ImportAllUnitTestCase.suite());
+      suite.addTest(ModuleDependencyUnitTestCase.suite());
+      suite.addTest(PackageDependencyUnitTestCase.suite());
+      suite.addTest(VFSClassLoaderFactoryUnitTestCase.suite());
+      suite.addTest(ReExportModuleUnitTestCase.suite());
+      suite.addTest(ReExportPackageUnitTestCase.suite());
+      suite.addTest(UsesPackageUnitTestCase.suite());
+      
+      return suite;
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/VFSClassLoadingMicrocontainerTest.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/VFSClassLoadingMicrocontainerTest.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/VFSClassLoadingMicrocontainerTest.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,228 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.classloading.vfs.metadata;
+
+import java.net.URL;
+import java.security.CodeSource;
+import java.security.ProtectionDomain;
+import java.util.Collections;
+
+import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
+import org.jboss.classloader.plugins.ClassLoaderUtils;
+import org.jboss.classloader.plugins.jdk.AbstractJDKChecker;
+import org.jboss.classloader.plugins.system.DefaultClassLoaderSystem;
+import org.jboss.classloader.spi.ClassLoaderDomain;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloader.spi.ParentPolicy;
+import org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory;
+import org.jboss.kernel.plugins.deployment.AbstractKernelDeployment;
+import org.jboss.kernel.spi.deployment.KernelDeployment;
+import org.jboss.test.AbstractTestDelegate;
+import org.jboss.test.kernel.junit.MicrocontainerTest;
+
+/**
+ * VFSClassLoadingMicrocontainerTest.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class VFSClassLoadingMicrocontainerTest extends MicrocontainerTest
+{
+   protected ClassLoaderSystem system;
+   
+   public static AbstractTestDelegate getDelegate(Class<?> clazz) throws Exception
+   {
+      return new VFSClassLoadingMicrocontainerTestDelegate(clazz);
+   }
+
+   public static ClassLoaderSystem getClassLoaderSystem()
+   {
+      DefaultClassLoaderSystem system = new DefaultClassLoaderSystem();
+      ClassLoaderDomain defaultDomain = system.getDefaultDomain();
+      defaultDomain.setParentPolicy(ParentPolicy.BEFORE_BUT_JAVA_ONLY);
+      return system;
+   }
+   
+   public VFSClassLoadingMicrocontainerTest(String name)
+   {
+      super(name);
+   }
+   
+   protected String getRoot(Class<?> clazz)
+   {
+      ProtectionDomain pd = clazz.getProtectionDomain();
+      CodeSource cs = pd.getCodeSource();
+      URL location = cs.getLocation();
+      return location.toString();
+   }
+   
+   protected String getContextName(VFSClassLoaderFactory factory)
+   {
+      String contextName = factory.getContextName();
+      if (contextName == null)
+         contextName = factory.getName() + ":" + factory.getVersion();
+      return contextName;
+   }
+   
+   protected ClassLoader assertClassLoader(VFSClassLoaderFactory factory) throws Exception
+   {
+      return assertClassLoader(getContextName(factory));
+   }
+   
+   protected ClassLoader assertClassLoader(String name, String version) throws Exception
+   {
+      String contextName = name + ":" + version.toString();
+      return assertClassLoader(contextName);
+   }
+   
+   protected ClassLoader assertClassLoader(String name) throws Exception
+   {
+      Object obj = getBean(name);
+      return assertInstanceOf(obj, ClassLoader.class);
+   }
+   
+   protected void assertNoClassLoader(VFSClassLoaderFactory factory) throws Exception
+   {
+      assertNoClassLoader(getContextName(factory));
+   }
+   
+   protected void assertNoClassLoader(String name, String version) throws Exception
+   {
+      String contextName = name + ":" + version.toString();
+      assertNoClassLoader(contextName);
+   }
+   
+   protected void assertClassLoader(Class<?> clazz, ClassLoader expected)
+   {
+      if (expected == null)
+         return;
+      ClassLoader cl = clazz.getClassLoader();
+      boolean result = expected.equals(cl);
+      assertTrue(ClassLoaderUtils.classToString(clazz) + " should have expected classloader=" + expected, result);
+   }
+   
+   protected void assertClassEquality(Class<?> expected, Class<?> actual)
+   {
+      assertTrue("Should be the same " + ClassLoaderUtils.classToString(expected) +" and " + ClassLoaderUtils.classToString(actual), expected == actual);
+   }
+   
+   protected void assertNoClassEquality(Class<?> expected, Class<?> actual)
+   {
+      assertTrue("Should NOT be the same " + ClassLoaderUtils.classToString(expected) +" and " + ClassLoaderUtils.classToString(actual), expected != actual);
+   }
+   
+   protected Class<?> assertLoadClass(Class<?> reference, ClassLoader start)
+   {
+      return assertLoadClass(reference, start, start, false);
+   }
+   
+   protected Class<?> assertLoadClass(Class<?> reference, ClassLoader start, boolean isReference)
+   {
+      return assertLoadClass(reference, start, start, isReference);
+   }
+   
+   protected Class<?> assertLoadClass(Class<?> reference, ClassLoader start, ClassLoader expected)
+   {
+      return assertLoadClass(reference, start, expected, false);
+   }
+   
+   protected Class<?> assertLoadClass(Class<?> reference, ClassLoader start, ClassLoader expected, boolean isReference)
+   {
+      Class<?> result = assertLoadClass(reference.getName(), start, expected);
+      if (isReference)
+         assertClassEquality(reference, result);
+      else
+         assertNoClassEquality(reference, result);
+      return result;
+   }
+   
+   protected Class<?> assertLoadClass(String name, ClassLoader start)
+   {
+      return assertLoadClass(name, start, start);
+   }
+   
+   protected Class<?> assertLoadClass(String name, ClassLoader start, ClassLoader expected)
+   {
+      Class<?> result = null;
+      try
+      {
+         result = start.loadClass(name);
+         getLog().debug("Got class: " + ClassLoaderUtils.classToString(result) + " for " + name + " from " + start);
+      }
+      catch (ClassNotFoundException e)
+      {
+         failure("Did not expect CNFE for " + name + " from " + start, e);
+      }
+      assertClassLoader(result, expected);
+      return result;
+   }
+   
+   protected void assertLoadClassFail(Class<?> reference, ClassLoader start)
+   {
+      assertLoadClassFail(reference.getName(), start);
+   }
+      
+   protected void assertLoadClassFail(String name, ClassLoader start)
+   {
+      try
+      {
+         start.loadClass(name);
+         fail("Should not be here!");
+      }
+      catch (Exception expected)
+      {
+         checkThrowable(ClassNotFoundException.class, expected);
+      }
+   }
+   
+   protected KernelDeployment install(VFSClassLoaderFactory metaData) throws Exception
+   {
+      AbstractKernelDeployment deployment = new AbstractKernelDeployment();
+      deployment.setName(metaData.getName() + ":" + metaData.getVersion());
+      deployment.setBeanFactories(Collections.singletonList((BeanMetaDataFactory) metaData));
+      deploy(deployment);
+      return deployment;
+   }
+
+   protected void assertNoClassLoader(String name) throws Exception
+   {
+      try
+      {
+         Object bean = getBean(name, null);
+         if (bean != null)
+            fail("Should not be here: " + bean);
+      }
+      catch (Throwable t)
+      {
+         checkThrowable(IllegalStateException.class, t);
+      }
+   }
+   
+   protected void setUp() throws Exception
+   {
+      super.setUp();
+      // This is a hack for a hack. ;-)
+      AbstractJDKChecker.getExcluded().add(VFSClassLoadingMicrocontainerTest.class);
+      
+      system = (ClassLoaderSystem) getBean("ClassLoaderSystem");
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/VFSClassLoadingMicrocontainerTestDelegate.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/VFSClassLoadingMicrocontainerTestDelegate.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/VFSClassLoadingMicrocontainerTestDelegate.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,52 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.classloading.vfs.metadata;
+
+import java.net.URL;
+
+import org.jboss.test.kernel.junit.MicrocontainerTestDelegate;
+
+/**
+ * 
+ * An AOPMicrocontainerTestDelegate.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 63094 $
+ */
+public class VFSClassLoadingMicrocontainerTestDelegate extends MicrocontainerTestDelegate
+{
+   public VFSClassLoadingMicrocontainerTestDelegate(Class<?> clazz) throws Exception
+   {
+      super(clazz);
+   }
+
+   protected void deploy() throws Exception
+   {
+      String common = "/org/jboss/test/classloading/vfs/metadata/Common.xml";
+      URL url = getClass().getResource(common);
+      if (url == null)
+         throw new IllegalStateException(common + " not found");
+      deploy(url);
+
+      super.deploy();
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/support/a/A.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/support/a/A.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/support/a/A.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,32 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.classloading.vfs.metadata.support.a;
+
+/**
+ * A.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class A
+{
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/support/b/B.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/support/b/B.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/support/b/B.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,32 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.classloading.vfs.metadata.support.b;
+
+/**
+ * B.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class B
+{
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/support/c/C.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/support/c/C.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/support/c/C.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,32 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.classloading.vfs.metadata.support.c;
+
+/**
+ * C.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class C
+{
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/DomainUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/DomainUnitTestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/DomainUnitTestCase.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,213 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classloading.vfs.metadata.test;
+
+import junit.framework.Test;
+
+import org.jboss.classloader.spi.ClassLoaderDomain;
+import org.jboss.classloader.spi.ParentPolicy;
+import org.jboss.classloading.spi.metadata.ExportAll;
+import org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory;
+import org.jboss.kernel.spi.deployment.KernelDeployment;
+import org.jboss.test.classloading.vfs.metadata.VFSClassLoadingMicrocontainerTest;
+import org.jboss.test.classloading.vfs.metadata.support.a.A;
+import org.jboss.test.classloading.vfs.metadata.support.b.B;
+
+/**
+ * DomainUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class DomainUnitTestCase extends VFSClassLoadingMicrocontainerTest
+{
+   public static Test suite()
+   {
+      return suite(DomainUnitTestCase.class);
+   }
+
+   public DomainUnitTestCase(String name)
+   {
+      super(name);
+   }
+
+   public void testDefaultDomain() throws Exception
+   {
+      VFSClassLoaderFactory a = new VFSClassLoaderFactory("a");
+      a.getRoots().add(getRoot(A.class));
+      a.setIncludedPackages(A.class.getPackage().getName());
+      KernelDeployment depA = install(a);
+      try
+      {
+         validate();
+         ClassLoader clA = assertClassLoader(a);
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+      }
+      finally
+      {
+         undeploy(depA);
+      }
+      validate();
+      assertNoClassLoader(a);
+   }
+
+   public void testSubDomainParentBefore() throws Exception
+   {
+      VFSClassLoaderFactory a = new VFSClassLoaderFactory("a");
+      a.setExportAll(ExportAll.NON_EMPTY);
+      a.getRoots().add(getRoot(A.class));
+      a.setIncludedPackages(A.class.getPackage().getName());
+      KernelDeployment depA = install(a);
+      try
+      {
+         validate();
+         ClassLoader clA = assertClassLoader(a);
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+         
+         VFSClassLoaderFactory b = new VFSClassLoaderFactory("b");
+         b.setDomain("SubDomainBefore");
+         b.getRoots().add(getRoot(B.class));
+         b.setIncludedPackages(A.class.getPackage().getName() + "," + B.class.getPackage().getName());
+         KernelDeployment depB = install(b);
+         try
+         {
+            assertLoadClass(A.class, clA);
+            assertLoadClassFail(B.class, clA);
+            ClassLoader clB = assertClassLoader(b);
+            assertLoadClass(B.class, clB);
+            assertLoadClass(A.class, clB, clA);
+         }
+         finally
+         {
+            undeploy(depB);
+         }
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+         assertNoClassLoader(b);
+      }
+      finally
+      {
+         undeploy(depA);
+      }
+      assertNoClassLoader(a);
+   }
+   
+   public void testSubDomainParentAfter() throws Exception
+   {
+      VFSClassLoaderFactory a = new VFSClassLoaderFactory("a");
+      a.setExportAll(ExportAll.NON_EMPTY);
+      a.getRoots().add(getRoot(A.class));
+      a.setIncludedPackages(A.class.getPackage().getName());
+      KernelDeployment depA = install(a);
+      try
+      {
+         ClassLoader clA = assertClassLoader(a);
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+
+         VFSClassLoaderFactory b = new VFSClassLoaderFactory("b");
+         b.setDomain("SubDomainAfter");
+         b.setJ2seClassLoadingCompliance(false);
+         b.getRoots().add(getRoot(B.class));
+         b.setIncludedPackages(A.class.getPackage().getName() + "," + B.class.getPackage().getName());
+         KernelDeployment depB = install(b);
+         try
+         {
+            assertLoadClass(A.class, clA);
+            assertLoadClassFail(B.class, clA);
+            ClassLoader clB = assertClassLoader(b);
+            assertLoadClass(B.class, clB);
+            assertLoadClass(A.class, clB);
+         }
+         finally
+         {
+            undeploy(depB);
+         }
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+         assertNoClassLoader(b);
+      }
+      finally
+      {
+         undeploy(depA);
+      }
+      assertNoClassLoader(a);
+   }
+
+   public void testParentDoesNotExist() throws Exception
+   {
+      VFSClassLoaderFactory a = new VFSClassLoaderFactory("a");
+      a.setDomain("SubDomain");
+      a.setParentDomain("DOESNOTEXIST");
+      a.getRoots().add(getRoot(A.class));
+      a.setIncludedPackages(A.class.getPackage().getName());
+      KernelDeployment depA = install(a);
+      try
+      {
+         assertNoClassLoader(a);
+      }
+      catch (Throwable t)
+      {
+         checkThrowable(IllegalStateException.class, t);
+      }
+      finally
+      {
+         undeploy(depA);
+      }
+      assertNoClassLoader(a);
+   }
+   
+   public void testParentDoesExists() throws Exception
+   {
+      ClassLoaderDomain domain = system.createAndRegisterDomain("TestDomain", ParentPolicy.BEFORE_BUT_JAVA_ONLY);
+      try
+      {
+         VFSClassLoaderFactory a = new VFSClassLoaderFactory("a");
+         a.setDomain("SubDomain");
+         a.setParentDomain("TestDomain");
+         a.getRoots().add(getRoot(A.class));
+         a.setIncludedPackages(A.class.getPackage().getName());
+         KernelDeployment depA = install(a);
+         try
+         {
+            ClassLoader clA = assertClassLoader(a);
+            assertLoadClass(A.class, clA);
+            assertLoadClassFail(B.class, clA);
+         }
+         catch (Throwable t)
+         {
+            checkThrowable(IllegalStateException.class, t);
+         }
+         finally
+         {
+            undeploy(depA);
+         }
+         assertNoClassLoader(a);
+      }
+      finally
+      {
+         system.unregisterDomain(domain);
+      }
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/ImportAllUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/ImportAllUnitTestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/ImportAllUnitTestCase.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,91 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classloading.vfs.metadata.test;
+
+import junit.framework.Test;
+
+import org.jboss.classloading.spi.metadata.ExportAll;
+import org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory;
+import org.jboss.kernel.spi.deployment.KernelDeployment;
+import org.jboss.test.classloading.vfs.metadata.VFSClassLoadingMicrocontainerTest;
+import org.jboss.test.classloading.vfs.metadata.support.a.A;
+import org.jboss.test.classloading.vfs.metadata.support.b.B;
+
+/**
+ * ImportAllUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class ImportAllUnitTestCase extends VFSClassLoadingMicrocontainerTest
+{
+   public static Test suite()
+   {
+      return suite(ImportAllUnitTestCase.class);
+   }
+
+   public ImportAllUnitTestCase(String name)
+   {
+      super(name);
+   }
+   
+   public void testImportAll() throws Exception
+   {
+      VFSClassLoaderFactory a = new VFSClassLoaderFactory("a");
+      a.setExportAll(ExportAll.NON_EMPTY);
+      a.getRoots().add(getRoot(A.class));
+      a.setIncludedPackages(A.class.getPackage().getName());
+      KernelDeployment depA = install(a);
+      try
+      {
+         ClassLoader clA = assertClassLoader(a);
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+
+         VFSClassLoaderFactory b = new VFSClassLoaderFactory("b");
+         b.setImportAll(true);
+         b.getRoots().add(getRoot(B.class));
+         b.setIncludedPackages(B.class.getPackage().getName());
+         KernelDeployment depB = install(b);
+         try
+         {
+            assertLoadClass(A.class, clA);
+            assertLoadClassFail(B.class, clA);
+            ClassLoader clB = assertClassLoader(b);
+            assertLoadClass(B.class, clB);
+            assertLoadClass(A.class, clB, clA);
+         }
+         finally
+         {
+            undeploy(depB);
+         }
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+         assertNoClassLoader(b);
+      }
+      finally
+      {
+         undeploy(depA);
+      }
+      assertNoClassLoader(a);
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/ModuleDependencyUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/ModuleDependencyUnitTestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/ModuleDependencyUnitTestCase.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,179 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classloading.vfs.metadata.test;
+
+import junit.framework.Test;
+
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory;
+import org.jboss.classloading.spi.version.VersionRange;
+import org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory;
+import org.jboss.kernel.spi.deployment.KernelDeployment;
+import org.jboss.test.classloading.vfs.metadata.VFSClassLoadingMicrocontainerTest;
+import org.jboss.test.classloading.vfs.metadata.support.a.A;
+import org.jboss.test.classloading.vfs.metadata.support.b.B;
+
+/**
+ * ModuleDependencyUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class ModuleDependencyUnitTestCase extends VFSClassLoadingMicrocontainerTest
+{
+   public static Test suite()
+   {
+      return suite(ModuleDependencyUnitTestCase.class);
+   }
+
+   public ModuleDependencyUnitTestCase(String name)
+   {
+      super(name);
+   }
+   
+   public void testImportNoVersionCheck() throws Exception
+   {
+      VFSClassLoaderFactory a = new VFSClassLoaderFactory("a");
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      a.getCapabilities().addCapability(factory.createModule("ModuleA"));
+      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      a.getRoots().add(getRoot(A.class));
+      a.setIncludedPackages(A.class.getPackage().getName());
+      KernelDeployment depA = install(a);
+      try
+      {
+         validate();
+         ClassLoader clA = assertClassLoader(a);
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+
+         VFSClassLoaderFactory b = new VFSClassLoaderFactory("b");
+         b.getRequirements().addRequirement(factory.createRequireModule("ModuleA"));
+         b.getRoots().add(getRoot(B.class));
+         b.setIncludedPackages(B.class.getPackage().getName());
+         KernelDeployment depB = install(b);
+         try
+         {
+            assertLoadClass(A.class, clA);
+            assertLoadClassFail(B.class, clA);
+            ClassLoader clB = assertClassLoader(b);
+            assertLoadClass(B.class, clB);
+            assertLoadClass(A.class, clB, clA);
+         }
+         finally
+         {
+            undeploy(depB);
+         }
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+         assertNoClassLoader(b);
+      }
+      finally
+      {
+         undeploy(depA);
+      }
+      assertNoClassLoader(a);
+   }
+   
+   public void testImportVersionCheck() throws Exception
+   {
+      VFSClassLoaderFactory a = new VFSClassLoaderFactory("a");
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      a.getCapabilities().addCapability(factory.createModule("ModuleA", "1.0.0"));
+      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      a.getRoots().add(getRoot(A.class));
+      a.setIncludedPackages(A.class.getPackage().getName());
+      KernelDeployment depA = install(a);
+      try
+      {
+         ClassLoader clA = assertClassLoader(a);
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+
+         VFSClassLoaderFactory b = new VFSClassLoaderFactory("b");
+         b.getRequirements().addRequirement(factory.createRequireModule("ModuleA", new VersionRange("1.0.0", "2.0.0")));
+         b.getRoots().add(getRoot(B.class));
+         b.setIncludedPackages(B.class.getPackage().getName());
+         KernelDeployment depB = install(b);
+         try
+         {
+            assertLoadClass(A.class, clA);
+            assertLoadClassFail(B.class, clA);
+            ClassLoader clB = assertClassLoader(b);
+            assertLoadClass(B.class, clB);
+            assertLoadClass(A.class, clB, clA);
+         }
+         finally
+         {
+            undeploy(depB);
+         }
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+         assertNoClassLoader(b);
+      }
+      finally
+      {
+         undeploy(depA);
+      }
+      assertNoClassLoader(a);
+   }
+   
+   public void testImportVersionCheckFailed() throws Exception
+   {
+      VFSClassLoaderFactory a = new VFSClassLoaderFactory("a");
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      a.getCapabilities().addCapability(factory.createModule("ModuleA", "3.0.0"));
+      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      a.getRoots().add(getRoot(A.class));
+      a.setIncludedPackages(A.class.getPackage().getName());
+      KernelDeployment depA = install(a);
+      try
+      {
+         ClassLoader clA = assertClassLoader(a);
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+
+         VFSClassLoaderFactory b = new VFSClassLoaderFactory("b");
+         b.getRequirements().addRequirement(factory.createRequireModule("ModuleA", new VersionRange("1.0.0", "2.0.0")));
+         b.getRoots().add(getRoot(B.class));
+         b.setIncludedPackages(B.class.getPackage().getName());
+         KernelDeployment depB = install(b);
+         try
+         {
+            assertLoadClass(A.class, clA);
+            assertLoadClassFail(B.class, clA);
+            assertNoClassLoader(b);
+         }
+         finally
+         {
+            undeploy(depB);
+         }
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+         assertNoClassLoader(b);
+      }
+      finally
+      {
+         undeploy(depA);
+      }
+      assertNoClassLoader(a);
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/PackageDependencyUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/PackageDependencyUnitTestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/PackageDependencyUnitTestCase.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,178 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classloading.vfs.metadata.test;
+
+import junit.framework.Test;
+
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory;
+import org.jboss.classloading.spi.version.VersionRange;
+import org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory;
+import org.jboss.kernel.spi.deployment.KernelDeployment;
+import org.jboss.test.classloading.vfs.metadata.VFSClassLoadingMicrocontainerTest;
+import org.jboss.test.classloading.vfs.metadata.support.a.A;
+import org.jboss.test.classloading.vfs.metadata.support.b.B;
+
+/**
+ * PackageDependencyUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class PackageDependencyUnitTestCase extends VFSClassLoadingMicrocontainerTest
+{
+   public static Test suite()
+   {
+      return suite(PackageDependencyUnitTestCase.class);
+   }
+
+   public PackageDependencyUnitTestCase(String name)
+   {
+      super(name);
+   }
+   
+   public void testImportNoVersionCheck() throws Exception
+   {
+      VFSClassLoaderFactory a = new VFSClassLoaderFactory("a");
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      a.getCapabilities().addCapability(factory.createModule("ModuleA"));
+      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      a.getRoots().add(getRoot(A.class));
+      a.setIncludedPackages(A.class.getPackage().getName());
+      KernelDeployment depA = install(a);
+      try
+      {
+         ClassLoader clA = assertClassLoader(a);
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+
+         VFSClassLoaderFactory b = new VFSClassLoaderFactory("b");
+         b.getRequirements().addRequirement(factory.createRequirePackage(A.class.getPackage().getName()));
+         b.getRoots().add(getRoot(B.class));
+         b.setIncludedPackages(B.class.getPackage().getName());
+         KernelDeployment depB = install(b);
+         try
+         {
+            assertLoadClass(A.class, clA);
+            assertLoadClassFail(B.class, clA);
+            ClassLoader clB = assertClassLoader(b);
+            assertLoadClass(B.class, clB);
+            assertLoadClass(A.class, clB, clA);
+         }
+         finally
+         {
+            undeploy(depB);
+         }
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+         assertNoClassLoader(b);
+      }
+      finally
+      {
+         undeploy(depA);
+      }
+      assertNoClassLoader(a);
+   }
+   
+   public void testImportVersionCheck() throws Exception
+   {
+      VFSClassLoaderFactory a = new VFSClassLoaderFactory("a");
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      a.getCapabilities().addCapability(factory.createModule("ModuleA"));
+      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName(), "1.0.0"));
+      a.getRoots().add(getRoot(A.class));
+      a.setIncludedPackages(A.class.getPackage().getName());
+      KernelDeployment depA = install(a);
+      try
+      {
+         ClassLoader clA = assertClassLoader(a);
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+
+         VFSClassLoaderFactory b = new VFSClassLoaderFactory("b");
+         b.getRequirements().addRequirement(factory.createRequirePackage(A.class.getPackage().getName(), new VersionRange("1.0.0", "2.0.0")));
+         b.getRoots().add(getRoot(B.class));
+         b.setIncludedPackages(B.class.getPackage().getName());
+         KernelDeployment depB = install(b);
+         try
+         {
+            assertLoadClass(A.class, clA);
+            assertLoadClassFail(B.class, clA);
+            ClassLoader clB = assertClassLoader(b);
+            assertLoadClass(B.class, clB);
+            assertLoadClass(A.class, clB, clA);
+         }
+         finally
+         {
+            undeploy(depB);
+         }
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+         assertNoClassLoader(b);
+      }
+      finally
+      {
+         undeploy(depA);
+      }
+      assertNoClassLoader(a);
+   }
+   
+   public void testImportVersionCheckFailed() throws Exception
+   {
+      VFSClassLoaderFactory a = new VFSClassLoaderFactory("a");
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      a.getCapabilities().addCapability(factory.createModule("ModuleA"));
+      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName(), "3.0.0"));
+      a.getRoots().add(getRoot(A.class));
+      a.setIncludedPackages(A.class.getPackage().getName());
+      KernelDeployment depA = install(a);
+      try
+      {
+         ClassLoader clA = assertClassLoader(a);
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+
+         VFSClassLoaderFactory b = new VFSClassLoaderFactory("b");
+         b.getRequirements().addRequirement(factory.createRequirePackage(A.class.getPackage().getName(), new VersionRange("1.0.0", "2.0.0")));
+         b.getRoots().add(getRoot(B.class));
+         b.setIncludedPackages(B.class.getPackage().getName());
+         KernelDeployment depB = install(b);
+         try
+         {
+            assertLoadClass(A.class, clA);
+            assertLoadClassFail(B.class, clA);
+            assertNoClassLoader(b);
+         }
+         finally
+         {
+            undeploy(depB);
+         }
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+         assertNoClassLoader(b);
+      }
+      finally
+      {
+         undeploy(depA);
+      }
+      assertNoClassLoader(a);
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/ReExportModuleUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/ReExportModuleUnitTestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/ReExportModuleUnitTestCase.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,211 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classloading.vfs.metadata.test;
+
+import junit.framework.Test;
+
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory;
+import org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory;
+import org.jboss.kernel.spi.deployment.KernelDeployment;
+import org.jboss.test.classloading.vfs.metadata.VFSClassLoadingMicrocontainerTest;
+import org.jboss.test.classloading.vfs.metadata.support.a.A;
+import org.jboss.test.classloading.vfs.metadata.support.b.B;
+import org.jboss.test.classloading.vfs.metadata.support.c.C;
+
+/**
+ * ReExportModuleUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class ReExportModuleUnitTestCase extends VFSClassLoadingMicrocontainerTest
+{
+   public static Test suite()
+   {
+      return suite(ReExportModuleUnitTestCase.class);
+   }
+
+   public ReExportModuleUnitTestCase(String name)
+   {
+      super(name);
+   }
+   
+   public void testReExport() throws Exception
+   {
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+
+      VFSClassLoaderFactory a = new VFSClassLoaderFactory("a");
+      a.getRoots().add(getRoot(A.class));
+      a.setIncludedPackages(A.class.getPackage().getName());
+      a.getCapabilities().addCapability(factory.createModule("a"));
+      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      KernelDeployment depA = install(a);
+      try
+      {
+         ClassLoader clA = assertClassLoader(a);
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+         assertLoadClassFail(C.class, clA);
+
+         VFSClassLoaderFactory b = new VFSClassLoaderFactory("b");
+         b.getRoots().add(getRoot(B.class));
+         b.setIncludedPackages(B.class.getPackage().getName());
+         b.getCapabilities().addCapability(factory.createModule("b"));
+         b.getCapabilities().addCapability(factory.createPackage(B.class.getPackage().getName()));
+         b.getRequirements().addRequirement(factory.createReExportModule("a"));
+         KernelDeployment depB = install(b);
+         try
+         {
+            assertLoadClass(A.class, clA);
+            assertLoadClassFail(B.class, clA);
+            assertLoadClassFail(C.class, clA);
+            ClassLoader clB = assertClassLoader(b);
+            assertLoadClass(A.class, clB, clA);
+            assertLoadClass(B.class, clB);
+            assertLoadClassFail(C.class, clB);
+
+            VFSClassLoaderFactory c = new VFSClassLoaderFactory("c");
+            c.getRoots().add(getRoot(C.class));
+            c.setIncludedPackages(C.class.getPackage().getName());
+            c.getRequirements().addRequirement(factory.createRequireModule("b"));
+            KernelDeployment depC = install(c);
+            try
+            {
+               assertLoadClass(A.class, clA);
+               assertLoadClassFail(B.class, clA);
+               assertLoadClassFail(C.class, clA);
+               assertLoadClass(A.class, clB, clA);
+               assertLoadClass(B.class, clB);
+               assertLoadClassFail(C.class, clB);
+               ClassLoader clC = assertClassLoader(c);
+               assertLoadClass(A.class, clC, clA);
+               assertLoadClass(B.class, clC, clB);
+               assertLoadClass(C.class, clC);
+            }
+            finally
+            {
+               undeploy(depC);
+            }
+            assertNoClassLoader(c);
+            assertLoadClass(A.class, clA);
+            assertLoadClassFail(B.class, clA);
+            assertLoadClassFail(C.class, clA);
+            assertLoadClass(A.class, clB, clA);
+            assertLoadClass(B.class, clB);
+            assertLoadClassFail(C.class, clB);
+         }
+         finally
+         {
+            undeploy(depB);
+         }
+         assertNoClassLoader(b);
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+         assertLoadClassFail(C.class, clA);
+      }
+      finally
+      {
+         undeploy(depA);
+      }
+      assertNoClassLoader(a);
+   }
+   
+   public void testNoReExport() throws Exception
+   {
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+
+      VFSClassLoaderFactory a = new VFSClassLoaderFactory("a");
+      a.getRoots().add(getRoot(A.class));
+      a.setIncludedPackages(A.class.getPackage().getName());
+      a.getCapabilities().addCapability(factory.createModule("a"));
+      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      KernelDeployment depA = install(a);
+      try
+      {
+         ClassLoader clA = assertClassLoader(a);
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+         assertLoadClassFail(C.class, clA);
+
+         VFSClassLoaderFactory b = new VFSClassLoaderFactory("b");
+         b.getRoots().add(getRoot(B.class));
+         b.setIncludedPackages(B.class.getPackage().getName());
+         b.getCapabilities().addCapability(factory.createModule("b"));
+         b.getCapabilities().addCapability(factory.createPackage(B.class.getPackage().getName()));
+         b.getRequirements().addRequirement(factory.createReExportModule("a"));
+         KernelDeployment depB = install(b);
+         try
+         {
+            assertLoadClass(A.class, clA);
+            assertLoadClassFail(B.class, clA);
+            assertLoadClassFail(C.class, clA);
+            ClassLoader clB = assertClassLoader(b);
+            assertLoadClass(A.class, clB, clA);
+            assertLoadClass(B.class, clB);
+            assertLoadClassFail(C.class, clB);
+
+            VFSClassLoaderFactory c = new VFSClassLoaderFactory("c");
+            c.getRoots().add(getRoot(C.class));
+            c.setIncludedPackages(C.class.getPackage().getName());
+            c.getRequirements().addRequirement(factory.createRequirePackage(B.class.getPackage().getName()));
+            KernelDeployment depC = install(c);
+            try
+            {
+               assertLoadClass(A.class, clA);
+               assertLoadClassFail(B.class, clA);
+               assertLoadClassFail(C.class, clA);
+               assertLoadClass(A.class, clB, clA);
+               assertLoadClass(B.class, clB);
+               assertLoadClassFail(C.class, clB);
+               ClassLoader clC = assertClassLoader(c);
+               assertLoadClassFail(A.class, clC);
+               assertLoadClass(B.class, clC, clB);
+               assertLoadClass(C.class, clC);
+            }
+            finally
+            {
+               undeploy(depC);
+            }
+            assertNoClassLoader(c);
+            assertLoadClass(A.class, clA);
+            assertLoadClassFail(B.class, clA);
+            assertLoadClassFail(C.class, clA);
+            assertLoadClass(A.class, clB, clA);
+            assertLoadClass(B.class, clB);
+            assertLoadClassFail(C.class, clB);
+         }
+         finally
+         {
+            undeploy(depB);
+         }
+         assertNoClassLoader(b);
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+         assertLoadClassFail(C.class, clA);
+      }
+      finally
+      {
+         undeploy(depA);
+      }
+      assertNoClassLoader(a);
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/ReExportPackageUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/ReExportPackageUnitTestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/ReExportPackageUnitTestCase.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,211 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classloading.vfs.metadata.test;
+
+import junit.framework.Test;
+
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory;
+import org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory;
+import org.jboss.kernel.spi.deployment.KernelDeployment;
+import org.jboss.test.classloading.vfs.metadata.VFSClassLoadingMicrocontainerTest;
+import org.jboss.test.classloading.vfs.metadata.support.a.A;
+import org.jboss.test.classloading.vfs.metadata.support.b.B;
+import org.jboss.test.classloading.vfs.metadata.support.c.C;
+
+/**
+ * ReExportPackageUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class ReExportPackageUnitTestCase extends VFSClassLoadingMicrocontainerTest
+{
+   public static Test suite()
+   {
+      return suite(ReExportPackageUnitTestCase.class);
+   }
+
+   public ReExportPackageUnitTestCase(String name)
+   {
+      super(name);
+   }
+   
+   public void testReExport() throws Exception
+   {
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+
+      VFSClassLoaderFactory a = new VFSClassLoaderFactory("a");
+      a.getRoots().add(getRoot(A.class));
+      a.setIncludedPackages(A.class.getPackage().getName());
+      a.getCapabilities().addCapability(factory.createModule("a"));
+      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      KernelDeployment depA = install(a);
+      try
+      {
+         ClassLoader clA = assertClassLoader(a);
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+         assertLoadClassFail(C.class, clA);
+
+         VFSClassLoaderFactory b = new VFSClassLoaderFactory("b");
+         b.getRoots().add(getRoot(B.class));
+         b.setIncludedPackages(B.class.getPackage().getName());
+         b.getCapabilities().addCapability(factory.createModule("b"));
+         b.getCapabilities().addCapability(factory.createPackage(B.class.getPackage().getName()));
+         b.getRequirements().addRequirement(factory.createReExportPackage(A.class.getPackage().getName()));
+         KernelDeployment depB = install(b);
+         try
+         {
+            assertLoadClass(A.class, clA);
+            assertLoadClassFail(B.class, clA);
+            assertLoadClassFail(C.class, clA);
+            ClassLoader clB = assertClassLoader(b);
+            assertLoadClass(A.class, clB, clA);
+            assertLoadClass(B.class, clB);
+            assertLoadClassFail(C.class, clB);
+
+            VFSClassLoaderFactory c = new VFSClassLoaderFactory("c");
+            c.getRoots().add(getRoot(C.class));
+            c.setIncludedPackages(C.class.getPackage().getName());
+            c.getRequirements().addRequirement(factory.createRequireModule("b"));
+            KernelDeployment depC = install(c);
+            try
+            {
+               assertLoadClass(A.class, clA);
+               assertLoadClassFail(B.class, clA);
+               assertLoadClassFail(C.class, clA);
+               assertLoadClass(A.class, clB, clA);
+               assertLoadClass(B.class, clB);
+               assertLoadClassFail(C.class, clB);
+               ClassLoader clC = assertClassLoader(c);
+               assertLoadClass(A.class, clC, clA);
+               assertLoadClass(B.class, clC, clB);
+               assertLoadClass(C.class, clC);
+            }
+            finally
+            {
+               undeploy(depC);
+            }
+            assertNoClassLoader(c);
+            assertLoadClass(A.class, clA);
+            assertLoadClassFail(B.class, clA);
+            assertLoadClassFail(C.class, clA);
+            assertLoadClass(A.class, clB, clA);
+            assertLoadClass(B.class, clB);
+            assertLoadClassFail(C.class, clB);
+         }
+         finally
+         {
+            undeploy(depB);
+         }
+         assertNoClassLoader(b);
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+         assertLoadClassFail(C.class, clA);
+      }
+      finally
+      {
+         undeploy(depA);
+      }
+      assertNoClassLoader(a);
+   }
+   
+   public void testNoReExport() throws Exception
+   {
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+
+      VFSClassLoaderFactory a = new VFSClassLoaderFactory("a");
+      a.getRoots().add(getRoot(A.class));
+      a.setIncludedPackages(A.class.getPackage().getName());
+      a.getCapabilities().addCapability(factory.createModule("a"));
+      a.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      KernelDeployment depA = install(a);
+      try
+      {
+         ClassLoader clA = assertClassLoader(a);
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+         assertLoadClassFail(C.class, clA);
+
+         VFSClassLoaderFactory b = new VFSClassLoaderFactory("b");
+         b.getRoots().add(getRoot(B.class));
+         b.setIncludedPackages(B.class.getPackage().getName());
+         b.getCapabilities().addCapability(factory.createModule("b"));
+         b.getCapabilities().addCapability(factory.createPackage(B.class.getPackage().getName()));
+         b.getRequirements().addRequirement(factory.createReExportModule("a"));
+         KernelDeployment depB = install(b);
+         try
+         {
+            assertLoadClass(A.class, clA);
+            assertLoadClassFail(B.class, clA);
+            assertLoadClassFail(C.class, clA);
+            ClassLoader clB = assertClassLoader(b);
+            assertLoadClass(A.class, clB, clA);
+            assertLoadClass(B.class, clB);
+            assertLoadClassFail(C.class, clB);
+
+            VFSClassLoaderFactory c = new VFSClassLoaderFactory("c");
+            c.getRoots().add(getRoot(C.class));
+            c.setIncludedPackages(C.class.getPackage().getName());
+            c.getRequirements().addRequirement(factory.createRequirePackage(B.class.getPackage().getName()));
+            KernelDeployment depC = install(c);
+            try
+            {
+               assertLoadClass(A.class, clA);
+               assertLoadClassFail(B.class, clA);
+               assertLoadClassFail(C.class, clA);
+               assertLoadClass(A.class, clB, clA);
+               assertLoadClass(B.class, clB);
+               assertLoadClassFail(C.class, clB);
+               ClassLoader clC = assertClassLoader(c);
+               assertLoadClassFail(A.class, clC);
+               assertLoadClass(B.class, clC, clB);
+               assertLoadClass(C.class, clC);
+            }
+            finally
+            {
+               undeploy(depC);
+            }
+            assertNoClassLoader(c);
+            assertLoadClass(A.class, clA);
+            assertLoadClassFail(B.class, clA);
+            assertLoadClassFail(C.class, clA);
+            assertLoadClass(A.class, clB, clA);
+            assertLoadClass(B.class, clB);
+            assertLoadClassFail(C.class, clB);
+         }
+         finally
+         {
+            undeploy(depB);
+         }
+         assertNoClassLoader(b);
+         assertLoadClass(A.class, clA);
+         assertLoadClassFail(B.class, clA);
+         assertLoadClassFail(C.class, clA);
+      }
+      finally
+      {
+         undeploy(depA);
+      }
+      assertNoClassLoader(a);
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/UsesPackageUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/UsesPackageUnitTestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/UsesPackageUnitTestCase.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,113 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classloading.vfs.metadata.test;
+
+import junit.framework.Test;
+
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory;
+import org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory;
+import org.jboss.kernel.spi.deployment.KernelDeployment;
+import org.jboss.test.classloading.vfs.metadata.VFSClassLoadingMicrocontainerTest;
+import org.jboss.test.classloading.vfs.metadata.support.a.A;
+
+/**
+ * ReExportPackageUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class UsesPackageUnitTestCase extends VFSClassLoadingMicrocontainerTest
+{
+   public static Test suite()
+   {
+      return suite(UsesPackageUnitTestCase.class);
+   }
+
+   public UsesPackageUnitTestCase(String name)
+   {
+      super(name);
+   }
+   
+   public void testUsesImport() throws Exception
+   {
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+
+      VFSClassLoaderFactory a1 = new VFSClassLoaderFactory("a1");
+      a1.getRoots().add(getRoot(A.class));
+      a1.setIncludedPackages(A.class.getPackage().getName());
+      a1.getCapabilities().addCapability(factory.createModule("a"));
+      a1.getCapabilities().addCapability(factory.createPackage(A.class.getPackage().getName()));
+      KernelDeployment depA1 = install(a1);
+      try
+      {
+         ClassLoader clA1 = assertClassLoader(a1);
+         assertLoadClass(A.class, clA1);
+
+         VFSClassLoaderFactory a2 = new VFSClassLoaderFactory("a2");
+         a2.getRoots().add(getRoot(A.class));
+         a2.setIncludedPackages(A.class.getPackage().getName());
+         a2.getCapabilities().addCapability(factory.createModule("a2"));
+         a2.getRequirements().addRequirement(factory.createUsesPackage(A.class.getPackage().getName()));
+         KernelDeployment depA2 = install(a2);
+         try
+         {
+            assertLoadClass(A.class, clA1);
+            ClassLoader clA2 = assertClassLoader(a2);
+            assertLoadClass(A.class, clA2, clA1);
+         }
+         finally
+         {
+            undeploy(depA2);
+         }
+         assertNoClassLoader(a2);
+         assertLoadClass(A.class, clA1);
+      }
+      finally
+      {
+         undeploy(depA1);
+      }
+      assertNoClassLoader(a1);
+   }
+   
+   public void testUsesNoImport() throws Exception
+   {
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+
+      VFSClassLoaderFactory a1 = new VFSClassLoaderFactory("a1");
+      a1.getRoots().add(getRoot(A.class));
+      a1.setIncludedPackages(A.class.getPackage().getName());
+      a1.getCapabilities().addCapability(factory.createModule("a"));
+      a1.getRequirements().addRequirement(factory.createUsesPackage(A.class.getPackage().getName()));
+      KernelDeployment depA1 = install(a1);
+      try
+      {
+         validate();
+         ClassLoader clA1 = assertClassLoader(a1);
+         assertLoadClass(A.class, clA1);
+      }
+      finally
+      {
+         undeploy(depA1);
+      }
+      assertNoClassLoader(a1);
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/VFSClassLoaderFactoryUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/VFSClassLoaderFactoryUnitTestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/VFSClassLoaderFactoryUnitTestCase.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,211 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classloading.vfs.metadata.test;
+
+import junit.framework.Test;
+
+import org.jboss.kernel.spi.deployment.KernelDeployment;
+import org.jboss.test.classloading.vfs.metadata.VFSClassLoadingMicrocontainerTest;
+
+/**
+ * VFSClassLoaderFactoryUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class VFSClassLoaderFactoryUnitTestCase extends VFSClassLoadingMicrocontainerTest
+{
+   public static Test suite()
+   {
+      return suite(VFSClassLoaderFactoryUnitTestCase.class);
+   }
+
+   public VFSClassLoaderFactoryUnitTestCase(String name)
+   {
+      super(name);
+   }
+
+   public void testSmoke() throws Exception
+   {
+      KernelDeployment deployment = deploy("SmokeTest.xml");
+      try
+      {
+         validate();
+         assertClassLoader("test", "0.0.0");
+      }
+      finally
+      {
+         undeploy(deployment);
+      }
+      validate();
+      assertNoClassLoader("test", "0.0.0");
+   }
+   
+   public void testADependsUponBCorrectWay() throws Exception
+   {
+      KernelDeployment a = deploy("A1.0.0.xml");
+      try
+      {
+         validate();
+         assertClassLoader("a", "1.0.0");
+         
+         KernelDeployment b = deploy("B1.0.0.xml");
+         try
+         {
+            validate();
+            assertClassLoader("a", "1.0.0");
+            assertClassLoader("b", "1.0.0");
+         }
+         finally
+         {
+            undeploy(b);
+         }
+         validate();
+         assertNoClassLoader("b", "1.0.0");
+         assertClassLoader("a", "1.0.0");
+      }
+      finally
+      {
+         undeploy(a);
+      }
+      validate();
+      assertNoClassLoader("a", "1.0.0");
+   }
+   
+   public void testADependsUponBWrongWay() throws Exception
+   {
+      KernelDeployment b = deploy("B1.0.0.xml");
+      try
+      {
+         assertNoClassLoader("b", "1.0.0");
+         
+         KernelDeployment a = deploy("A1.0.0.xml");
+         try
+         {
+            validate();
+            assertClassLoader("a", "1.0.0");
+            assertClassLoader("b", "1.0.0");
+         }
+         finally
+         {
+            undeploy(a);
+         }
+         assertNoClassLoader("a", "1.0.0");
+         assertNoClassLoader("b", "1.0.0");
+      }
+      finally
+      {
+         undeploy(b);
+      }
+      validate();
+   }
+   
+   public void testADependsUponBRedeployA() throws Exception
+   {
+      KernelDeployment a = deploy("A1.0.0.xml");
+      try
+      {
+         validate();
+         assertClassLoader("a", "1.0.0");
+         
+         KernelDeployment b = deploy("B1.0.0.xml");
+         try
+         {
+            validate();
+            assertClassLoader("a", "1.0.0");
+            assertClassLoader("b", "1.0.0");
+            
+            undeploy(a);
+            try
+            {
+               assertNoClassLoader("a", "1.0.0");
+               assertNoClassLoader("b", "1.0.0");
+            }
+            finally
+            {
+              a = deploy("A1.0.0.xml");
+            }
+            validate();
+            assertClassLoader("a", "1.0.0");
+            assertClassLoader("b", "1.0.0");
+         }
+         finally
+         {
+            undeploy(b);
+         }
+         validate();
+         assertNoClassLoader("b", "1.0.0");
+         assertClassLoader("a", "1.0.0");
+      }
+      finally
+      {
+         undeploy(a);
+      }
+      validate();
+      assertNoClassLoader("a", "1.0.0");
+   }
+   
+   public void testADependsUponBRedeployB() throws Exception
+   {
+      KernelDeployment a = deploy("A1.0.0.xml");
+      try
+      {
+         validate();
+         assertClassLoader("a", "1.0.0");
+         
+         KernelDeployment b = deploy("B1.0.0.xml");
+         try
+         {
+            validate();
+            assertClassLoader("a", "1.0.0");
+            assertClassLoader("b", "1.0.0");
+            
+            undeploy(b);
+            try
+            {
+               assertClassLoader("a", "1.0.0");
+               assertNoClassLoader("b", "1.0.0");
+            }
+            finally
+            {
+              b = deploy("B1.0.0.xml");
+            }
+            validate();
+            assertClassLoader("a", "1.0.0");
+            assertClassLoader("b", "1.0.0");
+         }
+         finally
+         {
+            undeploy(b);
+         }
+         validate();
+         assertNoClassLoader("b", "1.0.0");
+         assertClassLoader("a", "1.0.0");
+      }
+      finally
+      {
+         undeploy(a);
+      }
+      validate();
+      assertNoClassLoader("a", "1.0.0");
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/AbstractJBossXBTest.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/AbstractJBossXBTest.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/AbstractJBossXBTest.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,153 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.classloading.vfs.metadata.xml;
+
+import java.net.URL;
+
+import org.jboss.test.AbstractTestCaseWithSetup;
+import org.jboss.test.AbstractTestDelegate;
+import org.jboss.util.UnreachableStatementException;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
+import org.jboss.xb.builder.JBossXBBuilder;
+
+/**
+ * AbstractBuilderTest.
+ *
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class AbstractJBossXBTest extends AbstractTestCaseWithSetup
+{
+   public AbstractJBossXBTest(String name)
+   {
+      super(name);
+   }
+
+   /**
+    * Setup the test delegate
+    *
+    * @param clazz the class
+    * @return the delegate
+    * @throws Exception for any error
+    */
+   public static AbstractTestDelegate getDelegate(Class<?> clazz) throws Exception
+   {
+      return new JBossXBTestDelegate(clazz);
+   }
+
+   protected JBossXBTestDelegate getJBossXBDelegate()
+   {
+      return (JBossXBTestDelegate) getDelegate();
+   }
+
+   @Override
+   protected void setUp() throws Exception
+   {
+      super.setUp();
+      configureLogging();
+   }
+
+   protected void tearDown() throws Exception
+   {
+      super.tearDown();
+   }
+
+   protected <T, U> T unmarshalObject(Class<T> expected, Class<U> reference, Class<?>... others) throws Exception
+   {
+      TestSchemaResolver resolver = new TestSchemaResolver();
+
+      SchemaBinding schemaBinding = JBossXBBuilder.build(reference);
+      resolver.addSchemaBinding(schemaBinding);
+      if (others != null)
+      {
+         for (Class<?> other : others)
+         {
+            SchemaBinding otherBinding = JBossXBBuilder.build(other);
+            resolver.addSchemaBinding(otherBinding);
+         }
+      }
+
+      String testXml = findTestXml();
+      Object o = unmarshal(testXml, schemaBinding);
+      assertNotNull(o);
+      getLog().debug("Unmarshalled " + o + " of type " + o.getClass().getName());
+      try
+      {
+         return expected.cast(o);
+      }
+      catch (ClassCastException e)
+      {
+         fail("Expected " + expected.getName() + " got " + o.getClass().getName());
+         throw new UnreachableStatementException();
+      }
+   }
+
+   /**
+    * Unmarshal some xml
+    *
+    * @param name the name
+    * @param schema the schema
+    * @return the unmarshalled object
+    * @throws Exception for any error
+    */
+   protected Object unmarshal(String name, SchemaBinding schema) throws Exception
+   {
+      String url = findXML(name);
+      return getJBossXBDelegate().unmarshal(url, schema);
+   }
+
+   protected <T, U> T unmarshalObject(Class<T> expected, Class<U> reference) throws Exception
+   {
+      return unmarshalObject(expected, reference, null);
+   }
+
+   protected <T> T unmarshalObject(Class<T> expected) throws Exception
+   {
+      return unmarshalObject(expected, expected, null);
+   }
+
+   protected String findTestXml()
+   {
+      return getName().substring(4) + ".xml";
+   }
+
+   /**
+    * Find the xml
+    *
+    * @param name the name
+    * @return the url of the xml
+    */
+   protected String findXML(String name)
+   {
+      URL url = getResource(name);
+      if (url == null)
+         fail(name + " not found");
+      return url.toString();
+   }
+
+   @Override
+   public void configureLogging()
+   {
+      //enableTrace("org.jboss.xb");
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/JBossXBTestDelegate.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/JBossXBTestDelegate.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/JBossXBTestDelegate.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,171 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.classloading.vfs.metadata.xml;
+
+import java.lang.reflect.Method;
+import java.net.URL;
+
+import org.jboss.net.protocol.URLStreamHandlerFactory;
+import org.jboss.test.AbstractTestDelegate;
+import org.jboss.xb.binding.Unmarshaller;
+import org.jboss.xb.binding.UnmarshallerFactory;
+import org.jboss.xb.binding.sunday.unmarshalling.DefaultSchemaResolver;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBindingResolver;
+import org.jboss.xb.binding.sunday.unmarshalling.XsdBinder;
+
+/**
+ * JBossXBTestDelegate.
+ *
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 40492 $
+ */
+public class JBossXBTestDelegate extends AbstractTestDelegate
+{
+   /** Whether initialization has been done */
+   private static boolean done = false;
+
+   /** The unmarshaller factory */
+   protected UnmarshallerFactory unmarshallerFactory;
+
+   /** The resolver */
+   protected SchemaBindingResolver defaultResolver;
+
+   /**
+    * Initialize
+    */
+   public synchronized static void init()
+   {
+      if (done)
+         return;
+      done = true;
+      URL.setURLStreamHandlerFactory(new URLStreamHandlerFactory());
+      URLStreamHandlerFactory.preload();
+      String handlerPkgs = System.getProperty("java.protocol.handler.pkgs");
+      if (handlerPkgs != null)
+         handlerPkgs += "|org.jboss.net.protocol";
+      else
+         handlerPkgs = "org.jboss.net.protocol";
+      System.setProperty("java.protocol.handler.pkgs", handlerPkgs);
+   }
+
+   /**
+    * Create a new JBossXBTestDelegate.
+    *
+    * @param clazz the test class
+    */
+   public JBossXBTestDelegate(Class<?> clazz)
+   {
+      super(clazz);
+   }
+
+   @Override
+   public void setUp() throws Exception
+   {
+      super.setUp();
+      init();
+      unmarshallerFactory = UnmarshallerFactory.newInstance();
+      initResolver();
+   }
+
+   protected void initResolver() throws Exception
+   {
+      try
+      {
+         Method method = clazz.getMethod("initResolver", null);
+         defaultResolver = (SchemaBindingResolver) method.invoke(null, null);
+      }
+      catch (NoSuchMethodException ignored)
+      {
+         defaultResolver = new DefaultSchemaResolver();
+      }
+   }
+
+   /**
+    * Unmarshal an object
+    *
+    * @param url the url
+    * @param resolver the resolver
+    * @return the object
+    * @throws Exception for any error
+    */
+   public Object unmarshal(String url, SchemaBindingResolver resolver) throws Exception
+   {
+      if (resolver == null)
+         resolver = defaultResolver;
+
+      long start = System.currentTimeMillis();
+      Unmarshaller unmarshaller = unmarshallerFactory.newUnmarshaller();
+      log.debug("Initialized parsing in " + (System.currentTimeMillis() - start) + "ms");
+      try
+      {
+         Object result = unmarshaller.unmarshal(url, resolver);
+         log.debug("Total parse for " + url + " took " + (System.currentTimeMillis() - start) + "ms");
+         return result;
+      }
+      catch (Exception e)
+      {
+         log.debug("Error during parsing: " + url, e);
+         throw e;
+      }
+   }
+
+   /**
+    * Unmarshal an object
+    *
+    * @param url the url
+    * @param schema the schema
+    * @return the object
+    * @throws Exception for any error
+    */
+   public Object unmarshal(String url, SchemaBinding schema) throws Exception
+   {
+      long start = System.currentTimeMillis();
+      Unmarshaller unmarshaller = unmarshallerFactory.newUnmarshaller();
+      log.debug("Initialized parsing in " + (System.currentTimeMillis() - start) + "ms");
+      try
+      {
+         Object result = unmarshaller.unmarshal(url, schema);
+         log.debug("Total parse for " + url + " took " + (System.currentTimeMillis() - start) + "ms");
+         return result;
+      }
+      catch (Exception e)
+      {
+         log.debug("Error during parsing: " + url, e);
+         throw e;
+      }
+   }
+
+   /**
+    * Bind a schema
+    *
+    * @param url the url
+    * @param resolver the resolver
+    * @return the object
+    * @throws Exception for any error
+    */
+   public SchemaBinding bind(String url, SchemaBindingResolver resolver) throws Exception
+   {
+      return XsdBinder.bind(url, resolver);
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/SchemaPrinter.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/SchemaPrinter.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/SchemaPrinter.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,276 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.classloading.vfs.metadata.xml;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import javax.xml.XMLConstants;
+
+import org.jboss.xb.binding.sunday.unmarshalling.AllBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.AttributeBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ChoiceBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ElementBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ModelGroupBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ParticleBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.SequenceBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.TermBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.TypeBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.WildcardBinding;
+
+/**
+ * SchemaPrinter.
+ *
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class SchemaPrinter
+{
+   @SuppressWarnings("unchecked")
+   public static String printSchema(SchemaBinding schemaBinding)
+   {
+      String nsURI = (String) schemaBinding.getNamespaces().iterator().next();
+      StringBuilder builder = new StringBuilder();
+      builder.append("<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"\n");
+      if (XMLConstants.NULL_NS_URI.equals(nsURI) == false)
+      {
+         builder.append("            targetNamespace=\"").append(nsURI).append("\"\n");
+         builder.append("            xmlns=\"").append(nsURI).append("\"\n");
+      }
+      builder.append(">\n");
+      int pad=3;
+      Iterator<ParticleBinding> elements = schemaBinding.getElementParticles();
+      while (elements != null && elements.hasNext())
+         printElement(builder, pad, elements.next());
+      Iterator<TypeBinding> types = schemaBinding.getTypes();
+      while (types != null && types.hasNext())
+         printType(builder, pad, types.next());
+      builder.append("</xsd:schema>");
+      return builder.toString();
+   }
+
+   public static void printElement(StringBuilder builder, int pad, ParticleBinding particle)
+   {
+      ElementBinding element = (ElementBinding) particle.getTerm();
+      pad(builder, pad);
+      builder.append("<element name=\"").append(element.getQName()).append("\"");
+      int minOccurs = particle.getMinOccurs();
+      if (minOccurs != 1)
+         builder.append(" minOccurs=\"").append(minOccurs).append("\"");
+      int maxOccurs = particle.getMaxOccurs();
+      if (maxOccurs != 1)
+      {
+         builder.append(" maxOccurs=\"");
+         if (maxOccurs == -1)
+            builder.append("unbounded");
+         else
+            builder.append(maxOccurs);
+         builder.append("\"");
+      }
+      TypeBinding type = element.getType();
+      if (type != null && type.getQName() != null)
+         builder.append(" type=\"").append(type.getQName()).append("\"");
+      builder.append(">");
+      if (type != null && type.getQName() == null)
+         printAnonymousType(builder, pad + 3, type);
+      pad(builder, pad);
+      builder.append("</element>");
+   }
+
+   public static void printAnonymousType(StringBuilder builder, int pad, TypeBinding type)
+   {
+      pad(builder, pad);
+      builder.append("<complexType>");
+      TypeBinding baseTypeBinding = type.getBaseType();
+      String qName;
+      if (baseTypeBinding != null)
+         qName = baseTypeBinding.getQName().toString();
+      else
+         qName = "xsd:anyType";
+      pad(builder, pad);
+      builder.append("   <restriction base=\"").append(qName).append("\">");
+      printTypeInfo(builder, pad+6, type);
+      pad(builder, pad);
+      builder.append("   </restriction>");
+      pad(builder, pad);
+      builder.append("</complexType>");
+   }
+
+   public static void printType(StringBuilder builder, int pad, TypeBinding type)
+   {
+      if (type.isSimple())
+         printSimpleType(builder, pad, type);
+      else
+         printComplexType(builder, pad, type);
+   }
+
+   public static void printSimpleType(StringBuilder builder, int pad, TypeBinding type)
+   {
+      pad(builder, pad);
+      builder.append("<simpleType name=\"").append(type.getQName()).append("\"");
+      TypeBinding baseTypeBinding = type.getBaseType();
+      String qName = null;
+      if (baseTypeBinding != null)
+         qName = baseTypeBinding.getQName().toString();
+      else
+         qName = "xsd:anySimpleType";
+      builder.append(" base=\"").append(qName).append("\">");
+      printTypeInfo(builder, pad+3, type);
+      pad(builder, pad);
+      builder.append("</simpleType>");
+   }
+
+   public static void printComplexType(StringBuilder builder, int pad, TypeBinding type)
+   {
+      pad(builder, pad);
+      builder.append("<complexType name=\"").append(type.getQName()).append("\"");
+      TypeBinding baseTypeBinding = type.getBaseType();
+      String qName = null;
+      if (baseTypeBinding != null)
+         qName = baseTypeBinding.getQName().toString();
+      else
+         qName = "xsd:anyType";
+      builder.append(" base=\"").append(qName).append("\">");
+      printTypeInfo(builder, pad+3, type);
+      pad(builder, pad);
+      builder.append("</complexType>");
+   }
+
+   @SuppressWarnings("unchecked")
+   public static void printTypeInfo(StringBuilder builder, int pad, TypeBinding type)
+   {
+      ParticleBinding particle = type.getParticle();
+      if (particle != null)
+      {
+         printParticle(builder, pad, particle);
+      }
+
+      Collection<AttributeBinding> attributes = type.getAttributes();
+      if (attributes != null)
+      {
+         for (AttributeBinding attribute : attributes)
+         {
+            printAttribute(builder, pad, attribute);
+         }
+      }
+   }
+
+   public static void printParticle(StringBuilder builder, int pad, ParticleBinding particle)
+   {
+      TermBinding term = particle.getTerm();
+      if (term instanceof ElementBinding)
+         printElement(builder, pad, particle);
+      else if (term instanceof WildcardBinding)
+         printWildcard(builder, pad, particle);
+      else if (term instanceof SequenceBinding)
+         printModel(builder, pad, particle, "sequence");
+      else if (term instanceof AllBinding)
+         printModel(builder, pad, particle, "all");
+      else if (term instanceof ChoiceBinding)
+         printModel(builder, pad, particle, "choice");
+   }
+
+   @SuppressWarnings("unchecked")
+   public static void printModel(StringBuilder builder, int pad, ParticleBinding particle, String prefix)
+   {
+      pad(builder, pad);
+      builder.append("<").append(prefix);
+      int minOccurs = particle.getMinOccurs();
+      if (minOccurs != 1)
+         builder.append(" minOccurs=\"").append(minOccurs).append("\"");
+      int maxOccurs = particle.getMaxOccurs();
+      if (maxOccurs != 1)
+      {
+         builder.append(" maxOccurs=\"");
+         if (maxOccurs == -1)
+            builder.append("unbounded");
+         else
+            builder.append(maxOccurs);
+         builder.append("\"");
+      }
+      builder.append(">");
+      ModelGroupBinding model = (ModelGroupBinding) particle.getTerm();
+      Collection<ParticleBinding> particles = model.getParticles();
+      boolean newLine = true;
+      if (particles != null)
+      {
+         for (ParticleBinding component : particles)
+            printParticle(builder, pad+3, component);
+      }
+      else
+      {
+         newLine = false;
+      }
+      pad(builder, pad, newLine);
+      builder.append("</").append(prefix).append(">");
+   }
+
+   public static void printWildcard(StringBuilder builder, int pad, ParticleBinding particle)
+   {
+      pad(builder, pad);
+      builder.append("<any");
+      int minOccurs = particle.getMinOccurs();
+      if (minOccurs != 1)
+         builder.append(" minOccurs=\"").append(minOccurs).append("\"");
+      int maxOccurs = particle.getMaxOccurs();
+      if (maxOccurs != 1)
+      {
+         builder.append(" maxOccurs=\"");
+         if (maxOccurs == -1)
+            builder.append("unbounded");
+         else
+            builder.append(maxOccurs);
+         builder.append("\"");
+      }
+      builder.append("/>");
+   }
+
+   public static void printAttribute(StringBuilder builder, int pad, AttributeBinding attribute)
+   {
+      pad(builder, pad);
+      TypeBinding typeBinding = attribute.getType();
+      String qName = null;
+      if (typeBinding != null && typeBinding.getQName() != null)
+         qName = typeBinding.getQName().toString();
+      else
+         qName = "CDATA";
+      builder.append("<attribute name=\"").append(attribute.getQName().getLocalPart()).append("\"");
+      builder.append(" type=\"").append(qName).append("\"");
+      if (attribute.getRequired() == false)
+         builder.append(" optional=\"true\"/>");
+   }
+
+   public static void pad(StringBuilder builder, int pad)
+   {
+      pad(builder, pad, true);
+   }
+
+   public static void pad(StringBuilder builder, int pad, boolean newLine)
+   {
+      if (newLine)
+         builder.append("\n");
+      for (int i = 0; i < pad; ++ i)
+         builder.append(' ');
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/TestSchemaResolver.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/TestSchemaResolver.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/TestSchemaResolver.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,78 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.classloading.vfs.metadata.xml;
+
+import java.util.HashMap;
+
+import org.jboss.logging.Logger;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBindingResolver;
+import org.w3c.dom.ls.LSInput;
+
+/**
+ * TestSchemaResolver.
+ *
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class TestSchemaResolver implements SchemaBindingResolver
+{
+   private static final Logger log = Logger.getLogger(TestSchemaResolver.class);
+
+   private HashMap<String, SchemaBinding> bindings = new HashMap<String, SchemaBinding>();
+
+   public String getBaseURI()
+   {
+      return null;
+   }
+
+   public void addSchemaBinding(SchemaBinding schemaBinding)
+   {
+      schemaBinding.setSchemaResolver(this);
+      String nsURI = (String) schemaBinding.getNamespaces().iterator().next();
+      bindings.put(nsURI, schemaBinding);
+      if (log.isTraceEnabled())
+      {
+         String schema = SchemaPrinter.printSchema(schemaBinding);
+         log.trace("Bound: " + nsURI + "\n" + schema);
+      }
+   }
+
+   public SchemaBinding resolve(String nsUri, String baseURI, String schemaLocation)
+   {
+      SchemaBinding result = bindings.get(nsUri);
+      if (result == null)
+         throw new RuntimeException("Schema not bound: " + nsUri + " available: " + bindings.keySet());
+      return result;
+   }
+
+   public LSInput resolveAsLSInput(String nsUri, String baseUri, String schemaLocation)
+   {
+      throw new UnsupportedOperationException();
+   }
+
+   public void setBaseURI(String baseURI)
+   {
+      throw new org.jboss.util.NotImplementedException("setBaseURI");
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/support/TestCapability.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/support/TestCapability.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/support/TestCapability.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,51 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2007, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.classloading.vfs.metadata.xml.support;
+
+import javax.xml.bind.annotation.XmlNsForm;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.classloading.spi.metadata.Requirement;
+import org.jboss.classloading.spi.metadata.helpers.AbstractCapability;
+import org.jboss.xb.annotations.JBossXmlSchema;
+
+ at JBossXmlSchema(namespace="urn:jboss:test:classloader:capability:1.0", elementFormDefault=XmlNsForm.QUALIFIED)
+ at XmlRootElement(name="test")
+public class TestCapability extends AbstractCapability
+{
+   private static final long serialVersionUID = -1L;
+
+   public TestCapability()
+   {
+   }
+   
+   public TestCapability(String name, Object version)
+   {
+      super(name, version);
+   }
+   
+   public boolean resolves(Module module, Requirement requirement)
+   {
+      return false;
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/support/TestRequirement.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/support/TestRequirement.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/support/TestRequirement.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,45 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2007, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.classloading.vfs.metadata.xml.support;
+
+import javax.xml.bind.annotation.XmlNsForm;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.jboss.classloading.spi.metadata.helpers.AbstractRequirement;
+import org.jboss.classloading.spi.version.VersionRange;
+import org.jboss.xb.annotations.JBossXmlSchema;
+
+ at JBossXmlSchema(namespace="urn:jboss:test:classloader:requirement:1.0", elementFormDefault=XmlNsForm.QUALIFIED)
+ at XmlRootElement(name="test")
+public class TestRequirement extends AbstractRequirement
+{
+   private static final long serialVersionUID = -1L;
+
+   public TestRequirement()
+   {
+   }
+   
+   public TestRequirement(String name, VersionRange range)
+   {
+      super(name, range);
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/support/package-info.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/support/package-info.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/support/package-info.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,32 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+ at JBossXmlAdaptedTypes
+({
+   @JBossXmlAdaptedType(type=Version.class, valueAdapter=VersionValueAdapter.class)
+})
+package org.jboss.test.classloading.vfs.metadata.xml.support;
+
+import org.jboss.classloading.plugins.metadata.VersionValueAdapter;
+import org.jboss.classloading.spi.version.Version;
+import org.jboss.xb.annotations.JBossXmlAdaptedType;
+import org.jboss.xb.annotations.JBossXmlAdaptedTypes;
+

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/test/VFSClassLoaderFactoryXMLUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/test/VFSClassLoaderFactoryXMLUnitTestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/xml/test/VFSClassLoaderFactoryXMLUnitTestCase.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,347 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classloading.vfs.metadata.xml.test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import junit.framework.Test;
+
+import org.jboss.classloading.spi.metadata.Capability;
+import org.jboss.classloading.spi.metadata.ClassLoadingMetaDataFactory;
+import org.jboss.classloading.spi.metadata.ExportAll;
+import org.jboss.classloading.spi.metadata.Requirement;
+import org.jboss.classloading.spi.version.Version;
+import org.jboss.classloading.spi.version.VersionRange;
+import org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory;
+import org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory10;
+import org.jboss.test.classloading.vfs.metadata.xml.AbstractJBossXBTest;
+import org.jboss.test.classloading.vfs.metadata.xml.support.TestCapability;
+import org.jboss.test.classloading.vfs.metadata.xml.support.TestRequirement;
+
+/**
+ * VFSClassLoaderFactoryXMLUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class VFSClassLoaderFactoryXMLUnitTestCase extends AbstractJBossXBTest
+{
+   public static Test suite()
+   {
+      return suite(VFSClassLoaderFactoryXMLUnitTestCase.class);
+   }
+
+   public VFSClassLoaderFactoryXMLUnitTestCase(String name)
+   {
+      super(name);
+   }
+
+   public void testModuleName() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      assertEquals("test", result.getName());
+      assertEquals(Version.DEFAULT_VERSION, result.getVersion());
+      assertNull(result.getContextName());
+      assertNull(result.getDomain());
+      assertNull(result.getParentDomain());
+      assertNull(result.getExportAll());
+      assertNull(result.getIncludedPackages());
+      assertNull(result.getExcludedPackages());
+      assertNull(result.getExcludedExportPackages());
+      assertFalse(result.isImportAll());
+      assertTrue(result.isJ2seClassLoadingCompliance());
+      assertTrue(result.isCacheable());
+      assertTrue(result.isBlackListable());
+      assertEmpty(result.getRoots());
+      assertEquals(VFSClassLoaderFactory.DEFAULT_CLASSLOADER_SYSTEM_NAME, result.getClassLoaderSystemName());
+      assertNull(result.getCapabilities().getCapabilities());
+      assertNull(result.getRequirements().getRequirements());
+   }
+
+   public void testModuleVersion() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      assertEquals(Version.parseVersion("1.0.0"), result.getVersion());
+   }
+
+   public void testModuleContext() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      assertEquals("Context", result.getContextName());
+   }
+
+   public void testModuleDomain() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      assertEquals("testDomain", result.getDomain());
+   }
+
+   public void testModuleParentDomain() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      assertEquals("testParentDomain", result.getParentDomain());
+   }
+
+   public void testModuleExportAll() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      assertEquals(ExportAll.ALL, result.getExportAll());
+   }
+
+   public void testModuleIncluded() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      assertEquals("Included", result.getIncludedPackages());
+   }
+
+   public void testModuleExcluded() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      assertEquals("Excluded", result.getExcludedPackages());
+   }
+
+   public void testModuleExcludedExport() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      assertEquals("ExcludedExport", result.getExcludedExportPackages());
+   }
+
+   public void testModuleImportAll() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      assertTrue(result.isImportAll());
+   }
+
+   public void testModuleJ2seClassLoadingCompliance() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      assertFalse(result.isJ2seClassLoadingCompliance());
+   }
+
+   public void testModuleCache() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      assertFalse(result.isCacheable());
+   }
+
+   public void testModuleBlackList() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      assertFalse(result.isBlackListable());
+   }
+
+   public void testModuleSystem() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      assertEquals("System", result.getClassLoaderSystemName());
+   }
+
+   public void testModuleRoots() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      assertEquals(Arrays.asList(new String[] { "root1", "root2", "root3" }), result.getRoots());
+   }
+
+   public void testExportOneModuleNoVersion() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertCapabilities(result, factory.createModule("export1"));
+   }
+
+   public void testExportOneModuleVersioned() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertCapabilities(result, factory.createModule("export1", "1.0.0"));
+   }
+
+   public void testExportThreeModules() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertCapabilities(result, factory.createModule("export1", "1.0.0"), 
+                                 factory.createModule("export2", "2.0.0"), 
+                                 factory.createModule("export3", "3.0.0"));
+   }
+
+   public void testExportOnePackageNoVersion() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertCapabilities(result, factory.createPackage("export1"));
+   }
+
+   public void testExportOnePackageVersioned() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertCapabilities(result, factory.createPackage("export1", "1.0.0"));
+   }
+
+   public void testExportThreePackages() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertCapabilities(result, factory.createPackage("export1", "1.0.0"), 
+                                 factory.createPackage("export2", "2.0.0"), 
+                                 factory.createPackage("export3", "3.0.0"));
+   }
+
+   public void testImportOneModuleNoVersion() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertRequirements(result, factory.createRequireModule("export1"));
+   }
+
+   public void testImportOneModuleVersioned() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertRequirements(result, factory.createRequireModule("export1", new VersionRange("1.0.0", "2.0.0")));
+   }
+
+   public void testImportThreeModules() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertRequirements(result, factory.createRequireModule("export1", new VersionRange("1.0.0", "1.1.0")), 
+                                 factory.createRequireModule("export2", new VersionRange("2.0.0", "2.1.0")), 
+                                 factory.createRequireModule("export3", new VersionRange("3.0.0", "3.1.0")));
+   }
+
+   public void testImportOnePackageNoVersion() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertRequirements(result, factory.createRequirePackage("export1"));
+   }
+
+   public void testImportOnePackageVersioned() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertRequirements(result, factory.createRequirePackage("export1", new VersionRange("1.0.0", "2.0.0")));
+   }
+
+   public void testImportThreePackages() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertRequirements(result, factory.createRequirePackage("export1", new VersionRange("1.0.0", "1.1.0")), 
+                                 factory.createRequirePackage("export2", new VersionRange("2.0.0", "2.1.0")), 
+                                 factory.createRequirePackage("export3", new VersionRange("3.0.0", "3.1.0")));
+   }
+
+   public void testImportVersionRange() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertRequirements(result, factory.createRequireModule("export1"), 
+                                 factory.createRequireModule("export2", new VersionRange("1.0.0")), 
+                                 factory.createRequireModule("export3", new VersionRange("0.0.0", "1.0.0")),
+                                 factory.createRequireModule("export4", new VersionRange("1.0.0", "2.0.0")),
+                                 factory.createRequireModule("export5", new VersionRange("1.0.0", false, "2.0.0", false)),
+                                 factory.createRequireModule("export6", new VersionRange("1.0.0", false, "2.0.0", true)),
+                                 factory.createRequireModule("export7", new VersionRange("1.0.0", true, "2.0.0", false)),
+                                 factory.createRequireModule("export8", new VersionRange("1.0.0", true, "2.0.0", true)));
+   }
+
+   public void testExportImportMixed() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal();
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertCapabilities(result, factory.createModule("test2", "2.0.0"), 
+                                 factory.createPackage("test2", "2.0.0"), 
+                                 factory.createModule("test1", "1.0.0"),
+                                 factory.createPackage("test1", "1.0.0"));
+      assertRequirements(result, factory.createRequireModule("test2", new VersionRange("2.0.0")), 
+                                 factory.createRequirePackage("test2", new VersionRange("2.0.0")), 
+                                 factory.createRequireModule("test1", new VersionRange("1.0.0")),
+                                 factory.createRequirePackage("test1", new VersionRange("1.0.0")));
+   }
+
+   public void testWildcardCapability() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal(TestCapability.class);
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertCapabilities(result, factory.createModule("test1", "1.0.0"), 
+                                 factory.createPackage("test1", "1.0.0"),
+                                 new TestCapability("test", "1.0.0"));
+   }
+
+   public void testWildcardRequirement() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal(TestRequirement.class);
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertRequirements(result, factory.createRequireModule("test1", new VersionRange("1.0.0")), 
+                                 factory.createRequirePackage("test1", new VersionRange("1.0.0")),
+                                 new TestRequirement("test", new VersionRange("1.0.0")));
+   }
+
+   public void testOptionalRequirement() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal(TestRequirement.class);
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertRequirements(result, factory.createRequireModule("test1", new VersionRange("1.0.0"), true, false), 
+                                 factory.createRequirePackage("test1", new VersionRange("1.0.0"), true, false));
+   }
+
+   public void testReExportRequirement() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal(TestRequirement.class);
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertRequirements(result, factory.createReExportModule("test1", new VersionRange("1.0.0")), 
+                                 factory.createReExportPackage("test1", new VersionRange("1.0.0")));
+   }
+
+   public void testUsesRequirement() throws Exception
+   {
+      VFSClassLoaderFactory result = unmarshal(TestRequirement.class);
+      ClassLoadingMetaDataFactory factory = ClassLoadingMetaDataFactory.getInstance();
+      assertRequirements(result, factory.createUsesPackage("test1", new VersionRange("1.0.0"))); 
+   }
+ 
+   public void assertCapabilities(VFSClassLoaderFactory metadata, Capability... expected)
+   {
+      List<Capability> temp = new ArrayList<Capability>();
+      for (Capability capability : expected)
+         temp.add(capability);
+      assertEquals(temp, metadata.getCapabilities().getCapabilities());
+   }
+
+   public void assertRequirements(org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory metadata, Requirement... expected)
+   {
+      List<Requirement> temp = new ArrayList<Requirement>();
+      for (Requirement requirement : expected)
+         temp.add(requirement);
+      assertEquals(temp, metadata.getRequirements().getRequirements());
+   }
+   
+   protected VFSClassLoaderFactory unmarshal(Class<?>... extra) throws Exception
+   {
+      return unmarshalObject(VFSClassLoaderFactory10.class, VFSClassLoaderFactory10.class, extra);
+   }
+}

Added: projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/policy/test/ExportAllUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/policy/test/ExportAllUnitTestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/policy/test/ExportAllUnitTestCase.java	2008-02-18 13:35:09 UTC (rev 69880)
@@ -0,0 +1,302 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2007, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.classloading.vfs.policy.test;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.jboss.classloader.plugins.system.DefaultClassLoaderSystem;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloading.spi.metadata.ExportAll;
+import org.jboss.classloading.spi.vfs.policy.VFSClassLoaderPolicy;
+import org.jboss.test.BaseTestCase;
+import org.jboss.virtual.VFS;
+import org.jboss.virtual.VirtualFile;
+
+/**
+ * ExportAllUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class ExportAllUnitTestCase extends BaseTestCase
+{
+   protected void testExportAll(ExportAll exportAll, Map<String, String> expected, String... urls) throws Exception
+   {
+      Set<String> empty = Collections.emptySet();
+      testExportAll(exportAll, expected, empty, urls);
+   }
+
+   protected void testExportAll(ExportAll exportAll, Map<String, String> expected, Set<String> empty, String... urls) throws Exception
+   {
+      testExportAllAbsolute(exportAll, expected, empty, urls);
+      testExportAllFromBase(exportAll, expected, empty, urls);
+   }
+
+   protected void testExportAllCommon(ExportAll exportAll, Map<String, String> expected, Set<String> empty, VirtualFile[] files) throws Exception
+   {
+      VFSClassLoaderPolicy policy = VFSClassLoaderPolicy.createVFSClassLoaderPolicy(files);
+      policy.setExportAll(exportAll);
+      
+      String[] packageNames = policy.getPackageNames();
+      Set<String> actual = makeSet(packageNames);
+      assertEquals(expected.keySet(), actual);
+      
+      ClassLoaderSystem system = new DefaultClassLoaderSystem();
+      ClassLoader classLoader = system.registerClassLoaderPolicy(policy);
+      
+      for (Map.Entry<String, String> entry : expected.entrySet())
+      {
+         String packageName = entry.getKey();
+         String resource = packageName.replace('.', '/') + "/notempty";
+         InputStream is = classLoader.getResourceAsStream(resource);
+         if (empty.contains(packageName))
+            assertNull("Did not expect resource: " + resource, is);
+         else
+         {
+            assertNotNull("Did not find resource: " + resource, is);
+            String contents = getContents(is);
+            assertEquals(entry.getValue(), contents);
+         }
+      }
+   }
+
+   protected void testExportAllFromBase(ExportAll exportAll, Map<String, String> expected, Set<String> empty, String... urls) throws Exception
+   {
+      URL baseURL = getResource("/classloader");
+      assertNotNull(baseURL);
+      VirtualFile base = VFS.getRoot(baseURL);
+      VirtualFile[] files = new VirtualFile[urls.length];
+      for (int i = 0; i < urls.length; ++i)
+         files[i] = base.findChild(urls[i]);
+      
+      testExportAllCommon(exportAll, expected, empty, files);
+   }
+
+   protected void testExportAllAbsolute(ExportAll exportAll, Map<String, String> expected, Set<String> empty, String... urls) throws Exception
+   {
+      VirtualFile[] files = new VirtualFile[urls.length];
+      for (int i = 0; i < urls.length; ++i)
+      {
+         String urlString = "/classloader/" + urls[i];
+         URL url = getResource(urlString);
+         assertNotNull("Expected to find resource: " + urlString, url);
+         files[i]= VFS.getRoot(url);
+      }
+      
+      testExportAllCommon(exportAll, expected, empty, files);
+   }
+   
+   public void testExportAllJar1() throws Exception
+   {
+      Map<String,String> expected = makeSimpleMap("testjar1",
+            "",
+            "package1",
+            "package2", 
+            "package2.subpackage1",
+            "package2.subpackage2",
+            "package2.subpackage3"
+      );
+
+      testExportAll(ExportAll.ALL, expected, "testjar1");
+   }
+   public void testJar1Resources()
+      throws Exception
+   {
+      URL testjar1URL = getResource("/classloader/testjar1");
+      VirtualFile testjar1 = VFS.getRoot(testjar1URL);
+      VFSClassLoaderPolicy policy = VFSClassLoaderPolicy.createVFSClassLoaderPolicy(testjar1);
+      policy.setExportAll(ExportAll.ALL);
+      
+      ClassLoaderSystem system = new DefaultClassLoaderSystem();
+      ClassLoader classLoader = system.registerClassLoaderPolicy(policy);
+      URL notempty = classLoader.getResource("notempty");
+      assertNotNull(notempty);
+   }
+   public void testWar1Resources()
+      throws Exception
+   {
+      URL testwar1URL = getResource("/classloader/testwar1.war");
+      VirtualFile testwar1 = VFS.getRoot(testwar1URL);
+      VFSClassLoaderPolicy policy = VFSClassLoaderPolicy.createVFSClassLoaderPolicy(testwar1);
+      policy.setExportAll(ExportAll.NON_EMPTY);
+      policy.setImportAll(true);
+
+      ClassLoaderSystem system = new DefaultClassLoaderSystem();
+      ClassLoader classLoader = system.registerClassLoaderPolicy(policy);
+      URL resURL = classLoader.getResource("test-resource.txt");
+      assertNull(resURL);
+      resURL = classLoader.getResource("WEB-INF/test-resource.txt");
+      assertNotNull(resURL);
+   }
+
+   public void testExportAllJar1NonEmpty() throws Exception
+   {
+      Map<String, String> expected = makeSimpleMap("testjar1",
+            "",
+            "package1",
+            "package2", 
+            "package2.subpackage1",
+            "package2.subpackage2",
+            "package2.subpackage3"
+      );
+
+      testExportAll(ExportAll.NON_EMPTY, expected, "testjar1");
+   }
+   
+   public void testExportAllJar2() throws Exception
+   {
+      Map<String,String> expected = makeSimpleMap("testjar2",
+            "",
+            "package1"
+      );
+      
+      Set<String> empty = makeSet("");
+
+      testExportAll(ExportAll.ALL, expected, empty, "testjar2");
+   }
+
+   public void testExportAllJar2NonEmpty() throws Exception
+   {
+      Map<String, String> expected = makeSimpleMap("testjar2",
+            "package1"
+      );
+
+      testExportAll(ExportAll.NON_EMPTY, expected, "testjar2");
+   }
+   
+   public void testExportAllJar1And2() throws Exception
+   {
+      Map<String,String> expected = makeSimpleMap("testjar1",
+            "",
+            "package1",
+            "package2", 
+            "package2.subpackage1",
+            "package2.subpackage2",
+            "package2.subpackage3"
+      );
+
+      testExportAll(ExportAll.ALL, expected, "testjar1", "testjar2");
+   }
+
+   public void testExportAllJar1And2NonEmpty() throws Exception
+   {
+      Map<String, String> expected = makeSimpleMap("testjar1",
+            "",
+            "package1",
+            "package2", 
+            "package2.subpackage1",
+            "package2.subpackage2",
+            "package2.subpackage3"
+      );
+
+      testExportAll(ExportAll.NON_EMPTY, expected, "testjar1", "testjar2");
+   }
+   
+   public void testExportAllJar2And1() throws Exception
+   {
+      Map<String,String> expected = makeComplexMap(
+            "", "testjar1",
+            "package1", "testjar2",
+            "package2", "testjar1",
+            "package2.subpackage1", "testjar1",
+            "package2.subpackage2", "testjar1",
+            "package2.subpackage3", "testjar1"
+      );
+
+      testExportAll(ExportAll.ALL, expected, "testjar2", "testjar1");
+   }
+
+   public void testExportAllJar2And1NonEmpty() throws Exception
+   {
+      Map<String, String> expected = makeComplexMap(
+            "", "testjar1",
+            "package1", "testjar2",
+            "package2", "testjar1",
+            "package2.subpackage1", "testjar1",
+            "package2.subpackage2", "testjar1",
+            "package2.subpackage3", "testjar1"
+      );
+
+      testExportAll(ExportAll.NON_EMPTY, expected, "testjar2", "testjar1");
+   }
+
+   protected String getContents(InputStream is) throws Exception
+   {
+      StringBuilder builder = new StringBuilder();
+      InputStreamReader reader = new InputStreamReader(is);
+      int character = reader.read();
+      while (character != -1)
+      {
+         builder.append((char) character);
+         character = reader.read();
+      }
+      return builder.toString();
+   }
+   
+   protected Set<String> makeSet(String... elements)
+   {
+      assertNotNull(elements);
+      Set<String> result = new HashSet<String>();
+      for (String string : elements)
+         result.add(string);
+      return result;
+   }
+   
+   protected Map<String,String> makeSimpleMap(String prefix, String... elements)
+   {
+      assertNotNull(prefix);
+      assertNotNull(elements);
+      Map<String, String> result = new HashMap<String, String>();
+      for (String string : elements)
+         result.put(string, prefix + "." + string);
+      return result;
+   }
+   
+   protected Map<String,String> makeComplexMap(String... elements)
+   {
+      assertNotNull(elements);
+      Map<String, String> result = new HashMap<String, String>();
+      for (int i = 0; i < elements.length; i += 2)
+         result.put(elements[i], elements[i+1] + '.' + elements[i]);
+      return result;
+   }
+
+   public static Test suite()
+   {
+      return new TestSuite(ExportAllUnitTestCase.class);
+   }
+
+   public ExportAllUnitTestCase(String name) throws Throwable
+   {
+      super(name);
+   }
+}




More information about the jboss-cvs-commits mailing list