Anonymous avatar Anonymous committed a1c8eb3

Comments (0)

Files changed (111)

+XWorkTiger.iws
+XWorkTiger.ipr
+XWorkTiger.iml
+build

tiger/XWorkTiger.iml

+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true" type="JAVA_MODULE">
+  <component name="ModuleRootManager" />
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5" inherit-compiler-output="false">
+    <output url="file://$MODULE_DIR$/build/java" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/build" />
+    </content>
+    <orderEntry type="jdk" jdkName="1.5" jdkType="JavaSDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="xwork" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/bootstrap/commons-logging.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../lib/build/junit.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntryProperties />
+  </component>
+  <component name="RetrotranslatorModuleSettings">
+    <setting name="enabled" value="false" />
+    <setting name="retroTests" value="false" />
+    <setting name="stripSign" value="false" />
+    <setting name="verbose" value="false" />
+    <setting name="lazy" value="false" />
+    <setting name="verify" value="false" />
+    <setting name="targetJdk" value="" />
+  </component>
+  <component name="RetroweaverPlugin">
+    <setting name="active" value="false" />
+    <setting name="verbose" value="false" />
+    <setting name="verifyrefs" value="false" />
+    <setting name="targetJDK" value="" />
+  </component>
+  <component name="VcsManagerConfiguration">
+    <option name="ACTIVE_VCS_NAME" value="svn" />
+    <option name="USE_PROJECT_VCS" value="false" />
+  </component>
+  <component name="copyright">
+    <Base>
+      <setting name="state" value="2" />
+    </Base>
+    <LanguageOptions name="$TEMPLATE$">
+      <option name="templateOptions">
+        <value>
+          <option name="block" value="true" />
+          <option name="separateBefore" value="false" />
+          <option name="separateAfter" value="false" />
+          <option name="prefixLines" value="true" />
+          <option name="lenBefore" value="80" />
+          <option name="lenAfter" value="80" />
+          <option name="box" value="false" />
+          <option name="filler" value=" " />
+        </value>
+      </option>
+      <option name="notice" value="Copyright (c) &amp;#36;today.year, Your Corporation. All Rights Reserved." />
+      <option name="keyword" value="Copyright" />
+      <option name="fileTypeOverride" value="4" />
+      <option name="relativeBefore" value="true" />
+      <option name="addBlankAfter" value="true" />
+      <option name="fileLocation" value="1" />
+      <option name="useAlternate" value="false" />
+    </LanguageOptions>
+    <LanguageOptions name="CSS">
+      <option name="templateOptions">
+        <value>
+          <option name="block" value="true" />
+          <option name="separateBefore" value="false" />
+          <option name="separateAfter" value="false" />
+          <option name="prefixLines" value="true" />
+          <option name="lenBefore" value="80" />
+          <option name="lenAfter" value="80" />
+          <option name="box" value="false" />
+          <option name="filler" value=" " />
+        </value>
+      </option>
+      <option name="notice" value="Copyright (c) &amp;#36;today.year, Your Corporation. All Rights Reserved." />
+      <option name="keyword" value="Copyright" />
+      <option name="fileTypeOverride" value="2" />
+      <option name="relativeBefore" value="true" />
+      <option name="addBlankAfter" value="true" />
+      <option name="fileLocation" value="1" />
+      <option name="useAlternate" value="false" />
+    </LanguageOptions>
+    <LanguageOptions name="HTML">
+      <option name="templateOptions">
+        <value>
+          <option name="block" value="true" />
+          <option name="separateBefore" value="false" />
+          <option name="separateAfter" value="false" />
+          <option name="prefixLines" value="true" />
+          <option name="lenBefore" value="80" />
+          <option name="lenAfter" value="80" />
+          <option name="box" value="false" />
+          <option name="filler" value=" " />
+        </value>
+      </option>
+      <option name="notice" value="Copyright (c) &amp;#36;today.year, Your Corporation. All Rights Reserved." />
+      <option name="keyword" value="Copyright" />
+      <option name="fileTypeOverride" value="2" />
+      <option name="relativeBefore" value="true" />
+      <option name="addBlankAfter" value="true" />
+      <option name="fileLocation" value="1" />
+      <option name="useAlternate" value="false" />
+    </LanguageOptions>
+    <LanguageOptions name="JAVA">
+      <option name="templateOptions">
+        <value>
+          <option name="block" value="true" />
+          <option name="separateBefore" value="false" />
+          <option name="separateAfter" value="false" />
+          <option name="prefixLines" value="true" />
+          <option name="lenBefore" value="80" />
+          <option name="lenAfter" value="80" />
+          <option name="box" value="false" />
+          <option name="filler" value=" " />
+        </value>
+      </option>
+      <option name="notice" value="Copyright (c) &amp;#36;today.year, Your Corporation. All Rights Reserved." />
+      <option name="keyword" value="Copyright" />
+      <option name="fileTypeOverride" value="2" />
+      <option name="relativeBefore" value="true" />
+      <option name="addBlankAfter" value="true" />
+      <option name="fileLocation" value="1" />
+      <option name="useAlternate" value="false" />
+    </LanguageOptions>
+    <LanguageOptions name="JSP">
+      <option name="templateOptions">
+        <value>
+          <option name="block" value="true" />
+          <option name="separateBefore" value="false" />
+          <option name="separateAfter" value="false" />
+          <option name="prefixLines" value="true" />
+          <option name="lenBefore" value="80" />
+          <option name="lenAfter" value="80" />
+          <option name="box" value="false" />
+          <option name="filler" value=" " />
+        </value>
+      </option>
+      <option name="notice" value="Copyright (c) &amp;#36;today.year, Your Corporation. All Rights Reserved." />
+      <option name="keyword" value="Copyright" />
+      <option name="fileTypeOverride" value="2" />
+      <option name="relativeBefore" value="true" />
+      <option name="addBlankAfter" value="true" />
+      <option name="fileLocation" value="1" />
+      <option name="useAlternate" value="false" />
+    </LanguageOptions>
+    <LanguageOptions name="JavaScript">
+      <option name="templateOptions">
+        <value>
+          <option name="block" value="true" />
+          <option name="separateBefore" value="false" />
+          <option name="separateAfter" value="false" />
+          <option name="prefixLines" value="true" />
+          <option name="lenBefore" value="80" />
+          <option name="lenAfter" value="80" />
+          <option name="box" value="false" />
+          <option name="filler" value=" " />
+        </value>
+      </option>
+      <option name="notice" value="Copyright (c) &amp;#36;today.year, Your Corporation. All Rights Reserved." />
+      <option name="keyword" value="Copyright" />
+      <option name="fileTypeOverride" value="2" />
+      <option name="relativeBefore" value="true" />
+      <option name="addBlankAfter" value="true" />
+      <option name="fileLocation" value="1" />
+      <option name="useAlternate" value="false" />
+    </LanguageOptions>
+    <LanguageOptions name="Properties">
+      <option name="templateOptions">
+        <value>
+          <option name="block" value="true" />
+          <option name="separateBefore" value="false" />
+          <option name="separateAfter" value="false" />
+          <option name="prefixLines" value="true" />
+          <option name="lenBefore" value="80" />
+          <option name="lenAfter" value="80" />
+          <option name="box" value="false" />
+          <option name="filler" value=" " />
+        </value>
+      </option>
+      <option name="notice" value="Copyright (c) &amp;#36;today.year, Your Corporation. All Rights Reserved." />
+      <option name="keyword" value="Copyright" />
+      <option name="fileTypeOverride" value="2" />
+      <option name="relativeBefore" value="true" />
+      <option name="addBlankAfter" value="true" />
+      <option name="fileLocation" value="1" />
+      <option name="useAlternate" value="false" />
+    </LanguageOptions>
+    <LanguageOptions name="XML">
+      <option name="templateOptions">
+        <value>
+          <option name="block" value="true" />
+          <option name="separateBefore" value="false" />
+          <option name="separateAfter" value="false" />
+          <option name="prefixLines" value="true" />
+          <option name="lenBefore" value="80" />
+          <option name="lenAfter" value="80" />
+          <option name="box" value="false" />
+          <option name="filler" value=" " />
+        </value>
+      </option>
+      <option name="notice" value="Copyright (c) &amp;#36;today.year, Your Corporation. All Rights Reserved." />
+      <option name="keyword" value="Copyright" />
+      <option name="fileTypeOverride" value="2" />
+      <option name="relativeBefore" value="true" />
+      <option name="addBlankAfter" value="true" />
+      <option name="fileLocation" value="1" />
+      <option name="useAlternate" value="false" />
+    </LanguageOptions>
+  </component>
+</module>
+

tiger/XWorkTiger.ipr

+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4" relativePaths="true">
+  <component name="AntConfiguration">
+    <defaultAnt bundledAnt="true" />
+  </component>
+  <component name="CodeStyleSettingsManager">
+    <option name="PER_PROJECT_SETTINGS" />
+    <option name="USE_PER_PROJECT_SETTINGS" value="false" />
+  </component>
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <option name="CLEAR_OUTPUT_DIRECTORY" value="false" />
+    <option name="DEPLOY_AFTER_MAKE" value="0" />
+    <resourceExtensions>
+      <entry name=".+\.(properties|xml|html|dtd|tld)" />
+      <entry name=".+\.(gif|png|jpeg|jpg)" />
+    </resourceExtensions>
+    <wildcardResourcePatterns>
+      <entry name="?*.properties" />
+      <entry name="?*.xml" />
+      <entry name="?*.gif" />
+      <entry name="?*.png" />
+      <entry name="?*.jpeg" />
+      <entry name="?*.jpg" />
+      <entry name="?*.html" />
+      <entry name="?*.dtd" />
+      <entry name="?*.tld" />
+    </wildcardResourcePatterns>
+  </component>
+  <component name="DataSourceManagerImpl" />
+  <component name="DependenciesAnalyzeManager">
+    <option name="myForwardDirection" value="false" />
+  </component>
+  <component name="DependencyValidationManager" />
+  <component name="EntryPointsManager">
+    <entry_points />
+  </component>
+  <component name="ExportToHTMLSettings">
+    <option name="PRINT_LINE_NUMBERS" value="false" />
+    <option name="OPEN_IN_BROWSER" value="false" />
+    <option name="OUTPUT_DIRECTORY" />
+  </component>
+  <component name="GUI Designer component loader factory" />
+  <component name="JavacSettings">
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="DEPRECATION" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+    <option name="MAXIMUM_HEAP_SIZE" value="128" />
+  </component>
+  <component name="JavadocGenerationManager">
+    <option name="OUTPUT_DIRECTORY" />
+    <option name="OPTION_SCOPE" value="protected" />
+    <option name="OPTION_HIERARCHY" value="true" />
+    <option name="OPTION_NAVIGATOR" value="true" />
+    <option name="OPTION_INDEX" value="true" />
+    <option name="OPTION_SEPARATE_INDEX" value="true" />
+    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
+    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
+    <option name="OPTION_DEPRECATED_LIST" value="true" />
+    <option name="OTHER_OPTIONS" value="" />
+    <option name="HEAP_SIZE" />
+    <option name="OPEN_IN_BROWSER" value="true" />
+  </component>
+  <component name="JikesSettings">
+    <option name="JIKES_PATH" value="" />
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="DEPRECATION" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="IS_EMACS_ERRORS_MODE" value="true" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+  </component>
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+    </group>
+  </component>
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/../XWork.iml" filepath="$PROJECT_DIR$/../XWork.iml" />
+      <module fileurl="file://$PROJECT_DIR$/XWorkTiger.iml" filepath="$PROJECT_DIR$/XWorkTiger.iml" />
+    </modules>
+  </component>
+  <component name="ProjectRootManager" version="2" assert-keyword="true" jdk-15="true" project-jdk-name="1.4" />
+  <component name="RmicSettings">
+    <option name="IS_EANABLED" value="false" />
+    <option name="DEBUGGING_INFO" value="true" />
+    <option name="GENERATE_NO_WARNINGS" value="false" />
+    <option name="GENERATE_IIOP_STUBS" value="false" />
+    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
+  </component>
+  <component name="libraryTable" />
+  <component name="uidesigner-configuration">
+    <option name="INSTRUMENT_CLASSES" value="true" />
+    <option name="COPY_FORMS_RUNTIME_TO_OUTPUT" value="true" />
+  </component>
+  <UsedPathMacros />
+</project>
+
+<?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>
+    <groupId>opensymphony</groupId>
+    <artifactId>xwork-tiger</artifactId>
+    <version>1.2.4-SNAPSHOT</version>
+    <name>XWork Tiger Extensions</name>
+    <description>
+        XWork Tiger Extensions are extensions of XWork taking advantage
+        of Java 5 features like annotations and generics.
+    </description>
+    <url>http://www.opensymphony.com/xwork/</url>
+    <organization>
+        <name>OpenSymphony</name>
+        <url>http://www.opensymphony.com/</url>
+    </organization>
+    <issueManagement>
+        <system>JIRA</system>
+        <url>http://jira.opensymphony.com/browse/XW</url>
+    </issueManagement>
+    <distributionManagement>
+        <!--
+          For this to work, you need to:
+
+          1) Get the private key from someone that trusts you :)
+          2) Add the following to ~/.m2/settings.xml
+
+          <settings>
+              ...
+              <servers>
+                  <server>
+                        <id>opensymphony</id>
+                        <username>maven</username>
+                        <privateKey>/path/to/private/maven_opensymphony_key</privateKey>
+                  </server>
+              </servers>
+              ...
+          </settings>
+          -->
+        <repository>
+            <id>opensymphony</id>
+            <name>OpenSymphony Maven Repository</name>
+            <url>scp://maven2.opensymphony.com/opt/repository/maven2</url>
+        </repository>
+    </distributionManagement>
+    <mailingLists>
+        <mailingList>
+            <name>WebWork users list</name>
+            <post>mailto:users@webwork.dev.java.net</post>
+            <subscribe>https://webwork.dev.java.net/servlets/ProjectMailingListList</subscribe>
+            <archive>https://webwork.dev.java.net/servlets/SummarizeList?listName=users</archive>
+            <otherArchives>
+                <otherArchive>http://forums.opensymphony.com/forum.jspa?forumID=1</otherArchive>
+            </otherArchives>
+        </mailingList>
+        <mailingList>
+            <name>WebWork developers list</name>
+            <post>mailto:dev@webwork.dev.java.net</post>
+            <subscribe>https://webwork.dev.java.net/servlets/ProjectMailingListList</subscribe>
+            <archive>https://webwork.dev.java.net/servlets/SummarizeList?listName=dev</archive>
+            <otherArchives>
+                <otherArchive>http://forums.opensymphony.com/forum.jspa?forumID=32</otherArchive>
+            </otherArchives>
+        </mailingList>
+        <mailingList>
+            <name>XWork cvs commit list</name>
+            <post>mailto:cvs@xwork.dev.java.net</post>
+            <subscribe>https://xwork.dev.java.net/servlets/ProjectMailingListList</subscribe>
+            <archive>https://xwork.dev.java.net/servlets/SummarizeList?listName=cvs</archive>
+            <otherArchives>
+                <otherArchive>http://forums.opensymphony.com/forum.jspa?forumID=9</otherArchive>
+            </otherArchives>
+        </mailingList>
+    </mailingLists>
+    <scm>
+        <connection>scm:svn:http://svn.opensymphony.com/svn/xwork/branches/xwork_1-2/tiger</connection>
+        <developerConnection>
+            scm:svn:https://svn.opensymphony.com/svn/xwork/branches/xwork_1-2/tiger
+        </developerConnection>
+        <url>https://svn.opensymphony.com/svn/xwork/branches/xwork_1-2/tiger</url>
+    </scm>
+    <licenses>
+        <license>
+            <name>The OpenSymphony Software License 1.1</name>
+            <url>http://opensymphony.com/xwork/license.action</url>
+            <comments>
+                This license is derived and fully compatible with the Apache Software
+                License - see http://www.apache.org/LICENSE.txt
+            </comments>
+        </license>
+    </licenses>
+
+    <dependencies>
+        <dependency>
+            <groupId>opensymphony</groupId>
+            <artifactId>xwork</artifactId>
+            <version>1.2.4-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>dom4j</groupId>
+            <artifactId>dom4j</artifactId>
+            <version>1.6.1</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <sourceDirectory>src/java</sourceDirectory>
+        <testSourceDirectory>src/test</testSourceDirectory>
+        <testResources>
+            <testResource>
+                <directory>src/test</directory>
+                <includes>
+                    <include>**/*</include>
+                </includes>
+                <excludes>
+                    <exclude>**/*.java</exclude>
+                </excludes>
+            </testResource>
+        </testResources>
+        <plugins>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <includes>
+                        <include>**/*Test.java</include>
+                    </includes>
+                    <!--
+                    <excludes>
+                        <exclude>**/XWorkTestCase.java</exclude>
+                    </excludes>
+                    -->
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.5</source>
+                    <target>1.5</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

tiger/src/java/com/opensymphony/xwork/InvalidMetadataException.java

+/*
+ * Copyright (c) 2002-2006 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork;
+
+/**
+ * <code>InvalidMetadataException</code>
+ *
+ * @author Rainer Hermanns
+ * @version $Id$
+ */
+public class InvalidMetadataException extends RuntimeException {
+
+    /**
+	 * Create a new <code>InvalidMetadataException</code> with the supplied error message.
+     * 
+	 * @param msg the error message
+	 */
+	public InvalidMetadataException(String msg) {
+		super(msg);
+	}
+}

tiger/src/java/com/opensymphony/xwork/apt/AbstractProcessor.java

+/*
+ * Copyright (c) 2002-2006 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork.apt;
+
+import com.sun.mirror.apt.AnnotationProcessor;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.apt.Filer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * <code>AbstractProcessor</code>
+ *
+ * @author Rainer Hermanns
+ * @version $Id$
+ */
+public abstract class AbstractProcessor implements AnnotationProcessor {
+
+    protected Log log = null;
+
+    protected AnnotationProcessorEnvironment env;
+
+
+    public AbstractProcessor() {
+        log = LogFactory.getLog(this.getClass());
+    }
+
+
+    /**
+     * Sets the AnnotationProcessorEnvironment.
+     *
+     * @param env the AnnotationProcessorEnvironment.
+     */
+    public void setEnv(AnnotationProcessorEnvironment env) {
+        this.env = env;
+    }
+
+    /**
+     * Initializes all annotations types required for processing.
+     */
+    public void init() {
+    }
+
+    /**
+     * Process all program elements supported by this annotations processor.
+     */
+    public abstract void process();
+
+
+    /**
+     * Returns a PrintWriter that writes to META-INF directory within the Filer.Location.SOURCE_TREE.
+     *
+     * @param filename The filename of the file to be written.
+     * @return PrintWriter that writes to META-INF directory within the Filer.Location.SOURCE_TREE.
+     * @throws IOException
+     */
+    protected PrintWriter getSourceMetaInfWriter(String filename) throws IOException {
+        return env.getFiler().createTextFile(Filer.Location.SOURCE_TREE, "", new File("META-INF" + File.separator + filename), "UTF-8");
+    }
+
+    /**
+     * Returns a PrintWriter that writes to META-INF directory within the Filer.Location.CLASS_TREE.
+     *
+     * @param filename The filename of the file to be written.
+     * @return PrintWriter that writes to META-INF directory within the Filer.Location.CLASS_TREE.
+     * @throws IOException
+     */
+    protected PrintWriter getClassesMetaInfWriter(String filename) throws IOException {
+        return env.getFiler().createTextFile(Filer.Location.CLASS_TREE, "", new File("META-INF" + File.separator + filename), "UTF-8");
+    }
+
+    /**
+     * Returns a PrintWriter that writes to WEB-INF directory within the Filer.Location.SOURCE_TREE.
+     *
+     * @param filename The filename of the file to be written.
+     * @return PrintWriter that writes to WEB-INF directory within the Filer.Location.SOURCE_TREE.
+     * @throws IOException
+     */
+    protected PrintWriter getWebInfWriter(String filename) throws IOException {
+        return env.getFiler().createTextFile(Filer.Location.SOURCE_TREE, "", new File("WEB-INF" + File.separator + filename), "UTF-8");
+    }
+}

tiger/src/java/com/opensymphony/xwork/apt/ConversionGenerator.java

+/*
+ * Copyright (c) 2002-2006 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork.apt;
+
+import com.opensymphony.xwork.conversion.metadata.ConversionDescription;
+import com.opensymphony.xwork.XworkException;
+import com.sun.mirror.apt.Filer;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <code>ConversionGenerator</code>
+ *
+ * @author Rainer Hermanns
+ * @version $Id$
+ */
+public class ConversionGenerator extends Generator {
+
+    Map<String, List<ConversionDescription>> conversionsByType = null;
+
+    public ConversionGenerator(Map<String, List<ConversionDescription>> conversionsByType) {
+        this.conversionsByType = conversionsByType;
+
+    }
+
+    /**
+     * Generate the configuration file.
+     * Concrete implementations must override this method.
+     */
+    public void generate(Filer filer) {
+        if (conversionsByType == null) {
+            return;
+        }
+
+        // write property files
+        for (Map.Entry<String, List<ConversionDescription>> descriptionMapping : conversionsByType.entrySet()) {
+
+            String key = descriptionMapping.getKey();
+            String fileName;
+            if (key.equals("")) {
+                fileName = "xwork-conversion.properties";
+            } else {
+                fileName = key.replace('.', File.separatorChar) + "-conversion.properties";
+
+            }
+            final PrintWriter writer;
+            try {
+                writer = filer.createTextFile(Filer.Location.SOURCE_TREE, "", new File(fileName), null);
+                writer.println("# Generated automatically. Do not edit!");
+
+                for (ConversionDescription component : descriptionMapping.getValue()) {
+                    writer.println(component.asProperty());
+                }
+                writer.flush();
+                writer.close();
+
+            } catch (IOException ioe) {
+                throw new XworkException("could not generate conversion.properties: " + ioe, ioe);
+            }
+        }
+    }
+}

tiger/src/java/com/opensymphony/xwork/apt/ConversionProcessor.java

+/*
+ * Copyright (c) 2002-2006 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork.apt;
+
+import com.opensymphony.xwork.conversion.annotations.Conversion;
+import com.opensymphony.xwork.conversion.annotations.ConversionType;
+import com.opensymphony.xwork.conversion.annotations.TypeConversion;
+import com.opensymphony.xwork.conversion.metadata.ConversionDescription;
+import com.opensymphony.xwork.util.AnnotationUtils;
+import com.sun.mirror.declaration.*;
+import com.sun.mirror.type.ClassType;
+import com.sun.mirror.type.InterfaceType;
+
+import java.util.*;
+
+/**
+ * <code>ConversionProcessor</code>
+ *
+ * @author Rainer Hermanns
+ * @version $Id$
+ */
+public class ConversionProcessor extends AbstractProcessor {
+
+    private AnnotationTypeDeclaration conversionAnnotation;
+    private AnnotationTypeDeclaration typeConversionAnnotation;
+
+    /**
+     * Initializes all annotations types required for processing.
+     */
+    public void init() {
+        super.init();
+        this.conversionAnnotation = (AnnotationTypeDeclaration) env.getTypeDeclaration(Conversion.class.getName());
+        this.typeConversionAnnotation = (AnnotationTypeDeclaration) env.getTypeDeclaration(TypeConversion.class.getName());
+    }
+
+
+    /**
+     * Process all program elements supported by this annotations processor.
+     */
+    public void process() {
+
+        final Map<String, List<ConversionDescription>> conversionsByType = new Hashtable<String, List<ConversionDescription>>();
+
+        for (Declaration compDecl : env.getDeclarationsAnnotatedWith(conversionAnnotation)) {
+
+            /*
+            * Get all fields with TypeConversion-Annotation of component
+            */
+            List<ConversionDescription> applicationFields = new ArrayList<ConversionDescription>();
+            List<ConversionDescription> classFields = new ArrayList<ConversionDescription>();
+
+            if ( compDecl instanceof InterfaceDeclaration) {
+
+                final InterfaceDeclaration component = (InterfaceDeclaration) compDecl;
+
+                addConversionFields(component, applicationFields, classFields);
+
+                conversionsByType.put("", applicationFields);
+                conversionsByType.put(component.getQualifiedName(), classFields);
+            } else if ( compDecl instanceof ClassDeclaration) {
+                final ClassDeclaration component = (ClassDeclaration) compDecl;
+
+                addConversionFields(component, applicationFields, classFields);
+
+                conversionsByType.put("", applicationFields);
+                conversionsByType.put(component.getQualifiedName(), classFields);
+
+            }
+
+        }
+
+        /**
+         * Holds all components without usage (="default usage")
+         */
+        List<ConversionDescription> defaultDescriptions = conversionsByType.get("");
+
+        // Add components with default usage to specific components
+        /*
+        for (Map.Entry<String, List<ConversionDescription>> descriptionMapping : conversionsByType.entrySet()) {
+            if (!"".equals(descriptionMapping.getKey())) {
+                addDefaultConversions(defaultDescriptions, descriptionMapping.getValue());
+            }
+        }
+        */
+
+        new ConversionGenerator(conversionsByType).generate(env.getFiler());
+    }
+
+    private void addDefaultConversions(List<ConversionDescription> defaultComponents, List<ConversionDescription> specialComponents) {
+        for (ConversionDescription description : defaultComponents) {
+            if (!specialComponents.contains(description)) {
+                specialComponents.add(description);
+            }
+        }
+    }
+
+    private ConversionDescription createConversionDescription(MethodDeclaration method, AnnotationMirror annotation) {
+
+        Map<AnnotationTypeElementDeclaration, AnnotationValue> values = annotation.getElementValues();
+
+        final ConversionDescription result;
+
+        String property = AnnotationUtils.resolvePropertyName(method);
+
+        if (typeConversionAnnotation.equals(annotation.getAnnotationType().getDeclaration())) {
+
+
+            result = new ConversionDescription(property);
+
+            for (AnnotationTypeElementDeclaration element : typeConversionAnnotation.getMethods()) {
+                AnnotationValue value = values.get(element);
+                if (value == null) {
+                    value = element.getDefaultValue();
+                }
+
+                String name = element.getSimpleName();
+                if ("rule".equals(name)) {
+                    result.setRule(value.getValue().toString());
+                } else if ("converter".equals(name)) {
+                    result.setTypeConverter(value.getValue().toString());
+                } else if ("message".equals(name)) {
+                    result.setValue(value.getValue().toString());
+                } else if ("key".equals(name)) {
+                    String s = value.getValue().toString();
+                    if ( s != null && s.length() > 0 ) {
+                        result.setProperty(s);
+                    }
+                } else if ("type".equals(name)) {
+                    result.setType(value.getValue().toString());
+                }
+            }
+            return result;
+        }
+        return null;
+    }
+
+    /**
+     * Adds all fields with TypeConversion Annotation of class clazz and
+     * its superclasses to allFields
+     */
+    private void addConversionFields(ClassDeclaration clazz, List<ConversionDescription> allApplicationFields, List<ConversionDescription> allClassFields) {
+        if (clazz == null) {
+            return;
+        }
+
+        processConversionFields(clazz, allApplicationFields, allClassFields);
+
+        ClassType superClazz = clazz.getSuperclass();
+        if (superClazz != null) {
+            addConversionFields(superClazz.getDeclaration(), allApplicationFields, allClassFields);
+        }
+    }
+
+    /**
+     * Adds all fields with TypeConversion Annotation of class clazz and
+     * its superclasses to allFields
+     */
+    private void addConversionFields(InterfaceDeclaration clazz, List<ConversionDescription> allApplicationFields, List<ConversionDescription> allClassFields) {
+        if (clazz == null) {
+            return;
+        }
+
+        processConversionFields(clazz, allApplicationFields, allClassFields);
+        Collection<InterfaceType> ifaces = clazz.getSuperinterfaces();
+
+        if ( ifaces != null ) {
+            for ( InterfaceType it : ifaces) {
+                addConversionFields(it.getDeclaration(), allApplicationFields, allClassFields);
+            }
+        }
+    }
+
+    private void processConversionFields(TypeDeclaration clazz, List<ConversionDescription> allApplicationFields, List<ConversionDescription> allClassFields) {
+        Collection<? extends MethodDeclaration> methods = clazz.getMethods();
+
+        for (MethodDeclaration method : methods) {
+
+            Collection<AnnotationMirror> annos = method.getAnnotationMirrors();
+            for (AnnotationMirror am : annos) {
+
+                Map<AnnotationTypeElementDeclaration, AnnotationValue> values = am.getElementValues();
+                for ( AnnotationTypeElementDeclaration element : typeConversionAnnotation.getMethods()) {
+                    AnnotationValue value = values.get(element);
+                    if (value == null) {
+                        value = element.getDefaultValue();
+                    }
+                    if ( "type".equals(element.getSimpleName()) ) {
+                        ConversionDescription desc = createConversionDescription(method, am);
+                        if ( desc != null ) {
+                            if ( value.getValue().toString().equals(ConversionType.APPLICATION.toString())) {
+                                allApplicationFields.add(desc);
+                            } else {
+                                allClassFields.add(desc);
+                            }
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}

tiger/src/java/com/opensymphony/xwork/apt/Generator.java

+/*
+ * Copyright (c) 2002-2006 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork.apt;
+
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.apt.Filer;
+
+/**
+ * <code>Generator</code>
+ *
+ * @author Rainer Hermanns
+ * @version $Id$
+ */
+public abstract class Generator {
+
+
+    protected AnnotationProcessorEnvironment env;
+
+
+    /**
+     * Sets the AnnotationProcessorEnvironment.
+     *
+     * @param env the AnnotationProcessorEnvironment.
+     */
+    public void setEnv(AnnotationProcessorEnvironment env) {
+        this.env = env;
+    }
+
+    /**
+     * Generate the configuration file.
+     * Concrete implementations must override this method.
+     */
+    public abstract void generate(Filer filer);
+
+}

tiger/src/java/com/opensymphony/xwork/apt/XWorkProcessorFactory.java

+/*
+ * Copyright (c) 2002-2006 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork.apt;
+
+import com.opensymphony.xwork.conversion.annotations.Conversion;
+import com.opensymphony.xwork.validator.annotations.Validation;
+import com.sun.mirror.apt.AnnotationProcessor;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.apt.AnnotationProcessorFactory;
+import com.sun.mirror.apt.AnnotationProcessors;
+import com.sun.mirror.declaration.AnnotationTypeDeclaration;
+
+import java.util.*;
+import java.util.prefs.Preferences;
+
+/**
+ * <code>XWorkProcessorFactory</code>
+ *
+ * @author Rainer Hermanns
+ * @version $Id$
+ */
+public class XWorkProcessorFactory implements AnnotationProcessorFactory {
+
+    private static Preferences preferences = Preferences.userNodeForPackage(XWorkProcessorFactory.class);
+
+
+    /**
+     * Returns the options recognized by this factory or by any of the processors it may create.
+     *
+     * @return the options recognized by this factory or by any of the processors it may create,
+     *         or an empty collection if none.
+     */
+    public Collection<String> supportedOptions() {
+        return Collections.emptySet();
+    }
+
+    /**
+     * Returns the names of the annotations types supported by this factory.
+     *
+     * @return the names of the annotations types supported by this factory.
+     */
+    public Collection<String> supportedAnnotationTypes() {
+        return createCollection(
+                "com.opensymphony.xwork.conversion.annotations.*" //,
+                //"com.opensymphony.xwork.validator.annotations.*"
+        );
+    }
+
+
+    /**
+     * Returns an annotations processor for a set of annotations types.
+     *
+     * @param declarations The type declarations for the annotations types to be processed.
+     * @param env          The environment to use during processing.
+     * @return an annotations processor for the given annotations types, or <tt>null</tt>
+     *         if the types are not supported or the processor cannot be created.
+     */
+    public AnnotationProcessor getProcessorFor(Set<AnnotationTypeDeclaration> declarations, AnnotationProcessorEnvironment env) {
+        List<AnnotationProcessor> processors = new LinkedList<AnnotationProcessor>();
+
+        AnnotationTypeDeclaration conversionType = (AnnotationTypeDeclaration) env.getTypeDeclaration(Conversion.class.getName());
+        //AnnotationTypeDeclaration validationType = (AnnotationTypeDeclaration) env.getTypeDeclaration(Validation.class.getName());
+
+        if (declarations.contains(conversionType)) {
+            ConversionProcessor conversion = new ConversionProcessor();
+
+            conversion.setEnv(env);
+            conversion.init();
+            processors.add(conversion);
+        }
+
+        // TODO: Temporary disabled...
+        /*
+        if (declarations.contains(validationType)) {
+            ValidationProcessor validation = new ValidationProcessor();
+            validation.setEnv(env);
+            validation.init();
+            processors.add(validation);
+        }
+        */
+
+        if (processors.isEmpty()) {
+            return AnnotationProcessors.NO_OP;
+        }
+
+        if (processors.size() == 1) {
+            return processors.get(0);
+        }
+
+        return AnnotationProcessors.getCompositeAnnotationProcessor(processors);
+    }
+
+    public static <T> Collection<T> createCollection(T... args) {
+        return Arrays.asList(args);
+    }
+}

tiger/src/java/com/opensymphony/xwork/config/XWorkAnnotationConfigurationProvider.java

+package com.opensymphony.xwork.config;
+
+import com.opensymphony.xwork.ObjectFactory;
+import com.opensymphony.xwork.config.annotations.*;
+import com.opensymphony.xwork.config.entities.ActionConfig;
+import com.opensymphony.xwork.config.entities.InterceptorConfig;
+import com.opensymphony.xwork.config.entities.PackageConfig;
+import com.opensymphony.xwork.config.entities.ResultConfig;
+import com.opensymphony.xwork.config.entities.ResultTypeConfig;
+import com.opensymphony.xwork.config.providers.InterceptorBuilder;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Implementation of XWork's ConfigurationProvider which read configuration from annotation.
+ *
+ * @see com.opensymphony.xwork.config.ConfigurationProvider
+ */
+public class XWorkAnnotationConfigurationProvider implements ConfigurationProvider {
+    public static String DEFAULT_FILENAME = "xwork-actions.conf";
+
+    private String filename;
+
+    private Log log = LogFactory.getLog(XWorkAnnotationConfigurationProvider.class);
+
+    /**
+     * Creates a new XWorkAnnotationConfigurationProvider object.
+     */
+    public XWorkAnnotationConfigurationProvider() {
+        this(DEFAULT_FILENAME);
+    }
+
+    /**
+     * Creates a new XWorkAnnotationConfigurationProvider object.
+     *
+     * @param filename name of resource to read for list of Action class
+     */
+    public XWorkAnnotationConfigurationProvider(String filename) {
+        this.filename = filename;
+    }
+
+    /**
+     * @see com.opensymphony.xwork.config.ConfigurationProvider#destroy()
+     */
+    public void destroy() {
+    }
+
+    /**
+     * @see com.opensymphony.xwork.config.ConfigurationProvider#init(com.opensymphony.xwork.config.Configuration)
+     */
+    public void init(Configuration config) throws ConfigurationException {
+        InputStream in = getResourceAsStream(filename);
+
+        if (in == null) {
+            throw new ConfigurationException("no resource with named '" + filename
+                    + "' found in the classpath");
+        }
+
+        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
+        String line = null;
+
+        try {
+            while ((line = reader.readLine()) != null) {
+                try {
+                    Class actionClass = Class.forName(line);
+
+                    if ((actionClass.getModifiers() & Modifier.ABSTRACT) == Modifier.ABSTRACT) {
+                        log.debug("Skipped. Class '" + line + "' is abstract");
+
+                        continue;
+                    }
+
+                    if (!com.opensymphony.xwork.Action.class
+                            .isAssignableFrom(actionClass)) {
+                        log.debug("Skipped. Class '" + line
+                                + "' does not implement 'com.opensymphony.xwork.Action'");
+
+                        continue;
+                    }
+
+                    Action action = (Action) actionClass.getAnnotation(Action.class);
+
+                    if ((action != null) && !isEmpty(action.name())) {
+                        processActionInType(actionClass, config);
+                    } else {
+                        processActionInMethod(actionClass, config);
+                    }
+                } catch (ClassNotFoundException e) {
+                    throw new ConfigurationException("No class named '" + line
+                            + "' found.'");
+                }
+            }
+        } catch (IOException e) {
+            throw new ConfigurationException(e);
+        } finally {
+            if (reader != null) {
+                try {
+                    reader.close();
+                } catch (IOException e) {
+                }
+            }
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param resourceName DOCUMENT ME!
+     * @return DOCUMENT ME!
+     */
+    private InputStream getResourceAsStream(String resourceName) {
+        ClassLoader loader = Thread.currentThread().getContextClassLoader();
+
+        return loader.getResourceAsStream(resourceName);
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param string DOCUMENT ME!
+     * @return DOCUMENT ME!
+     */
+    private boolean isEmpty(String string) {
+        return ((string == null) || "".equals(string.trim()));
+    }
+
+    /**
+     * process annotation which exist in class level
+     *
+     * @param actionClass class instance to process
+     * @param config      configuration instance
+     */
+    private void processActionInType(Class actionClass, Configuration config) {
+        Action action = (Action) actionClass.getAnnotation(Action.class);
+
+        PackageConfig pkgConfig = buildPackageConfig(config, action);
+
+        Results results = (Results) actionClass.getAnnotation(Results.class);
+        Map<String, ResultConfig> resultConfigs = buildResults(results, pkgConfig);
+
+        InterceptorRefs interceptorRefs = (InterceptorRefs) actionClass.getAnnotation(InterceptorRefs.class);
+        List<InterceptorConfig> interceptorRefConfigs = buildInterceptorRefs(interceptorRefs, pkgConfig);
+
+        try {
+            checkActionClassConstructable(actionClass);
+        } catch (Exception e) {
+            log.error("Action class [" + actionClass.getName()
+                    + "] not found, skipping action [" + action.name() + "]", e);
+
+            return;
+        }
+
+        ActionConfig actionConfig = new ActionConfig(null, actionClass, null, resultConfigs, interceptorRefConfigs);
+        pkgConfig.addActionConfig(action.name(), actionConfig);
+    }
+
+    /**
+     * build package config for the action.
+     *
+     * @param config           the configuration instance
+     * @param action           action annotation containing information about the action to create
+     * @param defaultNamespace default namespace if the action does not specify it
+     * @return package config instance
+     */
+    private PackageConfig buildPackageConfig(Configuration config, Action action,
+                                             String defaultNamespace) {
+        String namespace = isEmpty(action.namespace()) ? defaultNamespace : action.namespace();
+        PackageConfig pkgConfig = config.getPackageConfig(namespace);
+
+        if (pkgConfig == null) {
+            pkgConfig = new PackageConfig(namespace, namespace, false, null);
+            config.addPackageConfig(pkgConfig.getName(), pkgConfig);
+        }
+
+        PackageConfig defaultPackageConfig = config.getPackageConfig("default");
+
+        if (defaultPackageConfig != null) {
+            pkgConfig.addParent(defaultPackageConfig);
+        }
+
+        return pkgConfig;
+    }
+
+    /**
+     * calls buildPackageConfig(config, action, "").
+     *
+     * @param config the configuration instance
+     * @param action action annotation containing information about the action to create
+     * @return package config instance
+     * @see #buildPackageConfig(Configuration,Action,String)
+     */
+    private PackageConfig buildPackageConfig(Configuration config, Action action) {
+        return buildPackageConfig(config, action, "");
+    }
+
+    /**
+     * build interceptor refs for the specified package
+     *
+     * @param interceptorRefs interceptorRefs annotation containing information of the interceptorRef to create
+     * @param pkgConfig       the package config instance
+     * @return list of interceptor config
+     */
+    private List<InterceptorConfig> buildInterceptorRefs(InterceptorRefs interceptorRefs, PackageConfig pkgConfig) {
+        List<InterceptorConfig> list = null;
+
+        if (interceptorRefs == null) {
+            return Collections.EMPTY_LIST;
+        }
+
+        list = new ArrayList<InterceptorConfig>();
+
+        for (InterceptorRef interceptorRef : interceptorRefs.value()) {
+            List list2 = InterceptorBuilder.constructInterceptorReference(pkgConfig, interceptorRef.value(), null);
+            list.addAll(list2);
+        }
+
+        return list;
+    }
+
+    /**
+     * process annotation which exist in method level
+     *
+     * @param actionClass class instance to process
+     * @param config      configuration instance
+     */
+    private void processActionInMethod(Class actionClass, Configuration config) {
+        for (Method method : actionClass.getMethods()) {
+            if (!method.isAnnotationPresent(Action.class)
+                    || !checkMethodSignature(method)) {
+                continue;
+            }
+
+            Action classAction = (Action) actionClass.getAnnotation(Action.class);
+            Action action = method.getAnnotation(Action.class);
+            PackageConfig pkgConfig = buildPackageConfig(config, action, (classAction == null) ? "" : classAction.namespace());
+
+            Results defaultResults = (Results) actionClass.getAnnotation(Results.class);
+            Map<String, ResultConfig> defaultResultConfigs = buildResults( defaultResults, pkgConfig);
+
+            Results results = (Results) method.getAnnotation(Results.class);
+            Map<String, ResultConfig> resultConfigs = buildResults(results, pkgConfig);
+
+            // add all results which are declared in class level
+            for (Entry<String, ResultConfig> entry : defaultResultConfigs.entrySet()) {
+                if (resultConfigs.get(entry.getKey()) == null) {
+                    resultConfigs.put(entry.getKey(), entry.getValue());
+                }
+            }
+
+            InterceptorRefs interceptorRefs = (InterceptorRefs) method.getAnnotation(InterceptorRefs.class);
+            List<InterceptorConfig> interceptorRefConfigs = buildInterceptorRefs(interceptorRefs, pkgConfig);
+
+            // use interceptorRef which are declared in class level
+            if (interceptorRefConfigs.size() == 0) {
+                InterceptorRefs defaultInterceptorRefs = (InterceptorRefs) actionClass.getAnnotation(InterceptorRefs.class);
+                interceptorRefConfigs = buildInterceptorRefs(defaultInterceptorRefs, pkgConfig);
+            }
+
+            try {
+                checkActionClassConstructable(actionClass);
+            } catch (Exception e) {
+                log.error("Action class [" + actionClass.getName()
+                        + "] not found, skipping action [" + action.name() + "]", e);
+
+                return;
+            }
+
+            ActionConfig actionConfig = new ActionConfig(null, actionClass, null, resultConfigs, interceptorRefConfigs);
+            pkgConfig.addActionConfig(action.name(), actionConfig);
+        }
+    }
+
+    /**
+     * Check if this action is constructable. Not very sure about this. The guys in xwork team do this too :)
+     *
+     * @param actionClass
+     * @throws Exception
+     */
+    private void checkActionClassConstructable(Class actionClass)
+            throws Exception {
+        if (ObjectFactory.getObjectFactory().isNoArgConstructorRequired()) {
+            ActionConfig actionConfig = new ActionConfig(null, actionClass, null, null, null);
+            // use this for xwork 1.0
+            // ObjectFactory.getObjectFactory().buildAction(actionConfig);
+            ObjectFactory.getObjectFactory().buildAction(null, null, actionConfig, null);
+        }
+    }
+
+    /**
+     * Check whether this method is a valid xwork's "execute" method
+     *
+     * @param method method to check
+     * @return <code>true</code> if the return type is String and have no parameter
+     */
+    private boolean checkMethodSignature(Method method) {
+        return (String.class.equals(method.getReturnType()) && (method.getParameterTypes().length == 0));
+    }
+
+    /**
+     * @return always return <code>false</code>
+     * @see ConfigurationProvider#needsReload()
+     */
+    public boolean needsReload() {
+        return false;
+    }
+
+    /**
+     * build map of result configs for this package
+     *
+     * @param results   list result annotation containing information of the result config
+     * @param pkgConfig the PackageConfig instance
+     * @return map of result configs. empty map if no result created
+     */
+    private Map<String, ResultConfig> buildResults(Results results, PackageConfig pkgConfig) {
+        Map<String, ResultConfig> resultMap = new HashMap<String, ResultConfig>();
+
+        if (results == null) {
+            return resultMap;
+        }
+
+        for (Result result : results.value()) {
+            ResultTypeConfig resultTypeConfig = (ResultTypeConfig) pkgConfig.getAllResultTypeConfigs().get(result.type());
+
+            if (resultTypeConfig == null) {
+                throw new ConfigurationException(
+                        "There is no result type defined for type '" + result.type()
+                                + "' mapped with name '" + result.name() + "'");
+            }
+
+            Map<String, String> params = new HashMap<String, String>();
+
+            if (result.params().length == 0) {
+                try {
+                    String paramName = (String) resultTypeConfig.getDefaultResultParam(); // getClazz().getField("DEFAULT_PARAM").get(null);
+                    String paramValue = result.value();
+
+                    if (paramValue != null) {
+                        paramValue = paramValue.trim();
+                    }
+
+                    params.put(paramName, paramValue);
+                } catch (Throwable t) {
+                }
+            } else {
+                for (Param param : result.params()) {
+                    params.put(param.name(), param.value());
+                }
+            }
+
+            resultMap.put(result.name(), new ResultConfig(result.name(), resultTypeConfig.getClazz(), params));
+        }
+
+        return resultMap;
+    }
+}

tiger/src/java/com/opensymphony/xwork/config/annotations/Action.java

+package com.opensymphony.xwork.config.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target( { ElementType.TYPE, ElementType.METHOD })
+public @interface Action {
+  String name() default "";
+
+  String namespace() default "";
+}

tiger/src/java/com/opensymphony/xwork/config/annotations/InterceptorRef.java

+package com.opensymphony.xwork.config.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface InterceptorRef {
+  String value();
+}

tiger/src/java/com/opensymphony/xwork/config/annotations/InterceptorRefs.java

+package com.opensymphony.xwork.config.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target( { ElementType.TYPE, ElementType.METHOD })
+public @interface InterceptorRefs {
+  InterceptorRef[] value();
+}

tiger/src/java/com/opensymphony/xwork/config/annotations/Param.java

+package com.opensymphony.xwork.config.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Param {
+  String name();
+
+  String value();
+}

tiger/src/java/com/opensymphony/xwork/config/annotations/Result.java

+package com.opensymphony.xwork.config.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Result {
+  String name() default "";
+
+  String type() default "";
+
+  String value() default "";
+
+  Param[] params() default {};
+}

tiger/src/java/com/opensymphony/xwork/config/annotations/Results.java

+package com.opensymphony.xwork.config.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target( { ElementType.TYPE, ElementType.METHOD })
+public @interface Results {
+  Result[] value();
+}

tiger/src/java/com/opensymphony/xwork/conversion/annotations/Conversion.java

+/*
+ * Copyright (c) 2002-2006 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork.conversion.annotations;
+
+import java.lang.annotation.*;
+
+/**
+ * <!-- START SNIPPET: description -->
+ * <p/>A marker annotation for type conversions at Type level.
+ * <!-- END SNIPPET: description -->
+ *
+ * <p/> <u>Annotation usage:</u>
+ *
+ * <!-- START SNIPPET: usage -->
+ * <p/>The Conversion annotation must be applied at Type level.
+ * <!-- END SNIPPET: usage -->
+ *
+ * <p/> <u>Annotation parameters:</u>
+ *
+ * <!-- START SNIPPET: parameters -->
+ * <table>
+ * <thead>
+ * <tr>
+ * <th>Parameter</th>
+ * <th>Required</th>
+ * <th>Default</th>
+ * <th>Description</th>
+ * </tr>
+ * </thead>
+ * <tbody>
+ * <tr>
+ * <td>conversion</td>
+ * <td>no</td>
+ * <td>&nbsp;</td>
+ * <td>used for Type Conversions applied at Type level.</td>
+ * </tr>
+ * </tbody>
+ * </table>
+ * <!-- END SNIPPET: parameters -->
+ *
+ * <p/> <u>Example code:</u>
+ *
+ * <pre>
+ * <!-- START SNIPPET: example -->
+ * &#64;Conversion()
+ * public class ConversionAction implements Action {
+ * }
+ *
+ * <!-- END SNIPPET: example -->
+ * </pre>
+ *
+ * @author Rainer Hermanns
+ * @version $Id$
+ */
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Conversion {
+
+    /**
+     * Allow Type Conversions being applied at Type level.
+     */
+    TypeConversion[] conversions() default {};
+}

tiger/src/java/com/opensymphony/xwork/conversion/annotations/ConversionRule.java

+/*
+ * Copyright (c) 2002-2006 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork.conversion.annotations;
+
+/**
+ * <code>ConversionRule</code>
+ *
+ * @author Rainer Hermanns
+ * @version $Id$
+ */
+public enum ConversionRule {
+
+    PROPERTY, COLLECTION, MAP, KEY, KEY_PROPERTY, ELEMENT, CREATE_IF_NULL;
+
+    @Override
+    public String toString() {
+        return super.toString().toUpperCase();
+    }
+}
+

tiger/src/java/com/opensymphony/xwork/conversion/annotations/ConversionType.java

+/*
+ * Copyright (c) 2002-2006 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork.conversion.annotations;
+
+/**
+ * <code>ConversionType</code>
+ *
+ * @author <a href="mailto:hermanns@aixcept.de">Rainer Hermanns</a>
+ * @version $Id$
+ */
+public enum ConversionType {
+
+
+    APPLICATION, CLASS;
+
+    @Override
+    public String toString() {
+        return super.toString().toUpperCase();
+    }
+
+}

tiger/src/java/com/opensymphony/xwork/conversion/annotations/TypeConversion.java

+/*
+ * Copyright (c) 2002-2006 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.xwork.conversion.annotations;
+
+import java.lang.annotation.*;
+
+/**
+ * <!-- START SNIPPET: description -->
+ * <p/>This annotation is used for class and application wide conversion rules.
+ * <p>
+ * Class wide conversion:<br/>
+ * The conversion rules will be assembled in a file called <code>XXXAction-conversion.properties</code>
+ * within the same package as the related action class.
+ * Set type to: <code>type = ConversionType.CLASS</code>
+ * </p>
+ * <p>
+ * Allication wide conversion:<br/>
+ * The conversion rules will be assembled within the <code>xwork-conversion.properties</code> file within the classpath root.
+ * Set type to: <code>type = ConversionType.APPLICATION</code>
+ * <p/>
+ * <!-- END SNIPPET: description -->
+ *
+ * <p/> <u>Annotation usage:</u>
+ *
+ * <!-- START SNIPPET: usage -->
+ * The TypeConversion annotation can be applied at property and method level.
+ * <!-- END SNIPPET: usage -->
+ *
+ * <p/> <u>Annotation parameters:</u>
+ *
+ * <!-- START SNIPPET: parameters -->
+ * <table>
+ * <thead>
+ * <tr>
+ * <th>Parameter</th>
+ * <th>Required</th>
+ * <th>Default</th>
+ * <th>Description</th>
+ * </tr>
+ * </thead>
+ * <tbody>
+ * <tr>
+ * <td>key</td>
+ * <td>no</td>
+ * <td>The annotated property/key name</td>
+ * <td>The optional property name mostly used within TYPE level annotations.</td>
+ * </tr>
+ * <tr>
+ * <td>type</td>
+ * <td>no</td>
+ * <td>ConversionType.CLASS</td>
+ * <td>Enum value of ConversionType.  Determines whether the conversion should be applied at application or class level.</td>
+ * </tr>
+ * <tr>
+ * <td>rule</td>
+ * <td>no</td>
+ * <td>ConversionRule.PROPERTY</td>
+ * <td>Enum value of ConversionRule. The ConversionRule can be a property, a Collection or a Map.</td>
+ * </tr>
+ * <tr>