Commits

Anonymous committed 4afb91b

First cut at xfire integration.
Still doesn't quite work since the generated wsdl contains java.lang.Object and Throwable, so waiting for a fix in xfire

  • Participants
  • Parent commits 4f1ee30

Comments (0)

Files changed (41)

 
   <target name="example-war" depends="jar" description="Build example war web application">
     <mkdir dir="${dist}" />
-    <war warfile="${dist}/${name}-${version}-example.war" webxml="${src.etc}/example/web.xml">
-      <fileset dir="${src.webapp}"/>
+    <war warfile="${dist}/${name}-${version}-example.war" webxml="${src.webapp}/WEB-INF/web.xml">
+      <fileset dir="${src.webapp}">
+        <exclude name="WEB-INF/web.xml" />
+      </fileset>
       <lib dir="${lib.core}"/>
       <lib file="${build}/${name}-${version}.jar"/>
       <lib file="${lib.optional}/osuser-1.0-dev-2Feb05.jar"/>
       <lib file="${lib.optional}/activation.jar"/>
       <lib file="${lib.optional}/quartz.jar"/>
       <lib file="${lib.optional}/bsh-1.2b7.jar"/>
-      <classes dir="${src.etc}/example">
-        <exclude name="web.xml"/>
-      </classes>
+      <lib dir="${lib.optional}/xfire"/>
     </war>
   </target>
 

File lib/optional/xfire/jaxen-1.1-beta-5.jar

Binary file added.

File lib/optional/xfire/jdom-1.0.jar

Binary file added.

File lib/optional/xfire/stax-1.1.2-dev.jar

Binary file added.

File lib/optional/xfire/stax-api-1.0.jar

Binary file added.

File lib/optional/xfire/wsdl4j-1.4.jar

Binary file added.

File lib/optional/xfire/xfire-aegis.jar

Binary file added.

File lib/optional/xfire/xfire-core.jar

Binary file added.

File osworkflow.iml

         <SOURCES />
       </library>
     </orderEntry>
+    <orderEntry type="library" name="xfire" level="project" />
     <orderEntryProperties />
   </component>
   <component name="RetroweaverPlugin">

File osworkflow.ipr

   <component name="CompilerConfiguration">
     <option name="DEFAULT_COMPILER" value="Javac" />
     <option name="CLEAR_OUTPUT_DIRECTORY" value="true" />
-    <option name="DEPLOY_AFTER_MAKE" value="0" />
+    <option name="DEPLOY_AFTER_MAKE" value="2" />
     <resourceExtensions>
       <entry name=".+\.(properties|xml|html)" />
       <entry name=".+\.(gif|png|jpeg|jpg)" />
       <module fileurl="file://$PROJECT_DIR$/src/designer/designer.iml" filepath="$PROJECT_DIR$/src/designer/designer.iml" />
       <module fileurl="file://$PROJECT_DIR$/osworkflow.iml" filepath="$PROJECT_DIR$/osworkflow.iml" />
       <module fileurl="file://$PROJECT_DIR$/src/test/tests.iml" filepath="$PROJECT_DIR$/src/test/tests.iml" />
+      <module fileurl="file://$PROJECT_DIR$/src/webapp/webapp.iml" filepath="$PROJECT_DIR$/src/webapp/webapp.iml" />
     </modules>
   </component>
   <component name="ProjectRootManager" version="2" assert-keyword="true" jdk-15="false" project-jdk-name="1.4" />
     <option enabled="false" />
   </component>
   <component name="WebRootContainer" />
-  <component name="libraryTable" />
+  <component name="libraryTable">
+    <library name="xfire">
+      <CLASSES>
+        <root url="jar://$PROJECT_DIR$/lib/optional/xfire/jdom-1.0.jar!/" />
+        <root url="jar://$PROJECT_DIR$/lib/optional/xfire/stax-1.1.2-dev.jar!/" />
+        <root url="jar://$PROJECT_DIR$/lib/optional/xfire/stax-api-1.0.jar!/" />
+        <root url="jar://$PROJECT_DIR$/lib/optional/xfire/wsdl4j-1.4.jar!/" />
+        <root url="jar://$PROJECT_DIR$/lib/optional/xfire/xfire-aegis.jar!/" />
+        <root url="jar://$PROJECT_DIR$/lib/optional/xfire/xfire-core.jar!/" />
+        <root url="jar://$PROJECT_DIR$/lib/optional/xfire/jaxen-1.1-beta-5.jar!/" />
+      </CLASSES>
+      <JAVADOC />
+      <SOURCES>
+        <root url="file://$PROJECT_DIR$/../xfire/xfire-core/src/main" />
+        <root url="file://$PROJECT_DIR$/../xfire/xfire-aegis/src/main" />
+      </SOURCES>
+    </library>
+  </component>
   <component name="org.tmatesoft.tmate.projectComponent">
     <connections>
       <connection name="local" host="localhost" path="tmate" port="8080" />

File src/etc/example/example.xml

-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE workflow PUBLIC "-//OpenSymphony Group//DTD OSWorkflow 2.6//EN" "http://www.opensymphony.com/osworkflow/workflow_2_8.dtd">
-<workflow>
-	<initial-actions>
-		<action id="100" name="Start Workflow">
-			<restrict-to>
-				<conditions type="AND">
-					<condition type="beanshell">
-						<arg name="script">true</arg>
-					</condition>
-					<condition type="class">
-						<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
-						<arg name="group">foos</arg>
-					</condition>
-				</conditions>
-			</restrict-to>
-			<pre-functions>
-				<function type="class">
-					<arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
-				</function>
-			</pre-functions>
-			<results>
-				<unconditional-result old-status="Finished" status="Underway" step="1" owner="${caller}"/>
-			</results>
-		</action>
-	</initial-actions>
-	<steps>
-		<step id="1" name="First Draft">
-			<external-permissions>
-				<permission name="permA">
-					<restrict-to>
-						<conditions type="AND">
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
-								<arg name="status">Underway</arg>
-							</condition>
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
-							</condition>
-						</conditions>
-					</restrict-to>
-				</permission>
-			</external-permissions>
-			<actions>
-				<action id="1" name="Finish First Draft">
-					<restrict-to>
-						<conditions type="AND">
-							<condition type="beanshell">
-								<arg name="script">true</arg>
-							</condition>
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
-								<arg name="status">Underway</arg>
-							</condition>
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
-							</condition>
-						</conditions>
-					</restrict-to>
-					<pre-functions>
-						<function type="beanshell">
-							<arg name="script">
-                                String caller = context.getCaller();
-                                propertySet.setString("caller", caller);
-                                boolean test = true;
-                                String yuck = null;
-                                String blah = "987654321";
-                                System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
-                            </arg>
-						</function>
-					</pre-functions>
-					<results>
-						<result old-status="Finished" split="1">
-							<conditions type="AND">
-								<condition type="beanshell">
-									<arg name="script">
-									propertySet.getString("caller").equals("test")
-									</arg>
-								</condition>
-							</conditions>
-							<post-functions>
-								<function type="beanshell">
-									<arg name="script">
-                                        System.out.println("11111111111111");
-                                        System.out.println("11111111111111");
-                                        System.out.println("11111111111111");
-                                        System.out.println("11111111111111");
-                                        System.out.println("11111111111111");
-                                        System.out.println("11111111111111");
-                                        System.out.println("11111111111111");
-                                    </arg>
-								</function>
-							</post-functions>
-						</result>
-						<unconditional-result old-status="Finished" split="2"/>
-					</results>
-					<post-functions>
-						<function type="beanshell">
-							<arg name="script">
-                                System.out.println("22222222222222");
-                                System.out.println("22222222222222");
-                                System.out.println("22222222222222");
-                                System.out.println("22222222222222");
-                                System.out.println("22222222222222");
-                                System.out.println("22222222222222");
-                                System.out.println("22222222222222");
-                                System.out.println("22222222222222");
-                                System.out.println("22222222222222");
-                            </arg>
-						</function>
-                        <!--
-                        <function type="class">
-                            <arg name="class.name">com.opensymphony.workflow.util.ScheduleJob</arg>
-                            <arg name="triggerId">1</arg>
-                            <arg name="jobName">testJob</arg>
-                            <arg name="triggerName">testTrigger</arg>
-                            <arg name="groupName">test</arg>
-
-                            <arg name="repeat">10</arg>
-                            <arg name="repeatDelay">2000</arg>
-                            <arg name="cronExpression">0,5,10,15,20,25,30,35,40,45,50,55 * * * * ?</arg>
-
-                            <arg name="username">test</arg>
-                            <arg name="password">test</arg>
-
-                            <arg name="local">true</arg>
-                            <arg name="schedulerStart">true</arg>
-                        </function>
-                        -->
-					</post-functions>
-				</action>
-			</actions>
-		</step>
-		<step id="2" name="Edit Doc">
-			<external-permissions>
-				<permission name="permB">
-					<restrict-to>
-						<conditions type="AND">
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
-								<arg name="status">Underway</arg>
-							</condition>
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
-							</condition>
-						</conditions>
-					</restrict-to>
-
-				</permission>
-			</external-permissions>
-			<actions>
-				<action id="2" name="Sign Up For Editing">
-					<restrict-to>
-						<conditions type="AND">
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
-								<arg name="status">Queued</arg>
-							</condition>
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
-								<arg name="group">bars</arg>
-							</condition>
-						</conditions>
-					</restrict-to>
-					<pre-functions>
-						<function type="class">
-							<arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
-						</function>
-					</pre-functions>
-					<results>
-						<unconditional-result old-status="Finished" status="Underway" step="2" owner="${caller}"/>
-					</results>
-				</action>
-				<action id="3" name="Finish Editing">
-					<restrict-to>
-						<conditions type="AND">
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
-								<arg name="status">Underway</arg>
-							</condition>
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
-							</condition>
-						</conditions>
-					</restrict-to>
-					<pre-functions>
-						<function type="class">
-							<arg name="class.name">com.opensymphony.workflow.util.MostRecentOwner</arg>
-							<arg name="stepId">1</arg>
-						</function>
-					</pre-functions>
-					<results>
-						<unconditional-result old-status="Finished" status="Underway" step="3" owner="${mostRecentOwner}"/>
-					</results>
-				</action>
-				<action id="4" name="Requeue Editing">
-					<restrict-to>
-						<conditions type="AND">
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
-								<arg name="status">Underway</arg>
-							</condition>
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
-							</condition>
-						</conditions>
-					</restrict-to>
-					<results>
-						<unconditional-result old-status="Finished" status="Queued" step="2"/>
-					</results>
-				</action>
-			</actions>
-		</step>
-		<step id="3" name="Review Doc">
-			<external-permissions>
-				<permission name="permA">
-					<restrict-to>
-						<conditions type="AND">
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
-								<arg name="status">Underway</arg>
-							</condition>
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
-							</condition>
-						</conditions>
-					</restrict-to>
-				</permission>
-			</external-permissions>
-			<actions>
-				<action id="5" name="More Edits">
-					<restrict-to>
-						<conditions type="AND">
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
-								<arg name="status">Underway</arg>
-							</condition>
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
-							</condition>
-						</conditions>
-					</restrict-to>
-					<pre-functions>
-						<function type="class">
-							<arg name="class.name">com.opensymphony.workflow.util.MostRecentOwner</arg>
-							<arg name="stepId">2</arg>
-						</function>
-					</pre-functions>
-					<results>
-						<unconditional-result old-status="Finished" status="Underway" step="2" owner="${mostRecentOwner}"/>
-					</results>
-				</action>
-				<action id="6" name="Peer Review">
-					<restrict-to>
-						<conditions type="AND">
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
-								<arg name="status">Underway</arg>
-							</condition>
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
-							</condition>
-						</conditions>
-					</restrict-to>
-					<results>
-						<unconditional-result old-status="Finished" status="Queued" step="4"/>
-					</results>
-				</action>
-				<action id="7" name="Publish Doc">
-					<restrict-to>
-						<conditions type="AND">
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
-								<arg name="status">Underway</arg>
-							</condition>
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
-							</condition>
-						</conditions>
-					</restrict-to>
-					<pre-functions>
-						<function type="class">
-							<arg name="class.name">com.opensymphony.workflow.util.MostRecentOwner</arg>
-							<arg name="stepId">2</arg>
-						</function>
-					</pre-functions>
-					<results>
-						<unconditional-result old-status="Finished" status="Underway" step="5" owner="${mostRecentOwner}"/>
-					</results>
-				</action>
-			</actions>
-		</step>
-		<step id="4" name="Second Review">
-			<external-permissions>
-				<permission name="permC">
-					<restrict-to>
-						<conditions type="AND">
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
-								<arg name="status">Underway</arg>
-							</condition>
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
-							</condition>
-						</conditions>
-					</restrict-to>
-				</permission>
-			</external-permissions>
-			<actions>
-				<action id="8" name="Finish Second Review">
-					<restrict-to>
-						<conditions type="AND">
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
-								<arg name="status">Underway</arg>
-							</condition>
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
-							</condition>
-						</conditions>
-					</restrict-to>
-					<pre-functions>
-						<function type="class">
-							<arg name="class.name">com.opensymphony.workflow.util.MostRecentOwner</arg>
-							<arg name="stepId">3</arg>
-						</function>
-					</pre-functions>
-					<results>
-						<unconditional-result old-status="Finished" status="Underway" step="3" owner="${mostRecentOwner}"/>
-					</results>
-				</action>
-				<action id="9" name="Sign Up For Second Review">
-					<restrict-to>
-						<conditions type="AND">
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
-								<arg name="status">Queued</arg>
-							</condition>
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
-								<arg name="group">bazs</arg>
-							</condition>
-						</conditions>
-					</restrict-to>
-					<pre-functions>
-						<function type="class">
-							<arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
-						</function>
-					</pre-functions>
-					<results>
-						<unconditional-result old-status="Finished" status="Underway" step="4" owner="${caller}"/>
-					</results>
-				</action>
-				<action id="10" name="Queue Second Review">
-					<restrict-to>
-						<conditions type="AND">
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
-								<arg name="status">Underway</arg>
-							</condition>
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
-							</condition>
-						</conditions>
-					</restrict-to>
-					<results>
-						<unconditional-result old-status="Finished" status="Queued" step="4"/>
-					</results>
-				</action>
-			</actions>
-		</step>
-		<step id="5" name="Publish Doc">
-			<actions>
-				<action id="11" name="Publish Document">
-					<restrict-to>
-						<conditions type="AND">
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
-								<arg name="status">Underway</arg>
-							</condition>
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
-							</condition>
-						</conditions>
-					</restrict-to>
-					<pre-functions>
-						<function type="class">
-							<arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
-						</function>
-					</pre-functions>
-					<results>
-						<unconditional-result old-status="Finished" status="Finished" step="5" owner="${caller}"/>
-					</results>
-				</action>
-			</actions>
-		</step>
-		<step id="6" name="Foo">
-			<actions>
-				<action name="Finish Foo" id="12">
-					<restrict-to>
-						<conditions type="AND">
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
-								<arg name="status">Underway</arg>
-								<arg name="stepId">6</arg>
-							</condition>
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
-								<arg name="stepId">6</arg>
-							</condition>
-						</conditions>
-					</restrict-to>
-					<results>
-						<unconditional-result old-status="Finished" join="1"/>
-					</results>
-				</action>
-			</actions>
-		</step>
-		<step id="7" name="Bar">
-			<actions>
-				<action name="Finish Bar" id="13">
-					<restrict-to>
-						<conditions type="AND">
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
-								<arg name="status">Underway</arg>
-								<arg name="stepId">7</arg>
-							</condition>
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
-								<arg name="stepId">7</arg>
-							</condition>
-						</conditions>
-					</restrict-to>
-					<results>
-						<unconditional-result old-status="Finished" owner="test" status="Underway" step="8"/>
-					</results>
-				</action>
-			</actions>
-		</step>
-		<step id="8" name="Baz">
-			<actions>
-				<action name="Finish Baz" id="14">
-					<restrict-to>
-						<conditions type="AND">
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
-								<arg name="status">Underway</arg>
-								<arg name="stepId">8</arg>
-							</condition>
-							<condition type="class">
-								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
-								<arg name="stepId">8</arg>
-							</condition>
-						</conditions>
-					</restrict-to>
-					<results>
-						<unconditional-result old-status="Finished" join="1"/>
-					</results>
-				</action>
-			</actions>
-		</step>
-	</steps>
-	<splits>
-		<split id="1">
-			<unconditional-result old-status="Finished" status="Underway" owner="test" step="6"/>
-			<unconditional-result old-status="Finished" status="Underway" owner="test" step="7"/>
-		</split>
-		<split id="2">
-			<unconditional-result old-status="Finished" status="Queued" step="2"/>
-		</split>
-	</splits>
-	<joins>
-		<join id="1">
-			<conditions type="AND">
-				<condition type="beanshell">
-					<arg name="script"><![CDATA[
-					"Finished".equals(jn.getStep(6).getStatus()) && "Finished".equals(jn.getStep(8).getStatus())
-					]]></arg>
-				</condition>
-			</conditions>
-			<unconditional-result old-status="Finished" status="Underway" owner="test" step="2"/>
-		</join>
-	</joins>
-</workflow>
-

File src/etc/example/osworkflow.xml

-<osworkflow>
-    <persistence class="com.opensymphony.workflow.spi.memory.MemoryWorkflowStore"/>
-
-    <factory class="com.opensymphony.workflow.loader.XMLWorkflowFactory">
-        <property key="resource" value="workflows.xml" />
-    </factory>
-</osworkflow>

File src/etc/example/web.xml

-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
-<web-app>
-
-  <display-name>OSWorkflow Example App</display-name>
-
-  <welcome-file-list>
-    <welcome-file>default.jsp</welcome-file>
-  </welcome-file-list>
-</web-app>
-

File src/etc/example/workflows.xml

-<workflows>
-    <workflow name="example" type="resource" location="example.xml"/>
-</workflows>

File src/java/com/opensymphony/workflow/InvalidInputException.aegis.xml

+<mappings>
+  <mapping>
+    <property name="genericErrors" componentType="java.lang.String"/>
+    <property name="errors" keyType="java.lang.String" componentType="java.lang.String"/>
+  </mapping>
+</mappings>

File src/java/com/opensymphony/workflow/Workflow.aegis.xml

+<mappings>
+  <mapping>
+    <method name="initialize">
+      <parameter index="2" keyType="java.lang.String" componentType="java.lang.String"/>
+    </method>
+    <method name="canInitialize">
+      <parameter index="2" keyType="java.lang.String" componentType="java.lang.String"/>
+    </method>
+    <method name="getAvailableActions">
+      <parameter index="1" keyType="java.lang.String" componentType="java.lang.String"/>
+    </method>
+    <method name="doAction">
+      <parameter index="2" keyType="java.lang.String" componentType="java.lang.String"/>
+    </method>
+    <method name="query">
+      <return-type componentType="java.lang.Long"/>
+    </method>
+    <method name="getCurrentSteps">
+      <return-type componentType="com.opensymphony.workflow.spi.Step"/>
+    </method>
+    <method name="getHistorySteps">
+      <return-type componentType="com.opensymphony.workflow.spi.Step"/>
+    </method>
+    <method name="getSecurityPermissions">
+      <return-type componentType="java.lang.String"/>
+    </method>
+  </mapping>
+</mappings>

File src/java/com/opensymphony/workflow/WorkflowException.aegis.xml

+<mappings>
+  <mapping>
+    <property name="rootCause" ignore="true" />
+    <property name="cause" ignore="true" />
+  </mapping>
+</mappings>

File src/java/com/opensymphony/workflow/config/Configuration.aegis.xml

+<mappings>
+  <mapping>
+    <property name="variableResolver" ignore="true"/>
+    <property name="workflowStore" ignore="true"/>
+    <property name="persistenceArgs" ignore="true"/>
+  </mapping>
+</mappings>

File src/java/com/opensymphony/workflow/config/DefaultConfiguration.java

  * rather than in the calling client.
  *
  * @author Hani Suleiman
- * @version $Revision: 1.13 $
+ * @version $Revision: 1.14 $
  */
 public class DefaultConfiguration implements Configuration, Serializable {
     //~ Static fields/initializers /////////////////////////////////////////////
     public void load(URL url) throws FactoryException {
         InputStream is = getInputStream(url);
 
+        if (is == null) {
+            throw new FactoryException("Cannot find osworkflow.xml configuration file in classpath or in META-INF");
+        }
+
         try {
             DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
             dbf.setNamespaceAware(true);

File src/java/com/opensymphony/workflow/loader/ActionDescriptor.aegis.xml

+<mappings>
+  <mapping>
+    <property name="validators" componentType="com.opensymphony.workflow.loader.ValidatorDescriptor" />
+    <property name="preFunctions" componentType="com.opensymphony.workflow.loader.FunctionDescriptor" />
+    <property name="postFunctions" componentType="com.opensymphony.workflow.loader.FunctionDescriptor" />
+    <property name="metaAttributes" keyType="java.lang.String" componentType="java.lang.String" />
+    <property name="conditionalResults" componentType="com.opensymphony.workflow.loader.ConditionalResultDescriptor" />
+  </mapping>
+</mappings>

File src/java/com/opensymphony/workflow/loader/ConditionDescriptor.aegis.xml

+<mappings>
+  <mapping>
+    <property name="args" keyType="java.lang.String" componentType="java.lang.String" />
+  </mapping>
+</mappings>

File src/java/com/opensymphony/workflow/loader/ConditionalResultDescriptor.aegis.xml

+<mappings>
+  <mapping>
+    <property name="conditions" componentType="com.opensymphony.workflow.loader.ConditionDescriptor" />
+  </mapping>
+</mappings>

File src/java/com/opensymphony/workflow/loader/ConditionsDescriptor.aegis.xml

+<mappings>
+  <mapping>
+    <property name="conditions" componentType="com.opensymphony.workflow.loader.ConditionDescriptor" />
+  </mapping>
+</mappings>

File src/java/com/opensymphony/workflow/loader/FunctionDescriptor.aegis.xml

+<mappings>
+  <mapping>
+    <property name="args" keyType="java.lang.String" componentType="java.lang.String" />
+  </mapping>
+</mappings>

File src/java/com/opensymphony/workflow/loader/JoinDescriptor.aegis.xml

+<mappings>
+  <mapping>
+    <property name="conditions" componentType="com.opensymphony.workflow.loader.ConditionsDescriptor" />
+  </mapping>
+</mappings>

File src/java/com/opensymphony/workflow/loader/RegisterDescriptor.aegis.xml

+<mappings>
+  <mapping>
+    <property name="args" keyType="java.lang.String" componentType="java.lang.String" />
+  </mapping>
+</mappings>

File src/java/com/opensymphony/workflow/loader/RestrictionDescriptor.aegis.xml

+<mappings>
+  <mapping>
+    <property name="conditions" componentType="com.opensymphony.workflow.loader.ConditionDescriptor" />
+  </mapping>
+</mappings>

File src/java/com/opensymphony/workflow/loader/ResultDescriptor.aegis.xml

+<mappings>
+  <mapping>
+    <property name="validators" componentType="com.opensymphony.workflow.loader.ValidatorDescriptor" />
+    <property name="preFunctions" componentType="com.opensymphony.workflow.loader.FunctionDescriptor" />
+    <property name="postFunctions" componentType="com.opensymphony.workflow.loader.FunctionDescriptor" />
+  </mapping>
+</mappings>

File src/java/com/opensymphony/workflow/loader/SplitDescriptor.aegis.xml

+<mappings>
+  <mapping>
+    <property name="results" componentType="com.opensymphony.workflow.loader.ResultDescriptor" />
+  </mapping>
+</mappings>

File src/java/com/opensymphony/workflow/loader/SplitDescriptor.java

 import com.opensymphony.workflow.util.Validatable;
 
 import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
 
 import java.io.PrintWriter;
 

File src/java/com/opensymphony/workflow/loader/StepDescriptor.aegis.xml

+<mappings>
+  <mapping>
+    <property name="actions" componentType="com.opensymphony.workflow.loader.ActionDescriptor" />
+    <property name="commonActions" componentType="com.opensymphony.workflow.loader.ActionDescriptor" />
+    <property name="preFunctions" componentType="com.opensymphony.workflow.loader.FunctionDescriptor" />
+    <property name="postFunctions" componentType="com.opensymphony.workflow.loader.FunctionDescriptor" />
+    <property name="metaAttributes" keyType="java.lang.String" componentType="java.lang.String" />
+    <property name="permissions" componentType="java.lang.String" />
+  </mapping>
+</mappings>

File src/java/com/opensymphony/workflow/loader/ValidatorDescriptor.aegis.xml

+<mappings>
+  <mapping>
+    <property name="args" keyType="java.lang.String" componentType="java.lang.String" />
+  </mapping>
+</mappings>

File src/java/com/opensymphony/workflow/loader/WorkflowDescriptor.aegis.xml

+<mappings>
+  <mapping>
+    <property name="initialActions" componentType="com.opensymphony.workflow.loader.ActionDescriptor" />
+    <property name="globalActions" componentType="com.opensymphony.workflow.loader.ActionDescriptor" />
+    <property name="commonActions" keyType="java.lang.Integer" componentType="com.opensymphony.workflow.loader.ActionDescriptor" />
+    <property name="registers" componentType="com.opensymphony.workflow.loader.RegisterDescriptor" />
+    <property name="splits" componentType="com.opensymphony.workflow.loader.SplitDescriptor" />
+    <property name="joins" componentType="com.opensymphony.workflow.loader.JoinDescriptor" />
+    <property name="steps" componentType="com.opensymphony.workflow.loader.StepDescriptor" />
+    <property name="metaAttributes" keyType="java.lang.String" componentType="java.lang.String" />
+    <property name="triggerFunctions" keyType="java.lang.Integer" componentType="com.opensymphony.workflow.loader.FunctionDescriptor" />
+  </mapping>
+</mappings>

File src/java/com/opensymphony/workflow/soap/SOAPWorkflowServlet.java

+/*
+ * Copyright (c) 2002-2003 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.workflow.soap;
+
+import com.opensymphony.workflow.Workflow;
+
+import org.codehaus.xfire.service.Service;
+import org.codehaus.xfire.service.ServiceRegistry;
+import org.codehaus.xfire.service.binding.BeanInvoker;
+import org.codehaus.xfire.service.binding.ObjectServiceFactory;
+import org.codehaus.xfire.transport.http.XFireServlet;
+
+import javax.servlet.ServletException;
+
+
+/**
+ * @author Hani Suleiman
+ *         Date: Nov 10, 2005
+ *         Time: 1:58:35 PM
+ */
+public class SOAPWorkflowServlet extends XFireServlet {
+    //~ Methods ////////////////////////////////////////////////////////////////
+
+    public void init() throws ServletException {
+        super.init();
+
+        ServiceRegistry registry = getXFire().getServiceRegistry();
+        ObjectServiceFactory factory = new ObjectServiceFactory(getXFire().getTransportManager());
+        Service service = factory.create(Workflow.class, "Workflow", null, null);
+        service.getBinding().setInvoker(new BeanInvoker(new XFireSOAPWorkflow()));
+        registry.register(service);
+    }
+}

File src/java/com/opensymphony/workflow/soap/XFireSOAPWorkflow.java

+/*
+ * Copyright (c) 2002-2003 by OpenSymphony
+ * All rights reserved.
+ */
+package com.opensymphony.workflow.soap;
+
+import org.codehaus.xfire.transport.http.XFireServletController;
+
+
+/**
+ * @author Hani Suleiman
+ *         Date: Nov 10, 2005
+ *         Time: 1:51:55 PM
+ */
+public class XFireSOAPWorkflow extends BasicSOAPWorkflow {
+    //~ Methods ////////////////////////////////////////////////////////////////
+
+    protected String getRemoteUser() {
+        String user = XFireServletController.getRequest().getRemoteUser();
+
+        return (user == null) ? "guest" : user;
+    }
+}

File src/java/com/opensymphony/workflow/spi/SimpleStep.java

  * @author <a href="mailto:plightbo@hotmail.com">Pat Lightbody</a>
  */
 public class SimpleStep implements Step, Serializable {
+    //~ Static fields/initializers /////////////////////////////////////////////
+
+    private static final long serialVersionUID = 1093783480189853982L;
+
     //~ Instance fields ////////////////////////////////////////////////////////
 
     private Date dueDate;
 
     //~ Constructors ///////////////////////////////////////////////////////////
 
+    public SimpleStep() {
+    }
+
     public SimpleStep(long id, long entryId, int stepId, int actionId, String owner, Date startDate, Date dueDate, Date finishDate, String status, long[] previousStepIds, String caller) {
         this.id = id;
         this.entryId = entryId;

File src/webapp/WEB-INF/classes/example.xml

+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE workflow PUBLIC "-//OpenSymphony Group//DTD OSWorkflow 2.6//EN" "http://www.opensymphony.com/osworkflow/workflow_2_8.dtd">
+<workflow>
+	<initial-actions>
+		<action id="100" name="Start Workflow">
+			<restrict-to>
+				<conditions type="AND">
+					<condition type="beanshell">
+						<arg name="script">true</arg>
+					</condition>
+					<condition type="class">
+						<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
+						<arg name="group">foos</arg>
+					</condition>
+				</conditions>
+			</restrict-to>
+			<pre-functions>
+				<function type="class">
+					<arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
+				</function>
+			</pre-functions>
+			<results>
+				<unconditional-result old-status="Finished" status="Underway" step="1" owner="${caller}"/>
+			</results>
+		</action>
+	</initial-actions>
+	<steps>
+		<step id="1" name="First Draft">
+			<external-permissions>
+				<permission name="permA">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
+								<arg name="status">Underway</arg>
+							</condition>
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+				</permission>
+			</external-permissions>
+			<actions>
+				<action id="1" name="Finish First Draft">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="beanshell">
+								<arg name="script">true</arg>
+							</condition>
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
+								<arg name="status">Underway</arg>
+							</condition>
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<pre-functions>
+						<function type="beanshell">
+							<arg name="script">
+                                String caller = context.getCaller();
+                                propertySet.setString("caller", caller);
+                                boolean test = true;
+                                String yuck = null;
+                                String blah = "987654321";
+                                System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
+                            </arg>
+						</function>
+					</pre-functions>
+					<results>
+						<result old-status="Finished" split="1">
+							<conditions type="AND">
+								<condition type="beanshell">
+									<arg name="script">
+									propertySet.getString("caller").equals("test")
+									</arg>
+								</condition>
+							</conditions>
+							<post-functions>
+								<function type="beanshell">
+									<arg name="script">
+                                        System.out.println("11111111111111");
+                                        System.out.println("11111111111111");
+                                        System.out.println("11111111111111");
+                                        System.out.println("11111111111111");
+                                        System.out.println("11111111111111");
+                                        System.out.println("11111111111111");
+                                        System.out.println("11111111111111");
+                                    </arg>
+								</function>
+							</post-functions>
+						</result>
+						<unconditional-result old-status="Finished" split="2"/>
+					</results>
+					<post-functions>
+						<function type="beanshell">
+							<arg name="script">
+                                System.out.println("22222222222222");
+                                System.out.println("22222222222222");
+                                System.out.println("22222222222222");
+                                System.out.println("22222222222222");
+                                System.out.println("22222222222222");
+                                System.out.println("22222222222222");
+                                System.out.println("22222222222222");
+                                System.out.println("22222222222222");
+                                System.out.println("22222222222222");
+                            </arg>
+						</function>
+                        <!--
+                        <function type="class">
+                            <arg name="class.name">com.opensymphony.workflow.util.ScheduleJob</arg>
+                            <arg name="triggerId">1</arg>
+                            <arg name="jobName">testJob</arg>
+                            <arg name="triggerName">testTrigger</arg>
+                            <arg name="groupName">test</arg>
+
+                            <arg name="repeat">10</arg>
+                            <arg name="repeatDelay">2000</arg>
+                            <arg name="cronExpression">0,5,10,15,20,25,30,35,40,45,50,55 * * * * ?</arg>
+
+                            <arg name="username">test</arg>
+                            <arg name="password">test</arg>
+
+                            <arg name="local">true</arg>
+                            <arg name="schedulerStart">true</arg>
+                        </function>
+                        -->
+					</post-functions>
+				</action>
+			</actions>
+		</step>
+		<step id="2" name="Edit Doc">
+			<external-permissions>
+				<permission name="permB">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
+								<arg name="status">Underway</arg>
+							</condition>
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+
+				</permission>
+			</external-permissions>
+			<actions>
+				<action id="2" name="Sign Up For Editing">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
+								<arg name="status">Queued</arg>
+							</condition>
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
+								<arg name="group">bars</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<pre-functions>
+						<function type="class">
+							<arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
+						</function>
+					</pre-functions>
+					<results>
+						<unconditional-result old-status="Finished" status="Underway" step="2" owner="${caller}"/>
+					</results>
+				</action>
+				<action id="3" name="Finish Editing">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
+								<arg name="status">Underway</arg>
+							</condition>
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<pre-functions>
+						<function type="class">
+							<arg name="class.name">com.opensymphony.workflow.util.MostRecentOwner</arg>
+							<arg name="stepId">1</arg>
+						</function>
+					</pre-functions>
+					<results>
+						<unconditional-result old-status="Finished" status="Underway" step="3" owner="${mostRecentOwner}"/>
+					</results>
+				</action>
+				<action id="4" name="Requeue Editing">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
+								<arg name="status">Underway</arg>
+							</condition>
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<results>
+						<unconditional-result old-status="Finished" status="Queued" step="2"/>
+					</results>
+				</action>
+			</actions>
+		</step>
+		<step id="3" name="Review Doc">
+			<external-permissions>
+				<permission name="permA">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
+								<arg name="status">Underway</arg>
+							</condition>
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+				</permission>
+			</external-permissions>
+			<actions>
+				<action id="5" name="More Edits">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
+								<arg name="status">Underway</arg>
+							</condition>
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<pre-functions>
+						<function type="class">
+							<arg name="class.name">com.opensymphony.workflow.util.MostRecentOwner</arg>
+							<arg name="stepId">2</arg>
+						</function>
+					</pre-functions>
+					<results>
+						<unconditional-result old-status="Finished" status="Underway" step="2" owner="${mostRecentOwner}"/>
+					</results>
+				</action>
+				<action id="6" name="Peer Review">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
+								<arg name="status">Underway</arg>
+							</condition>
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<results>
+						<unconditional-result old-status="Finished" status="Queued" step="4"/>
+					</results>
+				</action>
+				<action id="7" name="Publish Doc">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
+								<arg name="status">Underway</arg>
+							</condition>
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<pre-functions>
+						<function type="class">
+							<arg name="class.name">com.opensymphony.workflow.util.MostRecentOwner</arg>
+							<arg name="stepId">2</arg>
+						</function>
+					</pre-functions>
+					<results>
+						<unconditional-result old-status="Finished" status="Underway" step="5" owner="${mostRecentOwner}"/>
+					</results>
+				</action>
+			</actions>
+		</step>
+		<step id="4" name="Second Review">
+			<external-permissions>
+				<permission name="permC">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
+								<arg name="status">Underway</arg>
+							</condition>
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+				</permission>
+			</external-permissions>
+			<actions>
+				<action id="8" name="Finish Second Review">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
+								<arg name="status">Underway</arg>
+							</condition>
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<pre-functions>
+						<function type="class">
+							<arg name="class.name">com.opensymphony.workflow.util.MostRecentOwner</arg>
+							<arg name="stepId">3</arg>
+						</function>
+					</pre-functions>
+					<results>
+						<unconditional-result old-status="Finished" status="Underway" step="3" owner="${mostRecentOwner}"/>
+					</results>
+				</action>
+				<action id="9" name="Sign Up For Second Review">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
+								<arg name="status">Queued</arg>
+							</condition>
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
+								<arg name="group">bazs</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<pre-functions>
+						<function type="class">
+							<arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
+						</function>
+					</pre-functions>
+					<results>
+						<unconditional-result old-status="Finished" status="Underway" step="4" owner="${caller}"/>
+					</results>
+				</action>
+				<action id="10" name="Queue Second Review">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
+								<arg name="status">Underway</arg>
+							</condition>
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<results>
+						<unconditional-result old-status="Finished" status="Queued" step="4"/>
+					</results>
+				</action>
+			</actions>
+		</step>
+		<step id="5" name="Publish Doc">
+			<actions>
+				<action id="11" name="Publish Document">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
+								<arg name="status">Underway</arg>
+							</condition>
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<pre-functions>
+						<function type="class">
+							<arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
+						</function>
+					</pre-functions>
+					<results>
+						<unconditional-result old-status="Finished" status="Finished" step="5" owner="${caller}"/>
+					</results>
+				</action>
+			</actions>
+		</step>
+		<step id="6" name="Foo">
+			<actions>
+				<action name="Finish Foo" id="12">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
+								<arg name="status">Underway</arg>
+								<arg name="stepId">6</arg>
+							</condition>
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
+								<arg name="stepId">6</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<results>
+						<unconditional-result old-status="Finished" join="1"/>
+					</results>
+				</action>
+			</actions>
+		</step>
+		<step id="7" name="Bar">
+			<actions>
+				<action name="Finish Bar" id="13">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
+								<arg name="status">Underway</arg>
+								<arg name="stepId">7</arg>
+							</condition>
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
+								<arg name="stepId">7</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<results>
+						<unconditional-result old-status="Finished" owner="test" status="Underway" step="8"/>
+					</results>
+				</action>
+			</actions>
+		</step>
+		<step id="8" name="Baz">
+			<actions>
+				<action name="Finish Baz" id="14">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
+								<arg name="status">Underway</arg>
+								<arg name="stepId">8</arg>
+							</condition>
+							<condition type="class">
+								<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
+								<arg name="stepId">8</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<results>
+						<unconditional-result old-status="Finished" join="1"/>
+					</results>
+				</action>
+			</actions>
+		</step>
+	</steps>
+	<splits>
+		<split id="1">
+			<unconditional-result old-status="Finished" status="Underway" owner="test" step="6"/>
+			<unconditional-result old-status="Finished" status="Underway" owner="test" step="7"/>
+		</split>
+		<split id="2">
+			<unconditional-result old-status="Finished" status="Queued" step="2"/>
+		</split>
+	</splits>
+	<joins>
+		<join id="1">
+			<conditions type="AND">
+				<condition type="beanshell">
+					<arg name="script"><![CDATA[
+					"Finished".equals(jn.getStep(6).getStatus()) && "Finished".equals(jn.getStep(8).getStatus())
+					]]></arg>
+				</condition>
+			</conditions>
+			<unconditional-result old-status="Finished" status="Underway" owner="test" step="2"/>
+		</join>
+	</joins>
+</workflow>
+

File src/webapp/WEB-INF/classes/osworkflow.xml

+<osworkflow>
+    <persistence class="com.opensymphony.workflow.spi.memory.MemoryWorkflowStore"/>
+
+    <factory class="com.opensymphony.workflow.loader.XMLWorkflowFactory">
+        <property key="resource" value="workflows.xml" />
+    </factory>
+</osworkflow>

File src/webapp/WEB-INF/classes/workflows.xml

+<workflows>
+    <workflow name="example" type="resource" location="example.xml"/>
+</workflows>

File src/webapp/WEB-INF/web.xml

+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
+<web-app>
+
+  <display-name>OSWorkflow Example App</display-name>
+
+  <servlet>
+    <servlet-name>SOAPWorkflow</servlet-name>
+    <servlet-class>com.opensymphony.workflow.soap.SOAPWorkflowServlet</servlet-class>
+  </servlet>
+  
+  <servlet-mapping>
+    <servlet-name>SOAPWorkflow</servlet-name>
+    <url-pattern>/soap*</url-pattern>
+  </servlet-mapping>
+  
+  <welcome-file-list>
+    <welcome-file>default.jsp</welcome-file>
+  </welcome-file-list>
+  
+</web-app>
+

File src/webapp/webapp.iml

+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4" relativePaths="true" type="J2EE_WEB_MODULE" j2ee-integration="Orion Server">
+  <component name="ModuleRootManager" />
+  <component name="NewModuleRootManager">
+    <exclude-output />
+    <exclude-exploded />
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Orion 2.x" level="application_server_libraries" />
+    <orderEntry type="module" module-name="osworkflow" />
+    <orderEntryProperties />
+  </component>
+  <component name="OrionWebModuleProperties" />
+  <component name="VcsManagerConfiguration">
+    <option name="ACTIVE_VCS_NAME" value="CVS" />
+    <option name="USE_PROJECT_VCS" value="false" />
+  </component>
+  <component name="WebModuleBuildComponent">
+    <setting name="EXPLODED_URL" value="file://" />
+    <setting name="EXPLODED_ENABLED" value="false" />
+    <setting name="JAR_URL" value="file://$MODULE_DIR$/../../dist/osworkflow-2.8.0-dev-example.war" />
+    <setting name="JAR_ENABLED" value="true" />
+    <setting name="SYNC_EXPLODED_DIR" value="true" />
+    <setting name="BUILD_ON_FRAME_DEACTIVATION" value="false" />
+    <setting name="RUN_JASPER_VALIDATION" value="false" />
+  </component>
+  <component name="WebModuleProperties">
+    <containerElement type="module" name="osworkflow">
+      <attribute name="method" value="5" />
+      <attribute name="URI" value="/WEB-INF/lib/osworkflow.jar" />
+    </containerElement>
+    <containerElement type="library" level="module">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/lib/commons-logging.jar" />
+      <url>jar://$MODULE_DIR$/../../lib/core/commons-logging.jar!/</url>
+    </containerElement>
+    <containerElement type="library" level="module">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/lib/oscore-2.2.2.jar" />
+      <url>jar://$MODULE_DIR$/../../lib/core/oscore-2.2.2.jar!/</url>
+    </containerElement>
+    <containerElement type="library" level="module">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/lib/propertyset-1.3-25Jan05.jar" />
+      <url>jar://$MODULE_DIR$/../../lib/core/propertyset-1.3-25Jan05.jar!/</url>
+    </containerElement>
+    <containerElement type="library" level="module">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/lib/activation.jar" />
+      <url>jar://$MODULE_DIR$/../../lib/optional/activation.jar!/</url>
+    </containerElement>
+    <containerElement type="library" level="module">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/lib/bsh-1.2b7.jar" />
+      <url>jar://$MODULE_DIR$/../../lib/optional/bsh-1.2b7.jar!/</url>
+    </containerElement>
+    <containerElement type="library" level="module">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/lib/commons-lang-2.0.jar" />
+      <url>jar://$MODULE_DIR$/../../lib/optional/commons-lang-2.0.jar!/</url>
+    </containerElement>
+    <containerElement type="library" level="module">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/lib/mail.jar" />
+      <url>jar://$MODULE_DIR$/../../lib/optional/mail.jar!/</url>
+    </containerElement>
+    <containerElement type="library" level="module">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/lib/osuser-1.0-dev-2Feb05.jar" />
+      <url>jar://$MODULE_DIR$/../../lib/optional/osuser-1.0-dev-2Feb05.jar!/</url>
+    </containerElement>
+    <containerElement type="library" level="module">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/lib/quartz.jar" />
+      <url>jar://$MODULE_DIR$/../../lib/optional/quartz.jar!/</url>
+    </containerElement>
+    <containerElement type="library" level="project" name="xfire">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/lib" />
+    </containerElement>
+    <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/WEB-INF/web.xml" version="2.3" />
+    <webroots>
+      <root url="file://$MODULE_DIR$" relative="/" />
+    </webroots>
+  </component>
+</module>
+