[seam-commits] Seam SVN: r11967 - in modules/xml/trunk: docs and 46 other directories.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Sat Jan 16 01:25:15 EST 2010


Author: swd847
Date: 2010-01-16 01:25:13 -0500 (Sat, 16 Jan 2010)
New Revision: 11967

Added:
   modules/xml/trunk/docs/
   modules/xml/trunk/docs/pom.xml
   modules/xml/trunk/docs/src/
   modules/xml/trunk/docs/src/main/
   modules/xml/trunk/docs/src/main/docbook/
   modules/xml/trunk/docs/src/main/en-US/
   modules/xml/trunk/docs/src/main/en-US/master.xml
   modules/xml/trunk/docs/src/main/en-US/xml-general.xml
   modules/xml/trunk/src/main/java/
   modules/xml/trunk/src/main/java/org/
   modules/xml/trunk/src/main/java/org/jboss/
   modules/xml/trunk/src/main/java/org/jboss/seam/
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/ClassPathXmlDocumentProvider.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/XmlDocument.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/XmlDocumentProvider.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/BeanResult.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/XmlId.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/XmlResult.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/ArrayFieldSet.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/CollectionFieldSet.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/FieldTypeSetter.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/FieldValueObject.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/InjectionTargetWrapper.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/MapFieldSet.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/SimpleFieldValue.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/AbstractXmlItem.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/AnnotationXmlItem.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ArrayXmlItem.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ClassXmlItem.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/DependsXmlItem.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/EntryXmlItem.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/FieldXmlItem.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/KeyXmlItem.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/MethodXmlItem.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ResultType.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ValueXmlItem.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/VetoXmlItem.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/XmlItem.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/XmlItemType.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/ParserMain.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/SaxNode.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/CompositeNamespaceElementResolver.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/InvalidElementException.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/NamespaceElementResolver.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/NamespaceUtils.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/RootNamespaceElementResolver.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/FileDataReader.java
   modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/XmlObjectConverter.java
   modules/xml/trunk/src/main/resources/META-INF/services/
   modules/xml/trunk/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
   modules/xml/trunk/src/main/resources/META-INF/services/org.jboss.seam.xml.XmlExtension
   modules/xml/trunk/src/test/
   modules/xml/trunk/src/test/java/
   modules/xml/trunk/src/test/java/org/
   modules/xml/trunk/src/test/java/org/jboss/
   modules/xml/trunk/src/test/java/org/jboss/seam/
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/AbstractXMLTest.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/BootstrapTest.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/NamespaceResolverTest.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/TestXmlProvider.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/ArrayFieldValue.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/CollectionFieldValue.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/FieldValueBean.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/FieldValueProducer.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/MapFieldValue.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/SetArrayFieldValueBeanTest.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/SetCollectionFieldValueBeanTest.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/SetFieldValueBeanTest.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/SetMapFieldValueBeanTest.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/OtherQualifier.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/ProducerBean.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/ProducerFieldValueBeanTest.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/ProducerQualifier.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/QualifiedBean1.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/QualifiedBean2.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/QualifierAttributesTest.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/QualifierTestBean.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/RecieverBean.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/interceptor/
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/interceptor/InterceptedBean.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/interceptor/InterceptorBean.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/interceptor/InterceptorBinding.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/interceptor/InterceptorTest.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/DecoratedInterface.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/Decorator1.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/MethodBean.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/MethodTarget.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/MethodTest.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/MethodValueBean.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/QualifiedType.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/Qualifier1.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/Qualifier2.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/QualifierEnum.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/Bean1.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/Bean2.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/Bean3.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/SimpleBeanTest.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/VetoTest.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/VetoedBean.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/stereotype/
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/stereotype/Stereotype1.java
   modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/stereotype/StereotypeTest.java
   modules/xml/trunk/src/test/resources/
   modules/xml/trunk/src/test/resources/META-INF/
   modules/xml/trunk/src/test/resources/META-INF/beans.xml
   modules/xml/trunk/src/test/resources/META-INF/seam-beans.xml
   modules/xml/trunk/src/test/resources/META-INF/services/
   modules/xml/trunk/src/test/resources/META-INF/services/org.jboss.seam.xml.XmlExtension
   modules/xml/trunk/src/test/resources/org/
   modules/xml/trunk/src/test/resources/org/jboss/
   modules/xml/trunk/src/test/resources/org/jboss/seam/
   modules/xml/trunk/src/test/resources/org/jboss/seam/xml/
   modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/
   modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/fieldset/
   modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/fieldset/array-set-field-value-beans.xml
   modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/fieldset/colection-set-field-value-beans.xml
   modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/fieldset/map-set-field-value-beans.xml
   modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/fieldset/set-field-value-beans.xml
   modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/injection/
   modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/injection/producer-field-value-beans.xml
   modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/injection/qualifier-attributes-test-beans.xml
   modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/interceptor/
   modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/interceptor/interceptor-beans.xml
   modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/method/
   modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/method/method-beans.xml
   modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/simple/
   modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/simple/simple-beans.xml
   modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/simple/veto-beans.xml
   modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/stereotype/
   modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/stereotype/stereotype-beans.xml
Modified:
   modules/xml/trunk/pom.xml
   modules/xml/trunk/readme.txt
Log:
Initial commit of seam-xml 



Added: modules/xml/trunk/docs/pom.xml
===================================================================
--- modules/xml/trunk/docs/pom.xml	                        (rev 0)
+++ modules/xml/trunk/docs/pom.xml	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,54 @@
+<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/xsd/maven-4.0.0.xsd">
+
+   <modelVersion>4.0.0</modelVersion>
+
+   <groupId>org.jboss.seam</groupId>
+   <artifactId>xml-reference-guide</artifactId>
+   <version>1.0.0-SNAPSHOT</version>
+   <packaging>jdocbook</packaging>
+   
+   <name>Seam XML Reference Guide</name>
+ 
+   <pluginRepositories>
+      <pluginRepository>
+         <id>repository.jboss.org</id>
+         <name>JBoss Repository</name>
+         <url>http://repository.jboss.org/maven2</url>
+      </pluginRepository>
+   </pluginRepositories>
+   <repositories>
+      <repository>
+         <id>repository.jboss.org</id>
+         <name>JBoss Repository</name>
+         <url>http://repository.jboss.org/maven2</url>
+      </repository>
+   </repositories>
+
+   <build>
+      <plugins>
+         <plugin>
+            <groupId>org.jboss.maven.plugins</groupId>
+            <artifactId>maven-jdocbook-plugin</artifactId>
+            
+            <configuration>
+               <sourceDocumentName>master.xml</sourceDocumentName>
+               <masterTranslation>en-US</masterTranslation>
+               <formats>
+                  <format>
+                     <formatName>pdf</formatName>
+                     <finalName>remoting-reference.pdf</finalName>
+                  </format>
+                  <format>
+                     <formatName>html</formatName>
+                     <finalName>index.html</finalName>
+                  </format>
+               </formats>
+               <options>
+                  <xincludeSupported>false</xincludeSupported>
+               </options>               
+            </configuration>
+         </plugin>
+      </plugins>
+   </build>
+   
+</project>
\ No newline at end of file

Added: modules/xml/trunk/docs/src/main/en-US/master.xml
===================================================================
--- modules/xml/trunk/docs/src/main/en-US/master.xml	                        (rev 0)
+++ modules/xml/trunk/docs/src/main/en-US/master.xml	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,11 @@
+<?xml version='1.0' encoding="utf-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+   "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"  [ ]>
+<book lang="en">
+      
+   <toc/>
+   
+   <title>Seam XML Configuration</title>      
+   <xi:include href="xml-general.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />  
+
+</book>
\ No newline at end of file

Added: modules/xml/trunk/docs/src/main/en-US/xml-general.xml
===================================================================
--- modules/xml/trunk/docs/src/main/en-US/xml-general.xml	                        (rev 0)
+++ modules/xml/trunk/docs/src/main/en-US/xml-general.xml	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,10 @@
+c<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+
+<chapter id="remoting">
+  <title>Seam XML Configuration</title>
+  
+  <para>Seam provides a method for configuring JSR-299 beans using XML. </para>
+
+
+</chapter>


Property changes on: modules/xml/trunk/docs/src/main/en-US/xml-general.xml
___________________________________________________________________
Name: svn:executable
   + *

Modified: modules/xml/trunk/pom.xml
===================================================================
--- modules/xml/trunk/pom.xml	2010-01-15 19:06:49 UTC (rev 11966)
+++ modules/xml/trunk/pom.xml	2010-01-16 06:25:13 UTC (rev 11967)
@@ -1,24 +1,19 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<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">
-   <modelVersion>4.0.0</modelVersion>
-
-   <parent>
+<?xml version="1.0"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+      <artifactId>seam-parent</artifactId>
       <groupId>org.jboss.seam</groupId>
-      <artifactId>seam-parent</artifactId>
       <version>3.0.0-SNAPSHOT</version>
    </parent>
-
-   <groupId>org.jboss.seam</groupId>
+    
    <artifactId>seam-xml</artifactId>
-   <name>xml</name>
-   <version>1.0-SNAPSHOT</version>
-
-   <properties>
-      <seam.version>3.0.0-SNAPSHOT</seam.version>
-   </properties>
-
-   <!-- Snapshots repo to get parent -->
+   <packaging>jar</packaging>
+   <version>3.0.0-SNAPSHOT</version>
+   <name>Seam XML Configuration</name>
+ 
    <repositories>
       <repository>
          <id>oss.sonatype.org/jboss-snapshots</id>
@@ -32,21 +27,71 @@
             <updatePolicy>never</updatePolicy>
          </snapshots>
       </repository>
-   </repositories>
+    </repositories>
 
-   <dependencies>
-      <!-- CDI (JSR-299) -->
-      <dependency>
-         <groupId>javax.enterprise</groupId>
-         <artifactId>cdi-api</artifactId>
-         <scope>provided</scope>
-      </dependency>
-   </dependencies>
-
+   <properties>
+      <seam.version>3.0.0-SNAPSHOT</seam.version>
+   </properties> 
+ 
+  <dependencies>
+    <dependency>
+      <groupId>javax.enterprise</groupId>
+      <artifactId>cdi-api</artifactId>
+      <version>1.0</version>
+    </dependency>
+     <dependency>
+      <groupId>org.jboss.weld</groupId>
+      <artifactId>weld-core</artifactId>
+      <version>1.0.1-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.weld</groupId>
+      <artifactId>weld-extensions</artifactId>
+      <version>1.0.0-SNAPSHOT</version> 
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.weld</groupId>
+      <artifactId>weld-se</artifactId>
+      <version>1.0.0-CR2</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+    	<groupId>org.testng</groupId>
+    	<artifactId>testng</artifactId>
+    	<version>5.10</version>
+    	<type>jar</type>
+    	<classifier>jdk15</classifier>
+    	<scope>test</scope>
+    </dependency>
+  </dependencies>
+  
    <scm>
       <connection>scm:svn:http://anonsvn.jboss.org/repos/seam/modules/xml/trunk</connection>
       <developerConnection>scm:svn:https://svn.jboss.org/repos/seam/modules/xml/trunk</developerConnection>
       <url>http://fisheye.jboss.org/browse/Seam/modules/xml/trunk</url>
    </scm>
-
+  
+  <build>
+     
+    <plugins>
+        <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-compiler-plugin</artifactId>
+            <configuration>
+                <source>1.5</source>
+                <target>1.5</target>
+            </configuration>
+        </plugin>
+		   <plugin>
+		     <groupId>org.apache.maven.plugins</groupId>
+		     <artifactId>maven-eclipse-plugin</artifactId>
+		     <configuration>
+		       <workspace>${basedir}</workspace>
+		       
+		       <downloadJavadocs>true</downloadJavadocs>
+		       <downloadSources>true</downloadSources>
+		     </configuration>
+		   </plugin>
+    </plugins>
+  </build> 
 </project>

Modified: modules/xml/trunk/readme.txt
===================================================================
--- modules/xml/trunk/readme.txt	2010-01-15 19:06:49 UTC (rev 11966)
+++ modules/xml/trunk/readme.txt	2010-01-16 06:25:13 UTC (rev 11967)
@@ -1,4 +1,73 @@
-Seam xml
-=============
+Seam XML Extensions Readme
 
-TODO
+To use:
+
+Place the seam-xml*.jar on the classpath,
+
+The extension will look for a file called seam-beans.xml in the root of all archives in the deployment. There is an extension mechanism 
+that allows you to register other xml sources that will get documented in a future release (have a look at TestXmlProvider and the 
+org.jboss.seam.xml.XmlExtension file if you want more info).
+
+The xml format:
+
+The best way to understand the format is with some examples:
+
+<Beans xmlns="urn:seam:core"
+          xmlns:test="urn:java:org.jboss.seam.xml.test.beans">
+    <test:Bean1/>
+</Beans>
+
+This registers a single bean, org.jboss.seam.xml.test.beans.Bean1
+
+
+<Beans xmlns="urn:jbraze:core"
+          xmlns:test="urn:java:org.jboss.seam.xml.test.beans">
+   
+    <test:Bean1>
+        <test:bean2>
+            <Inject/>
+        </test:bean2>
+    </test:Bean1>
+    
+    <test:Bean2>
+        <test:produceBean3>
+            <Produces/>
+        </test:produceBean3>
+    </test:Bean2>
+          
+</Beans>
+
+This registers two beans, Bean1 has injection target, a field named bean2. Bean2 has a producer field named produceBean3.
+
+
+<Beans xmlns="urn:jbraze:core"
+          xmlns:test="urn:java:org.jboss.seam.xml.test.beans">
+   
+    <test:OtherQualifier>
+        <Qualifier/>
+    </test:OtherQualifier>
+     
+    <test:QualifiedBean1>
+        <test:OtherQualifier value1="AA" value2="1">A</test:OtherQualifier>
+    </test:QualifiedBean1>
+    
+    <test:QualifiedBean2>
+        <test:OtherQualifier value1="BB" value2="2" value="B" />
+    </test:QualifiedBean2>
+    
+    <test:QualifierTestBean>
+        <test:bean1>
+            <test:OtherQualifier value1="AA" value2="1" value="A" />
+            <Inject/>
+        </test:bean1>
+        <test:bean2>
+            <test:OtherQualifier value1="BB" value2="2">B</test:OtherQualifier>
+            <Inject/>
+        </test:bean2>
+    </test:QualifierTestBean>
+          
+</Beans>
+
+This registers a qualifier, and then registers two beans with the given values for the qualifiers attributes. 
+QualifierTestBean has two injection points, also with qualifiers. For more examples look at the
+src/test/resources folder. 

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/ClassPathXmlDocumentProvider.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/ClassPathXmlDocumentProvider.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/ClassPathXmlDocumentProvider.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,126 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.bootstrap;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.ListIterator;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.xml.sax.InputSource;
+
+/**
+ * Document Provider that loads XML documents from the classpath
+ * 
+ * @author Stuart Douglas <stuart at baileyroberts.com.au>
+ * 
+ */
+public class ClassPathXmlDocumentProvider implements XmlDocumentProvider
+{
+
+   static final String[] DEFAULT_RESOURCES = { "seam-beans.xml", "META-INF/seam-beans.xml", "WEB-INF/seam-beans.xml" };
+
+   final String[] resources;
+
+   public ClassPathXmlDocumentProvider()
+   {
+      resources = DEFAULT_RESOURCES;
+   }
+
+   public ClassPathXmlDocumentProvider(String[] resources)
+   {
+      this.resources = resources;
+   }
+
+   List<URL> docs;
+
+   ListIterator<URL> iterator;
+
+   DocumentBuilderFactory factory;
+   DocumentBuilder builder;
+
+   public void open()
+   {
+
+      factory = DocumentBuilderFactory.newInstance();
+      factory.setNamespaceAware(true);
+      factory.setIgnoringComments(true);
+      factory.setIgnoringElementContentWhitespace(true);
+      try
+      {
+         builder = factory.newDocumentBuilder();
+      }
+      catch (ParserConfigurationException e1)
+      {
+         throw new RuntimeException(e1);
+      }
+      docs = new ArrayList<URL>();
+      for (String i : resources)
+      {
+         try
+         {
+            Enumeration<URL> e = getClass().getClassLoader().getResources(i);
+            while (e.hasMoreElements())
+            {
+               docs.add(e.nextElement());
+            }
+            iterator = docs.listIterator();
+         }
+         catch (IOException e)
+         {
+            throw new RuntimeException(e);
+         }
+      }
+   }
+
+   public void close()
+   {
+      // noop
+   }
+
+   public XmlDocument getNextDocument()
+   {
+
+      if (!iterator.hasNext())
+      {
+         return null;
+      }
+      try
+      {
+         final URL url = iterator.next();
+         return new XmlDocument()
+         {
+
+            public InputSource getInputSource()
+            {
+               try
+               {
+                  return new InputSource(url.openStream());
+               }
+               catch (IOException e)
+               {
+                  throw new RuntimeException(e);
+               }
+            }
+
+            public String getFileUrl()
+            {
+               return url.toString();
+            }
+         };
+      }
+      catch (Exception e)
+      {
+         throw new RuntimeException(e);
+      }
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/XmlDocument.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/XmlDocument.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/XmlDocument.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,14 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.bootstrap;
+
+import org.xml.sax.InputSource;
+
+public interface XmlDocument
+{
+   public InputSource getInputSource();
+
+   public String getFileUrl();
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/XmlDocumentProvider.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/XmlDocumentProvider.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/XmlDocumentProvider.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,23 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.bootstrap;
+
+/**
+ * classes that implement this interface can be used to load other XML
+ * documents, this is useful for testing
+ * 
+ * @author Stuart Douglas <stuart at baileyroberts.com.au>
+ * 
+ */
+public interface XmlDocumentProvider
+{
+
+   void open();
+
+   XmlDocument getNextDocument();
+
+   void close();
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/bootstrap/XmlExtension.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,211 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.bootstrap;
+
+import java.lang.annotation.Annotation;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.BeforeBeanDiscovery;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.ProcessAnnotatedType;
+import javax.enterprise.inject.spi.ProcessInjectionTarget;
+
+import org.jboss.seam.xml.core.BeanResult;
+import org.jboss.seam.xml.core.XmlId;
+import org.jboss.seam.xml.core.XmlResult;
+import org.jboss.seam.xml.fieldset.FieldValueObject;
+import org.jboss.seam.xml.fieldset.InjectionTargetWrapper;
+import org.jboss.seam.xml.model.ModelBuilder;
+import org.jboss.seam.xml.parser.ParserMain;
+import org.jboss.seam.xml.parser.SaxNode;
+import org.jboss.seam.xml.util.FileDataReader;
+import org.jboss.weld.extensions.util.AnnotationInstanceProvider;
+
+public class XmlExtension implements Extension
+{
+
+   AnnotationInstanceProvider ac = new AnnotationInstanceProvider();
+
+   static final String PROVIDERS_FILE = "META-INF/services/org.jboss.seam.xml.XmlExtension";
+
+   List<XmlResult> results = new ArrayList<XmlResult>();
+
+   Set<Class> veto = new HashSet<Class>();
+
+   Map<Class, AnnotatedType> types = new HashMap<Class, AnnotatedType>();
+
+   int count = 0;
+
+   /**
+    * map of syntetic bean id to a list of field value objects
+    */
+   Map<Integer, List<FieldValueObject>> fieldValues = new HashMap<Integer, List<FieldValueObject>>();
+
+   /**
+    * This is the entry point for the extension
+    */
+   public void beforeBeanDiscovery(@Observes BeforeBeanDiscovery event)
+   {
+      boolean problems = false;
+      StringBuilder problemString = new StringBuilder();
+
+      List<Class<? extends XmlDocumentProvider>> providers = getDocumentProviders();
+      for (Class<? extends XmlDocumentProvider> cl : providers)
+      {
+         try
+         {
+            XmlDocumentProvider provider = cl.newInstance();
+            provider.open();
+            XmlDocument d;
+            while ((d = provider.getNextDocument()) != null)
+            {
+               ParserMain parser = new ParserMain();
+               ModelBuilder builder = new ModelBuilder();
+               SaxNode parentNode = parser.parse(d.getInputSource(), d.getFileUrl());
+               ;
+               results.add(builder.build(parentNode));
+            }
+         }
+         catch (Exception e)
+         {
+            throw new RuntimeException(e);
+         }
+      }
+
+      for (XmlResult r : results)
+      {
+         if (!r.getProblems().isEmpty())
+         {
+            problems = true;
+            for (String i : r.getProblems())
+            {
+               problemString.append(i);
+               problemString.append("\n");
+            }
+         }
+         for (BeanResult b : r.getFieldValues().keySet())
+         {
+            int val = count++;
+            fieldValues.put(val, r.getFieldValues().get(b));
+            Map<String, Object> am = new HashMap<String, Object>();
+            am.put("value", val);
+            Annotation a = ac.get(XmlId.class, am);
+            b.getBuilder().addToClass(a);
+         }
+
+         for (Class b : r.getQualifiers())
+         {
+            event.addQualifier(b);
+         }
+         for (Class b : r.getInterceptorBindings())
+         {
+            event.addInterceptorBinding(b);
+         }
+         for (Entry<Class<? extends Annotation>, Annotation[]> b : r.getStereotypes().entrySet())
+         {
+            event.addStereotype(b.getKey(), b.getValue());
+         }
+         for (BeanResult bb : r.getBeans())
+         {
+            boolean install = true;
+            for (Object className : bb.getDependencies())
+            {
+               try
+               {
+                  bb.getType().getClassLoader().loadClass(className.toString());
+               }
+               catch (ClassNotFoundException e)
+               {
+                  install = false;
+                  break;
+               }
+            }
+            if (install)
+            {
+               AnnotatedType tp = bb.getBuilder().create();
+               event.addAnnotatedType(tp);
+               types.put(tp.getJavaClass(), tp);
+            }
+         }
+         veto.addAll(r.getVeto());
+
+      }
+      if (problems)
+      {
+         throw new RuntimeException(problemString.toString());
+      }
+   }
+
+   public void processAnotated(@Observes ProcessAnnotatedType event)
+   {
+      // veto implementation
+      if (veto.contains(event.getAnnotatedType().getJavaClass()))
+      {
+         event.veto();
+      }
+   }
+
+   public void processInjectionTarget(@Observes ProcessInjectionTarget event)
+   {
+
+      AnnotatedType at = event.getAnnotatedType();
+      XmlId xid = at.getAnnotation(XmlId.class);
+      if (xid != null)
+      {
+         List<FieldValueObject> fvs = fieldValues.get(xid.value());
+         event.setInjectionTarget(new InjectionTargetWrapper(event.getInjectionTarget(), fvs));
+      }
+
+   }
+
+   public List<Class<? extends XmlDocumentProvider>> getDocumentProviders()
+   {
+      List<Class<? extends XmlDocumentProvider>> ret = new ArrayList<Class<? extends XmlDocumentProvider>>();
+      try
+      {
+         Enumeration<URL> urls = getClass().getClassLoader().getResources(PROVIDERS_FILE);
+         while (urls.hasMoreElements())
+         {
+
+            URL u = urls.nextElement();
+            String data = FileDataReader.readUrl(u);
+            String[] providers = data.split("\\s");
+            for (String provider : providers)
+            {
+               Class res = null;
+               try
+               {
+                  res = getClass().getClassLoader().loadClass(provider);
+               }
+               catch (ClassNotFoundException e)
+               {
+                  res = Thread.currentThread().getContextClassLoader().loadClass(provider);
+               }
+               if (res == null)
+               {
+                  throw new RuntimeException("Could not load XML configuration provider " + provider + " configured in file " + u.toString());
+               }
+               ret.add(res);
+            }
+         }
+      }
+      catch (Exception e)
+      {
+         throw new RuntimeException(e);
+      }
+      return ret;
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/BeanResult.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/BeanResult.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/BeanResult.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,44 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.core;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.jboss.weld.extensions.util.annotated.NewAnnotatedTypeBuilder;
+
+public class BeanResult<X>
+{
+   NewAnnotatedTypeBuilder builder;
+   List<String> dependencies = new ArrayList<String>();
+   Class type;
+
+   public BeanResult(Class type)
+   {
+      this.type = type;
+      builder = new NewAnnotatedTypeBuilder<X>(type);
+   }
+
+   public NewAnnotatedTypeBuilder getBuilder()
+   {
+      return builder;
+   }
+
+   public void addDependency(String className)
+   {
+      dependencies.add(className);
+   }
+
+   public List<String> getDependencies()
+   {
+      return Collections.unmodifiableList(dependencies);
+   }
+
+   public Class getType()
+   {
+      return type;
+   }
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/XmlId.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/XmlId.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/XmlId.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,20 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.core;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Annotation that allows tracing of annotated types through the startup proces
+ * 
+ * @author stuart
+ * 
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface XmlId
+{
+   int value();
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/XmlResult.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/XmlResult.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/core/XmlResult.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,83 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.core;
+
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.jboss.seam.xml.fieldset.FieldValueObject;
+
+/**
+ * Stores the result of parsing an XML document
+ * 
+ * @author Stuart Douglas <stuart at baileyroberts.com.au>
+ * 
+ */
+public class XmlResult
+{
+
+   Map<Class<? extends Annotation>, Annotation[]> stereotypes = new HashMap<Class<? extends Annotation>, Annotation[]>();
+
+   List<Class<? extends Annotation>> qualifiers = new ArrayList<Class<? extends Annotation>>();
+
+   List<Class<? extends Annotation>> interceptorBindings = new ArrayList<Class<? extends Annotation>>();
+
+   List<Class> veto = new ArrayList<Class>();
+
+   List<String> problems = new ArrayList<String>();
+
+   List<BeanResult> beans = new ArrayList<BeanResult>();
+
+   Map<BeanResult, List<FieldValueObject>> fieldValues = new HashMap<BeanResult, List<FieldValueObject>>();
+
+   public Map<Class<? extends Annotation>, Annotation[]> getStereotypes()
+   {
+      return stereotypes;
+   }
+
+   public List<Class<? extends Annotation>> getQualifiers()
+   {
+      return qualifiers;
+   }
+
+   public List<Class<? extends Annotation>> getInterceptorBindings()
+   {
+      return interceptorBindings;
+   }
+
+   public List<BeanResult> getBeans()
+   {
+      return beans;
+   }
+
+   public List<String> getProblems()
+   {
+      return problems;
+   }
+
+   public void addProblem(String p)
+   {
+      problems.add(p);
+   }
+
+   public Map<BeanResult, List<FieldValueObject>> getFieldValues()
+   {
+      return fieldValues;
+   }
+
+   public void addVeto(Class clazz)
+   {
+      veto.add(clazz);
+   }
+
+   public List<Class> getVeto()
+   {
+      return veto;
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/ArrayFieldSet.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/ArrayFieldSet.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/ArrayFieldSet.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,153 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.fieldset;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.seam.xml.model.XmlItem;
+import org.jboss.seam.xml.util.XmlObjectConverter;
+
+/**
+ * class responsible for setting the value of array properties.
+ * 
+ * @author Stuart Douglas <stuart at baileyroberts.com.au>
+ * 
+ */
+public class ArrayFieldSet implements FieldValueObject
+{
+   Field field;
+   List<AFS> values;
+   Class arrayType;
+
+   public ArrayFieldSet(Field field, List<XmlItem> items)
+   {
+      this.field = field;
+      this.values = new ArrayList<AFS>();
+
+      arrayType = field.getType().getComponentType();
+      AFS setter;
+      for (XmlItem i : items)
+      {
+         final Object fv = XmlObjectConverter.convert(arrayType, i.getInnerText());
+         if (field.getType() == char.class)
+         {
+
+            final char val = (Character) fv;
+            setter = new AFS()
+            {
+               public void set(Object o, int i) throws IllegalAccessException
+               {
+                  Array.setChar(o, i, val);
+               }
+            };
+         }
+         else if (field.getType() == int.class)
+         {
+            final int val = (Integer) fv;
+            setter = new AFS()
+            {
+               public void set(Object o, int i) throws IllegalAccessException
+               {
+                  Array.setInt(o, i, val);
+               }
+            };
+         }
+         else if (field.getType() == short.class)
+         {
+            final short val = (Short) fv;
+            setter = new AFS()
+            {
+               public void set(Object o, int i) throws IllegalAccessException
+               {
+                  Array.setShort(o, i, val);
+               }
+            };
+         }
+         else if (field.getType() == long.class)
+         {
+            final long val = (Long) fv;
+            setter = new AFS()
+            {
+               public void set(Object o, int i) throws IllegalAccessException
+               {
+                  Array.setLong(o, i, val);
+               }
+            };
+         }
+         else if (field.getType() == byte.class)
+         {
+            final byte val = (Byte) fv;
+            setter = new AFS()
+            {
+               public void set(Object o, int i) throws IllegalAccessException
+               {
+                  Array.setByte(o, i, val);
+               }
+            };
+         }
+         else if (field.getType() == double.class)
+         {
+            final double val = (Double) fv;
+            setter = new AFS()
+            {
+               public void set(Object o, int i) throws IllegalAccessException
+               {
+                  Array.setDouble(o, i, val);
+               }
+            };
+         }
+         else if (field.getType() == float.class)
+         {
+            final float val = (Float) fv;
+            setter = new AFS()
+            {
+               public void set(Object o, int i) throws IllegalAccessException
+               {
+                  Array.setFloat(o, i, val);
+               }
+            };
+         }
+         else
+         {
+            final Object val = fv;
+            setter = new AFS()
+            {
+               public void set(Object o, int i) throws IllegalAccessException
+               {
+                  Array.set(o, i, val);
+               }
+            };
+         }
+         values.add(setter);
+      }
+
+   }
+
+   public void setValue(Object instance)
+   {
+      try
+      {
+         Object array = Array.newInstance(arrayType, values.size());
+         field.set(instance, array);
+         for (int i = 0; i < values.size(); ++i)
+         {
+            values.get(i).set(array, i);
+         }
+      }
+      catch (Exception e)
+      {
+         throw new RuntimeException(e);
+      }
+   }
+
+   interface AFS
+   {
+      void set(Object o, int i) throws IllegalAccessException;
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/CollectionFieldSet.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/CollectionFieldSet.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/CollectionFieldSet.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,150 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.fieldset;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import org.jboss.seam.xml.model.XmlItem;
+import org.jboss.seam.xml.util.XmlObjectConverter;
+
+/**
+ * class responsible for setting the value of collection properties.
+ * 
+ * It can deal with the following collection types: -Set -List -Collection
+ * -SortedSet -HashSet -ArrayList -TreeSet -LinkedList
+ * 
+ * @author Stuart Douglas <stuart at baileyroberts.com.au>
+ * 
+ */
+public class CollectionFieldSet implements FieldValueObject
+{
+   Field field;
+   List<CFS> values;
+   Class elementType;
+   Class<? extends Collection> collectionType;
+
+   public CollectionFieldSet(Field field, List<XmlItem> items)
+   {
+      this.field = field;
+      this.values = new ArrayList<CFS>();
+      discoverElementType();
+
+      CFS setter;
+      for (XmlItem i : items)
+      {
+         final Object fv = XmlObjectConverter.convert(elementType, i.getInnerText());
+
+         setter = new CFS()
+         {
+            public void add(Collection o) throws IllegalAccessException
+            {
+               o.add(fv);
+            }
+         };
+
+         values.add(setter);
+      }
+
+   }
+
+   public void discoverElementType()
+   {
+      Type type = field.getGenericType();
+      if (type instanceof ParameterizedType)
+      {
+         ParameterizedType parameterizedType = (ParameterizedType) type;
+
+         if (parameterizedType.getRawType() == Collection.class)
+         {
+            elementType = (Class) parameterizedType.getActualTypeArguments()[0];
+            collectionType = LinkedHashSet.class;
+         }
+         else if (parameterizedType.getRawType() == List.class)
+         {
+            elementType = (Class) parameterizedType.getActualTypeArguments()[0];
+            collectionType = ArrayList.class;
+         }
+         else if (parameterizedType.getRawType() == Set.class)
+         {
+            elementType = (Class) parameterizedType.getActualTypeArguments()[0];
+            collectionType = LinkedHashSet.class;
+         }
+         else if (parameterizedType.getRawType() == SortedSet.class)
+         {
+            elementType = (Class) parameterizedType.getActualTypeArguments()[0];
+            collectionType = TreeSet.class;
+         }
+         else if (parameterizedType.getRawType() == HashSet.class)
+         {
+            elementType = (Class) parameterizedType.getActualTypeArguments()[0];
+            collectionType = HashSet.class;
+         }
+         else if (parameterizedType.getRawType() == ArrayList.class)
+         {
+            elementType = (Class) parameterizedType.getActualTypeArguments()[0];
+            collectionType = ArrayList.class;
+         }
+         else if (parameterizedType.getRawType() == LinkedList.class)
+         {
+            elementType = (Class) parameterizedType.getActualTypeArguments()[0];
+            collectionType = LinkedList.class;
+         }
+         else if (parameterizedType.getRawType() == LinkedHashSet.class)
+         {
+            elementType = (Class) parameterizedType.getActualTypeArguments()[0];
+            collectionType = LinkedHashSet.class;
+         }
+         else if (parameterizedType.getRawType() == TreeSet.class)
+         {
+            elementType = (Class) parameterizedType.getActualTypeArguments()[0];
+            collectionType = TreeSet.class;
+         }
+         else
+         {
+            throw new RuntimeException("Could not determine element type for " + field.getDeclaringClass().getName() + "." + field.getName());
+         }
+
+      }
+      else
+      {
+         throw new RuntimeException("Could not determine element type for " + field.getDeclaringClass().getName() + "." + field.getName());
+      }
+
+   }
+
+   public void setValue(Object instance)
+   {
+      try
+      {
+         Collection res = collectionType.newInstance();
+         field.set(instance, res);
+         for (int i = 0; i < values.size(); ++i)
+         {
+            values.get(i).add(res);
+         }
+      }
+      catch (Exception e)
+      {
+         throw new RuntimeException(e);
+      }
+   }
+
+   interface CFS
+   {
+      void add(Collection o) throws IllegalAccessException;
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/FieldTypeSetter.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/FieldTypeSetter.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/FieldTypeSetter.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,20 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.fieldset;
+
+import java.lang.reflect.Field;
+
+/**
+ * Interface the can set primitive types
+ * 
+ * @author Stuart Douglas <stuart at baileyroberts.com.au>
+ * 
+ */
+public interface FieldTypeSetter
+{
+
+   public void setField(String value, Field field);
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/FieldValueObject.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/FieldValueObject.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/FieldValueObject.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,12 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.fieldset;
+
+public interface FieldValueObject
+{
+
+   public void setValue(Object instance);
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/InjectionTargetWrapper.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/InjectionTargetWrapper.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/InjectionTargetWrapper.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,61 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.fieldset;
+
+import java.util.List;
+import java.util.Set;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.InjectionTarget;
+
+public class InjectionTargetWrapper<T> implements InjectionTarget<T>
+{
+   InjectionTarget<T> target;
+   List<FieldValueObject> fieldValues;
+
+   public InjectionTargetWrapper(InjectionTarget<T> target, List<FieldValueObject> fieldValues)
+   {
+      this.fieldValues = fieldValues;
+      this.target = target;
+   }
+
+   public void inject(T instance, CreationalContext<T> ctx)
+   {
+      target.inject(instance, ctx);
+
+   }
+
+   public void postConstruct(T instance)
+   {
+      for (FieldValueObject f : fieldValues)
+      {
+         f.setValue(instance);
+      }
+      target.postConstruct(instance);
+
+   }
+
+   public void preDestroy(T instance)
+   {
+      target.preDestroy(instance);
+   }
+
+   public void dispose(T instance)
+   {
+      target.dispose(instance);
+   }
+
+   public Set<InjectionPoint> getInjectionPoints()
+   {
+      return target.getInjectionPoints();
+   }
+
+   public T produce(CreationalContext<T> ctx)
+   {
+      return target.produce(ctx);
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/MapFieldSet.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/MapFieldSet.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/MapFieldSet.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,132 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.fieldset;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+import org.jboss.seam.xml.model.EntryXmlItem;
+import org.jboss.seam.xml.util.XmlObjectConverter;
+
+/**
+ * class responsible for setting the value of map properties.
+ * 
+ * 
+ * @author Stuart Douglas <stuart at baileyroberts.com.au>
+ * 
+ */
+public class MapFieldSet implements FieldValueObject
+{
+   Field field;
+   List<MFS> values;
+   Class keyType;
+   Class valueType;
+   Class<? extends Map> collectionType;
+
+   public MapFieldSet(Field field, List<EntryXmlItem> items)
+   {
+      this.field = field;
+      this.values = new ArrayList<MFS>();
+      discoverElementType();
+
+      for (EntryXmlItem i : items)
+      {
+         MFS setter;
+         final Object key = XmlObjectConverter.convert(keyType, i.getKey().getInnerText());
+         final Object value = XmlObjectConverter.convert(valueType, i.getValue().getInnerText());
+         setter = new MFS()
+         {
+            public void add(Map m) throws IllegalAccessException
+            {
+               m.put(key, value);
+            }
+         };
+
+         values.add(setter);
+      }
+
+   }
+
+   public void discoverElementType()
+   {
+      Type type = field.getGenericType();
+      if (type instanceof ParameterizedType)
+      {
+         ParameterizedType parameterizedType = (ParameterizedType) type;
+
+         if (parameterizedType.getRawType() == Map.class)
+         {
+            keyType = (Class) parameterizedType.getActualTypeArguments()[0];
+            valueType = (Class) parameterizedType.getActualTypeArguments()[1];
+            collectionType = LinkedHashMap.class;
+         }
+         else if (parameterizedType.getRawType() == LinkedHashMap.class)
+         {
+            keyType = (Class) parameterizedType.getActualTypeArguments()[0];
+            valueType = (Class) parameterizedType.getActualTypeArguments()[1];
+            collectionType = LinkedHashMap.class;
+         }
+         else if (parameterizedType.getRawType() == HashMap.class)
+         {
+            keyType = (Class) parameterizedType.getActualTypeArguments()[0];
+            valueType = (Class) parameterizedType.getActualTypeArguments()[1];
+            collectionType = HashMap.class;
+         }
+         else if (parameterizedType.getRawType() == SortedMap.class)
+         {
+            keyType = (Class) parameterizedType.getActualTypeArguments()[0];
+            valueType = (Class) parameterizedType.getActualTypeArguments()[1];
+            collectionType = TreeMap.class;
+         }
+         else if (parameterizedType.getRawType() == TreeMap.class)
+         {
+            keyType = (Class) parameterizedType.getActualTypeArguments()[0];
+            valueType = (Class) parameterizedType.getActualTypeArguments()[1];
+            collectionType = TreeMap.class;
+         }
+         else
+         {
+            throw new RuntimeException("Could not determine element type for map " + field.getDeclaringClass().getName() + "." + field.getName());
+         }
+
+      }
+      else
+      {
+         throw new RuntimeException("Could not determine element type for map " + field.getDeclaringClass().getName() + "." + field.getName());
+      }
+
+   }
+
+   public void setValue(Object instance)
+   {
+      try
+      {
+         Map res = collectionType.newInstance();
+         field.set(instance, res);
+         for (int i = 0; i < values.size(); ++i)
+         {
+            values.get(i).add(res);
+         }
+      }
+      catch (Exception e)
+      {
+         throw new RuntimeException(e);
+      }
+   }
+
+   interface MFS
+   {
+      void add(Map o) throws IllegalAccessException;
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/SimpleFieldValue.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/SimpleFieldValue.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/fieldset/SimpleFieldValue.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,132 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.fieldset;
+
+import java.lang.reflect.Field;
+
+import org.jboss.seam.xml.util.XmlObjectConverter;
+
+public class SimpleFieldValue implements FieldValueObject
+{
+
+   final Field field;
+
+   FS setter;
+
+   public SimpleFieldValue(Class javaObject, final Field f, final String value)
+   {
+      this.field = f;
+      field.setAccessible(true);
+
+      Object fv = XmlObjectConverter.convert(f.getType(), value);
+      if (field.getType() == char.class)
+      {
+
+         final char val = (Character) fv;
+         setter = new FS()
+         {
+            public void set(Object o) throws IllegalAccessException
+            {
+               field.setChar(o, val);
+            }
+         };
+      }
+      else if (field.getType() == int.class)
+      {
+         final int val = (Integer) fv;
+         setter = new FS()
+         {
+            public void set(Object o) throws IllegalAccessException
+            {
+               field.setInt(o, val);
+            }
+         };
+      }
+      else if (field.getType() == short.class)
+      {
+         final short val = (Short) fv;
+         setter = new FS()
+         {
+            public void set(Object o) throws IllegalAccessException
+            {
+               field.setShort(o, val);
+            }
+         };
+      }
+      else if (field.getType() == long.class)
+      {
+         final long val = (Long) fv;
+         setter = new FS()
+         {
+            public void set(Object o) throws IllegalAccessException
+            {
+               field.setLong(o, val);
+            }
+         };
+      }
+      else if (field.getType() == byte.class)
+      {
+         final byte val = (Byte) fv;
+         setter = new FS()
+         {
+            public void set(Object o) throws IllegalAccessException
+            {
+               field.setByte(o, val);
+            }
+         };
+      }
+      else if (field.getType() == double.class)
+      {
+         final double val = (Double) fv;
+         setter = new FS()
+         {
+            public void set(Object o) throws IllegalAccessException
+            {
+               field.setDouble(o, val);
+            }
+         };
+      }
+      else if (field.getType() == float.class)
+      {
+         final float val = (Float) fv;
+         setter = new FS()
+         {
+            public void set(Object o) throws IllegalAccessException
+            {
+               field.setFloat(o, val);
+            }
+         };
+      }
+      else
+      {
+         final Object val = fv;
+         setter = new FS()
+         {
+            public void set(Object o) throws IllegalAccessException
+            {
+               field.set(o, val);
+            }
+         };
+      }
+   }
+
+   interface FS
+   {
+      void set(Object o) throws IllegalAccessException;
+   }
+
+   public void setValue(Object instance)
+   {
+      try
+      {
+         setter.set(instance);
+      }
+      catch (Exception e)
+      {
+         throw new RuntimeException(e);
+      }
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/AbstractXmlItem.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/AbstractXmlItem.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/AbstractXmlItem.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,98 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.model;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.jboss.seam.xml.fieldset.FieldValueObject;
+
+public abstract class AbstractXmlItem implements XmlItem
+{
+   final XmlItemType type;
+   final XmlItem parent;
+   final Class javaClass;
+
+   final String innerText;
+   final Map<String, String> attributes;
+
+   public String getInnerText()
+   {
+      return innerText;
+   }
+
+   public AbstractXmlItem(XmlItemType type, XmlItem parent, Class javaClass, String innerText, Map<String, String> attributes)
+   {
+      this.type = type;
+      this.parent = parent;
+      this.javaClass = javaClass;
+      this.innerText = innerText;
+      if (attributes == null)
+      {
+         this.attributes = new HashMap<String, String>();
+      }
+      else
+      {
+         this.attributes = attributes;
+      }
+   }
+
+   final List<XmlItem> children = new ArrayList<XmlItem>();
+
+   public void addChild(XmlItem xmlItem)
+   {
+      children.add(xmlItem);
+   }
+
+   public XmlItem getParent()
+   {
+      return parent;
+   }
+
+   public List<XmlItem> getChildren()
+   {
+      return Collections.unmodifiableList(children);
+   }
+
+   public XmlItemType getType()
+   {
+      return type;
+   }
+
+   public Field getField()
+   {
+      return null;
+   }
+
+   public Method getMethod()
+   {
+      return null;
+   }
+
+   public Class getJavaClass()
+   {
+      return javaClass;
+   }
+
+   public boolean resolveChildren()
+   {
+      return true;
+   }
+
+   public Map<String, String> getAttributes()
+   {
+      return attributes;
+   }
+
+   public FieldValueObject getFieldValue()
+   {
+      return null;
+   }
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/AnnotationXmlItem.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/AnnotationXmlItem.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/AnnotationXmlItem.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,41 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.model;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
+public class AnnotationXmlItem extends AbstractXmlItem
+{
+
+   /**
+    * create a class note. If the class is an annotation in can have inner text
+    * to represent the 'value' of the annotation, if can also have atrributes to
+    * represent other properties
+    * 
+    * @param parent
+    * @param c
+    * @param innerText
+    * @param attributes
+    */
+   public AnnotationXmlItem(XmlItem parent, Class c, String innerText, Map<String, String> attributes)
+   {
+      super(XmlItemType.ANNOTATION, parent, c, innerText, attributes);
+      if (innerText != null)
+      {
+         if (!innerText.trim().equals(""))
+         {
+            attributes.put("value", innerText);
+         }
+      }
+   }
+
+   public Set<XmlItemType> getAllowedItem()
+   {
+      return Collections.EMPTY_SET;
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ArrayXmlItem.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ArrayXmlItem.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ArrayXmlItem.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,116 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.model;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.jboss.seam.xml.fieldset.FieldValueObject;
+
+public class ArrayXmlItem implements XmlItem
+{
+
+   XmlItem child = null, parent;
+
+   Class javaClass;
+
+   public ArrayXmlItem(XmlItem parent)
+   {
+      allowed.add(XmlItemType.CLASS);
+      this.parent = parent;
+   }
+
+   Set<XmlItemType> allowed = new HashSet<XmlItemType>();
+
+   public Set<XmlItemType> getAllowedItem()
+   {
+      return allowed;
+   }
+
+   public void addChild(XmlItem xmlItem)
+   {
+      if (child != null)
+      {
+         throw new RuntimeException("Array elements can only have one child");
+      }
+      child = xmlItem;
+   }
+
+   public Map<String, String> getAttributes()
+   {
+      return Collections.EMPTY_MAP;
+   }
+
+   public List<XmlItem> getChildren()
+   {
+      return Collections.singletonList(child);
+   }
+
+   public Field getField()
+   {
+      return null;
+   }
+
+   public FieldValueObject getFieldValue()
+   {
+      return null;
+   }
+
+   public String getInnerText()
+   {
+      return null;
+   }
+
+   public Class getJavaClass()
+   {
+      return javaClass;
+   }
+
+   public Method getMethod()
+   {
+      return null;
+   }
+
+   public XmlItem getParent()
+   {
+      return parent;
+   }
+
+   public XmlItemType getType()
+   {
+      return XmlItemType.CLASS;
+   }
+
+   public boolean resolveChildren()
+   {
+      if (child == null)
+      {
+         throw new RuntimeException("<array>  element must have a child specifying the array type");
+      }
+      Class l = child.getJavaClass();
+      try
+      {
+         javaClass = getClass().getClassLoader().loadClass("[L" + l.getName() + ";");
+      }
+      catch (ClassNotFoundException e)
+      {
+         try
+         {
+            javaClass = Thread.currentThread().getContextClassLoader().loadClass("[L" + l.getName() + ";");
+         }
+         catch (ClassNotFoundException e2)
+         {
+            throw new RuntimeException("Cannot create array class from " + l.getName());
+         }
+      }
+      return true;
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ClassXmlItem.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ClassXmlItem.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ClassXmlItem.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,47 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.model;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class ClassXmlItem extends AbstractXmlItem
+{
+
+   HashSet<XmlItemType> allowed = new HashSet<XmlItemType>();
+
+   /**
+    * create a class note. If the class is an annotation in can have inner text
+    * to represent the 'value' of the annotation, if can also have atrributes to
+    * represent other properties
+    * 
+    * @param parent
+    * @param c
+    * @param innerText
+    * @param attributes
+    */
+   public ClassXmlItem(XmlItem parent, Class c)
+   {
+      super(XmlItemType.CLASS, parent, c, null, null);
+      if (innerText != null)
+      {
+         if (!innerText.trim().equals(""))
+         {
+            attributes.put("value", innerText);
+         }
+      }
+      allowed.add(XmlItemType.ANNOTATION);
+      allowed.add(XmlItemType.FIELD);
+      allowed.add(XmlItemType.METHOD);
+      allowed.add(XmlItemType.CLASS);
+
+   }
+
+   public Set<XmlItemType> getAllowedItem()
+   {
+      return allowed;
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/DependsXmlItem.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/DependsXmlItem.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/DependsXmlItem.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,23 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.model;
+
+import java.util.Collections;
+import java.util.Set;
+
+public class DependsXmlItem extends AbstractXmlItem
+{
+
+   public DependsXmlItem(XmlItem parent, String innerTest)
+   {
+      super(XmlItemType.DEPENDENCY, parent, null, innerTest, null);
+   }
+
+   public Set<XmlItemType> getAllowedItem()
+   {
+      return Collections.EMPTY_SET;
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/EntryXmlItem.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/EntryXmlItem.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/EntryXmlItem.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,69 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.model;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class EntryXmlItem extends AbstractXmlItem
+{
+
+   final Set<XmlItemType> allowed = new HashSet<XmlItemType>();
+
+   XmlItem key;
+   XmlItem value;
+
+   public EntryXmlItem(XmlItem parent)
+   {
+      super(XmlItemType.ENTRY, parent, null, null, null);
+      allowed.add(XmlItemType.VALUE);
+      allowed.add(XmlItemType.KEY);
+   }
+
+   public Set<XmlItemType> getAllowedItem()
+   {
+      return allowed;
+   }
+
+   @Override
+   public boolean resolveChildren()
+   {
+      if (children.size() != 2)
+      {
+         throw new RuntimeException("<entry> tags must have two children, a <key> and a <value>");
+      }
+      for (XmlItem i : children)
+      {
+         if (i.getType() == XmlItemType.VALUE)
+         {
+            if (value != null)
+            {
+               throw new RuntimeException("<entry> tags must have two children, a <key> and a <value>");
+            }
+            value = i;
+         }
+         else if (i.getType() == XmlItemType.KEY)
+         {
+            if (key != null)
+            {
+               throw new RuntimeException("<entry> tags must have two children, a <key> and a <value>");
+            }
+            key = i;
+         }
+      }
+      return true;
+   }
+
+   public XmlItem getKey()
+   {
+      return key;
+   }
+
+   public XmlItem getValue()
+   {
+      return value;
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/FieldXmlItem.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/FieldXmlItem.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/FieldXmlItem.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,123 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.model;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.jboss.seam.xml.fieldset.ArrayFieldSet;
+import org.jboss.seam.xml.fieldset.CollectionFieldSet;
+import org.jboss.seam.xml.fieldset.FieldValueObject;
+import org.jboss.seam.xml.fieldset.MapFieldSet;
+import org.jboss.seam.xml.fieldset.SimpleFieldValue;
+
+public class FieldXmlItem extends AbstractXmlItem
+{
+
+   Field field;
+   FieldValueObject fieldValue;
+   HashSet<XmlItemType> allowed = new HashSet<XmlItemType>();
+
+   public FieldXmlItem(XmlItem parent, Field c, String innerText)
+   {
+      super(XmlItemType.FIELD, parent, parent.getJavaClass(), innerText, null);
+      this.field = c;
+      if (innerText != null && innerText.length() > 0)
+      {
+         fieldValue = new SimpleFieldValue(parent.getJavaClass(), c, innerText);
+      }
+      allowed.add(XmlItemType.ANNOTATION);
+      allowed.add(XmlItemType.VALUE);
+   }
+
+   public Field getField()
+   {
+      return field;
+   }
+
+   @Override
+   public FieldValueObject getFieldValue()
+   {
+      return fieldValue;
+   }
+
+   @Override
+   public boolean resolveChildren()
+   {
+      List<EntryXmlItem> mapEntries = new ArrayList<EntryXmlItem>();
+      List<XmlItem> valueEntries = new ArrayList<XmlItem>();
+      if (fieldValue == null)
+      {
+         for (XmlItem i : children)
+         {
+            if (i.getType() == XmlItemType.VALUE)
+            {
+               valueEntries.add(i);
+            }
+            else if (i.getType() == XmlItemType.ENTRY)
+            {
+               mapEntries.add((EntryXmlItem) i);
+            }
+
+         }
+      }
+      if (!mapEntries.isEmpty() || !valueEntries.isEmpty())
+      {
+         if (Map.class.isAssignableFrom(field.getType()))
+         {
+            if (!valueEntries.isEmpty())
+            {
+               throw new RuntimeException("Map fields cannot have <value> elements as children,only <entry> elements Field:" + field.getDeclaringClass().getName() + '.' + field.getName());
+            }
+            if (!mapEntries.isEmpty())
+            {
+               fieldValue = new MapFieldSet(field, mapEntries);
+            }
+         }
+         else if (Collection.class.isAssignableFrom(field.getType()) || field.getType().isArray())
+         {
+            if (!mapEntries.isEmpty())
+            {
+               throw new RuntimeException("Collection fields must be set using <value> not <entry> Field:" + field.getDeclaringClass().getName() + '.' + field.getName());
+            }
+            if (!valueEntries.isEmpty())
+            {
+               if (field.getType().isArray())
+               {
+                  fieldValue = new ArrayFieldSet(field, valueEntries);
+               }
+               else
+               {
+                  fieldValue = new CollectionFieldSet(field, valueEntries);
+               }
+            }
+         }
+         else
+         {
+            if (!mapEntries.isEmpty())
+            {
+               throw new RuntimeException("Only Map fields can be set using <entry> Field:" + field.getDeclaringClass().getName() + '.' + field.getName());
+            }
+            if (valueEntries.size() != 1)
+            {
+               throw new RuntimeException("Non collection fields can only have a single <value> element Field:" + field.getDeclaringClass().getName() + '.' + field.getName());
+            }
+            fieldValue = new SimpleFieldValue(parent.getJavaClass(), field, valueEntries.get(0).getInnerText());
+         }
+      }
+      return true;
+   }
+
+   public Set<XmlItemType> getAllowedItem()
+   {
+      return allowed;
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/KeyXmlItem.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/KeyXmlItem.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/KeyXmlItem.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,22 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.model;
+
+import java.util.Collections;
+import java.util.Set;
+
+public class KeyXmlItem extends AbstractXmlItem
+{
+
+   public KeyXmlItem(XmlItem parent, String innerText)
+   {
+      super(XmlItemType.KEY, parent, null, innerText, null);
+   }
+
+   public Set<XmlItemType> getAllowedItem()
+   {
+      return Collections.EMPTY_SET;
+   }
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/MethodXmlItem.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/MethodXmlItem.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/MethodXmlItem.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,103 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.model;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+public class MethodXmlItem extends AbstractXmlItem
+{
+
+   private String methodName;
+
+   Method method;
+   HashSet<XmlItemType> allowed = new HashSet<XmlItemType>();
+
+   public MethodXmlItem(XmlItem parent, String methodName)
+   {
+      super(XmlItemType.METHOD, parent, parent.getJavaClass(), null, null);
+      // methods are lazily resolved once we know the parameter types
+      this.methodName = methodName;
+      Method found = null;
+      for (Method m : javaClass.getMethods())
+      {
+         if (m.getName().equals(methodName))
+         {
+            if (found == null)
+            {
+               found = m;
+            }
+            else
+            {
+               // we have to methods with the same name so resolution
+               // will have to wait
+               return;
+            }
+         }
+      }
+      method = found;
+      allowed.add(XmlItemType.ANNOTATION);
+      allowed.add(XmlItemType.CLASS);
+   }
+
+   /**
+    * attempts to resolve a lazy method declaration. Returns true if it succeeds
+    * or is unessesary, false otherwise
+    * 
+    * @param childeren
+    * @return
+    */
+   public boolean resolveChildren()
+   {
+      // return true if this is not a method or there was only
+      // only method to choose from
+      if (method != null)
+      {
+         return true;
+      }
+
+      List<Class> rtList = new ArrayList<Class>();
+      for (XmlItem c : children)
+      {
+         if (c.getType() == XmlItemType.CLASS)
+         {
+            Class cl = c.getJavaClass();
+            rtList.add(cl);
+         }
+      }
+      Class[] alAr = new Class[rtList.size()];
+      for (int i = 0; i < rtList.size(); ++i)
+      {
+         alAr[i] = rtList.get(i);
+      }
+
+      try
+      {
+         method = javaClass.getMethod(methodName, alAr);
+         return true;
+      }
+      catch (SecurityException e)
+      {
+         throw new RuntimeException("Security Exception resolving method " + methodName + " on class " + javaClass.getName());
+      }
+      catch (NoSuchMethodException e)
+      {
+         throw new RuntimeException("NoSuchMethodException resolving method " + methodName + " on class " + javaClass.getName());
+      }
+   }
+
+   public Method getMethod()
+   {
+      return method;
+   }
+
+   public Set<XmlItemType> getAllowedItem()
+   {
+      return allowed;
+   }
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ModelBuilder.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,375 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.model;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+
+import javax.enterprise.inject.Stereotype;
+import javax.inject.Qualifier;
+import javax.interceptor.InterceptorBinding;
+
+import org.jboss.seam.xml.core.BeanResult;
+import org.jboss.seam.xml.core.XmlResult;
+import org.jboss.seam.xml.fieldset.FieldValueObject;
+import org.jboss.seam.xml.parser.SaxNode;
+import org.jboss.seam.xml.parser.namespace.InvalidElementException;
+import org.jboss.seam.xml.parser.namespace.NamespaceElementResolver;
+import org.jboss.seam.xml.parser.namespace.PackageNamespaceElementResolver;
+import org.jboss.seam.xml.parser.namespace.RootNamespaceElementResolver;
+import org.jboss.seam.xml.util.XmlObjectConverter;
+import org.jboss.weld.extensions.util.AnnotationInstanceProvider;
+import org.jboss.weld.extensions.util.annotated.NewAnnotatedTypeBuilder;
+import org.w3c.dom.DOMException;
+
+/**
+ * Parser for xml configration
+ * 
+ * @author stuart
+ * 
+ */
+public class ModelBuilder
+{
+
+   AnnotationInstanceProvider ac = new AnnotationInstanceProvider();
+
+   static final String ROOT_NAMESPACE = "urn:seam:core";
+
+   Map<String, NamespaceElementResolver> resolvers;
+
+   public XmlResult build(SaxNode root)
+   {
+
+      resolvers = new HashMap<String, NamespaceElementResolver>();
+
+      XmlResult ret = new XmlResult();
+
+      if (!root.getName().equals("Beans"))
+      {
+         throw new RuntimeException("Wrong root element for XML config file, expected:<Beans> found:" + root.getName());
+      }
+      if (!ROOT_NAMESPACE.equals(root.getNamespaceUri()))
+      {
+         throw new RuntimeException("Wrong root namespace for XML config file, expected:" + ROOT_NAMESPACE + " found:" + root.getNamespaceUri());
+      }
+
+      resolvers.put(ROOT_NAMESPACE, new RootNamespaceElementResolver());
+
+      List<SaxNode> children = root.getChildren();
+      for (SaxNode node : children)
+      {
+         try
+         {
+            // nodes with a null namespace are whitespace nodes etc
+            if (node.getNamespaceUri() != null)
+            {
+               XmlItem rb = resolveNode(node, null);
+               addNodeToResult(ret, rb);
+            }
+         }
+         catch (Exception e)
+         {
+            ret.addProblem(e.getMessage());
+            e.printStackTrace();
+         }
+      }
+
+      return ret;
+   }
+
+   private void addNodeToResult(XmlResult ret, XmlItem rb) throws InvalidElementException
+   {
+
+      if (rb.getType() == XmlItemType.CLASS || rb.getType() == XmlItemType.ANNOTATION)
+      {
+         ResultType type = getItemType(rb);
+         if (type == ResultType.BEAN)
+         {
+            BeanResult tp = buildAnnotatedType(rb);
+            ret.getBeans().add(tp);
+            List<FieldValueObject> fields = new ArrayList<FieldValueObject>();
+            for (XmlItem xi : rb.getChildren())
+            {
+               if (xi.getType() == XmlItemType.FIELD)
+               {
+                  FieldValueObject f = xi.getFieldValue();
+                  if (f != null)
+                  {
+                     fields.add(f);
+                  }
+               }
+            }
+            if (!fields.isEmpty())
+            {
+               ret.getFieldValues().put(tp, fields);
+            }
+
+         }
+         else if (type == ResultType.QUALIFIER)
+         {
+            ret.getQualifiers().add(rb.getJavaClass());
+         }
+         else if (type == ResultType.INTERCEPTOR_BINDING)
+         {
+            ret.getInterceptorBindings().add(rb.getJavaClass());
+         }
+         else if (type == ResultType.STEREOTYPE)
+         {
+            addSteriotypeToResult(ret, rb);
+         }
+      }
+      else if (rb.getType() == XmlItemType.VETO)
+      {
+         for (XmlItem it : rb.getChildren())
+         {
+            ret.addVeto(it.getJavaClass());
+         }
+      }
+   }
+
+   protected XmlItem resolveNode(SaxNode node, XmlItem parent) throws DOMException, InvalidElementException
+   {
+      NamespaceElementResolver resolver = resolveNamepsace(node.getNamespaceUri());
+
+      Map<String, String> attributes = node.getAttributes();
+      String innerText = node.getInnerText().trim();
+      if (innerText.equals(""))
+      {
+         innerText = null;
+      }
+      XmlItem ret = resolver.getItemForNamespace(node.getName(), parent, innerText, attributes);
+
+      if (ret == null)
+      {
+         throw new InvalidElementException("Could not resolve node " + node.getName() + " in namespace " + node.getNamespaceUri());
+      }
+      List<SaxNode> children = node.getChildren();
+      for (SaxNode n : children)
+      {
+         if (n.getNamespaceUri() != null)
+         {
+            XmlItem rb = resolveNode(n, ret);
+            ret.addChild(rb);
+         }
+      }
+      ret.resolveChildren();
+      return ret;
+
+   }
+
+   protected NamespaceElementResolver resolveNamepsace(String namespaceURI)
+   {
+      if (resolvers.containsKey(namespaceURI))
+      {
+         return resolvers.get(namespaceURI);
+      }
+      String ns = namespaceURI.replaceFirst("urn:java:", "");
+      PackageNamespaceElementResolver res = new PackageNamespaceElementResolver(ns);
+      resolvers.put(namespaceURI, res);
+      return res;
+   }
+
+   /**
+    * Determines the type of an element by examining its child nodes
+    */
+   protected ResultType getItemType(XmlItem item) throws InvalidElementException
+   {
+
+      ResultType ret = null;
+      for (XmlItem it : item.getChildren())
+      {
+         if (it.getType() == XmlItemType.ANNOTATION)
+         {
+            if (it.getJavaClass() == InterceptorBinding.class)
+            {
+               if (ret != null)
+               {
+                  throw new InvalidElementException("Element cannot be both an INTERCEPTOR_BINDING and a " + ret.toString());
+               }
+               else
+               {
+                  ret = ResultType.INTERCEPTOR_BINDING;
+               }
+            }
+            else if (it.getJavaClass() == Qualifier.class)
+            {
+               if (ret != null)
+               {
+                  throw new InvalidElementException("Element cannot be both an QUALIFIER and a " + ret.toString());
+               }
+               else
+               {
+                  ret = ResultType.QUALIFIER;
+               }
+            }
+            else if (it.getJavaClass() == Stereotype.class)
+            {
+               if (ret != null)
+               {
+                  throw new InvalidElementException("Element cannot be both an STEREOTYPE and a " + ret.toString());
+               }
+               else
+               {
+                  ret = ResultType.STEREOTYPE;
+               }
+            }
+         }
+         else if (it.getType() == XmlItemType.VETO)
+         {
+            if (ret != null)
+            {
+               throw new InvalidElementException("Element cannot be both an VETO and a " + ret.toString());
+            }
+            else
+            {
+               ret = ResultType.VETO;
+            }
+         }
+
+      }
+      if (ret == null)
+      {
+         ret = ResultType.BEAN;
+      }
+      return ret;
+   }
+
+   BeanResult buildAnnotatedType(XmlItem rb) throws InvalidElementException
+   {
+      BeanResult result = new BeanResult(rb.getJavaClass());
+      NewAnnotatedTypeBuilder type = result.getBuilder();
+      // list of constructor arguments
+      List<XmlItem> constList = new ArrayList<XmlItem>();
+      for (XmlItem item : rb.getChildren())
+      {
+         if (item.getType() == XmlItemType.ANNOTATION)
+         {
+
+            Annotation a = createAnnotation(item);
+            type.addToClass(a);
+         }
+         else if (item.getType() == XmlItemType.CLASS)
+         {
+            constList.add(item);
+
+         }
+         else if (item.getType() == XmlItemType.FIELD)
+         {
+            for (XmlItem fi : item.getChildren())
+            {
+               if (fi.getType() == XmlItemType.ANNOTATION)
+               {
+                  Annotation a = createAnnotation(fi);
+                  type.addToField(item.getField(), a);
+               }
+            }
+         }
+         else if (item.getType() == XmlItemType.METHOD)
+         {
+            int paramCount = 0;
+            for (XmlItem fi : item.getChildren())
+            {
+               if (fi.getType() == XmlItemType.ANNOTATION)
+               {
+
+                  // TODO: pass in attribute map
+                  Annotation a = createAnnotation(fi);
+                  type.addToMethod(item.getMethod(), a);
+               }
+               else if (fi.getType() == XmlItemType.CLASS)
+               {
+                  int param = paramCount++;
+                  for (XmlItem pan : fi.getChildren())
+                  {
+                     if (pan.getType() == XmlItemType.ANNOTATION)
+                     {
+                        Annotation a = createAnnotation(pan);
+                        type.addToMethodParameter(item.getMethod(), param, a);
+                     }
+                     else
+                     {
+                        throw new RuntimeException("Method parameters may only have annotations as children in " + item.getJavaClass().getName());
+                     }
+                  }
+               }
+            }
+         }
+         else if (item.getType() == XmlItemType.DEPENDENCY)
+         {
+            result.getDependencies().add(item.getInnerText());
+         }
+      }
+      if (!constList.isEmpty())
+      {
+         // the bean defined constructor arguments
+      }
+      return result;
+   }
+
+   void addSteriotypeToResult(XmlResult ret, XmlItem rb) throws InvalidElementException
+   {
+
+      Annotation[] values = new Annotation[rb.getChildren().size()];
+      int count = 0;
+      for (XmlItem item : rb.getChildren())
+      {
+         if (item.getType() == XmlItemType.ANNOTATION)
+         {
+            Annotation a = createAnnotation(item);
+            values[count] = a;
+         }
+         else
+         {
+            throw new InvalidElementException("Setereotype " + rb.getJavaClass() + " has an item that does not represent an annotation in its XML configurations");
+         }
+         count++;
+      }
+      ret.getStereotypes().put(rb.getJavaClass(), values);
+
+   }
+
+   Annotation createAnnotation(XmlItem item) throws InvalidElementException
+   {
+      Map<String, Object> typedVars = new HashMap<String, Object>();
+      Class anClass = item.getJavaClass();
+      for (Entry<String, String> e : item.getAttributes().entrySet())
+      {
+         String mname = e.getKey();
+         Method m;
+         try
+         {
+            m = anClass.getDeclaredMethod(mname);
+         }
+         catch (Exception e1)
+         {
+            throw new InvalidElementException("Annotation " + item.getJavaClass().getName() + " does not have a member named " + mname + " ,error in XML");
+         }
+         Class returnType = m.getReturnType();
+         typedVars.put(mname, XmlObjectConverter.convert(returnType, e.getValue()));
+      }
+
+      return ac.get(item.getJavaClass(), typedVars);
+   }
+
+   public void validateXmlItem(XmlItem item)
+   {
+      Set<XmlItemType> allowed = item.getAllowedItem();
+      for (XmlItem i : item.getChildren())
+      {
+         if (!allowed.contains(item.getType()))
+         {
+            throw new RuntimeException("Item " + item.getType() + " is not allowed to contain " + i.getType());
+         }
+         validateXmlItem(i);
+      }
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ResultType.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ResultType.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ResultType.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,10 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.model;
+
+public enum ResultType
+{
+   BEAN, INTERCEPTOR_BINDING, STEREOTYPE, QUALIFIER, VETO;
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ValueXmlItem.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ValueXmlItem.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/ValueXmlItem.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,22 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.model;
+
+import java.util.Collections;
+import java.util.Set;
+
+public class ValueXmlItem extends AbstractXmlItem
+{
+
+   public ValueXmlItem(XmlItem parent, String innerText)
+   {
+      super(XmlItemType.VALUE, parent, null, innerText, null);
+   }
+
+   public Set<XmlItemType> getAllowedItem()
+   {
+      return Collections.EMPTY_SET;
+   }
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/VetoXmlItem.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/VetoXmlItem.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/VetoXmlItem.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,24 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.model;
+
+import java.util.Collections;
+import java.util.Set;
+
+public class VetoXmlItem extends AbstractXmlItem
+{
+
+   public VetoXmlItem(XmlItem parent)
+   {
+      super(XmlItemType.VETO, parent, null, null, null);
+
+   }
+
+   public Set<XmlItemType> getAllowedItem()
+   {
+      return Collections.singleton(XmlItemType.CLASS);
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/XmlItem.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/XmlItem.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/XmlItem.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,48 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.model;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.jboss.seam.xml.fieldset.FieldValueObject;
+
+public interface XmlItem
+{
+
+   public String getInnerText();
+
+   public void addChild(XmlItem xmlItem);
+
+   public XmlItem getParent();
+
+   public List<XmlItem> getChildren();
+
+   public XmlItemType getType();
+
+   public Field getField();
+
+   public Method getMethod();
+
+   public Class getJavaClass();
+
+   /**
+    * attempts to resolve any information that is not availbile at parse time
+    * 
+    * @param childeren
+    * @return
+    */
+   public boolean resolveChildren();
+
+   public Map<String, String> getAttributes();
+
+   public FieldValueObject getFieldValue();
+
+   public Set<XmlItemType> getAllowedItem();
+
+}
\ No newline at end of file

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/XmlItemType.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/XmlItemType.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/model/XmlItemType.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,10 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.model;
+
+public enum XmlItemType
+{
+   CLASS, METHOD, FIELD, ANNOTATION, VALUE, VETO, ENTRY, KEY, DEPENDENCY;
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/ParserMain.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/ParserMain.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/ParserMain.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,111 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.parser;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.DefaultHandler;
+import org.xml.sax.helpers.XMLReaderFactory;
+
+/**
+ * Parser for xml configration
+ * 
+ * @author Stuart Douglas <stuart at baileyroberts.com.au>
+ * 
+ */
+public class ParserMain extends DefaultHandler
+{
+
+   SaxNode parentNode = null;
+
+   SaxNode currentNode = null;
+
+   Locator locator;
+
+   String currentText = "";
+
+   String document;
+
+   public SaxNode parse(InputSource inputSource, String fileUrl)
+   {
+      document = fileUrl;
+      try
+      {
+
+         XMLReader xr = XMLReaderFactory.createXMLReader();
+
+         xr.setContentHandler(this);
+         xr.setErrorHandler(this);
+         xr.parse(inputSource);
+
+         return parentNode;
+
+      }
+      catch (SAXException e)
+      {
+         throw new RuntimeException(e);
+      }
+      catch (IOException e)
+      {
+         throw new RuntimeException(e);
+      }
+
+   }
+
+   @Override
+   public void characters(char[] ch, int start, int length) throws SAXException
+   {
+      currentText = currentText + new String(ch, start, length);
+   }
+
+   @Override
+   public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
+   {
+      Map<String, String> atmap = new HashMap<String, String>();
+      for (int i = 0; i < attributes.getLength(); ++i)
+      {
+         atmap.put(attributes.getLocalName(i), attributes.getValue(i));
+      }
+      int pos = 0;
+      if (locator != null)
+      {
+         pos = locator.getLineNumber();
+      }
+      SaxNode node = new SaxNode(localName, uri, atmap, currentNode, document, pos);
+      if (currentNode == null)
+      {
+         parentNode = node;
+      }
+      else
+      {
+         currentNode.addChild(node);
+      }
+
+      currentNode = node;
+      currentText = "";
+   }
+
+   @Override
+   public void endElement(String uri, String localName, String qName) throws SAXException
+   {
+      currentNode.setInnerText(currentText);
+      currentNode = currentNode.getParent();
+      currentText = "";
+   }
+
+   @Override
+   public void setDocumentLocator(Locator locator)
+   {
+      this.locator = locator;
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/SaxNode.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/SaxNode.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/SaxNode.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,84 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.parser;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+public class SaxNode
+{
+
+   SaxNode(String name, String uri, Map<String, String> attributes, SaxNode parent, String document, int lineNo)
+   {
+      this.name = name;
+      this.namespaceUri = uri;
+      this.attributes = attributes;
+      this.parent = parent;
+      this.document = document;
+      this.lineNo = lineNo;
+   }
+
+   String innerText;
+   final String namespaceUri;
+   final String name;
+   final Map<String, String> attributes;
+   final String document;
+   final int lineNo;
+   List<SaxNode> children = new ArrayList<SaxNode>();
+   final SaxNode parent;
+
+   public String getInnerText()
+   {
+      return innerText;
+   }
+
+   public void setInnerText(String innerText)
+   {
+      this.innerText = innerText;
+   }
+
+   public String getNamespaceUri()
+   {
+      return namespaceUri;
+   }
+
+   public String getName()
+   {
+      return name;
+   }
+
+   public Map<String, String> getAttributes()
+   {
+      return attributes;
+   }
+
+   public String getDocument()
+   {
+      return document;
+   }
+
+   public int getLineNo()
+   {
+      return lineNo;
+   }
+
+   public void addChild(SaxNode node)
+   {
+      this.children.add(node);
+   }
+
+   public List<SaxNode> getChildren()
+   {
+      return Collections.unmodifiableList(children);
+   }
+
+   public SaxNode getParent()
+   {
+      return parent;
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/CompositeNamespaceElementResolver.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/CompositeNamespaceElementResolver.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/CompositeNamespaceElementResolver.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,63 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.parser.namespace;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.jboss.seam.xml.model.XmlItem;
+
+/**
+ * Namespace resolver that searches through a list of packages
+ * 
+ * @author Stuart Douglas <stuart at baileyroberts.com.au>
+ * 
+ */
+public class CompositeNamespaceElementResolver implements NamespaceElementResolver
+{
+
+   Set<String> notFound = new HashSet<String>();
+   List<PackageNamespaceElementResolver> resolvers = new ArrayList<PackageNamespaceElementResolver>();
+
+   public CompositeNamespaceElementResolver(Collection<String> packages)
+   {
+      for (String s : packages)
+      {
+         resolvers.add(new PackageNamespaceElementResolver(s));
+      }
+   }
+
+   public CompositeNamespaceElementResolver(String[] packages)
+   {
+      for (String s : packages)
+      {
+         resolvers.add(new PackageNamespaceElementResolver(s));
+      }
+   }
+
+   public XmlItem getItemForNamespace(String item, XmlItem parent, String innerText, Map<String, String> attributes) throws InvalidElementException
+   {
+      if (notFound.contains(item))
+      {
+         return null;
+      }
+
+      for (PackageNamespaceElementResolver p : resolvers)
+      {
+         XmlItem xi = p.getItemForNamespace(item, parent, innerText, attributes);
+         if (xi != null)
+         {
+            return xi;
+         }
+      }
+      notFound.add(item);
+      return null;
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/InvalidElementException.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/InvalidElementException.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/InvalidElementException.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,16 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.parser.namespace;
+
+/**
+ * Exception thrown when both a method and a field have the same name
+ */
+public class InvalidElementException extends Exception
+{
+   public InvalidElementException(String message)
+   {
+      super(message);
+   }
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/NamespaceElementResolver.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/NamespaceElementResolver.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/NamespaceElementResolver.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,16 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.parser.namespace;
+
+import java.util.Map;
+
+import org.jboss.seam.xml.model.XmlItem;
+
+public interface NamespaceElementResolver
+{
+
+   XmlItem getItemForNamespace(String item, XmlItem parent, String innerText, Map<String, String> attributes) throws InvalidElementException;
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/NamespaceUtils.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/NamespaceUtils.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/NamespaceUtils.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,65 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.parser.namespace;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import org.jboss.seam.xml.model.FieldXmlItem;
+import org.jboss.seam.xml.model.MethodXmlItem;
+import org.jboss.seam.xml.model.XmlItem;
+
+class NamespaceUtils
+{
+   static XmlItem resolveMethodOrField(String name, XmlItem parent, String innerText) throws InvalidElementException
+   {
+      Class p = parent.getJavaClass();
+      Field f = null;
+      boolean methodFound = false;
+      f = getField(p, name);
+      for (Method m : parent.getJavaClass().getMethods())
+      {
+         if (m.getName().equals(name))
+         {
+            methodFound = true;
+            break;
+         }
+      }
+      if (methodFound && f != null)
+      {
+         throw new InvalidElementException(parent.getJavaClass().getName() + " has both a method and a field named " + name + " and so cannot be configured via XML");
+      }
+      if (methodFound)
+      {
+         return new MethodXmlItem(parent, name);
+      }
+      else if (f != null)
+      {
+         return new FieldXmlItem(parent, f, innerText);
+      }
+      return null;
+   }
+
+   /**
+    * we need access to private fields so we cannot just use getField
+    */
+   public static Field getField(Class parent, String name)
+   {
+      Class p = parent;
+      while (p != Object.class)
+      {
+         try
+         {
+            return p.getDeclaredField(name);
+         }
+         catch (Exception e1)
+         {
+
+         }
+         p = p.getSuperclass();
+      }
+      return null;
+   }
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/PackageNamespaceElementResolver.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,85 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.parser.namespace;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.jboss.seam.xml.model.AnnotationXmlItem;
+import org.jboss.seam.xml.model.ClassXmlItem;
+import org.jboss.seam.xml.model.XmlItem;
+import org.jboss.seam.xml.model.XmlItemType;
+
+public class PackageNamespaceElementResolver implements NamespaceElementResolver
+{
+   String pack;
+   Map<String, Class> cache = new HashMap<String, Class>();
+   Set<String> notFound = new HashSet<String>();
+
+   public PackageNamespaceElementResolver(String pack)
+   {
+      this.pack = pack + ".";
+   }
+
+   public XmlItem getItemForNamespace(String name, XmlItem parent, String innerText, Map<String, String> attributes) throws InvalidElementException
+   {
+      if (notFound.contains(name))
+      {
+         return null;
+      }
+
+      try
+      {
+         Class c;
+         if (cache.containsKey(name))
+         {
+            c = cache.get(name);
+         }
+         else
+         {
+            c = getClass().getClassLoader().loadClass(pack + name);
+            cache.put(name, c);
+         }
+         if (c.isAnnotation())
+         {
+            return new AnnotationXmlItem(parent, c, innerText, attributes);
+         }
+         else
+         {
+            return new ClassXmlItem(parent, c);
+         }
+
+      }
+      catch (ClassNotFoundException e)
+      {
+
+      }
+      catch (NoClassDefFoundError e) // this can get thrown when there is a
+      // case insensitive file system
+      {
+
+      }
+      if (parent != null)
+      {
+         // if the item can be a method of a FIELD
+         if (parent.getAllowedItem().contains(XmlItemType.METHOD) || parent.getAllowedItem().contains(XmlItemType.FIELD))
+         {
+            return NamespaceUtils.resolveMethodOrField(name, parent, innerText);
+         }
+         else
+         {
+            notFound.add(name);
+         }
+      }
+      else
+      {
+         notFound.add(name);
+      }
+      return null;
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/RootNamespaceElementResolver.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/RootNamespaceElementResolver.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/parser/namespace/RootNamespaceElementResolver.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,66 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.parser.namespace;
+
+import java.util.Map;
+
+import org.jboss.seam.xml.model.ArrayXmlItem;
+import org.jboss.seam.xml.model.DependsXmlItem;
+import org.jboss.seam.xml.model.EntryXmlItem;
+import org.jboss.seam.xml.model.KeyXmlItem;
+import org.jboss.seam.xml.model.ValueXmlItem;
+import org.jboss.seam.xml.model.VetoXmlItem;
+import org.jboss.seam.xml.model.XmlItem;
+
+public class RootNamespaceElementResolver implements NamespaceElementResolver
+{
+
+   CompositeNamespaceElementResolver delegate;
+   static final String[] namspaces = { "java.lang", "java.util", "javax.annotation", "javax.inject", "javax.enterprise.inject", "javax.enterprise.context", "javax.enterprise.event", "javax.decorator", "javax.interceptor", "javax.persistence", "javax.xml.ws", "javax.jms", "javax.sql" };
+
+   public RootNamespaceElementResolver()
+   {
+      delegate = new CompositeNamespaceElementResolver(namspaces);
+   }
+
+   public XmlItem getItemForNamespace(String item, XmlItem parent, String innerText, Map<String, String> attributes) throws InvalidElementException
+   {
+      XmlItem ret = getRootItem(item, parent, innerText);
+      if (ret != null)
+         return ret;
+      return delegate.getItemForNamespace(item, parent, innerText, attributes);
+
+   }
+
+   XmlItem getRootItem(String item, XmlItem parent, String innerText)
+   {
+      if (item.equals("value") || item.equals("v"))
+      {
+         return new ValueXmlItem(parent, innerText);
+      }
+      else if (item.equals("key") || item.equals("k"))
+      {
+         return new KeyXmlItem(parent, innerText);
+      }
+      else if (item.equals("entry") || item.equals("e"))
+      {
+         return new EntryXmlItem(parent);
+      }
+      else if (item.equals("array"))
+      {
+         return new ArrayXmlItem(parent);
+      }
+      else if (item.equals("veto"))
+      {
+         return new VetoXmlItem(parent);
+      }
+      else if (item.equals("depends"))
+      {
+         return new DependsXmlItem(parent, innerText);
+      }
+      return null;
+   }
+
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/FileDataReader.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/FileDataReader.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/FileDataReader.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,43 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+
+/**
+ * Utility class that reads a file or URL into a String
+ * 
+ * @author Stuart Douglas <stuart at baileyroberts.com.au>
+ * 
+ */
+public class FileDataReader
+{
+
+   public static String readUrl(URL u) throws IOException
+   {
+      InputStream s = u.openStream();
+      String res = readFile(s);
+      s.close();
+      return res;
+   }
+
+   public static String readFile(InputStream file) throws IOException
+   {
+      InputStreamReader reader = new InputStreamReader(file);
+      StringBuilder fileData = new StringBuilder();
+      char[] buf = new char[1024];
+      int numRead = 0;
+
+      while ((numRead = reader.read(buf)) != -1)
+      {
+         String readData = String.valueOf(buf, 0, numRead);
+         fileData.append(readData);
+      }
+      return fileData.toString();
+   }
+}

Added: modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/XmlObjectConverter.java
===================================================================
--- modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/XmlObjectConverter.java	                        (rev 0)
+++ modules/xml/trunk/src/main/java/org/jboss/seam/xml/util/XmlObjectConverter.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,172 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.util;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.util.Calendar;
+
+/**
+ * utility class that can convert a string representation of a type into an
+ * instance of that type
+ * 
+ * @author Stuart Douglas <stuart at baileyroberts.com.au>
+ * 
+ */
+public class XmlObjectConverter
+{
+   public static Object convert(Class target, String value)
+   {
+      if (target == String.class)
+      {
+         return value;
+      }
+      else if (target.isEnum())
+      {
+         return Enum.valueOf((Class<Enum>) target, value);
+      }
+      else if (target == Class.class)
+      {
+         Class dval = null;
+
+         try
+         {
+            return XmlObjectConverter.class.getClassLoader().loadClass(value);
+         }
+         catch (ClassNotFoundException e)
+         {
+            try
+            {
+               return Thread.currentThread().getContextClassLoader().loadClass(value);
+            }
+            catch (ClassNotFoundException e1)
+            {
+               throw new RuntimeException("Could not set field value to class configured in XML: " + value, e1);
+            }
+         }
+      }
+      // Date and time
+      else if (java.sql.Date.class == target)
+      {
+         try
+         {
+            java.util.Date dval = DateFormat.getDateTimeInstance().parse(value);
+            return new java.sql.Date(dval.getYear(), dval.getMonth(), dval.getDay());
+
+         }
+         catch (ParseException e)
+         {
+            throw new RuntimeException("Cannot parse javax.sql.Date field value: " + value, e);
+         }
+
+      }
+      else if (java.sql.Time.class == target)
+      {
+         try
+         {
+            java.util.Date dval = DateFormat.getDateTimeInstance().parse(value);
+            return new java.sql.Time(dval.getHours(), dval.getMinutes(), dval.getSeconds());
+         }
+         catch (ParseException e)
+         {
+            throw new RuntimeException("Cannot parse javax.sql.Date field value: " + value, e);
+         }
+
+      }
+      else if (java.sql.Timestamp.class == target)
+      {
+         try
+         {
+            java.util.Date dval = DateFormat.getDateTimeInstance().parse(value);
+            return new java.sql.Timestamp(dval.getYear(), dval.getMonth(), dval.getDay(), dval.getHours(), dval.getMinutes(), dval.getSeconds(), 0);
+
+         }
+         catch (ParseException e)
+         {
+            throw new RuntimeException("Cannot parse javax.sql.Date field value: " + value, e);
+         }
+
+      }
+      else if (Calendar.class == target)
+      {
+         try
+         {
+            java.util.Date dval = DateFormat.getDateTimeInstance().parse(value);
+            final Calendar val = Calendar.getInstance();
+            val.setTime(dval);
+            return val;
+         }
+         catch (ParseException e)
+         {
+            throw new RuntimeException("Cannot parse Calendar field value: " + value, e);
+         }
+
+      }
+      else if (java.util.Date.class == target)
+      {
+         try
+         {
+            return DateFormat.getDateTimeInstance().parse(value);
+
+         }
+         catch (ParseException e)
+         {
+            throw new RuntimeException("Cannot parse Calendar field value: " + value, e);
+         }
+
+      }
+      else if (target == BigDecimal.class)
+      {
+         return new BigDecimal(value);
+      }
+      else if (target == BigInteger.class)
+      {
+         return new BigInteger(value);
+      }
+      // primitive types
+      else if (target == char.class || target == Character.class)
+      {
+         if (value.length() != 1)
+         {
+            throw new RuntimeException("Value of a char field must be exactly 1 character long");
+         }
+         return new Character(value.charAt(0));
+      }
+      else if (target == int.class || target == Integer.class)
+      {
+         return Integer.parseInt(value);
+
+      }
+      else if (target == short.class || target == Short.class)
+      {
+         return new Short(value);
+
+      }
+      else if (target == long.class || target == Long.class)
+      {
+         return new Long(value);
+      }
+      else if (target == byte.class || target == byte.class)
+      {
+         return new Byte(value);
+
+      }
+      else if (target == double.class || target == Double.class)
+      {
+         return new Double(value);
+      }
+      else if (target == float.class || target == Float.class)
+      {
+         return new Float(value);
+      }
+      else if (target == boolean.class || target == Boolean.class)
+      {
+         return new Boolean(value);
+      }
+      throw new RuntimeException("Could not convert value " + value + " to " + target.getName());
+   }
+}

Added: modules/xml/trunk/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
===================================================================
--- modules/xml/trunk/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension	                        (rev 0)
+++ modules/xml/trunk/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1 @@
+org.jboss.seam.xml.bootstrap.XmlExtension

Added: modules/xml/trunk/src/main/resources/META-INF/services/org.jboss.seam.xml.XmlExtension
===================================================================
--- modules/xml/trunk/src/main/resources/META-INF/services/org.jboss.seam.xml.XmlExtension	                        (rev 0)
+++ modules/xml/trunk/src/main/resources/META-INF/services/org.jboss.seam.xml.XmlExtension	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1 @@
+org.jboss.seam.xml.bootstrap.ClassPathXmlDocumentProvider
\ No newline at end of file

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/AbstractXMLTest.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/AbstractXMLTest.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/AbstractXMLTest.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,61 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test;
+
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.AnnotationLiteral;
+
+import org.jboss.weld.environment.se.StartMain;
+import org.jboss.weld.environment.se.events.Shutdown;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+
+public abstract class AbstractXMLTest
+{
+
+   public static String[] ARGS_EMPTY = new String[] {};
+
+   protected BeanManager manager;
+
+   protected abstract String getXmlFileName();
+
+   @BeforeClass
+   public void setup()
+   {
+      String fileName = getClass().getPackage().getName().replace('.', '/') + "/" + getXmlFileName();
+      TestXmlProvider.fileName = fileName;
+      manager = new StartMain(ARGS_EMPTY).go();
+   }
+
+   @AfterClass
+   public void teardown()
+   {
+      manager.fireEvent(manager, new ShutdownAnnotation());
+   }
+
+   public <T> T getReference(Class<T> clazz, Annotation... bindings)
+   {
+      Set<Bean<?>> beans = manager.getBeans(clazz, bindings);
+      if (beans.isEmpty())
+      {
+         throw new RuntimeException("No bean found with class: " + clazz + " and bindings " + bindings.toString());
+      }
+      else if (beans.size() != 1)
+      {
+         throw new RuntimeException("More than one bean found with class: " + clazz + " and bindings " + bindings.toString());
+      }
+      Bean bean = beans.iterator().next();
+      return (T) bean.create(manager.createCreationalContext(bean));
+   }
+
+   protected static class ShutdownAnnotation extends AnnotationLiteral<org.jboss.weld.environment.se.events.Shutdown> implements Shutdown
+   {
+   }
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/BootstrapTest.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/BootstrapTest.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/BootstrapTest.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,33 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test;
+
+import java.util.List;
+
+import org.jboss.seam.xml.bootstrap.XmlDocumentProvider;
+import org.jboss.seam.xml.bootstrap.XmlExtension;
+import org.testng.annotations.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class BootstrapTest extends AbstractXMLTest
+{
+
+   @Override
+   protected String getXmlFileName()
+   {
+      return "single-bean.xml";
+   }
+
+   @Test
+   public void testDocumentProviders()
+   {
+      XmlExtension x = getReference(XmlExtension.class);
+      List<Class<? extends XmlDocumentProvider>> providers = x.getDocumentProviders();
+      assert providers.size() == 2;
+
+   }
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/NamespaceResolverTest.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/NamespaceResolverTest.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/NamespaceResolverTest.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,60 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.seam.xml.model.XmlItem;
+import org.jboss.seam.xml.model.XmlItemType;
+import org.jboss.seam.xml.parser.namespace.CompositeNamespaceElementResolver;
+import org.jboss.seam.xml.parser.namespace.InvalidElementException;
+import org.jboss.seam.xml.parser.namespace.NamespaceElementResolver;
+import org.jboss.seam.xml.parser.namespace.PackageNamespaceElementResolver;
+import org.jboss.seam.xml.test.simple.Bean1;
+import org.testng.annotations.Test;
+
+public class NamespaceResolverTest
+{
+
+   @Test
+   public void testPackageResolver() throws InvalidElementException
+   {
+      PackageNamespaceElementResolver resolver = new PackageNamespaceElementResolver("org.jboss.seam.xml.test.simple");
+      testResolver(resolver);
+   }
+
+   @Test
+   public void testCompositePackageResolver() throws InvalidElementException
+   {
+      List<String> namespaces = new ArrayList<String>();
+      namespaces.add("java.lang");
+      namespaces.add("java.util");
+      namespaces.add("org.jboss.seam.xml.test.simple");
+      CompositeNamespaceElementResolver resolver = new CompositeNamespaceElementResolver(namespaces);
+      testResolver(resolver);
+   }
+
+   public void testResolver(NamespaceElementResolver resolver) throws InvalidElementException
+   {
+
+      XmlItem item = resolver.getItemForNamespace("Bean1", null, null, null);
+      assert item.getJavaClass() == Bean1.class : "Namespace resolver returned wrong class type";
+      assert item.getType() == XmlItemType.CLASS : "Namespace resolver did not return class";
+      XmlItem method = resolver.getItemForNamespace("method1", item, null, null);
+      assert method.getType() == XmlItemType.METHOD : "Item returned wrong type";
+
+      method.resolveChildren();
+
+      assert method.getMethod() != null : "Could not resolve method";
+      assert method.getMethod().getParameterTypes().length == 0 : "Wrong method was resolved";
+
+      XmlItem field = resolver.getItemForNamespace("field1", item, null, null);
+      assert field.getType() == XmlItemType.FIELD : "Element of wrong type returned";
+      assert field.getField() != null : "field was not set";
+
+   }
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/TestXmlProvider.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/TestXmlProvider.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/TestXmlProvider.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,36 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test;
+
+import org.jboss.seam.xml.bootstrap.ClassPathXmlDocumentProvider;
+import org.jboss.seam.xml.bootstrap.XmlDocument;
+import org.jboss.seam.xml.bootstrap.XmlDocumentProvider;
+
+public class TestXmlProvider implements XmlDocumentProvider
+{
+
+   public static String fileName;
+
+   ClassPathXmlDocumentProvider docProvider;
+
+   public void close()
+   {
+      docProvider.close();
+   }
+
+   public XmlDocument getNextDocument()
+   {
+      return docProvider.getNextDocument();
+   }
+
+   public void open()
+   {
+      String[] r = new String[1];
+      r[0] = fileName;
+      docProvider = new ClassPathXmlDocumentProvider(r);
+      docProvider.open();
+   }
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/ArrayFieldValue.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/ArrayFieldValue.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/ArrayFieldValue.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,12 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.fieldset;
+
+public class ArrayFieldValue
+{
+   public int[] iarray;
+   public Class[] carray;
+   public String[] sarray;
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/CollectionFieldValue.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/CollectionFieldValue.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/CollectionFieldValue.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,16 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.fieldset;
+
+import java.util.List;
+import java.util.Set;
+import java.util.SortedSet;
+
+public class CollectionFieldValue
+{
+   public Set<Integer> iset;
+   public SortedSet<String> sset;
+   public List<Class> clist;
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/FieldValueBean.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/FieldValueBean.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/FieldValueBean.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,32 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.fieldset;
+
+import java.math.BigDecimal;
+
+import org.jboss.seam.xml.test.method.QualifierEnum;
+
+public class FieldValueBean
+{
+
+   public int ivalue = 20;
+
+   public String stringValue;
+
+   public QualifierEnum enumValue;
+
+   public boolean bvalue;
+
+   public float fvalue = 1;
+
+   public double dvalue = 1;
+
+   public BigDecimal bigDecimalValue;
+
+   public short svalue;
+
+   public long lvalue;
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/FieldValueProducer.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/FieldValueProducer.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/FieldValueProducer.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,10 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.fieldset;
+
+public class FieldValueProducer
+{
+   public String value;
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/MapFieldValue.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/MapFieldValue.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/MapFieldValue.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,14 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.fieldset;
+
+import java.util.Map;
+
+public class MapFieldValue
+{
+   public Map<Integer, String> map1;
+
+   public Map<String, Class> map2;
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/SetArrayFieldValueBeanTest.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/SetArrayFieldValueBeanTest.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/SetArrayFieldValueBeanTest.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,36 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.fieldset;
+
+import org.jboss.seam.xml.test.AbstractXMLTest;
+import org.jboss.weld.environment.se.util.WeldManagerUtils;
+import org.testng.annotations.Test;
+
+public class SetArrayFieldValueBeanTest extends AbstractXMLTest
+{
+
+   @Override
+   protected String getXmlFileName()
+   {
+      return "array-set-field-value-beans.xml";
+   }
+
+   @Test
+   public void arrayFieldSetterTest()
+   {
+      ArrayFieldValue x = WeldManagerUtils.getInstanceByType(manager, ArrayFieldValue.class);
+      assert x.carray.length == 2;
+      assert x.iarray.length == 2;
+      assert x.sarray.length == 2;
+      assert x.sarray[0].equals("hello");
+      assert x.sarray[1].equals("world");
+      assert x.iarray[0] == 1;
+      assert x.iarray[1] == 2;
+      assert x.carray[0] == Integer.class;
+      assert x.carray[1] == Long.class;
+
+   }
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/SetCollectionFieldValueBeanTest.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/SetCollectionFieldValueBeanTest.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/SetCollectionFieldValueBeanTest.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,59 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.fieldset;
+
+import org.jboss.seam.xml.test.AbstractXMLTest;
+import org.jboss.weld.environment.se.util.WeldManagerUtils;
+import org.testng.annotations.Test;
+
+public class SetCollectionFieldValueBeanTest extends AbstractXMLTest
+{
+
+   @Override
+   protected String getXmlFileName()
+   {
+      return "colection-set-field-value-beans.xml";
+   }
+
+   @Test
+   public void collectionSetFieldValue()
+   {
+      CollectionFieldValue x = WeldManagerUtils.getInstanceByType(manager, CollectionFieldValue.class);
+      assert x.iset.size() == 2;
+      assert x.clist.size() == 2;
+      assert x.sset.size() == 2;
+      boolean first = true;
+      for (String i : x.sset)
+      {
+         if (first)
+         {
+            assert i.equals("1");
+            first = false;
+         }
+         else
+         {
+            assert i.equals("2");
+         }
+
+      }
+      first = true;
+      for (Integer i : x.iset)
+      {
+         if (first)
+         {
+            assert i.equals(new Integer(1));
+            first = false;
+         }
+         else
+         {
+            assert i.equals(new Integer(2));
+         }
+
+      }
+      assert x.clist.get(0) == Integer.class;
+      assert x.clist.get(1) == Long.class;
+
+   }
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/SetFieldValueBeanTest.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/SetFieldValueBeanTest.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/SetFieldValueBeanTest.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,37 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.fieldset;
+
+import java.math.BigDecimal;
+
+import org.jboss.seam.xml.test.AbstractXMLTest;
+import org.jboss.seam.xml.test.method.QualifierEnum;
+import org.testng.annotations.Test;
+
+public class SetFieldValueBeanTest extends AbstractXMLTest
+{
+
+   @Override
+   protected String getXmlFileName()
+   {
+      return "set-field-value-beans.xml";
+   }
+
+   @Test
+   public void simpleFieldSetterTest()
+   {
+      FieldValueBean x = getReference(FieldValueBean.class);
+      assert x.bigDecimalValue.compareTo(BigDecimal.TEN) == 0;
+      assert x.bvalue == true;
+      assert x.dvalue == 0;
+      assert x.enumValue == QualifierEnum.A;
+      assert x.fvalue == 0;
+      assert x.ivalue == 10;
+      assert x.lvalue == 23;
+      assert x.svalue == 4;
+
+   }
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/SetMapFieldValueBeanTest.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/SetMapFieldValueBeanTest.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/fieldset/SetMapFieldValueBeanTest.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,33 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.fieldset;
+
+import org.jboss.seam.xml.test.AbstractXMLTest;
+import org.jboss.weld.environment.se.util.WeldManagerUtils;
+import org.testng.annotations.Test;
+
+public class SetMapFieldValueBeanTest extends AbstractXMLTest
+{
+
+   @Override
+   protected String getXmlFileName()
+   {
+      return "map-set-field-value-beans.xml";
+   }
+
+   @Test
+   public void mapSetFieldValue()
+   {
+      MapFieldValue x = WeldManagerUtils.getInstanceByType(manager, MapFieldValue.class);
+      assert x.map1.size() == 2;
+      assert x.map2.size() == 2;
+
+      assert x.map1.get(1).equals("hello");
+      assert x.map1.get(2).equals("world");
+      assert x.map2.get("1") == Integer.class;
+      assert x.map2.get("2") == Long.class;
+
+   }
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/OtherQualifier.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/OtherQualifier.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/OtherQualifier.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,16 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.injection;
+
+import org.jboss.seam.xml.test.method.QualifierEnum;
+
+public @interface OtherQualifier
+{
+   String value1();
+
+   int value2();
+
+   QualifierEnum value();
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/ProducerBean.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/ProducerBean.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/ProducerBean.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,11 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.injection;
+
+public class ProducerBean
+{
+   public String value;
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/ProducerFieldValueBeanTest.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/ProducerFieldValueBeanTest.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/ProducerFieldValueBeanTest.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,27 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.injection;
+
+import org.jboss.seam.xml.test.AbstractXMLTest;
+import org.testng.annotations.Test;
+
+public class ProducerFieldValueBeanTest extends AbstractXMLTest
+{
+
+   @Override
+   protected String getXmlFileName()
+   {
+      return "producer-field-value-beans.xml";
+   }
+
+   @Test
+   public void testProducerField()
+   {
+
+      RecieverBean s = getReference(RecieverBean.class);
+      assert s.value.equals("hello world");
+   }
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/ProducerQualifier.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/ProducerQualifier.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/ProducerQualifier.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,21 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.injection;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target( { TYPE, METHOD, PARAMETER, FIELD })
+public @interface ProducerQualifier
+{
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/QualifiedBean1.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/QualifiedBean1.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/QualifiedBean1.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,17 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.injection;
+
+import org.jboss.seam.xml.test.method.QualifiedType;
+
+public class QualifiedBean1 implements QualifiedType
+{
+
+   public int getBeanNumber()
+   {
+      return 1;
+   }
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/QualifiedBean2.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/QualifiedBean2.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/QualifiedBean2.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,17 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.injection;
+
+import org.jboss.seam.xml.test.method.QualifiedType;
+
+public class QualifiedBean2 implements QualifiedType
+{
+
+   public int getBeanNumber()
+   {
+      return 2;
+   }
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/QualifierAttributesTest.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/QualifierAttributesTest.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/QualifierAttributesTest.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,31 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.injection;
+
+import org.jboss.seam.xml.test.AbstractXMLTest;
+import org.jboss.weld.environment.se.util.WeldManagerUtils;
+import org.testng.annotations.Test;
+
+/**
+ * Test that XML configured Qualifiers work as expected
+ */
+public class QualifierAttributesTest extends AbstractXMLTest
+{
+
+   @Override
+   protected String getXmlFileName()
+   {
+      return "qualifier-attributes-test-beans.xml";
+   }
+
+   @Test()
+   public void tstQualifiersWithAttributes()
+   {
+      QualifierTestBean x = WeldManagerUtils.getInstanceByType(manager, QualifierTestBean.class);
+      assert x.bean1.getBeanNumber() == 1;
+      assert x.bean2.getBeanNumber() == 2;
+
+   }
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/QualifierTestBean.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/QualifierTestBean.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/QualifierTestBean.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,16 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.injection;
+
+import org.jboss.seam.xml.test.method.QualifiedType;
+
+public class QualifierTestBean
+{
+
+   public QualifiedType bean1;
+
+   public QualifiedType bean2;
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/RecieverBean.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/RecieverBean.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/injection/RecieverBean.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,10 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.injection;
+
+public class RecieverBean
+{
+   public String value;
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/interceptor/InterceptedBean.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/interceptor/InterceptedBean.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/interceptor/InterceptedBean.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,16 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.interceptor;
+
+ at InterceptorBinding
+public class InterceptedBean
+{
+
+   public String method()
+   {
+      return "hello";
+   }
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/interceptor/InterceptorBean.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/interceptor/InterceptorBean.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/interceptor/InterceptorBean.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,18 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.interceptor;
+
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.InvocationContext;
+
+public class InterceptorBean
+{
+
+   @AroundInvoke
+   public Object myMethod(InvocationContext context) throws Exception
+   {
+      return context.proceed().toString() + " world";
+   }
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/interceptor/InterceptorBinding.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/interceptor/InterceptorBinding.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/interceptor/InterceptorBinding.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,17 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.interceptor;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target( { ElementType.TYPE, ElementType.METHOD })
+public @interface InterceptorBinding
+{
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/interceptor/InterceptorTest.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/interceptor/InterceptorTest.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/interceptor/InterceptorTest.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,28 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.interceptor;
+
+import org.jboss.seam.xml.test.AbstractXMLTest;
+import org.testng.annotations.Test;
+
+public class InterceptorTest extends AbstractXMLTest
+{
+
+   @Override
+   protected String getXmlFileName()
+   {
+      return "interceptor-beans.xml";
+   }
+
+   @Test()
+   public void testInterceptors()
+   {
+
+      InterceptedBean x = getReference(InterceptedBean.class);
+      String res = x.method();
+      assert res.equals("hello world");
+
+   }
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/DecoratedInterface.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/DecoratedInterface.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/DecoratedInterface.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,9 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.method;
+
+public interface DecoratedInterface
+{
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/Decorator1.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/Decorator1.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/Decorator1.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,16 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.method;
+
+public class Decorator1
+{
+
+   DecoratedInterface decoratedObject;
+
+   public void a()
+   {
+
+   }
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/MethodBean.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/MethodBean.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/MethodBean.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,20 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.method;
+
+public class MethodBean
+{
+
+   public int method()
+   {
+      return 1;
+   }
+
+   public int method(MethodValueBean bean)
+   {
+      return bean.value + 1;
+   }
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/MethodTarget.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/MethodTarget.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/MethodTarget.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,11 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.method;
+
+public class MethodTarget
+{
+
+   public int value1, value2;
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/MethodTest.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/MethodTest.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/MethodTest.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,29 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.method;
+
+import org.jboss.seam.xml.test.AbstractXMLTest;
+import org.testng.annotations.Test;
+
+public class MethodTest extends AbstractXMLTest
+{
+
+   @Override
+   protected String getXmlFileName()
+   {
+      return "method-beans.xml";
+   }
+
+   @Test
+   public void methodTest()
+   {
+      MethodTarget x = getReference(MethodTarget.class);
+      assert x != null;
+      assert x.value1 == 1;
+      assert x.value2 == 11;
+
+   }
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/MethodValueBean.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/MethodValueBean.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/MethodValueBean.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,10 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.method;
+
+public class MethodValueBean
+{
+   public int value = 10;
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/QualifiedType.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/QualifiedType.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/QualifiedType.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,11 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.method;
+
+public interface QualifiedType
+{
+   public int getBeanNumber();
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/Qualifier1.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/Qualifier1.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/Qualifier1.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,14 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.method;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface Qualifier1
+{
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/Qualifier2.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/Qualifier2.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/Qualifier2.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,14 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.method;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface Qualifier2
+{
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/QualifierEnum.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/QualifierEnum.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/method/QualifierEnum.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,10 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.method;
+
+public enum QualifierEnum
+{
+   A, B, C;
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/Bean1.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/Bean1.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/Bean1.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,30 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.simple;
+
+public class Bean1
+{
+
+   public int value = 0;
+
+   public void method1()
+   {
+
+   }
+
+   public void method1(String param)
+   {
+
+   }
+
+   public String field1 = "aa";
+
+   public Bean2 bean2;
+
+   public void pcMethod()
+   {
+      value = 1;
+   }
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/Bean2.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/Bean2.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/Bean2.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,27 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.simple;
+
+import java.util.Set;
+
+public class Bean2
+{
+   public void method1()
+   {
+
+   }
+
+   public String[] arrayField;
+
+   public int intField;
+   public String stringField;
+
+   public Set<String> setField;
+
+   public Bean3 produceBean3()
+   {
+      return new Bean3();
+   }
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/Bean3.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/Bean3.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/Bean3.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,10 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.simple;
+
+public class Bean3
+{
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/SimpleBeanTest.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/SimpleBeanTest.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/SimpleBeanTest.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,35 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.simple;
+
+import org.jboss.seam.xml.test.AbstractXMLTest;
+import org.jboss.weld.environment.se.util.WeldManagerUtils;
+import org.testng.annotations.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class SimpleBeanTest extends AbstractXMLTest
+{
+
+   @Override
+   protected String getXmlFileName()
+   {
+      return "simple-beans.xml";
+   }
+
+   @Test
+   public void simpleBeanTest()
+   {
+      Bean1 x = WeldManagerUtils.getInstanceByType(manager, Bean1.class);
+      assert x != null;
+      assert x.bean2 != null;
+
+      Bean3 y = WeldManagerUtils.getInstanceByType(manager, Bean3.class);
+      assert y != null;
+      assert x.value == 1 : "Post construct method not called";
+   }
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/VetoTest.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/VetoTest.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/VetoTest.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,34 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.simple;
+
+import org.jboss.seam.xml.test.AbstractXMLTest;
+import org.testng.annotations.Test;
+
+public class VetoTest extends AbstractXMLTest
+{
+
+   @Override
+   protected String getXmlFileName()
+   {
+      return "veto-beans.xml";
+   }
+
+   @Test
+   public void testInterceptors()
+   {
+
+      try
+      {
+         VetoedBean y = getReference(VetoedBean.class);
+         assert y != null : "Vetoed bean was installed";
+      }
+      catch (Exception e)
+      {
+         // we expect this to throw an exception instead of returning null
+      }
+
+   }
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/VetoedBean.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/VetoedBean.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/simple/VetoedBean.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,10 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.simple;
+
+public class VetoedBean
+{
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/stereotype/Stereotype1.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/stereotype/Stereotype1.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/stereotype/Stereotype1.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,17 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.stereotype;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+public @interface Stereotype1
+{
+
+}

Added: modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/stereotype/StereotypeTest.java
===================================================================
--- modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/stereotype/StereotypeTest.java	                        (rev 0)
+++ modules/xml/trunk/src/test/java/org/jboss/seam/xml/test/stereotype/StereotypeTest.java	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,34 @@
+/*
+ * Distributed under the LGPL License
+ * 
+ */
+package org.jboss.seam.xml.test.stereotype;
+
+import org.jboss.seam.xml.test.AbstractXMLTest;
+import org.jboss.seam.xml.test.interceptor.InterceptedBean;
+import org.jboss.weld.environment.se.util.WeldManagerUtils;
+import org.testng.annotations.Test;
+
+/**
+ * this is the same as the interceptor test except the interceptor is applied
+ * through a stereotype
+ */
+public class StereotypeTest extends AbstractXMLTest
+{
+
+   @Override
+   protected String getXmlFileName()
+   {
+      return "stereotype-beans.xml";
+   }
+
+   @Test(enabled = true)
+   public void testStereotypes()
+   {
+
+      InterceptedBean x = WeldManagerUtils.getInstanceByType(manager, InterceptedBean.class);
+      String res = x.method();
+      assert res.equals("hello world");
+
+   }
+}

Added: modules/xml/trunk/src/test/resources/META-INF/beans.xml
===================================================================
--- modules/xml/trunk/src/test/resources/META-INF/beans.xml	                        (rev 0)
+++ modules/xml/trunk/src/test/resources/META-INF/beans.xml	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,9 @@
+<beans xmlns="http://java.sun.com/xml/ns/javaee"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
+       
+    <interceptors>
+        <class>org.jboss.seam.xml.test.interceptor.InterceptorBean</class>
+    </interceptors>
+
+</beans>

Added: modules/xml/trunk/src/test/resources/META-INF/seam-beans.xml
===================================================================
--- modules/xml/trunk/src/test/resources/META-INF/seam-beans.xml	                        (rev 0)
+++ modules/xml/trunk/src/test/resources/META-INF/seam-beans.xml	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Beans xmlns="urn:seam:core"
+          xmlns:test="urn:java:org.jboss.seam.xml.test.interceptor">
+   
+   <test:InterceptorBinding>
+        <InterceptorBinding/>
+    </test:InterceptorBinding>
+   
+   <test:InterceptorBean>
+        <Interceptor/>
+        <test:InterceptorBinding/>
+        <test:myMethod>
+            <!-- AroundInvoke does not actually work due to what appears to be a weld bug -->
+            <AroundInvoke/>
+        </test:myMethod>
+    </test:InterceptorBean>
+
+</Beans>
\ No newline at end of file

Added: modules/xml/trunk/src/test/resources/META-INF/services/org.jboss.seam.xml.XmlExtension
===================================================================
--- modules/xml/trunk/src/test/resources/META-INF/services/org.jboss.seam.xml.XmlExtension	                        (rev 0)
+++ modules/xml/trunk/src/test/resources/META-INF/services/org.jboss.seam.xml.XmlExtension	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1 @@
+org.jboss.seam.xml.test.TestXmlProvider
\ No newline at end of file

Added: modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/fieldset/array-set-field-value-beans.xml
===================================================================
--- modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/fieldset/array-set-field-value-beans.xml	                        (rev 0)
+++ modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/fieldset/array-set-field-value-beans.xml	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Beans xmlns="urn:seam:core"
+          xmlns:test="urn:java:org.jboss.seam.xml.test.fieldset">
+   <veto>
+   	<test:ArrayFieldValue/>
+   </veto>
+    <test:ArrayFieldValue>
+        <test:iarray>
+        	<value>1</value>
+        	<value>2</value>
+        </test:iarray>
+        <test:carray>
+        	<value>java.lang.Integer</value>
+        	<value>java.lang.Long</value>
+        </test:carray>
+        <test:sarray>
+        	<value>hello</value>
+        	<value>world</value>
+        </test:sarray>
+    </test:ArrayFieldValue>
+   
+</Beans>
\ No newline at end of file

Added: modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/fieldset/colection-set-field-value-beans.xml
===================================================================
--- modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/fieldset/colection-set-field-value-beans.xml	                        (rev 0)
+++ modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/fieldset/colection-set-field-value-beans.xml	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Beans xmlns="urn:seam:core"
+          xmlns:test="urn:java:org.jboss.seam.xml.test.fieldset">
+   
+    <veto>
+    	<test:CollectionFieldValue/>
+    </veto>
+   
+    <test:CollectionFieldValue>
+        <test:iset>
+        	<value>1</value>
+        	<value>2</value>
+        </test:iset>
+        <test:clist>
+        	<value>java.lang.Integer</value>
+        	<value>java.lang.Long</value>
+        </test:clist>
+        <test:sset>
+        	<value>2</value>
+        	<value>1</value>
+        </test:sset>
+    </test:CollectionFieldValue>
+   
+</Beans>
\ No newline at end of file

Added: modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/fieldset/map-set-field-value-beans.xml
===================================================================
--- modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/fieldset/map-set-field-value-beans.xml	                        (rev 0)
+++ modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/fieldset/map-set-field-value-beans.xml	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Beans xmlns="urn:seam:core"
+          xmlns:test="urn:java:org.jboss.seam.xml.test.fieldset">
+   <veto>
+   	<test:MapFieldValue />
+   </veto>
+    <test:MapFieldValue>
+        <test:map1>
+        	<entry><key>1</key><value>hello</value></entry>
+        	<entry><key>2</key><value>world</value></entry>
+        </test:map1>
+        <test:map2>
+            <e><k>1</k><v>java.lang.Integer</v></e>
+            <e><k>2</k><v>java.lang.Long</v></e>
+        </test:map2>
+      
+    </test:MapFieldValue>
+   
+</Beans>
\ No newline at end of file

Added: modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/fieldset/set-field-value-beans.xml
===================================================================
--- modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/fieldset/set-field-value-beans.xml	                        (rev 0)
+++ modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/fieldset/set-field-value-beans.xml	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Beans xmlns="urn:seam:core"
+          xmlns:test="urn:java:org.jboss.seam.xml.test.fieldset">
+   
+    <veto>
+   		<test:FieldValueBean />
+   		<test:FieldValueProducer/>
+    </veto>
+   
+    <test:FieldValueBean>
+        <test:ivalue>10</test:ivalue>
+        <test:stringValue>hello world</test:stringValue>
+        <test:enumValue>A</test:enumValue>
+        <test:fvalue>0</test:fvalue>
+        <test:dvalue>0</test:dvalue>
+        <test:bvalue>true</test:bvalue>
+        <test:lvalue>23</test:lvalue>
+        <test:svalue>4</test:svalue>
+        <test:bigDecimalValue>10</test:bigDecimalValue>
+    </test:FieldValueBean>
+    
+   
+</Beans>
\ No newline at end of file

Added: modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/injection/producer-field-value-beans.xml
===================================================================
--- modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/injection/producer-field-value-beans.xml	                        (rev 0)
+++ modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/injection/producer-field-value-beans.xml	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Beans xmlns="urn:seam:core"
+          xmlns:test="urn:java:org.jboss.seam.xml.test.injection">
+       
+    <test:ProducerQualifier>
+    	<Qualifier/>
+    </test:ProducerQualifier>
+    
+    <test:ProducerBean>
+        <test:value>
+            <Produces/>
+            <test:ProducerQualifier/>
+            <value>hello world</value>
+        </test:value>
+    </test:ProducerBean>
+
+   <test:RecieverBean>
+   		<test:value>
+   			<test:ProducerQualifier/>
+   			<Inject/>
+   		</test:value>
+   </test:RecieverBean>
+   
+</Beans>
\ No newline at end of file

Added: modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/injection/qualifier-attributes-test-beans.xml
===================================================================
--- modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/injection/qualifier-attributes-test-beans.xml	                        (rev 0)
+++ modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/injection/qualifier-attributes-test-beans.xml	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Beans xmlns="urn:seam:core"
+          xmlns:test="urn:java:org.jboss.seam.xml.test.injection">
+   
+    <test:OtherQualifier>
+        <Qualifier/>
+    </test:OtherQualifier>
+     
+    <test:QualifiedBean1>
+        <test:OtherQualifier value1="AA" value2="1">A</test:OtherQualifier>
+    </test:QualifiedBean1>
+    
+    <test:QualifiedBean2>
+        <test:OtherQualifier value1="BB" value2="2" value="B" />
+    </test:QualifiedBean2>
+    
+    <test:QualifierTestBean>
+        <test:bean1>
+            <test:OtherQualifier value1="AA" value2="1" value="A" />
+            <Inject/>
+        </test:bean1>
+        <test:bean2>
+            <test:OtherQualifier value1="BB" value2="2">B</test:OtherQualifier>
+            <Inject/>
+        </test:bean2>
+    </test:QualifierTestBean>
+          
+</Beans>
\ No newline at end of file

Added: modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/interceptor/interceptor-beans.xml
===================================================================
--- modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/interceptor/interceptor-beans.xml	                        (rev 0)
+++ modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/interceptor/interceptor-beans.xml	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Beans xmlns="urn:seam:core"
+          xmlns:test="urn:java:org.jboss.seam.xml.test.interceptor">
+   
+   <veto>
+   		<test:InterceptedBean/>
+   </veto>
+   
+    <test:InterceptedBean>
+        <test:method>
+            <test:InterceptorBinding/>
+        </test:method>
+    </test:InterceptedBean> 
+          
+</Beans>
\ No newline at end of file

Added: modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/method/method-beans.xml
===================================================================
--- modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/method/method-beans.xml	                        (rev 0)
+++ modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/method/method-beans.xml	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Beans xmlns="urn:seam:core"
+          xmlns:test="urn:java:org.jboss.seam.xml.test.method">
+   
+   <veto>
+   	<test:MethodTarget/>
+   </veto>
+   
+   <test:Qualifier1>
+    	<Qualifier/>
+   </test:Qualifier1>
+   
+   <test:Qualifier2>
+    <Qualifier/>
+   </test:Qualifier2>
+   
+    <test:MethodBean>
+        <test:method>
+            <Produces/>
+        </test:method>
+        
+        <test:method>
+            <Produces/>
+            <test:Qualifier1/>
+            
+            <test:MethodValueBean>
+                <test:Qualifier2/>
+            </test:MethodValueBean>
+        </test:method>
+    </test:MethodBean>
+ 
+    <test:MethodTarget>
+        <test:value1><Inject/></test:value1>
+        <test:value2><Inject/><test:Qualifier1/></test:value2>
+    </test:MethodTarget>
+    
+    <test:MethodValueBean>
+                <test:Qualifier2/>
+    </test:MethodValueBean>
+</Beans>
\ No newline at end of file

Added: modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/simple/simple-beans.xml
===================================================================
--- modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/simple/simple-beans.xml	                        (rev 0)
+++ modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/simple/simple-beans.xml	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Beans xmlns="urn:seam:core"
+          xmlns:test="urn:java:org.jboss.seam.xml.test.simple">
+   
+    <test:Bean1>
+        <test:bean2>
+            <Inject/>
+        </test:bean2>
+        
+        <test:pcMethod>
+            <PostConstruct/>
+        </test:pcMethod>
+        
+        <test:value><Produces/></test:value>
+    </test:Bean1>
+    
+    <test:Bean2>
+        <test:produceBean3>
+            <Produces/>
+        </test:produceBean3>
+    </test:Bean2>
+    
+          
+</Beans>
\ No newline at end of file

Added: modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/simple/veto-beans.xml
===================================================================
--- modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/simple/veto-beans.xml	                        (rev 0)
+++ modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/simple/veto-beans.xml	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Beans xmlns="urn:seam:core"
+          xmlns:test="urn:java:org.jboss.seam.xml.test.simple">
+
+    <veto>
+    	<test:VetoedBean/>
+    </veto>
+    
+</Beans>
\ No newline at end of file

Added: modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/stereotype/stereotype-beans.xml
===================================================================
--- modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/stereotype/stereotype-beans.xml	                        (rev 0)
+++ modules/xml/trunk/src/test/resources/org/jboss/seam/xml/test/stereotype/stereotype-beans.xml	2010-01-16 06:25:13 UTC (rev 11967)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Beans xmlns="urn:seam:core"
+          xmlns:test="urn:java:org.jboss.seam.xml.test.stereotype"
+          xmlns:int="urn:java:org.jboss.seam.xml.test.interceptor">
+   
+   <test:Stereotype1>
+        <Stereotype/>
+        <int:InterceptorBinding/>
+   </test:Stereotype1>
+   
+    <int:InterceptedBean>
+        <test:Stereotype1/>
+    </int:InterceptedBean>
+          
+</Beans>
\ No newline at end of file



More information about the seam-commits mailing list