[jboss-svn-commits] JBL Code SVN: r21545 - in labs/jbosstm/workspace/interop: WSTFSC02-interop and 29 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Aug 14 10:55:01 EDT 2008


Author: adinn
Date: 2008-08-14 10:55:00 -0400 (Thu, 14 Aug 2008)
New Revision: 21545

Added:
   labs/jbosstm/workspace/interop/WSTFSC02-interop/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/WSTFSC02-interop.iml
   labs/jbosstm/workspace/interop/WSTFSC02-interop/build.xml
   labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc002/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc002/build.sh
   labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc002/sc002handlers.xml
   labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc002/wsdl/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc002/wsdl/sc002.wsdl
   labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc002/wsdl/sc002.xsd
   labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc003/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc003/build.sh
   labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc003/sc003handlers.xml
   labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc003/wsdl/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc003/wsdl/sc002.xsd
   labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc003/wsdl/sc003.wsdl
   labs/jbosstm/workspace/interop/WSTFSC02-interop/lib/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/lib/commons-logging.jar
   labs/jbosstm/workspace/interop/WSTFSC02-interop/lib/jaxrpc.jar
   labs/jbosstm/workspace/interop/WSTFSC02-interop/lib/junit.jar
   labs/jbosstm/workspace/interop/WSTFSC02-interop/lib/saaj-api.jar
   labs/jbosstm/workspace/interop/WSTFSC02-interop/lib/saxon.jar
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/InteropTestCase.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/InteropTestSuite.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/MessageLogging.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/Sc002TestCase.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/states/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/states/BaseState.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/states/InteropWaitState.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/proxy/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/proxy/AddressingConstants.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/proxy/ProxyConversation.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/proxy/ProxyConversationState.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestConstants.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestLogController.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestLogServlet.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestRunner.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestServlet.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/directoryContents.html
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/notFoundResponse.html
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/processor.xsl
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/ServiceRegistry.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/handlers/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/Sc002Constants.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/client/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/client/Sc002Client.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/client/Sc002ClientHandler.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/sei/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/sei/Sc002PortImpl.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/server/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/server/Sc002Initialisation.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/util/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/util/ClassLoaderHelper.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/BeginResponseType.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/BeginType.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/EchoResponseType.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/EchoType.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/EndResponseType.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/EndType.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/MessageType.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/NotifyType.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/ObjectFactory.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/Sc002Port.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/Sc002Service.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/SendMessagesResponseType.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/SendMessagesType.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/SessionDataType.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/package-info.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc003/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc003/Sc003Port.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc003/Sc003Service.java
   labs/jbosstm/workspace/interop/WSTFSC02-interop/web.xml
   labs/jbosstm/workspace/interop/WSTFSC02-interop/web/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/web/index.jsp
   labs/jbosstm/workspace/interop/WSTFSC02-interop/web/sc002/
   labs/jbosstm/workspace/interop/WSTFSC02-interop/web/sc002/details.jsp
   labs/jbosstm/workspace/interop/WSTFSC02-interop/web/sc002/index.jsp
   labs/jbosstm/workspace/interop/WSTFSC02-interop/web/sc002/results.jsp
Log:
implementation of WSTF Scenario 2 interop test and generated code for Scenario 3 interop test

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/WSTFSC02-interop.iml
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/WSTFSC02-interop.iml	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/WSTFSC02-interop.iml	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module relativePaths="true" type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="jbossts-trunk" />
+    <orderEntry type="module" module-name="jbossws3.0.2" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$APPLICATION_HOME_DIR$/lib/javaee.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/lib/junit.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntryProperties />
+  </component>
+</module>
+

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/build.xml
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/build.xml	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/build.xml	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,96 @@
+<?xml version="1.0"?>
+<project name="project" default="war">
+    <description>
+        JBoss Transactions WS-Addressing interop test
+    </description>
+
+	<property environment="env"/>
+	
+	<property name="host" value="localhost"/>
+	<property name="port" value="8080"/>
+	
+	<property name="jboss.deploy.dir" location="${env.JBOSS_HOME}/server/default/deploy"/>
+	
+	<property name="build.dir" location="build"/>
+	<property name="build.classes.dir" location="${build.dir}/classes"/>
+	<property name="build.lib.dir" location="${build.dir}/lib"/>
+	<property name="build.war.file.name" value="wstf.war"/>
+	<property name="build.war.file" location="${build.lib.dir}/${build.war.file.name}"/>
+	<property name="build.webxml.file" location="${build.lib.dir}/web.xml"/>
+	
+	<property name="src.dir" location="src"/>
+    <property name="dd.dir" location="dd/"/>
+	<property name="webxml.file" location="web.xml"/>
+	<property name="lib.dir" location="lib"/>
+	<property name="web.dir" location="web"/>
+	
+	<property name="jboss.client.lib.dir" location="${env.JBOSS_HOME}/client"/>
+	<!--
+	<property name="dist.compile.libs" value="ws-c.jar ws-t.jar wscf.jar wstx.jar wsas.jar jbossjta.jar jbossts-common.jar stax-api-1.0.jar junit-3.8.1.jar saxon8.jar"/>
+	-->
+	<property name="jboss.compile.client.libs" value="jaxb-api.jar jboss-javaee.jar jbossws-native-jaxrpc.jar
+            jbossws-native-jaxws.jar jbossws-client.jar stax-api.jar jbossws-native-saaj.jar
+            jbossws-native-jaxws-ext.jar jbossws-native-core.jar jbossws-common.jar"/>
+
+	<property name="dist.compile.libs" value="junit.jar saxon.jar"/>
+
+	<!--
+	<property name="dist.dependency.libs" value="wstx-asl-2.0.3.jar"/>
+	<property name="dist.libs" value="${dist.compile.libs} ${dist.dependency.libs}"/>
+	-->
+	<property name="dist.libs" value="${dist.compile.libs}"/>
+
+	<property name="compile.debug" value="true"/>
+	
+	<path id="classpath">
+		<fileset dir="${lib.dir}" includes="${dist.compile.libs}"/>
+		<fileset dir="${jboss.client.lib.dir}" includes="${jboss.compile.client.libs}"/>
+	</path>
+	<property name="classpath" refid="classpath"/>
+	
+	<target name="init">
+		<mkdir dir="${build.dir}"/>
+		<mkdir dir="${build.classes.dir}"/>
+		<mkdir dir="${build.lib.dir}"/>
+	</target>
+	
+	<target name="compile" depends="init">
+		<javac classpathref="classpath" destdir="${build.classes.dir}" srcdir="${src.dir}" debug="${compile.debug}"/>
+	</target>
+	
+    <target name="war" depends="compile">
+    	    <copy file="${webxml.file}" tofile="${build.webxml.file}" overwrite="yes">
+    	    		<filterset>
+    	    			<filter token="HOST" value="${host}"/>
+    	    			<filter token="PORT" value="${port}"/>
+    	    		</filterset>
+            </copy>
+        <!-- todo put one copy of each handler file in WEB-INF and refer to it correctly from SEI class annotation-->
+	<!-- wsdl gets loaded relative to service implementation class -->
+        <copy toDir="${build.classes.dir}/org/wstf/docs/scenarios/sc002"
+	      overwrite="yes">
+            <fileset dir="${dd.dir}/sc002/"
+                    includes="wsdl/sc002.wsdl wsdl/sc002.xsd"/>
+        </copy>
+            <war destfile="${build.war.file}" webxml="${build.webxml.file}">
+    			<classes dir="${build.classes.dir}"/>
+    			<classes dir="${src.dir}" excludes="**/*.java"/>
+                <lib dir="${lib.dir}" includes="${dist.libs}"/>
+                <webinf dir="${dd.dir}/sc002" includes="wsdl/sc002.wsdl wsdl/sc002.xsd"/>
+		<fileset dir="${web.dir}"/>
+    		</war>
+    </target>
+	
+	<target name="deploy" depends="war">
+		<copy file="${build.war.file}" todir="${jboss.deploy.dir}"/>
+	</target>
+	
+	<target name="undeploy">
+		<delete file="${jboss.deploy.dir}/${build.war.file.name}"/>
+	</target>
+
+	<target name="clean">
+		<delete dir="${build.dir}"/>
+	</target>
+</project>
+

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc002/build.sh
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc002/build.sh	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc002/build.sh	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,21 @@
+#
+#
+#
+
+if [ ! -d tmp ] ; then
+    mkdir tmp
+fi
+
+if [ ! -d tmp/classes ] ; then
+    mkdir tmp/classes
+fi
+
+if [ ! -d tmp/src ] ; then
+    mkdir tmp/src
+fi
+
+# delete old generated versions -- any changes should be made to a copy!
+
+rm -rf tmp/classes/* tmp/src/*
+
+$GF_HOME/bin/wsimport -verbose -keep -wsdllocation wsdl/sc002.wsdl -d tmp/classes -s tmp/src -target 2.0 -extension wsdl/sc002.wsdl

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc002/sc002handlers.xml
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc002/sc002handlers.xml	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc002/sc002handlers.xml	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  JBoss, Home of Professional Open Source
+  Copyright 2007, Red Hat Middleware LLC, and individual contributors
+  as indicated by the @author tags.
+  See the copyright.txt in the distribution for a full listing
+  of individual contributors.
+  This copyrighted material is made available to anyone wishing to use,
+  modify, copy, or redistribute it subject to the terms and conditions
+  of the GNU General Public License, v. 2.0.
+  This program is distributed in the hope that it will be useful, but WITHOUT A
+  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+  PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+  You should have received a copy of the GNU General Public License,
+  v. 2.0 along with this distribution; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+  MA  02110-1301, USA.
+
+  (C) 2008,
+  @author JBoss Inc.
+-->
+<handler-chains xmlns="http://java.sun.com/xml/ns/javaee"
+xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://java.sun.com/xml/ns/javaee">
+    <handler-chain>
+	<handler>
+		<handler-name>WSTF Sc002 Server Handler</handler-name>
+		<handler-class>org.jboss.ws.extensions.addressing.jaxws.WSAddressingServerHandler</handler-class>
+	</handler>
+    </handler-chain>
+</handler-chains>

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc002/wsdl/sc002.wsdl
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc002/wsdl/sc002.wsdl	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc002/wsdl/sc002.wsdl	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions targetNamespace="http://www.wstf.org/docs/scenarios/sc002"
+                  xmlns:xs="http://www.w3.org/2001/XMLSchema"
+                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+                  xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
+                  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+                  xmlns:tns="http://www.wstf.org/docs/scenarios/sc002">
+
+  <wsdl:types>
+    <xs:schema targetNamespace="http://www.wstf.org/docs/scenarios/sc002">
+      <xs:include schemaLocation="sc002.xsd"/>
+      <xs:element name="Begin" type="tns:BeginType"/>
+      <xs:element name="BeginResponse" type="tns:BeginResponseType"/>
+      <xs:element name="Notify" type="tns:NotifyType"/>
+      <xs:element name="Echo" type="tns:EchoType"/>
+      <xs:element name="EchoResponse" type="tns:EchoResponseType"/>
+      <xs:element name="End" type="tns:EndType"/>
+      <xs:element name="EndResponse" type="tns:EndResponseType"/>
+      <xs:element name="SendMessages" type="tns:SendMessagesType"/>
+      <xs:element name="SendMessagesResponse" type="tns:SendMessagesResponseType"/>
+      <xs:element name="SessionData" type="tns:SessionDataType"/>
+    </xs:schema>
+  </wsdl:types>
+
+  <wsdl:message name="Begin">
+    <wsdl:part name="Begin" element="tns:Begin"/>
+    <wsdl:part name="SessionData" element="tns:SessionData"/>
+  </wsdl:message>
+
+  <wsdl:message name="BeginResponse">
+    <wsdl:part name="BeginResponse" element="tns:BeginResponse"/>
+  </wsdl:message>
+
+  <wsdl:message name="Notify">
+    <wsdl:part name="Notify" element="tns:Notify"/>
+    <wsdl:part name="SessionData" element="tns:SessionData"/>
+  </wsdl:message>
+
+  <wsdl:message name="Echo">
+    <wsdl:part name="Echo" element="tns:Echo"/>
+    <wsdl:part name="SessionData" element="tns:SessionData"/>
+  </wsdl:message>
+
+  <wsdl:message name="EchoResponse">
+    <wsdl:part name="EchoResponse" element="tns:EchoResponse"/>
+  </wsdl:message>
+
+  <wsdl:message name="End">
+    <wsdl:part name="End" element="tns:End"/>
+    <wsdl:part name="SessionData" element="tns:SessionData"/>
+  </wsdl:message>
+
+  <wsdl:message name="EndResponse">
+    <wsdl:part name="EndResponse" element="tns:EndResponse"/>
+  </wsdl:message>
+
+  <wsdl:message name="SendMessages">
+    <wsdl:part name="SendMessages" element="tns:SendMessages"/>
+  </wsdl:message>
+
+  <wsdl:message name="SendMessagesResponse">
+    <wsdl:part name="SendMessagesResponse" element="tns:SendMessagesResponse"/>
+  </wsdl:message>
+
+  <wsdl:portType name="sc002Port">
+    <wsdl:operation name="Begin">
+      <wsdl:input message="tns:Begin"/>
+      <wsdl:output message="tns:BeginResponse"/>
+    </wsdl:operation>
+    <wsdl:operation name="Notify">
+      <wsdl:input message="tns:Notify"/>
+    </wsdl:operation>
+    <wsdl:operation name="Echo">
+      <wsdl:input message="tns:Echo"/>
+      <wsdl:output message="tns:EchoResponse"/>
+    </wsdl:operation>
+    <wsdl:operation name="End">
+      <wsdl:input message="tns:End"/>
+      <wsdl:output message="tns:EndResponse"/>
+    </wsdl:operation>
+    <wsdl:operation name="SendMessages">
+      <wsdl:input message="tns:SendMessages"/>
+      <wsdl:output message="tns:SendMessagesResponse"/>
+    </wsdl:operation>
+  </wsdl:portType>
+
+  <wsdl:binding name="sc002SOAP11Binding" type="tns:sc002Port">
+    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+    <wsdl:operation name="Begin">
+      <soap:operation soapAction="http://www.wstf.org/docs/scenarios/sc002/Begin"/>
+      <wsdl:input>
+        <soap:header use="literal" part="SessionData" message="tns:Begin"/>
+        <soap:body use="literal" parts="Begin"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Notify">
+      <soap:operation soapAction="http://www.wstf.org/docs/scenarios/sc002/Notify"/>
+      <wsdl:input>
+        <soap:header use="literal" part="SessionData" message="tns:Notify"/>
+        <soap:body use="literal" parts="Notify"/>
+      </wsdl:input>
+    </wsdl:operation>
+    <wsdl:operation name="Echo">
+      <soap:operation soapAction="http://www.wstf.org/docs/scenarios/sc002/Echo"/>
+      <wsdl:input>
+        <soap:header use="literal" part="SessionData" message="tns:Echo"/>
+        <soap:body use="literal" parts="Echo"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="End">
+      <soap:operation soapAction="http://www.wstf.org/docs/scenarios/sc002/End"/>
+      <wsdl:input>
+        <soap:header use="literal" part="SessionData" message="tns:End"/>
+        <soap:body use="literal" parts="End"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SendMessages">
+      <soap:operation soapAction="http://www.wstf.org/docs/scenarios/sc002/SendMessages"/>
+      <wsdl:input>
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+
+  <wsdl:binding name="sc002SOAP12Binding" type="tns:sc002Port">
+    <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+    <wsdl:operation name="Begin">
+      <soap12:operation soapAction="http://www.wstf.org/docs/scenarios/sc002/Begin"/>
+      <wsdl:input>
+        <soap12:header use="literal" part="SessionData" message="tns:Begin"/>
+        <soap12:body use="literal" parts="Begin"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Notify">
+      <soap12:operation soapAction="http://www.wstf.org/docs/scenarios/sc002/Notify"/>
+      <wsdl:input>
+        <soap12:header use="literal" part="SessionData" message="tns:Notify"/>
+        <soap12:body use="literal" parts="Notify"/>
+      </wsdl:input>
+    </wsdl:operation>
+    <wsdl:operation name="Echo">
+      <soap12:operation soapAction="http://www.wstf.org/docs/scenarios/sc002/Echo"/>
+      <wsdl:input>
+        <soap12:header use="literal" part="SessionData" message="tns:Echo"/>
+        <soap12:body use="literal" parts="Echo"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="End">
+      <soap12:operation soapAction="http://www.wstf.org/docs/scenarios/sc002/End"/>
+      <wsdl:input>
+        <soap12:header use="literal" part="SessionData" message="tns:End"/>
+        <soap12:body use="literal" parts="End"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SendMessages">
+      <soap12:operation soapAction="http://www.wstf.org/docs/scenarios/sc002/SendMessages"/>
+      <wsdl:input>
+        <soap12:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+
+  <wsdl:service name="sc002Service">
+    <wsdl:port  name="soap11port" binding="tns:sc002SOAP11Binding">
+      <soap:address location="http://www.wstf.org/sc002/sc002SOAP11"/>
+    </wsdl:port>
+    <wsdl:port name="soap12port" binding="tns:sc002SOAP12Binding">
+      <soap12:address location="http://www.wstf.org/sc002/sc002SOAP12"/>
+    </wsdl:port>
+  </wsdl:service>
+
+</wsdl:definitions>

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc002/wsdl/sc002.xsd
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc002/wsdl/sc002.xsd	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc002/wsdl/sc002.xsd	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+  targetNamespace="http://www.wstf.org/docs/scenarios/sc002"
+  xmlns:tns="http://www.wstf.org/docs/scenarios/sc002"
+  xmlns:wsa="http://www.w3.org/2005/08/addressing"
+  elementFormDefault="qualified">
+
+  <xs:import namespace="http://www.w3.org/2005/08/addressing"
+    schemaLocation="http://www.w3.org/2006/03/addressing/ws-addr.xsd"/>
+
+  <xs:complexType name="BeginType">
+    <xs:sequence>
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="BeginResponseType">
+    <xs:sequence>
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="NotifyType">
+    <xs:sequence>
+      <xs:element name="text" type="xs:string" />
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="EchoType">
+    <xs:sequence>
+      <xs:element name="text" type="xs:string" />
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="EchoResponseType">
+    <xs:sequence>
+      <xs:element name="text" type="xs:string" />
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="EndType">
+    <xs:sequence>
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="EndResponseType">
+    <xs:sequence>
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="MessageType">
+    <xs:sequence>
+      <xs:element name="service" type="xs:QName"/>
+      <xs:element name="port"    type="xs:NCName"/>
+      <xs:element name="operation" type="xs:string"/>
+      <xs:any namespace="##other" processContents="lax" minOccurs="1"
+              maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="SendMessagesType">
+    <xs:sequence>
+      <xs:element name="epr" type="wsa:EndpointReferenceType"/>
+      <xs:element name="messages">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="message" type="tns:MessageType" minOccurs="1" 
+                        maxOccurs="unbounded"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="SendMessagesResponseType">
+    <xs:sequence>
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="SessionDataType">
+    <xs:sequence>
+      <xs:element name="ID" type="xs:string" />
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+</xs:schema>

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc003/build.sh
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc003/build.sh	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc003/build.sh	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,23 @@
+#
+#
+#
+
+if [ ! -d tmp ] ; then
+    mkdir tmp
+fi
+
+if [ ! -d tmp/classes ] ; then
+    mkdir tmp/classes
+fi
+
+if [ ! -d tmp/src ] ; then
+    mkdir tmp/src
+fi
+
+# delete old generated versions -- any changes should be made to a copy!
+
+rm -rf tmp/classes/* tmp/src/*
+
+$GF_HOME/bin/wsimport -verbose -keep -wsdllocation wsdl/sc003.wsdl -d tmp/classes -s tmp/src -target 2.0 -extension wsdl/sc003.wsdl
+
+# ${JBOSS_HOME}/bin/wsconsume.sh --verbose --keep --wsdlLocation=wsdl/sc003.wsdl --source=tmp/src --output=tmp/classes --target=2.0 --extension wsdl/sc003.wsdl

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc003/sc003handlers.xml
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc003/sc003handlers.xml	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc003/sc003handlers.xml	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  JBoss, Home of Professional Open Source
+  Copyright 2007, Red Hat Middleware LLC, and individual contributors
+  as indicated by the @author tags.
+  See the copyright.txt in the distribution for a full listing
+  of individual contributors.
+  This copyrighted material is made available to anyone wishing to use,
+  modify, copy, or redistribute it subject to the terms and conditions
+  of the GNU General Public License, v. 2.0.
+  This program is distributed in the hope that it will be useful, but WITHOUT A
+  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+  PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+  You should have received a copy of the GNU General Public License,
+  v. 2.0 along with this distribution; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+  MA  02110-1301, USA.
+
+  (C) 2008,
+  @author JBoss Inc.
+-->
+<handler-chains xmlns="http://java.sun.com/xml/ns/javaee"
+xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://java.sun.com/xml/ns/javaee">
+    <handler-chain>
+	<handler>
+		<handler-name>WSTF Sc003 Server Handler</handler-name>
+		<handler-class>org.jboss.ws.extensions.addressing.jaxws.WSAddressingServerHandler</handler-class>
+	</handler>
+    </handler-chain>
+</handler-chains>

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc003/wsdl/sc002.xsd
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc003/wsdl/sc002.xsd	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc003/wsdl/sc002.xsd	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+  targetNamespace="http://www.wstf.org/docs/scenarios/sc002"
+  xmlns:tns="http://www.wstf.org/docs/scenarios/sc002"
+  xmlns:wsa="http://www.w3.org/2005/08/addressing"
+  elementFormDefault="qualified">
+
+  <xs:import namespace="http://www.w3.org/2005/08/addressing"
+    schemaLocation="http://www.w3.org/2006/03/addressing/ws-addr.xsd"/>
+
+  <xs:complexType name="BeginType">
+    <xs:sequence>
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="BeginResponseType">
+    <xs:sequence>
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="NotifyType">
+    <xs:sequence>
+      <xs:element name="text" type="xs:string" />
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="EchoType">
+    <xs:sequence>
+      <xs:element name="text" type="xs:string" />
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="EchoResponseType">
+    <xs:sequence>
+      <xs:element name="text" type="xs:string" />
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="EndType">
+    <xs:sequence>
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="EndResponseType">
+    <xs:sequence>
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="MessageType">
+    <xs:sequence>
+      <xs:element name="service" type="xs:QName"/>
+      <xs:element name="port"    type="xs:NCName"/>
+      <xs:element name="operation" type="xs:string"/>
+      <xs:any namespace="##other" processContents="lax" minOccurs="1"
+              maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="SendMessagesType">
+    <xs:sequence>
+      <xs:element name="epr" type="wsa:EndpointReferenceType"/>
+      <xs:element name="messages">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="message" type="tns:MessageType" minOccurs="1" 
+                        maxOccurs="unbounded"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="SendMessagesResponseType">
+    <xs:sequence>
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="SessionDataType">
+    <xs:sequence>
+      <xs:element name="ID" type="xs:string" />
+      <xs:any namespace="##other" processContents="lax" minOccurs="0"
+        maxOccurs="unbounded" />
+    </xs:sequence>
+  </xs:complexType>
+
+</xs:schema>

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc003/wsdl/sc003.wsdl
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc003/wsdl/sc003.wsdl	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/dd/sc003/wsdl/sc003.wsdl	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions targetNamespace="http://www.wstf.org/docs/scenarios/sc003"
+                  xmlns:xs="http://www.w3.org/2001/XMLSchema"
+                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+                  xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
+                  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+                  xmlns:tns="http://www.wstf.org/docs/scenarios/sc003"
+                  xmlns:sc002="http://www.wstf.org/docs/scenarios/sc002"
+                  xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
+                  xmlns:wsp="http://www.w3.org/ns/ws-policy">
+
+  <wsdl:types>
+    <xs:schema targetNamespace="http://www.wstf.org/docs/scenarios/sc002">
+      <xs:include schemaLocation="sc002.xsd"/>
+      <xs:element name="Notify" type="sc002:NotifyType"/>
+      <xs:element name="Echo" type="sc002:EchoType"/>
+      <xs:element name="EchoResponse" type="sc002:EchoResponseType"/>
+      <xs:element name="SessionData" type="sc002:SessionDataType"/>
+    </xs:schema>
+  </wsdl:types>
+
+  <wsdl:message name="Notify">
+    <wsdl:part name="Notify" element="sc002:Notify"/>
+    <wsdl:part name="SessionData" element="sc002:SessionData"/>
+  </wsdl:message>
+  <wsdl:message name="Echo">
+    <wsdl:part name="Echo" element="sc002:Echo"/>
+    <wsdl:part name="SessionData" element="sc002:SessionData"/>
+  </wsdl:message>
+  <wsdl:message name="EchoResponse">
+    <wsdl:part name="EchoResponse" element="sc002:EchoResponse"/>
+  </wsdl:message>
+
+  <wsdl:portType name="sc003Port">
+    <wsdl:operation name="Notify">
+     <wsdl:input message="tns:Notify"
+                 wsam:Action="http://www.wstf.org/docs/scenarios/sc002/Notify"/>
+    </wsdl:operation>
+    <wsdl:operation name="Echo">
+      <wsdl:documentation>
+        Note the use of distinct action values for the input and
+        output messages of this operation.
+      </wsdl:documentation>
+      <wsdl:input message="tns:Echo"
+                  wsam:Action="http://www.wstf.org/docs/scenarios/sc002/Echo"/>
+      <wsdl:output message="tns:EchoResponse"
+                   wsam:Action="http://www.wstf.org/docs/scenarios/sc002/EchoResponse"/>
+    </wsdl:operation>
+  </wsdl:portType>
+
+  <wsdl:binding name="sc003SOAP11Binding" type="tns:sc003Port">
+    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+    <wsdl:operation name="Notify">
+      <soap:operation soapAction="http://www.wstf.org/docs/scenarios/sc002/Notify"/>
+      <wsdl:input>
+        <soap:header use="literal" part="SessionData" message="tns:Notify"/>
+        <soap:body use="literal" parts="Notify"/>
+      </wsdl:input>
+    </wsdl:operation>
+    <wsdl:operation name="Echo">
+      <soap:operation soapAction="http://www.wstf.org/docs/scenarios/sc002/Echo"/>
+      <wsdl:input>
+        <soap:header use="literal" part="SessionData" message="tns:Echo"/>
+        <soap:body use="literal" parts="Echo"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+
+  <wsdl:binding name="sc003SOAP12Binding" type="tns:sc003Port">
+    <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+    <wsdl:operation name="Notify">
+      <soap12:operation soapAction="http://www.wstf.org/docs/scenarios/sc002/Notify"/>
+      <wsdl:input>
+        <soap12:header use="literal" part="SessionData" message="tns:Notify"/>
+        <soap12:body use="literal" parts="Notify"/>
+      </wsdl:input>
+    </wsdl:operation>
+    <wsdl:operation name="Echo">
+      <soap12:operation soapAction="http://www.wstf.org/docs/scenarios/sc002/Echo"/>
+      <wsdl:input>
+        <soap12:header use="literal" part="SessionData" message="tns:Echo"/>
+        <soap12:body use="literal" parts="Echo"/>
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+
+  <wsdl:service name="sc003Service">
+    <wsdl:port  name="soap11port" binding="tns:sc003SOAP11Binding">
+      <wsdl:documentation>
+        This port supports the optional use of WS-Addressing 1.0.
+      </wsdl:documentation>
+      <soap:address location="http://www.wstf.org/sc003/sc003SOAP11"/>
+      <wsp:Policy>
+        <wsam:Addressing  wsp:Optional="true">
+          <wsp:Policy/>
+        </wsam:Addressing>
+      </wsp:Policy>
+    </wsdl:port>
+    <wsdl:port name="soap12port" binding="tns:sc003SOAP12Binding">
+      <wsdl:documentation>
+        This port supports the optional use of WS-Addressing 1.0.
+      </wsdl:documentation>
+      <soap12:address location="http://www.wstf.org/sc003/sc003SOAP12"/>
+      <wsp:Policy>
+        <wsam:Addressing wsp:Optional="true">
+          <wsp:Policy/>
+        </wsam:Addressing>
+      </wsp:Policy>
+    </wsdl:port>
+  </wsdl:service>
+
+</wsdl:definitions>

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/lib/commons-logging.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbosstm/workspace/interop/WSTFSC02-interop/lib/commons-logging.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/lib/jaxrpc.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbosstm/workspace/interop/WSTFSC02-interop/lib/jaxrpc.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/lib/junit.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbosstm/workspace/interop/WSTFSC02-interop/lib/junit.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/lib/saaj-api.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbosstm/workspace/interop/WSTFSC02-interop/lib/saaj-api.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/lib/saxon.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbosstm/workspace/interop/WSTFSC02-interop/lib/saxon.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/InteropTestCase.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/InteropTestCase.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/InteropTestCase.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,162 @@
+package com.jboss.transaction.wstf.interop;
+
+import junit.framework.TestCase;
+import junit.framework.TestResult;
+
+import com.jboss.transaction.wstf.proxy.ProxyConversation;
+
+/**
+ * Base class for interop tests.
+ * @author kevin
+ */
+public class InteropTestCase extends TestCase
+{
+    /**
+     * The log message prefix start.
+     */
+    private static final String LOG_MESSAGE_PREFIX_START = "<log:message testcase=\"" ;
+    /**
+     * The log message prefix centre.
+     */
+    private static final String LOG_MESSAGE_PREFIX_CENTRE = "\" message=\"" ;
+    /**
+     * The log message prefix end.
+     */
+    private static final String LOG_MESSAGE_PREFIX_END = "\"><log:content>" ;
+    /**
+     * The log message suffix.
+     */
+    private static final String LOG_MESSAGE_SUFFIX = "</log:content></log:message>" ;
+    
+    /**
+     * The URI of the participant.
+     */
+    private String participantURI ;
+    
+    /**
+     * The conversation id for the test.
+     */
+    private String conversationId ;
+    
+    /**
+     * The test timeout value.
+     */
+    private long testTimeout ;
+    /**
+     * The asynchronous test flag.
+     */
+    private boolean asyncTest ;
+    
+    /**
+     * Set the participant URI.
+     * @param participantURI The participant URI.
+     */
+    public void setParticipantURI(final String participantURI)
+    {
+        this.participantURI = participantURI ;
+    }
+    
+    /**
+     * Get the participant URI.
+     * @return The participant URI.
+     */
+    protected String getParticipantURI()
+    {
+        return participantURI ;
+    }
+    
+    /**
+     * Set the test timeout value.
+     * testTimeout The test timeout value.
+     */
+    public void setTestTimeout(final long testTimeout)
+    {
+        this.testTimeout = testTimeout ;
+    }
+    
+    /**
+     * Get the asynchronous test flag.
+     * @return The asynchronous test flag.
+     */
+    protected boolean getAsyncTest()
+    {
+        return asyncTest ;
+    }
+    
+    /**
+     * Set the asynchronous test flag.
+     * asyncTest The asynchronous test flag.
+     */
+    public void setAsyncTest(final boolean asyncTest)
+    {
+        this.asyncTest = asyncTest ;
+    }
+    
+    /**
+     * Get the test timeout value.
+     * @return The test timeout value.
+     */
+    protected long getTestTimeout()
+    {
+        return testTimeout ;
+    }
+    
+    /**
+     * Get the conversation id.
+     * @return The conversation id.
+     */
+    protected String getConversationId()
+    {
+        return conversationId ;
+    }
+    
+    /**
+     * Wraps the run method to include logging of message interactions.
+     * @param result The test result. 
+     */
+    public void run(final TestResult result)
+    {
+        // get a conversation id, start the log, clear it on finish.
+        conversationId = ProxyConversation.createConversation() ;
+        try
+        {
+            super.run(result) ;
+        }
+        finally
+        {
+            final String[] messages = ProxyConversation.removeConversation(conversationId) ;
+            conversationId = null ;
+            if (messages != null)
+            {
+                final int numMessages = messages.length ;
+                final StringBuffer buffer = new StringBuffer() ;
+                int count = 0 ;
+                while(count < numMessages)
+                {
+                    final String message = messages[count] ;
+                    count++ ;
+                    if (message != null)
+                    {
+                        buffer.append(LOG_MESSAGE_PREFIX_START) ;
+                        buffer.append(getName()) ;
+                        buffer.append(LOG_MESSAGE_PREFIX_CENTRE) ;
+                        buffer.append(count) ;
+                        buffer.append(LOG_MESSAGE_PREFIX_END) ;
+                        buffer.append(message) ;
+                        buffer.append(LOG_MESSAGE_SUFFIX) ;
+                    }
+                }
+                MessageLogging.appendThreadLog(buffer.toString()) ;
+            }
+        }
+    }
+    
+    /**
+     * Return the string represenation of this test.
+     * @return the string representation.
+     */
+    public String toString()
+    {
+        return getName() ;
+    }
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/InteropTestSuite.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/InteropTestSuite.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/InteropTestSuite.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,111 @@
+package com.jboss.transaction.wstf.interop;
+
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * Interop testsuite to initialise the participant uri on addition.
+ * @author kevin
+ */
+public class InteropTestSuite extends TestSuite
+{
+    /**
+     * The participant URI for this test.
+     */
+    private final String participantURI ;
+    /**
+     * The test timeout.
+     */
+    private final long testTimeout ;
+    /**
+     * The asynchronous test flag.
+     */
+    private final boolean asyncTest ;
+    
+    /**
+     * Construct an empty test suite with the specified participant URI.
+     * @param testTimeout The test timeout.
+     * @param participantURI The participant URI.
+     */
+    public InteropTestSuite(final String participantURI, final long testTimeout, final boolean asyncTest)
+    {
+        super() ;
+        this.participantURI = participantURI ;
+        this.testTimeout = testTimeout ;
+        this.asyncTest = asyncTest ;
+    }
+    
+    /**
+     * Construct an empty test suite with the specified participant URI and name.
+     * @param participantURI The participant URI.
+     * @param testTimeout The test timeout.
+     * @param name The name of the test suite.
+     */
+    public InteropTestSuite(final String participantURI, final long testTimeout, final boolean asyncTest, final String name)
+    {
+        super(name) ;
+        this.participantURI = participantURI ;
+        this.testTimeout = testTimeout ;
+        this.asyncTest = asyncTest ;
+    }
+
+    /**
+     * Constructs a TestSuite from the given class using the specified participant URI.
+     * @param participantURI The participant URI.
+     * @param testTimeout The test timeout.
+     * @param clazz The class containing the tests.
+     */
+    public InteropTestSuite(final String participantURI, final long testTimeout, final boolean asyncTest, final Class clazz)
+    {
+        super(clazz) ;
+        this.participantURI = participantURI ;
+        this.testTimeout = testTimeout ;
+        this.asyncTest = asyncTest ;
+        final int numTests = countTestCases() ;
+        for(int count = 0 ; count < numTests ; count++)
+        {
+            initialiseTest(testAt(count)) ;
+        }
+    }
+    
+    /**
+     * Constructs a TestSuite from the given class using the specified participant URI and name.
+     * @param participantURI The participant URI.
+     * @param testTimeout The test timeout.
+     * @param clazz The class containing the tests.
+     * @param name The name of the test suite.
+     */
+    public InteropTestSuite(final String participantURI, final long testTimeout, final boolean asyncTest, final Class clazz, final String name)
+    {
+        super(clazz, name) ;
+        this.participantURI = participantURI ;
+        this.testTimeout = testTimeout ;
+        this.asyncTest = asyncTest ;
+    }
+
+    /**
+     * Add a test to the test suite.
+     * @param test The test to add.
+     */
+    public void addTest(final Test test)
+    {
+        initialiseTest(test) ;
+        super.addTest(test) ;
+    }
+    
+    /**
+     * Perform initialisation on the test.
+     * @param test The test to initialise.
+     */
+    private void initialiseTest(final Test test)
+    {
+        if (test instanceof InteropTestCase)
+        {
+            final InteropTestCase interopTestCase = (InteropTestCase)test ;
+            interopTestCase.setParticipantURI(participantURI) ;
+            interopTestCase.setTestTimeout(testTimeout) ;
+            interopTestCase.setAsyncTest(asyncTest) ;
+        }
+    }
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/MessageLogging.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/MessageLogging.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/MessageLogging.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,51 @@
+package com.jboss.transaction.wstf.interop;
+
+/**
+ * Class providing test message logging.
+ * @author kevin
+ */
+public class MessageLogging
+{
+    /**
+     * The thread local message log.
+     */
+    private static final ThreadLocal MESSAGE_LOG = new ThreadLocal() ;
+    
+    /**
+     * Clear the log for the current thread.
+     */
+    public static void clearThreadLog()
+    {
+        MESSAGE_LOG.set(null) ;
+    }
+    
+    /**
+     * Get the thread log.
+     * @return The thread log.
+     */
+    public static String getThreadLog()
+    {
+        final Object value = MESSAGE_LOG.get() ;
+        return (value == null ? "" : value.toString()) ;
+    }
+    
+    /**
+     * Append a message to the thread log.
+     * @param message The thread message to append.
+     */
+    public static void appendThreadLog(final String message)
+    {
+        final Object value = MESSAGE_LOG.get() ;
+        final StringBuffer buffer ;
+        if (value == null)
+        {
+            buffer = new StringBuffer(message) ;
+            MESSAGE_LOG.set(buffer) ;
+        }
+        else
+        {
+            buffer = (StringBuffer)value ;
+            buffer.append(message) ;
+        }
+    }
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/Sc002TestCase.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/Sc002TestCase.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/Sc002TestCase.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,324 @@
+package com.jboss.transaction.wstf.interop;
+
+import com.jboss.transaction.wstf.webservices.sc002.Sc002Constants;
+import com.jboss.transaction.wstf.webservices.sc002.client.Sc002Client;
+import com.jboss.transaction.wstf.webservices.ServiceRegistry;
+import com.jboss.transaction.wstf.proxy.ProxyConversation;
+import org.wstf.docs.scenarios.sc002.*;
+
+import javax.xml.ws.soap.SOAPFaultException;
+import javax.xml.ws.ProtocolException;
+import javax.xml.ws.WebServiceException;
+
+/**
+ * test case for WSTF scenario 2 Echo Notify service
+ *
+ * inherits from InteropTestCase so we can get redirection through the proxy service
+ * and hence logging of the messages. we don't strictly have a participant service
+ * here but the corresponding entity is the Sc002 service which we provide an
+ * implementation for. We also implement a client service which can be used to accept
+ * asynchronous replies and faults.
+ */
+public class Sc002TestCase extends InteropTestCase
+{
+    /**
+     * The service URI of the Sc002 service.
+     */
+    private static final String SC002_SERVICE_URI ;
+
+    /**
+     * Construct the named test case.
+     */
+    public Sc002TestCase()
+    {
+        // Default the participant service to the local Sc002 service.
+        setParticipantURI(getSc002ServiceURI()) ;
+        setTestTimeout(120000) ;
+        setAsyncTest(true) ;
+    }
+
+    /**
+     * Get the Sc002 service URI.
+     * @return The Sc002 service uri.
+     */
+    protected static String getSc002ServiceURI()
+    {
+        return SC002_SERVICE_URI ;
+    }
+
+    /**
+     * testSc002_1 - Test 1 simple notify
+     * Participant sends a simple notify.
+     * @throws Exception on failure.
+     */
+    public void testSc002_1()
+        throws Exception
+    {
+        final String conversationId = getConversationId() ;
+        try
+        {
+            final String serviceURI = getParticipantURI(); // ProxyURIRewriting.rewriteURI(conversationId, getParticipantURI()) ;
+            SessionDataType session = new SessionDataType();
+            NotifyType notifyType = new NotifyType();
+            session.setID("0");
+            notifyType.setText("Hello-");
+            Sc002Client.getSc002Port(serviceURI, conversationId, false).notify(notifyType, session);
+        }
+        finally
+        {
+            ProxyConversation.clearConversationState(conversationId) ;
+        }
+    }
+
+    /**
+     * testSc002_2 - Test 1 faulting notify
+     * Participant sends a faulting notify and traps a fault response.
+     * @throws Exception unless the correct fault is caught.
+     */
+    public void testSc002_2()
+        throws Exception
+    {
+        final String conversationId = getConversationId() ;
+        try
+        {
+            final String serviceURI = getParticipantURI(); // ProxyURIRewriting.rewriteURI(conversationId, getParticipantURI()) ;
+            SessionDataType session = new SessionDataType();
+            NotifyType notifyType = new NotifyType();
+            session.setID("0");
+            notifyType.setText("fault");
+            Sc002Client.getSc002Port(serviceURI, conversationId, false).notify(notifyType, session);
+        }
+        catch (SOAPFaultException sfe)
+        {
+            // did not expect this
+            fail("unexpected soap fault exception " + sfe);
+        }
+        catch (ProtocolException pe)
+        {
+            // did not expect this
+            fail("unexpected protocol exception " + pe);
+        }
+        catch (WebServiceException wse)
+        {
+            // did not expect this
+            fail("unexpected web service exception " + wse);
+        }
+        finally
+        {
+            ProxyConversation.clearConversationState(conversationId) ;
+        }
+    }
+
+    /**
+     * testSc002_3 - Test 3 simple echo
+     * Participant sends a simple echo.
+     * @throws Exception on failure.
+     */
+    public void testSc002_3()
+        throws Exception
+    {
+        final String conversationId = getConversationId() ;
+        try
+        {
+            final String serviceURI = getParticipantURI(); // ProxyURIRewriting.rewriteURI(conversationId, getParticipantURI()) ;
+            SessionDataType session = new SessionDataType();
+            EchoType echoType = new EchoType();
+            session.setID("0");
+            echoType.setText("World");
+            EchoResponseType result = Sc002Client.getSc002Port(serviceURI, conversationId, false).echo(echoType, session);
+            String reply = result.getText();
+
+            if (reply == null) {
+                fail("invalid null echo response");
+            } else {
+                int length = reply.length();
+                int idx = reply.indexOf("World");
+                if ((idx < 0) || ((idx + 5) != length)) {
+                    fail ("invalid echo response " + reply);
+                }
+            }
+        }
+        finally
+        {
+            ProxyConversation.clearConversationState(conversationId) ;
+        }
+    }
+
+    /**
+     * testSc002_4 - Test 4 faulting echo
+     * Participant sends a faulting echo and traps a fault response.
+     * @throws Exception unless the correct fault is caught.
+     */
+    public void testSc002_4()
+        throws Exception
+    {
+        final String conversationId = getConversationId() ;
+        try
+        {
+            final String serviceURI = getParticipantURI(); // ProxyURIRewriting.rewriteURI(conversationId, getParticipantURI()) ;
+            SessionDataType session = new SessionDataType();
+            EchoType echoType = new EchoType();
+            session.setID("0");
+            echoType.setText("fault");
+            EchoResponseType result = Sc002Client.getSc002Port(serviceURI, conversationId, false).echo(echoType, session);
+            fail("faulting echo expected fault! got " + result.getText());
+        }
+        catch (SOAPFaultException sfe)
+        {
+            // expected this
+        }
+        catch (ProtocolException pe)
+        {
+            // did not expect this
+            fail("unexpected protocol exception " + pe);
+        }
+        catch (WebServiceException wse)
+        {
+            // did not expect this
+            fail("unexpected web service exception " + wse);
+        }
+        finally
+        {
+            ProxyConversation.clearConversationState(conversationId) ;
+        }
+    }
+
+    /**
+     * testSc002_5 - Test 5 simple notify with mu
+     * Participant sends a simple notify with a must understand header.
+     * @throws Exception on failure.
+     */
+    public void testSc002_5()
+        throws Exception
+    {
+        final String conversationId = getConversationId() ;
+        try
+        {
+            final String serviceURI = getParticipantURI(); // ProxyURIRewriting.rewriteURI(conversationId, getParticipantURI()) ;
+            SessionDataType session = new SessionDataType();
+            NotifyType notifyType = new NotifyType();
+            session.setID("0");
+            notifyType.setText("Hello-");
+            Sc002Client.getSc002Port(serviceURI, conversationId, true).notify(notifyType, session);
+        }
+        finally
+        {
+            ProxyConversation.clearConversationState(conversationId) ;
+        }
+    }
+
+    /**
+     * testSc002_6 - Test 6 faulting notify with mu
+     * Participant sends a faulting notify with a must understand header and traps a fault
+     * response.
+     * @throws Exception unless the correct fault is caught.
+     */
+    public void testSc002_6()
+        throws Exception
+    {
+        final String conversationId = getConversationId() ;
+        try
+        {
+            final String serviceURI = getParticipantURI(); // ProxyURIRewriting.rewriteURI(conversationId, getParticipantURI()) ;
+            SessionDataType session = new SessionDataType();
+            NotifyType notifyType = new NotifyType();
+            session.setID("0");
+            notifyType.setText("fault");
+            Sc002Client.getSc002Port(serviceURI, conversationId, true).notify(notifyType, session);
+        }
+        catch (SOAPFaultException sfe)
+        {
+            // did not expect this
+            fail("unexpected soap fault exception " + sfe);
+        }
+        catch (ProtocolException pe)
+        {
+            // did not expect this
+            fail("unexpected protocol exception " + pe);
+        }
+        catch (WebServiceException wse)
+        {
+            // did not expect this
+            fail("unexpected web service exception " + wse);
+        }
+        finally
+        {
+            ProxyConversation.clearConversationState(conversationId) ;
+        }
+    }
+
+    /**
+     * testSc002_7 - Test 7 simple echo with mu
+     * Participant sends a simple echo with a must understand header.
+     * @throws Exception on failure.
+     */
+    public void testSc002_7()
+        throws Exception
+    {
+        final String conversationId = getConversationId() ;
+        try
+        {
+            final String serviceURI = getParticipantURI(); // ProxyURIRewriting.rewriteURI(conversationId, getParticipantURI()) ;
+            SessionDataType session = new SessionDataType();
+            EchoType echoType = new EchoType();
+            session.setID("0");
+            echoType.setText("World");
+            EchoResponseType result = Sc002Client.getSc002Port(serviceURI, conversationId, true).echo(echoType, session);
+            String reply = result.getText();
+            fail("expecting soap fault!");
+        }
+        catch (SOAPFaultException sfe)
+        {
+            // expect this
+        }
+        finally
+        {
+            ProxyConversation.clearConversationState(conversationId) ;
+        }
+    }
+
+    /**
+     * testSc002_8 - Test 8 faulting echo with mu
+     * Participant sends a faulting echo with a must understand and traps a fault response.
+     * @throws Exception unless the correct fault is caught.
+     */
+    public void testSc002_8()
+        throws Exception
+    {
+        final String conversationId = getConversationId() ;
+        try
+        {
+            final String serviceURI = getParticipantURI(); // ProxyURIRewriting.rewriteURI(conversationId, getParticipantURI()) ;
+            SessionDataType session = new SessionDataType();
+            EchoType echoType = new EchoType();
+            session.setID("0");
+            echoType.setText("fault");
+            EchoResponseType result = Sc002Client.getSc002Port(serviceURI, conversationId, true).echo(echoType, session);
+            fail("faulting echo expected fault! got " + result.getText());
+        }
+        catch (SOAPFaultException sfe)
+        {
+            // expected this
+        }
+        catch (ProtocolException pe)
+        {
+            // did not expect this
+            fail("unexpected protocol exception " + pe);
+        }
+        catch (WebServiceException wse)
+        {
+            // did not expect this
+            fail("unexpected web service exception " + wse);
+        }
+        finally
+        {
+            ProxyConversation.clearConversationState(conversationId) ;
+        }
+    }
+
+    static
+    {
+        final ServiceRegistry serviceRegistry = ServiceRegistry.getRegistry() ;
+        SC002_SERVICE_URI = serviceRegistry.getServiceURI(Sc002Constants.SERVICE_SC002) ;
+    }
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/states/BaseState.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/states/BaseState.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/states/BaseState.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,97 @@
+package com.jboss.transaction.wstf.interop.states;
+
+import org.xml.sax.ContentHandler;
+
+import com.jboss.transaction.wstf.proxy.ProxyConversationState;
+
+/**
+ * The base state class for proxy conversations.
+ */
+abstract class BaseState implements ProxyConversationState
+{
+    /**
+     * The complete flag.
+     */
+    private boolean complete ;
+    /**
+     * The success flag.
+     */
+    private boolean success ;
+    
+    /**
+     * Mark the conversation as successfully completed.
+     */
+    protected synchronized void success()
+    {
+        if (!complete)
+        {
+            System.out.println("KEV: success!") ;
+            complete = true ;
+            success = true ;
+            notifyAll() ;
+        }
+        else
+        {
+            System.out.println("KEV: AAAAAARRRRRRRGGGGGGGHHHHHHHHH, multiple successes called for conversation!") ;
+        }
+    }
+    
+    /**
+     * Wait a specified period for the conversation to complete.
+     * @param timeout The timeout period of the conversation.
+     */
+    public synchronized void waitForCompletion(final long timeout)
+    {
+        if (!complete && (timeout > 0))
+        {
+            final long end = System.currentTimeMillis() + timeout ;
+            do
+            {
+                final long delay = end - System.currentTimeMillis() ;
+                if (delay > 0)
+                {
+                    try
+                    {
+                        wait(delay) ;
+                    }
+                    catch (final InterruptedException ie) {} // ignore
+                }
+                else
+                {
+                    break ;
+                }
+            }
+            while(!complete) ;
+        }
+        
+        complete = true ;
+    }
+    
+    /**
+     * Has the conversation complete?
+     * @return true if the conversation has complete, false otherwise.
+     */
+    public synchronized boolean isComplete()
+    {
+        return complete ;
+    }
+    
+    /**
+     * Was the conversation successful?
+     * @return true if the conversation was successful, false otherwise.
+     */
+    public synchronized boolean isSuccessful()
+    {
+        return success ;
+    }
+
+    /**
+     * Get the Handler for rewriting the XML.
+     * @param nextHandler The next handler in the sequence.
+     * @return The handler or null if no rewriting required.
+     */
+    public ContentHandler getHandler(final ContentHandler nextHandler)
+    {
+	return null ;
+    }
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/states/InteropWaitState.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/states/InteropWaitState.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/interop/states/InteropWaitState.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,54 @@
+package com.jboss.transaction.wstf.interop.states;
+
+/**
+ * A conversation state that waits for a specified action before completing.
+ */
+public class InteropWaitState extends BaseState
+{
+    /**
+     * The last action.
+     */
+    private final String lastAction ;
+    /**
+     * The action count.
+     */
+    private int count ;
+    
+    /**
+     * Construct the conversation state.
+     * @param lastAction The last action of the conversation.
+     */
+    public InteropWaitState(final String lastAction)
+    {
+        this(lastAction, 1) ;
+    }
+    
+    /**
+     * Construct the conversation state.
+     * @param lastAction The last action of the conversation.
+     * @param count The occurrance to trigger on.
+     */
+    public InteropWaitState(final String lastAction, final int count)
+    {
+        this.lastAction = lastAction ;
+        this.count = count ;
+    }
+    
+    /**
+     * Handle the next action in the sequence.
+     * @param action The SOAP action.
+     * @param identifier The identifier associated with the endpoint.
+     * @return true if the message should be dropped, false otherwise.
+     */
+    public boolean handleAction(final String action, final String identifier)
+    {
+        if (lastAction.equals(action))
+        {
+            if (--count == 0)
+            {
+                success() ;
+            }
+        }
+        return false ;
+    }
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/proxy/AddressingConstants.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/proxy/AddressingConstants.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/proxy/AddressingConstants.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,308 @@
+package com.jboss.transaction.wstf.proxy;
+
+import javax.xml.namespace.QName;
+
+/**
+ * constants used in WS Addressing 2005/08
+ */
+public class AddressingConstants {
+    /**
+     * The Namespace.
+     */
+    public static String WSA_NAMESPACE = "http://www.w3.org/2005/08/addressing" ;
+    /**
+     * The Attribute Namespace.
+     */
+    public static String WSA_ATTRIBUTE_NAMESPACE = "" ;
+    /**
+     * The namespace prefix.
+     */
+    public static String WSA_PREFIX = "wsa" ;
+    /**
+     * The attribute namespace prefix.
+     */
+    public static String WSA_ATTRIBUTE_PREFIX = "" ;
+
+    /**
+     * The Action element.
+     */
+    public static String WSA_ELEMENT_ACTION = "Action" ;
+    /**
+     * The Action QName.
+     */
+    public static QName WSA_ELEMENT_QNAME_ACTION = new QName(WSA_NAMESPACE, WSA_ELEMENT_ACTION, WSA_PREFIX) ;
+    /**
+     * The Endpoint Reference element.
+     */
+    public static String WSA_ELEMENT_ENDPOINT_REFERENCE = "EndpointReference" ;
+    /**
+     * The Endpoint Reference QName.
+     */
+    public static QName WSA_ELEMENT_QNAME_ENDPOINT_REFERENCE = new QName(WSA_NAMESPACE, WSA_ELEMENT_ENDPOINT_REFERENCE, WSA_PREFIX) ;
+    /**
+     * The Fault To element.
+     */
+    public static String WSA_ELEMENT_FAULT_TO = "FaultTo" ;
+    /**
+     * The Fault To QName.
+     */
+    public static QName WSA_ELEMENT_QNAME_FAULT_TO = new QName(WSA_NAMESPACE, WSA_ELEMENT_FAULT_TO, WSA_PREFIX) ;
+    /**
+     * The From element.
+     */
+    public static String WSA_ELEMENT_FROM = "From" ;
+    /**
+     * The From QName.
+     */
+    public static QName WSA_ELEMENT_QNAME_FROM = new QName(WSA_NAMESPACE, WSA_ELEMENT_FROM, WSA_PREFIX) ;
+    /**
+     * The Message ID element.
+     */
+    public static String WSA_ELEMENT_MESSAGE_ID = "MessageID" ;
+    /**
+     * The Message ID QName.
+     */
+    public static QName WSA_ELEMENT_QNAME_MESSAGE_ID = new QName(WSA_NAMESPACE, WSA_ELEMENT_MESSAGE_ID, WSA_PREFIX) ;
+    /**
+     * The Relates To element.
+     */
+    public static String WSA_ELEMENT_RELATES_TO = "RelatesTo" ;
+    /**
+     * The Relates To QName.
+     */
+    public static QName WSA_ELEMENT_QNAME_RELATES_TO = new QName(WSA_NAMESPACE, WSA_ELEMENT_RELATES_TO, WSA_PREFIX) ;
+    /**
+     * The Reply To element.
+     */
+    public static String WSA_ELEMENT_REPLY_TO = "ReplyTo" ;
+    /**
+     * The Reply To QName.
+     */
+    public static QName WSA_ELEMENT_QNAME_REPLY_TO = new QName(WSA_NAMESPACE, WSA_ELEMENT_REPLY_TO, WSA_PREFIX) ;
+    /**
+     * The To element.
+     */
+    public static String WSA_ELEMENT_TO = "To" ;
+    /**
+     * The To QName.
+     */
+    public static QName WSA_ELEMENT_QNAME_TO = new QName(WSA_NAMESPACE, WSA_ELEMENT_TO, WSA_PREFIX) ;
+    /**
+     * The Address element.
+     */
+    public static String WSA_ELEMENT_ADDRESS = "Address" ;
+    /**
+     * The Address QName.
+     */
+    public static QName WSA_ELEMENT_QNAME_ADDRESS = new QName(WSA_NAMESPACE, WSA_ELEMENT_ADDRESS, WSA_PREFIX) ;
+    /**
+     * The Reference Parameters element.
+     */
+    public static String WSA_ELEMENT_REFERENCE_PARAMETERS = "ReferenceParameters" ;
+    /**
+     * The Reference Parameters QName.
+     */
+    public static QName WSA_ELEMENT_QNAME_REFERENCE_PARAMETERS = new QName(WSA_NAMESPACE, WSA_ELEMENT_REFERENCE_PARAMETERS, WSA_PREFIX) ;
+    /**
+     * The Metadata element.
+     */
+    public static String WSA_ELEMENT_METADATA = "Metadata" ;
+    /**
+     * The Metadata QName.
+     */
+    public static QName WSA_ELEMENT_QNAME_METADATA = new QName(WSA_NAMESPACE, WSA_ELEMENT_METADATA, WSA_PREFIX) ;
+
+    /**
+     * The Relationship Type attribute.
+     */
+    public static String WSA_ATTRIBUTE_RELATIONSHIP_TYPE = "RelationshipType" ;
+    /**
+     * The Relationship Type QName.
+     */
+    public static QName WSA_ATTRIBUTE_QNAME_RELATIONSHIP_TYPE = new QName(WSA_ATTRIBUTE_NAMESPACE, WSA_ATTRIBUTE_RELATIONSHIP_TYPE, WSA_ATTRIBUTE_PREFIX) ;
+
+    /**
+     * The value of the Action element for faults.
+     */
+    public static String WSA_ACTION_FAULT = WSA_NAMESPACE + "/fault" ;
+    /**
+     * The value of the Action element for SOAP faults.
+     */
+    public static String WSA_ACTION_SOAP_FAULT = WSA_NAMESPACE + "/soap/fault" ;
+
+    /**
+     * The unspecified Message ID for use in relationships.
+     * KEV check
+     */
+    public static String WSA_MESSAGE_ID_UNSPECIFIED = WSA_NAMESPACE + "/unspecified" ;
+
+    /**
+     * The address URI representing an anonymous endpoint.
+     */
+    public static String WSA_ADDRESS_ANONYMOUS = WSA_NAMESPACE + "/anonymous" ;
+    /**
+     * The address URI representing the none endpoint.
+     */
+    public static String WSA_ADDRESS_NONE = WSA_NAMESPACE + "/none" ;
+
+    /**
+     * The relates to reply URI.
+     */
+    public static String WSA_RELATES_TO_REPLY = WSA_NAMESPACE + "/reply" ;
+
+    /**
+     * The Is Reference Parameter attribute.
+     */
+    public static String WSA_ATTRIBUTE_IS_REFERENCE_PARAMETER = "IsReferenceParameter" ;
+    /**
+     * The Is Reference Parameter QName.
+     */
+    public static QName WSA_ATTRIBUTE_QNAME_IS_REFERENCE_PARAMETER = new QName(WSA_NAMESPACE, WSA_ATTRIBUTE_IS_REFERENCE_PARAMETER, WSA_PREFIX) ;
+
+    /**
+     * The Fault Detail element.
+     */
+    public static String WSA_ELEMENT_FAULT_DETAIL = "FaultDetail" ;
+    /**
+     * The Fault Detail QName.
+     */
+    public static QName WSA_ELEMENT_QNAME_FAULT_DETAIL = new QName(WSA_NAMESPACE, WSA_ELEMENT_FAULT_DETAIL, WSA_PREFIX) ;
+
+    /**
+     * The Invalid Addressing Header fault code.
+     */
+    public static String WSA_FAULT_CODE_INVALID_ADDRESSING_HEADER = "InvalidAddressingHeader" ;
+    /**
+     * The Invalid Addressing Header fault code QName.
+     */
+    public static QName WSA_FAULT_CODE_QNAME_INVALID_ADDRESSING_HEADER = new QName(WSA_NAMESPACE, WSA_FAULT_CODE_INVALID_ADDRESSING_HEADER, WSA_PREFIX) ;
+    /**
+     * The Invalid Address fault code.
+     */
+    public static String WSA_FAULT_CODE_INVALID_ADDRESS = "InvalidAddress" ;
+    /**
+     * The Invalid Address fault code QName.
+     */
+    public static QName WSA_FAULT_CODE_QNAME_INVALID_ADDRESS = new QName(WSA_NAMESPACE, WSA_FAULT_CODE_INVALID_ADDRESS, WSA_PREFIX) ;
+    /**
+     * The Invalid EPR fault code.
+     */
+    public static String WSA_FAULT_CODE_INVALID_EPR = "InvalidEPR" ;
+    /**
+     * The Invalid EPR fault code QName.
+     */
+    public static QName WSA_FAULT_CODE_QNAME_INVALID_EPR = new QName(WSA_NAMESPACE, WSA_FAULT_CODE_INVALID_EPR, WSA_PREFIX) ;
+    /**
+     * The Invalid Cardinality fault code.
+     */
+    public static String WSA_FAULT_CODE_INVALID_CARDINALITY = "InvalidCardinality" ;
+    /**
+     * The Invalid Cardinality fault code QName.
+     */
+    public static QName WSA_FAULT_CODE_QNAME_INVALID_CARDINALITY = new QName(WSA_NAMESPACE, WSA_FAULT_CODE_INVALID_CARDINALITY, WSA_PREFIX) ;
+    /**
+     * The Missing Address In EPR fault code.
+     */
+    public static String WSA_FAULT_CODE_MISSING_ADDRESS_IN_EPR = "MissingAddressInEPR" ;
+    /**
+     * The Missing Address In EPR fault code QName.
+     */
+    public static QName WSA_FAULT_CODE_QNAME_MISSING_ADDRESS_IN_EPR = new QName(WSA_NAMESPACE, WSA_FAULT_CODE_MISSING_ADDRESS_IN_EPR, WSA_PREFIX) ;
+    /**
+     * The Duplicate Message ID fault code.
+     */
+    public static String WSA_FAULT_CODE_DUPLICATE_MESSAGE_ID = "DuplicateMessageID" ;
+    /**
+     * The Duplicate Message ID fault code QName.
+     */
+    public static QName WSA_FAULT_CODE_QNAME_DUPLICATE_MESSAGE_ID = new QName(WSA_NAMESPACE, WSA_FAULT_CODE_DUPLICATE_MESSAGE_ID, WSA_PREFIX) ;
+    /**
+     * The Action Mismatch fault code.
+     */
+    public static String WSA_FAULT_CODE_ACTION_MISMATCH = "ActionMismatch" ;
+    /**
+     * The Action Mismatch fault code QName.
+     */
+    public static QName WSA_FAULT_CODE_QNAME_ACTION_MISMATCH = new QName(WSA_NAMESPACE, WSA_FAULT_CODE_ACTION_MISMATCH, WSA_PREFIX) ;
+    /**
+     * The Message Addressing Header Required fault code.
+     */
+    public static String WSA_FAULT_CODE_MESSAGING_ADDRESSING_HEADER_REQUIRED = "MessageAddressingHeaderRequired" ;
+    /**
+     * The Message Addressing Header Required fault code QName.
+     */
+    public static QName WSA_FAULT_CODE_QNAME_MESSAGING_ADDRESSING_HEADER_REQUIRED = new QName(WSA_NAMESPACE, WSA_FAULT_CODE_MESSAGING_ADDRESSING_HEADER_REQUIRED, WSA_PREFIX) ;
+    /**
+     * The Destination Unreachable fault code.
+     */
+    public static String WSA_FAULT_CODE_DESTINATION_UNREACHABLE = "DestinationUnreachable" ;
+    /**
+     * The Destination Unreachable fault code QName.
+     */
+    public static QName WSA_FAULT_CODE_QNAME_DESTINATION_UNREACHABLE = new QName(WSA_NAMESPACE, WSA_FAULT_CODE_DESTINATION_UNREACHABLE, WSA_PREFIX) ;
+    /**
+     * The Action Not Supported fault code.
+     */
+    public static String WSA_FAULT_CODE_ACTION_NOT_SUPPORTED = "ActionNotSupported" ;
+    /**
+     * The Action Not Supported fault code QName.
+     */
+    public static QName WSA_FAULT_CODE_QNAME_ACTION_NOT_SUPPORTED = new QName(WSA_NAMESPACE, WSA_FAULT_CODE_ACTION_NOT_SUPPORTED, WSA_PREFIX) ;
+    /**
+     * The Endpoint Unavailable fault code.
+     */
+    public static String WSA_FAULT_CODE_ENDPOINT_UNAVAILABLE = "EndpointUnavailable" ;
+    /**
+     * The Endpoint Unavailable fault code QName.
+     */
+    public static QName WSA_FAULT_CODE_QNAME_ENDPOINT_UNAVAILABLE = new QName(WSA_NAMESPACE, WSA_FAULT_CODE_ENDPOINT_UNAVAILABLE, WSA_PREFIX) ;
+
+    /**
+     * The Problem Header element.
+     */
+    public static String WSA_ELEMENT_PROBLEM_HEADER = "ProblemHeader" ;
+    /**
+     * The Problem Header QName.
+     */
+    public static QName WSA_ELEMENT_QNAME_PROBLEM_HEADER = new QName(WSA_NAMESPACE, WSA_ELEMENT_PROBLEM_HEADER, WSA_PREFIX) ;
+    /**
+     * The Problem Header QName element.
+     */
+    public static String WSA_ELEMENT_PROBLEM_HEADER_QNAME = "ProblemHeaderQName" ;
+    /**
+     * The Problem Header QName QName.
+     */
+    public static QName WSA_ELEMENT_QNAME_PROBLEM_HEADER_QNAME = new QName(WSA_NAMESPACE, WSA_ELEMENT_PROBLEM_HEADER_QNAME, WSA_PREFIX) ;
+    /**
+     * The Problem IRI element.
+     */
+    public static String WSA_ELEMENT_PROBLEM_IRI = "ProblemIRI" ;
+    /**
+     * The Problem IRI QName.
+     */
+    public static QName WSA_ELEMENT_QNAME_PROBLEM_IRI = new QName(WSA_NAMESPACE, WSA_ELEMENT_PROBLEM_IRI, WSA_PREFIX) ;
+    /**
+     * The Problem Action element.
+     */
+    public static String WSA_ELEMENT_PROBLEM_ACTION = "ProblemAction" ;
+    /**
+     * The Problem Action QName.
+     */
+    public static QName WSA_ELEMENT_QNAME_PROBLEM_ACTION = new QName(WSA_NAMESPACE, WSA_ELEMENT_PROBLEM_ACTION, WSA_PREFIX) ;
+    /**
+     * The Soap Action element.
+     */
+    public static String WSA_ELEMENT_SOAP_ACTION = "SoapAction" ;
+    /**
+     * The Soap Action QName.
+     */
+    public static QName WSA_ELEMENT_QNAME_SOAP_ACTION = new QName(WSA_NAMESPACE, WSA_ELEMENT_SOAP_ACTION, WSA_PREFIX) ;
+    /**
+     * The Retry After element.
+     */
+    public static String WSA_ELEMENT_RETRY_AFTER = "RetryAfter" ;
+    /**
+     * The Retry After QName.
+     */
+    public static QName WSA_ELEMENT_QNAME_RETRY_AFTER = new QName(WSA_NAMESPACE, WSA_ELEMENT_METADATA, WSA_PREFIX) ;
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/proxy/ProxyConversation.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/proxy/ProxyConversation.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/proxy/ProxyConversation.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,145 @@
+package com.jboss.transaction.wstf.proxy;
+
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * Message logging via the proxy.
+ */
+public class ProxyConversation
+{
+    /**
+     * The conversation id.
+     */
+    private static int currentConversationId ;
+    /**
+     * The conversation map.
+     */
+    private static Map conversationMap = new TreeMap() ;
+    /**
+     * The conversation state map.
+     */
+    private static Map conversationStateMap = new TreeMap() ;
+    
+    /**
+     * The marker for an internal id.
+     */
+    private static final char INTERNAL_ID = 'c' ;
+    /**
+     * The marker for an external id.
+     */
+    private static final char EXTERNAL_ID = 'C' ;
+    
+    /**
+     * Create a conversation.
+     * @return The id of the conversation. 
+     */
+    public static synchronized String createConversation()
+    {
+        final String conversationId = INTERNAL_ID + Integer.toString(++currentConversationId) ;
+        conversationMap.put(mapConversationId(conversationId), new ArrayList()) ;
+System.out.println("KEV: created conversation " + conversationId) ;        
+        return conversationId ;
+    }
+
+    /**
+     * Remove the conversation.
+     * @param conversationId The conversation id.
+     * @return The conversation messages in sequence.
+     */
+    public static synchronized String[] removeConversation(final String conversationId)
+    {
+        final ArrayList list = (ArrayList)conversationMap.remove(mapConversationId(conversationId)) ;
+System.out.println("KEV: removed conversation " + conversationId) ;        
+        return (list == null ? new String[0] : (String[])list.toArray(new String[list.size()])) ;
+    }
+    
+    /**
+     * Append a message to the conversation.
+     * @param conversationId The conversation id.
+     * @param message The message to append to the conversation.
+     */
+    public static synchronized void appendConversation(final String conversationId, final String message)
+    {
+        final ArrayList list = (ArrayList)conversationMap.get(mapConversationId(conversationId)) ;
+        if (list != null)
+        {
+            list.add(message) ;
+        }
+    }
+    
+    /**
+     * Set the conversation state for the specified conversation.
+     * @param conversationId The conversation id.
+     * @param conversationState The conversation state.
+     */
+    public static synchronized void setConversationState(final String conversationId, final ProxyConversationState conversationState)
+    {
+        conversationStateMap.put(mapConversationId(conversationId), conversationState) ;
+    }
+    
+    /**
+     * Get the conversation state for the specified conversation.
+     * @param conversationId The conversation id.
+     * @return The conversation state or null.
+     */
+    public static synchronized ProxyConversationState getConversationState(final String conversationId)
+    {
+        return (ProxyConversationState)conversationStateMap.get(mapConversationId(conversationId)) ;
+    }
+    
+    /**
+     * Clear the conversation state for the specified conversation.
+     * @param conversationId The conversation id.
+     */
+    public static synchronized void clearConversationState(final String conversationId)
+    {
+        conversationStateMap.remove(mapConversationId(conversationId)) ;
+    }
+    
+    /**
+     * Is the conversation id an internal id?
+     * @param conversationId The conversation id.
+     * @return True if the conversation id is internal, false if it is external.
+     */
+    public static boolean isInternalConversationId(final String conversationId)
+    {
+        return ((conversationId != null) && (conversationId.length() != 0) && (conversationId.charAt(0) == INTERNAL_ID)) ;
+    }
+    
+    /**
+     * Get the alternate conversation id.
+     * @param conversationId The current conversation id.
+     * @return The alternate conversation id.
+     */
+    public static String getAlternateConversationId(final String conversationId)
+    {
+        if ((conversationId == null) || (conversationId.length() == 0))
+        {
+            return conversationId ;
+        }
+        if (conversationId.charAt(0) == INTERNAL_ID)
+        {
+            return EXTERNAL_ID + mapConversationId(conversationId) ;
+        }
+        else
+        {
+            return INTERNAL_ID + mapConversationId(conversationId) ;
+        }
+    }
+    
+    /**
+     * Get the map conversation id.
+     * @param conversationId The full conversation id.
+     * @return The conversation id for the map.
+     */
+    private static String mapConversationId(final String conversationId)
+    {
+        if ((conversationId == null) || (conversationId.length() == 0))
+        {
+            return conversationId ;
+        }
+        return conversationId.substring(1) ;
+    }
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/proxy/ProxyConversationState.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/proxy/ProxyConversationState.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/proxy/ProxyConversationState.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,24 @@
+package com.jboss.transaction.wstf.proxy;
+
+import org.xml.sax.ContentHandler;
+
+/**
+ * Interface representing a conversation state.
+ */
+public interface ProxyConversationState
+{
+    /**
+     * Handle the next action in the sequence.
+     * @param action The SOAP action.
+     * @param identifier The identifier associated with the endpoint.
+     * @return true if the message should be dropped, false otherwise.
+     */
+    public boolean handleAction(final String action, final String identifier) ;
+
+    /**
+     * Get the Handler for rewriting the XML.
+     * @param nextHandler The next handler in the sequence.
+     * @return The handler or null if no rewriting required.
+     */
+    public ContentHandler getHandler(final ContentHandler nextHandler) ;
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestConstants.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestConstants.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestConstants.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,147 @@
+package com.jboss.transaction.wstf.test ;
+
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * This class contains constants used to map the front end onto
+ * the WS-TX interop tests.
+ * @author kevin
+ */
+public class TestConstants
+{
+    /**
+     * The name of the Service URI parameter.
+     */
+    public static final String PARAM_SERVICE_URI = "serviceuri" ;
+    /**
+     * The name of the test parameter.
+     */
+    public static final String PARAM_TEST = "test" ;
+    /**
+     * The name of the test timeout parameter.
+     */
+    public static final String PARAM_TEST_TIMEOUT = "testTimeout" ;
+    /**
+     * The name of the asynchronous test flag parameter.
+     */
+    public static final String PARAM_ASYNC_TEST = "asyncTest" ;
+    
+    /**
+     * The name of the test results attribute.
+     */
+    public static final String ATTRIBUTE_TEST_RESULT = "testResult" ;
+    /**
+     * The name of the test validation attribute.
+     */
+    public static final String ATTRIBUTE_TEST_VALIDATION = "testValidation" ;
+    /**
+     * The name of the log count attribute.
+     */
+    public static final String ATTRIBUTE_LOG_COUNT = "logCount" ;
+    /**
+     * The name of the log name attribute.
+     */
+    public static final String ATTRIBUTE_LOG_NAME = "logName" ;
+    
+    /**
+     * test name for all Sc002 tests
+     */
+    public static final String NAME_ALL_TESTS_SC002 = "allSc002" ;
+    /**
+     * The prefix for all Sc007 (AT) tests.
+     */
+    public static final String PREFIX_TESTS_AT = "testSc007" ;
+    /**
+     * The prefix for all Sc002 tests.
+     */
+    public static final String PREFIX_TESTS_SC002 = "testSc002" ;
+
+    /* Sc002 scenario defs */
+
+    /**
+     * test name for Sc002 Scenario 1
+     */
+    public static final String NAME_TEST_SC002_1 = PREFIX_TESTS_SC002 + "_1" ;
+    /**
+     * test description for Sc002 Scenario 1
+     */
+    public static final String DESCRIPTION_TEST_SC002_1 = "1 - Simple Notify : notify(\"Hello-\")"  ;
+    /**
+     * test name for Sc002 Scenario 2
+     */
+    public static final String NAME_TEST_SC002_2 = PREFIX_TESTS_SC002 + "_2" ;
+    /**
+     * test description for Sc002 Scenario 2
+     */
+    public static final String DESCRIPTION_TEST_SC002_2 = "1 - Faulting Notify : notify(\"fault\")"  ;
+    /**
+     * test name for Sc002 Scenario 3
+     */
+    public static final String NAME_TEST_SC002_3 = PREFIX_TESTS_SC002 + "_3" ;
+    /**
+     * test description for Sc002 Scenario 3
+     */
+    public static final String DESCRIPTION_TEST_SC002_3 = "1 - Simple Echo : echo(\"World\")"  ;
+    /**
+     * test name for Sc002 Scenario 4
+     */
+    public static final String NAME_TEST_SC002_4 = PREFIX_TESTS_SC002 + "_4" ;
+    /**
+     * test description for Sc002 Scenario 4
+     */
+    public static final String DESCRIPTION_TEST_SC002_4 = "1 - Faulting Echo : echo(\"fault\")"  ;
+    /**
+     * test name for Sc002 Scenario 5
+     */
+    public static final String NAME_TEST_SC002_5 = PREFIX_TESTS_SC002 + "_5" ;
+    /**
+     * test description for Sc002 Scenario 5
+     */
+    public static final String DESCRIPTION_TEST_SC002_5 = "1 - Simple Notify + mu : notify(\"Hello-\")"  ;
+    /**
+     * test name for Sc002 Scenario 6
+     */
+    public static final String NAME_TEST_SC002_6 = PREFIX_TESTS_SC002 + "_6" ;
+    /**
+     * test description for Sc002 Scenario 2
+     */
+    public static final String DESCRIPTION_TEST_SC002_6 = "1 - Faulting Notify + mu : notify(\"fault\")"  ;
+    /**
+     * test name for Sc002 Scenario 7
+     */
+    public static final String NAME_TEST_SC002_7 = PREFIX_TESTS_SC002 + "_7" ;
+    /**
+     * test description for Sc002 Scenario 7
+     */
+    public static final String DESCRIPTION_TEST_SC002_7 = "1 - Simple Echo + mu : echo(\"World\")"  ;
+    /**
+     * test name for Sc002 Scenario 4
+     */
+    public static final String NAME_TEST_SC002_8 = PREFIX_TESTS_SC002 + "_8" ;
+    /**
+     * test description for Sc002 Scenario 8
+     */
+    public static final String DESCRIPTION_TEST_SC002_8 = "1 - Faulting Echo + mu : echo(\"fault\")"  ;
+
+    /**
+     * The Sc002 name to description map.
+     */
+    public static final Map DESCRIPTIONS_SC002 ;
+
+    static
+    {
+        final TreeMap descriptionsSc002 = new TreeMap() ;
+
+        descriptionsSc002.put(NAME_TEST_SC002_1, DESCRIPTION_TEST_SC002_1) ;
+        descriptionsSc002.put(NAME_TEST_SC002_2, DESCRIPTION_TEST_SC002_2) ;
+        descriptionsSc002.put(NAME_TEST_SC002_3, DESCRIPTION_TEST_SC002_3) ;
+        descriptionsSc002.put(NAME_TEST_SC002_4, DESCRIPTION_TEST_SC002_4) ;
+        descriptionsSc002.put(NAME_TEST_SC002_5, DESCRIPTION_TEST_SC002_5) ;
+        descriptionsSc002.put(NAME_TEST_SC002_6, DESCRIPTION_TEST_SC002_6) ;
+        descriptionsSc002.put(NAME_TEST_SC002_7, DESCRIPTION_TEST_SC002_7) ;
+        descriptionsSc002.put(NAME_TEST_SC002_8, DESCRIPTION_TEST_SC002_8) ;
+
+        DESCRIPTIONS_SC002 = descriptionsSc002 ;
+    }
+}
\ No newline at end of file

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestLogController.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestLogController.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestLogController.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,84 @@
+package com.jboss.transaction.wstf.test;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+
+/**
+ * The test log controller.
+ * @author kevin
+ */
+public class TestLogController
+{
+    /**
+     * The base directory for logs, hardcoded for now.
+     */
+    private static File baseDir ;
+    
+    static
+    {
+        final String userHome = System.getProperty("user.home") ;
+        baseDir = new File(userHome, "logs") ;
+        if (!baseDir.exists())
+        {
+            baseDir.mkdir() ;
+        }
+    }
+
+    /**
+     * Read the contents of the specified log.
+     * @param logName The log to retrieve.
+     * @return The log contents.
+     * @throws IOException for reading errors.
+     */
+    public static String readLog(final String logName)
+        throws IOException
+    {
+        final File logFile = new File(baseDir, logName) ;
+        if (logFile.exists() && logFile.canRead())
+        {
+            final FileReader reader = new FileReader(logFile) ;
+            try
+            {
+                final StringBuffer buffer = new StringBuffer() ;
+                final char[] charBuffer = new char[256] ;
+                while(reader.ready())
+                {
+                    final int count = reader.read(charBuffer) ;
+                    if (count > 0)
+                    {
+                        buffer.append(charBuffer, 0, count) ;
+                    }
+                }
+                return buffer.toString() ;
+            }
+            finally
+            {
+                reader.close() ;
+            }
+        }
+        throw new IOException("Cannot read log file: " + logName) ;
+    }
+
+    /**
+     * Write the contents of the specified log.
+     * @param logName The log to write.
+     * @param contents The log contents.
+     * @throws IOException for reading errors.
+     */
+    public static void writeLog(final String logName, final String contents)
+        throws IOException
+    {
+        final File logFile = new File(baseDir, logName) ;
+        final FileWriter writer = new FileWriter(logFile) ;
+        try
+        {
+            writer.write(contents) ;
+        }
+        finally
+        {
+            writer.close() ;
+        }
+    }
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestLogServlet.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestLogServlet.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestLogServlet.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,96 @@
+package com.jboss.transaction.wstf.test;
+
+import com.jboss.transaction.wstf.webservices.util.ClassLoaderHelper;
+
+import java.io.IOException;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * The test servlet.
+ * @author kevin
+ */
+public class TestLogServlet extends HttpServlet
+{
+    /**
+     * The servlet serial version UID.
+     */
+    private static final long serialVersionUID = 2566877081747112520L ;
+    
+    /**
+     * The not found HTML page.
+     */
+    private String notFoundResponse ;
+    /**
+     * The directory contents HTML page.
+     */
+    private String directoryContents ;
+    
+    /**
+     * Initialise the servlet.
+     * @param servletConfig The servlet configuration.
+     */
+    public void init(final ServletConfig servletConfig)
+        throws ServletException
+    {
+        super.init(servletConfig) ;
+        try
+        {
+            notFoundResponse = ClassLoaderHelper.getResourceAsString(TestLogServlet.class, "notFoundResponse.html") ;
+            directoryContents = ClassLoaderHelper.getResourceAsString(TestLogServlet.class, "directoryContents.html") ;
+        }
+        catch (final IOException ioe)
+        {
+            throw new ServletException("Failed to load HTML pages", ioe) ;
+        }
+    }
+    
+    /**
+     * Return the specified logs
+     * @param request The HTTP servlet request.
+     * @param response The HTTP servlet response.
+     */
+    protected void doGet(final HttpServletRequest request, final HttpServletResponse response)
+        throws ServletException, IOException
+    {
+        final String logName = request.getPathInfo() ;
+        if ((logName == null) || (logName.length() == 0))
+        {
+            response.sendRedirect("logs/") ;
+            return ;
+        }
+        else if ("/".equals(logName))
+        {
+            response.setContentType("text/html") ;
+            response.setStatus(HttpServletResponse.SC_OK) ;
+            response.setContentLength(directoryContents.length()) ;
+            response.getOutputStream().print(directoryContents) ;
+        }
+        else
+        {
+            final String contents ;
+            try
+            {
+                contents = TestLogController.readLog(logName) ;
+            }
+            catch (final Throwable th)
+            {
+                log("Error reading log file", th) ;
+                response.setContentType("text/html") ;
+                response.setStatus(HttpServletResponse.SC_NOT_FOUND) ;
+                response.setContentLength(notFoundResponse.length()) ;
+                response.getOutputStream().print(notFoundResponse) ;
+                return ;
+            }
+            
+            response.setContentType("text/xml") ;
+            response.setStatus(HttpServletResponse.SC_OK) ;
+            response.setContentLength(contents.length()) ;
+            response.getOutputStream().print(contents) ;
+        }
+    }
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestRunner.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestRunner.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestRunner.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,106 @@
+package com.jboss.transaction.wstf.test;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestResult;
+import junit.framework.TestSuite;
+
+import com.jboss.transaction.wstf.interop.*;
+
+/**
+ * Class responsible for executing the appropriate JUnit test.
+ * @author kevin
+ */
+public class TestRunner
+{
+    /**
+     * The log message prefix.
+     */
+    private static final String LOG_MESSAGE_PREFIX = "<log:log xmlns:log=\"http://docs.oasis-open.org/ws-tx/logs/\">" ;
+    /**
+     * The log message suffix.
+     */
+    private static final String LOG_MESSAGE_SUFFIX = "</log:log>";
+    
+    /**
+     * The Sc002 test class.
+     */
+    private static final Class SC002_TEST_CLASS = Sc002TestCase.class ;
+
+    /**
+     * Execute the specific test against the specified participant.
+     * @param participantURI The URI of the participant.
+     * @param testTimeout The test timeout.
+     * @param asyncTest The asynchronous test flag.
+     * @param testName The name of the test to execute.
+     * @return The test result.
+     */
+    public static TestResult execute(final String participantURI, final long testTimeout, final boolean asyncTest, final String testName)
+    {
+        MessageLogging.clearThreadLog() ;
+        final Test test ;
+        if (TestConstants.NAME_ALL_TESTS_SC002.equals(testName))
+        {
+            final TestSuite testSuite = new TestSuite() ;
+            testSuite.addTest(new InteropTestSuite(participantURI, testTimeout, asyncTest, SC002_TEST_CLASS)) ;
+            test = testSuite ;
+        }
+        else if (testName.startsWith(TestConstants.PREFIX_TESTS_SC002))
+        {
+            final Class testClass = SC002_TEST_CLASS;
+            try
+            {
+                test = createTest(testClass, participantURI, testTimeout, asyncTest, testName) ;
+            }
+            catch (final Throwable th)
+            {
+                System.err.println("Unexpected error instantiating test class: " + th) ;
+                return null ;
+            }
+        }
+        else
+        {
+            System.err.println("Unidentified test name: " + testName) ;
+            return null ;
+        }
+        MessageLogging.appendThreadLog(LOG_MESSAGE_PREFIX) ;
+        final TestResult testResult = new TestResult() ;
+        test.run(testResult) ;
+        MessageLogging.appendThreadLog(LOG_MESSAGE_SUFFIX) ;
+        return testResult ;
+    }
+    
+    /**
+     * Create the test instance.
+     * @param testClass The test class name.
+     * @param participantURI The participant URI.
+     * @param testTimeout The test timeout.
+     * @param asyncTest The asynchronous test flag.
+     * @param testName The test name.
+     * @return The test instance.
+     * @throws IllegalAccessException For access exception instantiating the test class.
+     * @throws InstantiationException For errors instantiating the test class.
+     * @throws IllegalArgumentException For an invalid test class.
+     */
+    private static TestCase createTest(final Class testClass, final String participantURI, final long testTimeout, final boolean asyncTest, final String testName)
+        throws IllegalAccessException, InstantiationException, IllegalArgumentException
+    {
+        final Object testObject = testClass.newInstance() ;
+        if (testObject instanceof InteropTestCase)
+        {
+            final InteropTestCase interopTestCase = (InteropTestCase)testObject ;
+            interopTestCase.setParticipantURI(participantURI) ; 
+            interopTestCase.setTestTimeout(testTimeout) ; 
+            interopTestCase.setAsyncTest(asyncTest) ; 
+            interopTestCase.setName(testName) ;
+            return interopTestCase ;
+        }
+        else if (testObject instanceof TestCase)
+        {
+            final TestCase test = (TestCase)testObject ;
+            test.setName(testName) ;
+            return test ;
+        }
+        throw new IllegalArgumentException("Invalid class: " + testClass.getName()) ;
+    }
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestServlet.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestServlet.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/TestServlet.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,209 @@
+package com.jboss.transaction.wstf.test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Templates;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import junit.framework.TestResult;
+
+import com.jboss.transaction.wstf.interop.MessageLogging;
+import com.jboss.transaction.wstf.webservices.util.ClassLoaderHelper;
+
+/**
+ * The test servlet.
+ * @author kevin
+ */
+public class TestServlet extends HttpServlet
+{
+    /**
+     * The servlet serial version UID.
+     */
+    private static final long serialVersionUID = 6764303043215036856L ;
+    
+    /**
+     * The validation templates.
+     */
+    private Templates validationTemplates ;
+    
+    /**
+     * Initialise the servlet.
+     * @param config The servlet configuration.
+     */
+    public void init(final ServletConfig config)
+        throws ServletException
+    {
+        super.init(config) ;
+        
+        final InputStream is = ClassLoaderHelper.getResourceAsStream(getClass(), "processor.xsl") ;
+        if (is == null)
+        {
+            throw new ServletException("Cannot locate transformation stylesheet") ;
+        }
+        final TransformerFactory factory = TransformerFactory.newInstance() ;
+        try
+        {
+            validationTemplates = factory.newTemplates(new StreamSource(is)) ;
+        }
+        catch (final TransformerConfigurationException tce)
+        {
+            throw new ServletException("Error creating transformation template!", tce) ;
+        }
+    }
+    
+    /**
+     * Execute the test
+     * @param request The HTTP servlet request.
+     * @param response The HTTP servlet response.
+     */
+    protected void doPost(final HttpServletRequest request, final HttpServletResponse response)
+        throws ServletException, IOException
+    {
+        final String serviceURI = request.getParameter(TestConstants.PARAM_SERVICE_URI) ;
+        final String test = request.getParameter(TestConstants.PARAM_TEST) ;
+        final String testTimeoutValue = request.getParameter(TestConstants.PARAM_TEST_TIMEOUT) ;
+        // final String asyncTestValue = request.getParameter(TestConstants.PARAM_ASYNC_TEST) ;
+
+        final int serviceURILength = (serviceURI == null ? 0 : serviceURI.length()) ;
+        final int testLength = (test == null ? 0 : test.length()) ;
+        
+        long testTimeout = 0 ;
+        
+        boolean testTimeoutValid = false ;
+        if ((testTimeoutValue != null) && (testTimeoutValue.length() > 0))
+        {
+            try
+            {
+                testTimeout = Long.parseLong(testTimeoutValue) ;
+                testTimeoutValid = true ;
+            }
+            catch (final NumberFormatException nfe) {} // ignore
+        }
+        
+        // final boolean asyncTest = (asyncTestValue != null) ;
+        final boolean asyncTest = true ;
+
+        if ((serviceURILength == 0) || (testLength == 0) || !testTimeoutValid)
+        {
+            final RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/invalidParameters.html") ;
+            dispatcher.forward(request, response) ;
+            return ;
+        }
+        
+        final HttpSession session = request.getSession() ;
+        final String id = session.getId() ;
+        final int logCount = getLogCount(session) ;
+        final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss") ;
+        final String date = format.format(new Date()) ;
+        final String logName = date + "-" + id + "-" + logCount ;
+
+        session.setAttribute(TestConstants.ATTRIBUTE_TEST_RESULT, null) ;
+        session.setAttribute(TestConstants.ATTRIBUTE_TEST_VALIDATION, null) ;
+        session.setAttribute(TestConstants.ATTRIBUTE_LOG_NAME, null) ;
+
+        final String threadLog ;
+        try
+        {
+            final TestResult result = TestRunner.execute(serviceURI, testTimeout, asyncTest, test) ;
+            if (result != null)
+            {
+                session.setAttribute(TestConstants.ATTRIBUTE_TEST_RESULT, result) ;
+                
+                threadLog = MessageLogging.getThreadLog() ;
+                
+                try
+                {
+                    TestLogController.writeLog(logName, threadLog) ;
+                    session.setAttribute(TestConstants.ATTRIBUTE_LOG_NAME, logName) ;
+                }
+                catch (final IOException ioe)
+                {
+                    log("Unexpected IOException writing message log", ioe) ;
+                }
+            }
+            else
+            {
+                threadLog = null ;
+            }
+        }
+        finally
+        {
+            MessageLogging.clearThreadLog() ;
+        }
+        
+        if ((threadLog != null) && (threadLog.length() > 0))
+        {
+            try
+            {
+                final String testValidation = transform(threadLog) ;
+                session.setAttribute(TestConstants.ATTRIBUTE_TEST_VALIDATION, testValidation) ;
+            }
+            catch (final Throwable th)
+            {
+                log("Unexpected throwable transforming message log", th) ;
+            }
+        }
+
+        String forwardingURI;
+        if (test.indexOf("Sc002") > 0) {
+            forwardingURI = "/sc002/results.jsp";
+        } else if (test.indexOf("Sc003") > 0) {
+            forwardingURI = "/sc003/results.jsp";
+        } else {
+            // should never happen!
+            forwardingURI = "/";
+        }
+        final RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(forwardingURI) ;
+        dispatcher.forward(request, response) ;
+    }
+    
+    /**
+     * Get the log count from the session, incrementing afterwards.
+     * @param session The current HTTP session.
+     * @return The log count.
+     */
+    private int getLogCount(final HttpSession session)
+    {
+        final Object logCountObject = session.getAttribute(TestConstants.ATTRIBUTE_LOG_COUNT) ;
+        final int logCount = (logCountObject == null ? 1 : ((Integer)logCountObject).intValue() + 1) ;
+        session.setAttribute(TestConstants.ATTRIBUTE_LOG_COUNT, new Integer(logCount)) ;
+        return logCount ;
+    }
+    
+    /**
+     * Transform the specified message log.
+     * @param messageLog The specified message log.
+     * @return The transformed result.
+     * @throws TransformerConfigurationException For transformer configuration errors.
+     * @throws TransformerException The transformation errors.
+     */
+    private String transform(final String messageLog)
+        throws TransformerConfigurationException, TransformerException
+    {
+        final Source source = new StreamSource(new StringReader(messageLog)) ;
+        final Transformer transformer = validationTemplates.newTransformer() ;
+        final StringWriter writer = new StringWriter() ;
+        final Result result = new StreamResult(writer) ;
+        transformer.transform(source, result) ;
+        return writer.toString() ;
+    }
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/directoryContents.html
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/directoryContents.html	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/directoryContents.html	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,25 @@
+<html>
+  <head>
+    <title>JBoss Transaction WS-TX interop results</title>
+  </head>
+  <body>
+    <h1>WS-TX Interop results</h1>
+    <!--
+    <p>These log files are the results of executing the JBoss Transaction WS-TX Interop client against public endpoints</p>
+    <table>
+    <thead>
+    <tr><td>Endpoint</td><td>Log file</td></tr>
+    </thead>
+    <tbody>
+    <tr><td>JBoss</td><td><a href="jboss-jboss.xml">jboss-jboss.xml</a></td></tr>
+    <tr><td>IBM</td><td><a href="jboss-ibm.xml">jboss-ibm.xml</a></td></tr>
+    <tr><td>Sun</td><td><a href="jboss-sun.xml">jboss-sun.xml</a></td></tr>
+    <tr><td>Microsoft</td><td><a href="jboss-msft.xml">jboss-msft.xml</a></td></tr>
+    <tr><td>Apache</td><td><a href="jboss-apache.xml">jboss-apache.xml</a></td></tr>
+    <tr><td>WSO2</td><td><a href="jboss-wso2.xml">jboss-wso2.xml</a></td></tr>
+    </tbody>
+    </table>
+    -->
+    <p>Please send any queries to the <a href="mailto:adinn at redhat.com?subject=Log%20results%20query">wstf test contact</a></p>
+  </body>
+</html>

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/notFoundResponse.html
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/notFoundResponse.html	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/notFoundResponse.html	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,9 @@
+<html>
+  <head>
+    <title>Log file not found</title>
+  </head>
+  <body>
+    <h1>Log file not found</h1>
+    Requested log file could not be found
+  </body>
+</html>

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/processor.xsl
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/processor.xsl	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/test/processor.xsl	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,3 @@
+<xsl:transform
+  id = "empty" version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+</xsl:transform>
\ No newline at end of file

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/ServiceRegistry.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/ServiceRegistry.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/ServiceRegistry.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,92 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. 
+ * See the copyright.txt in the distribution for a full listing 
+ * of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ * 
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+package com.jboss.transaction.wstf.webservices;
+
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * A registry of service providers for the WSTF Test Services.
+ * @author kevin
+ */
+public class ServiceRegistry
+{
+    /**
+     * The registry singleton.
+     */
+    private static final ServiceRegistry REGISTRY = new ServiceRegistry() ;
+
+    /**
+     * The SOAP service provider registry.
+     */
+    private final Map<String, String> serviceProviderRegistry = new TreeMap<String, String>() ;
+
+    /**
+     * Get the service registry.
+     * @return The service registry.
+     */
+    public static ServiceRegistry getRegistry()
+    {
+        return REGISTRY ;
+    }
+
+    /**
+     * Register the specified service.
+     * @param serviceName The service name.
+     * @param url The service url.
+     */
+    public void registerServiceProvider(final String serviceName, final String url)
+    {
+        synchronized(serviceProviderRegistry)
+        {
+            serviceProviderRegistry.put(serviceName, url) ;
+        }
+    }
+
+    /**
+     * Remove the specified service.
+     * @param serviceName The service name.
+     */
+    public void removeServiceProvider(final String serviceName)
+    {
+        synchronized(serviceProviderRegistry)
+        {
+            serviceProviderRegistry.remove(serviceName) ;
+        }
+    }
+
+    /**
+     * Get the service URI.
+     * @param serviceName The service name.
+     * @return The service URI or null if not registered.
+     */
+    public String getServiceURI(final String serviceName)
+    {
+        String uri;
+
+        synchronized(serviceProviderRegistry)
+        {
+            uri = serviceProviderRegistry.get(serviceName) ;
+        }
+
+        return uri;
+    }
+}
\ No newline at end of file

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/Sc002Constants.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/Sc002Constants.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/Sc002Constants.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,69 @@
+package com.jboss.transaction.wstf.webservices.sc002;
+
+import javax.xml.namespace.QName;
+
+/**
+ * Interface containing WS-TX AT Interop constants.
+ */
+public interface Sc002Constants
+{
+    /**
+     * The sc002 test initiator service name.
+     */
+    final static public String SERVICE_SC002 = "Sc002Service" ;
+
+    /**
+     * The sc002 Namespace.
+     */
+    final static public String SC002_NAMESPACE = "http://www.wstf.org/docs/scenarios/sc002" ;
+    /**
+     * The sc002 namespace prefix.
+     */
+    final static public String SC002_PREFIX = "sc002" ;
+    /**
+     * The sc002 SOAP 1.1 port name.
+     */
+    final static public String SC002_SOAP11_PORT_NAME = "soap11port" ;
+
+    /**
+     * The sc002 SOAP 1.1 port qname.
+     */
+    final static public QName SC002_SOAP11_PORT_QNAME = new QName(SC002_NAMESPACE, SC002_SOAP11_PORT_NAME, SC002_PREFIX);
+
+    /**
+     * The sc002 SOAP 1.1 port name.
+     */
+    final static public String SC002_SOAP12_PORT_NAME = "soap12port" ;
+
+    /**
+     * The sc002 SOAP 1.1 port qname.
+     */
+    final static public QName SC002_SOAP12_PORT_QNAME = new QName(SC002_NAMESPACE, SC002_SOAP12_PORT_NAME, SC002_PREFIX);
+
+    /**
+     * The sc002 SessionID header name.
+     */
+    final static public String SC002_HEADER_SESSIONID_NAME = "SessionID" ;
+
+    /**
+     * The sc002 SessionID header qname.
+     */
+    final static public QName SC002_HEADER_SESSIONID_QNAME = new QName(SC002_NAMESPACE, SC002_HEADER_SESSIONID_NAME, SC002_PREFIX);
+
+    /**
+     * The sc002 TestMustUnderstand header name.
+     */
+    final static public String SC002_HEADER_TESTMU_NAME = "TestMU" ;
+
+    /**
+     * The sc002 TestMustUnderstand header qname.
+     */
+    final static public QName SC002_HEADER_TESTMU_QNAME = new QName(SC002_NAMESPACE, SC002_HEADER_TESTMU_NAME, SC002_PREFIX);
+
+    /**
+     * message context property used to identify conversation between client and server
+     */
+    
+    String SC002_CONVERSATION_IDENTIFIER = "conversation.identifier";
+    String SC002_ADDMU_HEADER = "add.must.understand.header";
+}
\ No newline at end of file

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/client/Sc002Client.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/client/Sc002Client.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/client/Sc002Client.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,61 @@
+package com.jboss.transaction.wstf.webservices.sc002.client;
+
+import org.wstf.docs.scenarios.sc002.Sc002Service;
+import org.wstf.docs.scenarios.sc002.Sc002Port;
+
+import javax.xml.ws.addressing.*;
+import javax.xml.ws.BindingProvider;
+import javax.xml.ws.handler.Handler;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+
+import com.jboss.transaction.wstf.webservices.sc002.Sc002Constants;
+import com.jboss.transaction.wstf.webservices.sc002.client.Sc002ClientHandler;
+
+/**
+ * class to provide access to Sc002 service fro Sc002 test code
+ */
+public class Sc002Client
+{
+    // TODO -- do we really need a thread local here or can we just use one service?
+    /**
+     *  thread local which maintains a per thread Sc002 service instance
+     */
+    private static ThreadLocal<Sc002Service> sc002Service = new ThreadLocal<Sc002Service>();
+
+    /**
+     *  builder used to construct addressing info for calls
+     */
+    private static AddressingBuilder builder = AddressingBuilder.getAddressingBuilder();
+
+    /**
+     * fetch an Sc002 service unique to the current thread
+     * @return
+     */
+    private static synchronized Sc002Service getSc002Service()
+    {
+        if (sc002Service.get() == null) {
+            sc002Service.set(new Sc002Service());
+        }
+        return sc002Service.get();
+    }
+
+    public static Sc002Port getSc002Port(String toUri, String conversationId, boolean addMUHeader)
+    {
+        // TODO - we need the 2.1 verison of Service so we can specify that we want to use the WS Addressing feature
+        Sc002Service service = getSc002Service();
+        Sc002Port port = service.getPort(Sc002Constants.SC002_SOAP11_PORT_QNAME, Sc002Port.class);
+        BindingProvider bindingProvider = (BindingProvider)port;
+        List<Handler> customHandlerChain = new ArrayList<Handler>();
+		customHandlerChain.add(new Sc002ClientHandler());
+        bindingProvider.getBinding().setHandlerChain(customHandlerChain);
+  
+        Map<String, Object> requestContext = bindingProvider.getRequestContext();
+        requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, toUri);
+        requestContext.put(Sc002Constants.SC002_CONVERSATION_IDENTIFIER, conversationId);
+        requestContext.put(Sc002Constants.SC002_ADDMU_HEADER, addMUHeader);
+
+        return port;
+    }
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/client/Sc002ClientHandler.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/client/Sc002ClientHandler.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/client/Sc002ClientHandler.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,163 @@
+package com.jboss.transaction.wstf.webservices.sc002.client;
+
+import com.jboss.transaction.wstf.webservices.sc002.Sc002Constants;
+import com.jboss.transaction.wstf.proxy.ProxyConversation;
+
+import javax.xml.ws.handler.soap.SOAPHandler;
+import javax.xml.ws.handler.soap.SOAPMessageContext;
+import javax.xml.ws.handler.MessageContext;
+import javax.xml.namespace.QName;
+import javax.xml.soap.*;
+import java.util.Set;
+import java.util.Collections;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+/**
+ */
+public class Sc002ClientHandler implements SOAPHandler<SOAPMessageContext>
+{
+    /**
+     * Gets the header blocks that can be processed by this Handler
+     * instance.
+     *
+     * @return Set of QNames of header blocks processed by this
+     *         handler instance. <code>QName</code> is the qualified
+     *         name of the outermost element of the Header block.
+     */
+    public Set<QName> getHeaders() {
+        return Collections.singleton(Sc002Constants.SC002_HEADER_SESSIONID_QNAME);
+    }
+
+    /**
+     * The <code>handleMessage</code> method is invoked for normal processing
+     * of inbound and outbound messages. Refer to the description of the handler
+     * framework in the JAX-WS specification for full details.
+     *
+     * @param context the message context.
+     * @return An indication of whether handler processing should continue for
+     *         the current message
+     *         <ul>
+     *         <li>Return <code>true</code> to continue
+     *         processing.</li>
+     *         <li>Return <code>false</code> to block
+     *         processing.</li>
+     *         </ul>
+     * @throws RuntimeException               Causes the JAX-WS runtime to cease
+     *                                        handler processing and generate a fault.
+     * @throws javax.xml.ws.ProtocolException Causes the JAX-WS runtime to switch to
+     *                                        fault message processing.
+     */
+    public boolean handleMessage(SOAPMessageContext context)
+    {
+        SOAPMessage message = context.getMessage();
+
+        handleMustUnderstand(context, message);
+        handleConversation(context, message);
+
+        return true;
+    }
+
+    /**
+     * The <code>handleFault</code> method is invoked for fault message
+     * processing.  Refer to the description of the handler
+     * framework in the JAX-WS specification for full details.
+     *
+     * @param context the message context
+     * @return An indication of whether handler fault processing should continue
+     *         for the current message
+     *         <ul>
+     *         <li>Return <code>true</code> to continue
+     *         processing.</li>
+     *         <li>Return <code>false</code> to block
+     *         processing.</li>
+     *         </ul>
+     * @throws RuntimeException               Causes the JAX-WS runtime to cease
+     *                                        handler fault processing and dispatch the fault.
+     * @throws javax.xml.ws.ProtocolException Causes the JAX-WS runtime to cease
+     *                                        handler fault processing and dispatch the fault.
+     */
+    public boolean handleFault(SOAPMessageContext context)
+    {
+        SOAPMessage message = context.getMessage();
+
+        // no need to add must understand ehaders for faults just append to the conversation
+        
+        handleConversation(context, message);
+
+        return true;
+    }
+
+    /**
+     * Called at the conclusion of a message exchange pattern just prior to
+     * the JAX-WS runtime disptaching a message, fault or exception.  Refer to
+     * the description of the handler
+     * framework in the JAX-WS specification for full details.
+     *
+     * @param context the message context
+     */
+    public void close(MessageContext context)
+    {
+        // do nothing
+    }
+
+    private void handleMustUnderstand(SOAPMessageContext context, SOAPMessage message)
+    {
+        // if this is outbound and the context contains a must understand property
+        // with value true then add a must understand header
+
+        Boolean isOutBound = (Boolean)context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
+
+        if (isOutBound != null && isOutBound) {
+            Boolean addMustUnderstand = (Boolean)context.get(Sc002Constants.SC002_ADDMU_HEADER);
+
+            if (addMustUnderstand != null && addMustUnderstand) {
+                try {
+                    SOAPPart soapPart = message.getSOAPPart();
+                    SOAPEnvelope envelope = soapPart.getEnvelope();
+                    SOAPHeader header = envelope.getHeader();
+                    if (header == null) {
+                        header = envelope.addHeader();
+                    }
+
+                    SOAPHeaderElement headerElement = header.addHeaderElement(Sc002Constants.SC002_HEADER_TESTMU_QNAME);
+                    headerElement.setMustUnderstand(true);
+                } catch (SOAPException e) {
+                    // just ignore
+                    System.out.println("soap exception adding must understand header : " + e);
+                }
+            }
+        }
+    }
+
+    private void handleConversation(SOAPMessageContext context, SOAPMessage message)
+    {
+        // update the conversation id if attached to the context or use the last one provided
+
+        String id = (String) context.get(Sc002Constants.SC002_CONVERSATION_IDENTIFIER);
+
+        if (id != null) {
+            conversationId = id;
+        }
+
+        if (conversationId != null) {
+            // add the message to the conversation log
+
+            // we need to add the message to the conversation as a string
+
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            try {
+                message.writeTo(baos);
+                String messageString = baos.toString();
+                ProxyConversation.appendConversation(conversationId, messageString);
+            } catch (SOAPException e) {
+                // print error and continue
+                ProxyConversation.appendConversation(conversationId, "<error> could not log message : " + e + "</error>");
+            } catch (IOException e) {
+                ProxyConversation.appendConversation(conversationId, "<error> could not log message : " + e + "</error>");
+            }
+        }
+    }
+
+    private String conversationId = null;
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/sei/Sc002PortImpl.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/sei/Sc002PortImpl.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/sei/Sc002PortImpl.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,399 @@
+package com.jboss.transaction.wstf.webservices.sc002.sei;
+
+import org.wstf.docs.scenarios.sc002.*;
+
+import javax.jws.*;
+import javax.jws.soap.SOAPBinding;
+import javax.xml.ws.WebServiceException;
+import javax.xml.ws.wsaddressing.W3CEndpointReference;
+import javax.xml.namespace.QName;
+import java.util.*;
+
+/**
+ * Imnplementation class for WSTF scenario sc002 port SEI Scoo2Port
+ */
+ at WebService(name = "sc002Port",
+        targetNamespace = "http://www.wstf.org/docs/scenarios/sc002",
+        wsdlLocation="/WEB-INF/wsdl/sc002.wsdl",
+        portName = "soap11port",
+        serviceName="sc002Service")
+ at SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
+// @HandlerChain(file="sc002handlers.xml")
+public class Sc002PortImpl implements Sc002Port
+{
+    /**
+     * @param sessionData
+     * @param begin
+     * @return returns org.wstf.docs.scenarios.sc002.BeginResponseType
+     */
+    @WebMethod(operationName = "Begin", action = "http://www.wstf.org/docs/scenarios/sc002/Begin")
+    @WebResult(name = "BeginResponse", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "BeginResponse")
+    public BeginResponseType begin(@WebParam(name = "Begin", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "Begin")
+    BeginType begin, @WebParam(name = "SessionData", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", header = true, partName = "SessionData")
+    SessionDataType sessionData) {
+        String id = sessionData.getID();
+        beginSession(id);
+        return new BeginResponseType();
+    }
+
+    /**
+     * @param sessionData
+     * @param notify
+     */
+    @WebMethod(operationName = "Notify", action = "http://www.wstf.org/docs/scenarios/sc002/Notify")
+    @Oneway
+    public void notify(@WebParam(name = "Notify", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "Notify")
+    NotifyType notify, @WebParam(name = "SessionData", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", header = true, partName = "SessionData")
+    SessionDataType sessionData) {
+        String id = sessionData.getID();
+        String text = notify.getText();
+        if (FAULTSTRING.equals(text)) {
+            throw new WebServiceException("faultingNotify");
+        } else {
+            notify(id, text);
+        }
+    }
+
+    /**
+     * @param sessionData
+     * @param echo
+     * @return returns org.wstf.docs.scenarios.sc002.EchoResponseType
+     */
+    @WebMethod(operationName = "Echo", action = "http://www.wstf.org/docs/scenarios/sc002/Echo")
+    @WebResult(name = "EchoResponse", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "EchoResponse")
+    public EchoResponseType echo(@WebParam(name = "Echo", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "Echo")
+    EchoType echo, @WebParam(name = "SessionData", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", header = true, partName = "SessionData")
+    SessionDataType sessionData) {
+        String id = sessionData.getID();
+        String text = echo.getText();
+        if (FAULTSTRING.equals(text)) {
+            throw new WebServiceException("faultingEcho");
+        } else {
+            String replyText = echo(id, text);
+            EchoResponseType response = new EchoResponseType();
+            response.setText(replyText);
+            return response;
+        }
+    }
+
+    /**
+     * @param sessionData
+     * @param end
+     * @return returns org.wstf.docs.scenarios.sc002.EndResponseType
+     */
+    @WebMethod(operationName = "End", action = "http://www.wstf.org/docs/scenarios/sc002/End")
+    @WebResult(name = "EndResponse", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "EndResponse")
+    public EndResponseType end(@WebParam(name = "End", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "End")
+    EndType end, @WebParam(name = "SessionData", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", header = true, partName = "SessionData")
+    SessionDataType sessionData) {
+        String id = sessionData.getID();
+        end(id);
+        return new EndResponseType();
+    }
+
+    /**
+     * @param sendMessages
+     * @return returns org.wstf.docs.scenarios.sc002.SendMessagesResponseType
+     */
+    @WebMethod(operationName = "SendMessages", action = "http://www.wstf.org/docs/scenarios/sc002/SendMessages")
+    @WebResult(name = "SendMessagesResponse", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "SendMessagesResponse")
+    public SendMessagesResponseType sendMessages(@WebParam(name = "SendMessages", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "SendMessages")
+    SendMessagesType sendMessages) {
+        W3CEndpointReference epr = sendMessages.getEpr();
+        SendMessagesType.Messages messages = sendMessages.getMessages();
+        messages(epr, messages);
+        return new SendMessagesResponseType();
+    }
+
+    /******************************************************************************************/
+    /* implementation of service                                                              */
+    /******************************************************************************************/
+
+    /**
+     * class used to respresent an active client session keyed by the session id supplied
+     * in the begin, echo, notify and end messages
+     */
+    class Session implements Comparable
+    {
+        /**
+         * timeout in milliseconds after which we may legitimately purge data associated
+         * with a given session
+         */
+        static final long TIMEOUT = 50 * 1000; // milliseconds
+        /**
+         * the key used to identify a session
+         */
+        private String id;
+        /**
+         * the text string accumulated from requests associated with this session
+         */
+        private String text;
+        /**
+         * the sytsem time (in milliseconds) after which this session can legitimately be purged
+         */
+        private long bestBefore; // system time in milliseconds
+
+        /**
+         * create a session with the given identifier
+         * @param id the session identifier
+         */
+        Session(String id)
+        {
+            this.id = id;
+            this.text = null;
+            this.bestBefore = System.currentTimeMillis() + TIMEOUT;
+        }
+
+        /**
+         * Compares this object with the specified object for order.  Returns a
+         * negative integer, zero, or a positive integer as this object is less
+         * than, equal to, or greater than the specified object.<p>
+         * <p/>
+         * In the foregoing description, the notation
+         * <tt>sgn(</tt><i>expression</i><tt>)</tt> designates the mathematical
+         * <i>signum</i> function, which is defined to return one of <tt>-1</tt>,
+         * <tt>0</tt>, or <tt>1</tt> according to whether the value of <i>expression</i>
+         * is negative, zero or positive.
+         * <p/>
+         * The implementor must ensure <tt>sgn(x.compareTo(y)) ==
+         * -sgn(y.compareTo(x))</tt> for all <tt>x</tt> and <tt>y</tt>.  (This
+         * implies that <tt>x.compareTo(y)</tt> must throw an exception iff
+         * <tt>y.compareTo(x)</tt> throws an exception.)<p>
+         * <p/>
+         * The implementor must also ensure that the relation is transitive:
+         * <tt>(x.compareTo(y)&gt;0 &amp;&amp; y.compareTo(z)&gt;0)</tt> implies
+         * <tt>x.compareTo(z)&gt;0</tt>.<p>
+         * <p/>
+         * Finally, the implementer must ensure that <tt>x.compareTo(y)==0</tt>
+         * implies that <tt>sgn(x.compareTo(z)) == sgn(y.compareTo(z))</tt>, for
+         * all <tt>z</tt>.<p>
+         * <p/>
+         * It is strongly recommended, but <i>not</i> strictly required that
+         * <tt>(x.compareTo(y)==0) == (x.equals(y))</tt>.  Generally speaking, any
+         * class that implements the <tt>Comparable</tt> interface and violates
+         * this condition should clearly indicate this fact.  The recommended
+         * language is "Note: this class has a natural ordering that is
+         * inconsistent with equals."
+         *
+         * @param o the Object to be compared.
+         * @return a negative integer, zero, or a positive integer as this object
+         *         is less than, equal to, or greater than the specified object.
+         * @throws ClassCastException if the specified object's type prevents it
+         *                            from being compared to this Object.
+         */
+        public int compareTo(Object o) {
+            Session other = (Session)o;
+
+            if (this.bestBefore < other.bestBefore) {
+                return -1;
+            }
+            if (this.bestBefore > other.bestBefore) {
+                return 1;
+            }
+
+            return 0;
+        }
+
+        /**
+         * get the identifier for this session
+         * @return the identifier for this session
+         */
+        public String getId()
+        {
+            return id;
+        }
+
+        /**
+         * get the text string accumulated from requests associated with this session or
+         * the empty string if no requests have been made yet
+         * @return the accumulated text
+         */
+        public synchronized String getText()
+        {
+            return (text == null ? "" : text);
+        }
+
+        /**
+         * append a string to the text string accumulated from requests associated with this
+         * session trimming any whitespace before appending it
+         * @param text the text to be trimmed and appended
+         * @return the new value of the accumulated text
+         */
+        public synchronized String appendText(String text)
+        {
+            this.text = (this.text == null ? text.trim() : this.text + text.trim());
+
+            return this.text;
+        }
+    }
+
+    /**
+     * a text string which causes a fault to be thrown when supplied as the argument to an
+     * echo or notify request
+     */
+    final private static String FAULTSTRING = "fault";
+    /**
+     * a map containing all currently active sessions keyed by session id
+     */
+    private static HashMap<String, Session> sessionMap = new HashMap<String, Session>();
+    /**
+     * a sorted set of all active sessions sorted by earliest bestBeforeDate
+     *
+     * n.b. updates to this map only occur when synchronized on sessionMap since both fields
+     * must always contain exactly the same set of elements
+     */
+    private SortedSet<Session> timeouts = new TreeSet<Session>();
+
+    /**
+     * implements the begin operation by ensuring that a session exists
+     * @param id the session to reate if not already present
+     */
+    private void beginSession(String id)
+    {
+        // n.b. we don't actually check that the session is not present although this is
+        // sort of implied in the spec
+        getSession(id);
+    }
+
+    /**
+     * implements the notify operation by creating a session if needed then appending the
+     * supplied text to it
+     * @param id the session with which the text is associated
+     * @param text the text to be appended to the session
+     */
+    private void notify(String id, String text)
+    {
+        Session session = getSession(id);
+
+        session.appendText(text);
+    }
+
+    /**
+     * implements the echo operation by creating a session if needed then appending the
+     * supplied text to it and returning the resulting text, purging the session on the
+     * way out.
+     * @param id the session with which the text is associated
+     * @param text the text to be appended to the session
+     * @return the accumulated text for the session
+     */
+    private String echo(String id, String text)
+    {
+        Session session = getSession(id);
+
+        String result = session.appendText(text);
+
+        // n.b. we don't concern ourselves with the possibility that a concurrent update
+        // to the session might happen before we can purge it
+
+        purgeSession(session);
+
+        return result;
+    }
+
+    /**
+     * implements the end operation by purging a session from the session map
+     * @param id the session to be purged
+     * @throws WebServiceException if the session is not found
+     */
+    private void end(String id) throws WebServiceException
+    {
+        Session session = getSession(id, false);
+        if (session != null) {
+            purgeSession(session);
+        } else {
+            throw new WebServiceException("unknown session " + id);
+        }
+    }
+
+    /**
+     * implements the sendMessages operation by queueing a task to post the messages to the
+     * supplied endpoint
+     * @param epr an endpoint which implements the required service/port
+     * @param messages the messages to be dispatched along with the service,
+     * port and operation name identifying the operation to be invoked.
+     */
+    private void messages(W3CEndpointReference epr, SendMessagesType.Messages messages)
+    {
+        final List<MessageType> messagesToDo = messages.getMessage();
+        Thread runner = new Thread() {
+            private List<MessageType> messages = messagesToDo;
+            public void run()
+            {
+                ListIterator<MessageType> iterator = messages.listIterator();
+                while (iterator.hasNext()) {
+                    MessageType message = iterator.next();
+                    QName serviceName = message.getService();
+                    String portName = message.getPort();
+                    String operationName = message.getOperation();
+                }
+            }
+        };
+    }
+
+    /**
+     * retrieve an existing session with the given id or create a new one if there is not
+     * one already present.
+     * @param id the id of the desired session
+     * @return  an existing session with the given id or a new one if there is not one
+     * already present.
+     */
+    private Session getSession(String id)
+    {
+        return getSession(id, true);
+    }
+
+    /**
+     * retrieve an existing session with the given id or else either create a new one if there
+     * is not one already present or return null depending upon whether create is, respectively,
+     * true or false.
+     * @param id the id of the desired session
+     * @param create true if a new session shoudl be created if none is found
+     * @return an existing session with the given id or a new one if there is not one
+     * already present and create is true or null if there is not one already present and
+     * create si false.
+     */
+    private Session getSession(String id, boolean create)
+    {
+        Session session;
+
+        synchronized (sessionMap) {
+            session = sessionMap.get(id);
+            if (session == null && create) {
+                session = new Session(id);
+                sessionMap.put(id, session);
+                timeouts.add(session);
+            }
+
+            // purge any timed out sessions while we are here
+
+            long timeNow = System.currentTimeMillis();
+
+            while (!timeouts.isEmpty()) {
+                Session first = timeouts.first();
+                if (first.bestBefore < timeNow) {
+                    sessionMap.remove(first);
+                    timeouts.remove(first);
+                } else {
+                    break;
+                }
+            }
+        }
+
+        return session;
+    }
+
+    /**
+     * remove a session from the session map and timeouts list if it is present and take
+     * the opportunity to garbage collect any sessions whose bestBeforeDtae has now expired.
+     * @param session
+     */
+    private void purgeSession(Session session)
+    {
+        synchronized (sessionMap) {
+            if (sessionMap.remove(session.getId()) != null) {
+                // means there must also be an entry in timeouts
+                timeouts.remove(session);
+            }
+        }
+    }
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/server/Sc002Initialisation.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/server/Sc002Initialisation.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/sc002/server/Sc002Initialisation.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,39 @@
+package com.jboss.transaction.wstf.webservices.sc002.server;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+import javax.servlet.ServletContext;
+
+import com.jboss.transaction.wstf.webservices.sc002.Sc002Constants;
+import com.jboss.transaction.wstf.webservices.ServiceRegistry;
+
+/**
+ * Initialise the interop initiator service.
+ * @author kevin
+ */
+public class Sc002Initialisation implements ServletContextListener
+{
+    /**
+     * The context has been initialized.
+     * @param servletContextEvent The servlet context event.
+     */
+    public void contextInitialized(final ServletContextEvent servletContextEvent)
+    {
+        ServletContext context = servletContextEvent.getServletContext();
+        String baseURI = context.getInitParameter("BaseURI");
+        final String uri = baseURI + "/sc002/Sc002Service";
+
+        final ServiceRegistry serviceRegistry = ServiceRegistry.getRegistry() ;
+        serviceRegistry.registerServiceProvider(Sc002Constants.SERVICE_SC002, uri) ;
+    }
+
+    /**
+     * The context is about to be destroyed.
+     * @param servletContextEvent The servlet context event.
+     */
+    public void contextDestroyed(final ServletContextEvent servletContextEvent)
+    {
+        final ServiceRegistry serviceRegistry = ServiceRegistry.getRegistry() ;
+        serviceRegistry.removeServiceProvider(Sc002Constants.SERVICE_SC002) ;
+    }
+}
\ No newline at end of file

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/util/ClassLoaderHelper.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/util/ClassLoaderHelper.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/com/jboss/transaction/wstf/webservices/util/ClassLoaderHelper.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,161 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. 
+ * See the copyright.txt in the distribution for a full listing 
+ * of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ * 
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+package com.jboss.transaction.wstf.webservices.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.URL;
+
+/**
+ * Utility class for classloading.
+ * @author kevin
+ */
+public class ClassLoaderHelper
+{
+    /**
+     * Attempt to load the named class.
+     * @param caller The caller's class.
+     * @param className The name of the class.
+     * @return The class
+     * @throws ClassNotFoundException If the class cannot be found.
+     */
+    public static Class forName(final Class caller, final String className)
+        throws ClassNotFoundException
+    {
+        final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader() ;
+        if (contextClassLoader != null)
+        {
+            try
+            {
+                return contextClassLoader.loadClass(className) ;
+            }
+            catch (final ClassNotFoundException cnfe) {} // Ignore
+        }
+        final ClassLoader callerClassLoader = caller.getClassLoader() ;
+        try
+        {
+            return callerClassLoader.loadClass(className) ;
+        }
+        catch (final ClassNotFoundException cnfe) {} // Ignore
+        return ClassLoader.getSystemClassLoader().loadClass(className) ;
+    }
+
+    /**
+     * Get the specified resource as a string.
+     * @param caller The caller's class.
+     * @param resource The resource name.
+     * @return The string or null if not found.
+     * @throws java.io.IOException for read errors.
+     */
+    public static String getResourceAsString(final Class caller, final String resource)
+        throws IOException
+    {
+        final InputStream is = getResourceAsStream(caller, resource) ;
+        if (is == null)
+        {
+            return null ;
+        }
+
+        final Reader reader = new InputStreamReader(is) ;
+        final StringBuffer stringBuffer = new StringBuffer() ;
+        final char[] buffer = new char[1024] ;
+        while(true)
+        {
+            final int count = reader.read(buffer) ;
+            if (count == -1)
+            {
+                break ;
+            }
+            stringBuffer.append(buffer, 0, count) ;
+        }
+        return stringBuffer.toString() ;
+    }
+
+    /**
+     * Get the specified resource as an input stream.
+     * @param caller The caller's class.
+     * @param resource The resource name.
+     * @return The input stream or null if not found.
+     */
+    public static InputStream getResourceAsStream(final Class caller, final String resource)
+    {
+        if ((resource == null) || (resource.length() == 0))
+        {
+            return null ;
+        }
+
+        final String absoluteResource ;
+        if (resource.charAt(0) == '/')
+        {
+            absoluteResource = resource ;
+        }
+        else
+        {
+            final String callerName = caller.getName() ;
+            final int lastSeparator = callerName.lastIndexOf('.') ;
+            if (lastSeparator == -1)
+            {
+                absoluteResource = '/' + resource ;
+            }
+            else
+            {
+                absoluteResource = '/' + callerName.substring(0, lastSeparator+1).replace('.', '/') + resource ;
+            }
+        }
+        final URL url = getResourceAsURL(caller, absoluteResource) ;
+        if (url != null)
+        {
+            try
+            {
+                return url.openStream() ;
+            }
+            catch (final IOException ioe) {}
+        }
+        return null ;
+    }
+
+    /**
+     * Get the specified resource as a URL.
+     * @param caller The caller's class.
+     * @param resource The resource name.
+     * @return The URL or null if not found.
+     */
+    public static URL getResourceAsURL(final Class caller, final String resource)
+    {
+        final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader() ;
+        if (contextClassLoader != null)
+        {
+            final URL contextURL = contextClassLoader.getResource(resource) ;
+            if (contextURL != null)
+            {
+                return contextURL ;
+            }
+        }
+        final URL callerURL = caller.getResource(resource) ;
+        if (callerURL != null)
+        {
+            return callerURL ;
+        }
+        return ClassLoader.getSystemResource(resource) ;
+    }
+}
\ No newline at end of file

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/BeginResponseType.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/BeginResponseType.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/BeginResponseType.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,71 @@
+
+package org.wstf.docs.scenarios.sc002;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlType;
+import org.w3c.dom.Element;
+
+
+/**
+ * <p>Java class for BeginResponseType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="BeginResponseType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;any/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+ at XmlAccessorType(XmlAccessType.FIELD)
+ at XmlType(name = "BeginResponseType", propOrder = {
+    "any"
+})
+public class BeginResponseType {
+
+    @XmlAnyElement(lax = true)
+    protected List<Object> any;
+
+    /**
+     * Gets the value of the any property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the any property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getAny().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link org.w3c.dom.Element }
+     * {@link Object }
+     * 
+     * 
+     */
+    public List<Object> getAny() {
+        if (any == null) {
+            any = new ArrayList<Object>();
+        }
+        return this.any;
+    }
+
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/BeginType.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/BeginType.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/BeginType.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,71 @@
+
+package org.wstf.docs.scenarios.sc002;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlType;
+import org.w3c.dom.Element;
+
+
+/**
+ * <p>Java class for BeginType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="BeginType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;any/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+ at XmlAccessorType(XmlAccessType.FIELD)
+ at XmlType(name = "BeginType", propOrder = {
+    "any"
+})
+public class BeginType {
+
+    @XmlAnyElement(lax = true)
+    protected List<Object> any;
+
+    /**
+     * Gets the value of the any property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the any property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getAny().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link org.w3c.dom.Element }
+     * {@link Object }
+     * 
+     * 
+     */
+    public List<Object> getAny() {
+        if (any == null) {
+            any = new ArrayList<Object>();
+        }
+        return this.any;
+    }
+
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/EchoResponseType.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/EchoResponseType.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/EchoResponseType.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,100 @@
+
+package org.wstf.docs.scenarios.sc002;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import org.w3c.dom.Element;
+
+
+/**
+ * <p>Java class for EchoResponseType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="EchoResponseType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="text" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;any/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+ at XmlAccessorType(XmlAccessType.FIELD)
+ at XmlType(name = "EchoResponseType", propOrder = {
+    "text",
+    "any"
+})
+public class EchoResponseType {
+
+    @XmlElement(required = true)
+    protected String text;
+    @XmlAnyElement(lax = true)
+    protected List<Object> any;
+
+    /**
+     * Gets the value of the text property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * Sets the value of the text property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setText(String value) {
+        this.text = value;
+    }
+
+    /**
+     * Gets the value of the any property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the any property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getAny().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link org.w3c.dom.Element }
+     * {@link Object }
+     * 
+     * 
+     */
+    public List<Object> getAny() {
+        if (any == null) {
+            any = new ArrayList<Object>();
+        }
+        return this.any;
+    }
+
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/EchoType.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/EchoType.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/EchoType.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,100 @@
+
+package org.wstf.docs.scenarios.sc002;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import org.w3c.dom.Element;
+
+
+/**
+ * <p>Java class for EchoType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="EchoType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="text" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;any/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+ at XmlAccessorType(XmlAccessType.FIELD)
+ at XmlType(name = "EchoType", propOrder = {
+    "text",
+    "any"
+})
+public class EchoType {
+
+    @XmlElement(required = true)
+    protected String text;
+    @XmlAnyElement(lax = true)
+    protected List<Object> any;
+
+    /**
+     * Gets the value of the text property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * Sets the value of the text property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setText(String value) {
+        this.text = value;
+    }
+
+    /**
+     * Gets the value of the any property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the any property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getAny().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link org.w3c.dom.Element }
+     * {@link Object }
+     * 
+     * 
+     */
+    public List<Object> getAny() {
+        if (any == null) {
+            any = new ArrayList<Object>();
+        }
+        return this.any;
+    }
+
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/EndResponseType.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/EndResponseType.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/EndResponseType.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,71 @@
+
+package org.wstf.docs.scenarios.sc002;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlType;
+import org.w3c.dom.Element;
+
+
+/**
+ * <p>Java class for EndResponseType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="EndResponseType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;any/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+ at XmlAccessorType(XmlAccessType.FIELD)
+ at XmlType(name = "EndResponseType", propOrder = {
+    "any"
+})
+public class EndResponseType {
+
+    @XmlAnyElement(lax = true)
+    protected List<Object> any;
+
+    /**
+     * Gets the value of the any property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the any property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getAny().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link org.w3c.dom.Element }
+     * {@link Object }
+     * 
+     * 
+     */
+    public List<Object> getAny() {
+        if (any == null) {
+            any = new ArrayList<Object>();
+        }
+        return this.any;
+    }
+
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/EndType.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/EndType.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/EndType.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,71 @@
+
+package org.wstf.docs.scenarios.sc002;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlType;
+import org.w3c.dom.Element;
+
+
+/**
+ * <p>Java class for EndType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="EndType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;any/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+ at XmlAccessorType(XmlAccessType.FIELD)
+ at XmlType(name = "EndType", propOrder = {
+    "any"
+})
+public class EndType {
+
+    @XmlAnyElement(lax = true)
+    protected List<Object> any;
+
+    /**
+     * Gets the value of the any property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the any property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getAny().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link org.w3c.dom.Element }
+     * {@link Object }
+     * 
+     * 
+     */
+    public List<Object> getAny() {
+        if (any == null) {
+            any = new ArrayList<Object>();
+        }
+        return this.any;
+    }
+
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/MessageType.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/MessageType.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/MessageType.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,162 @@
+
+package org.wstf.docs.scenarios.sc002;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.namespace.QName;
+import org.w3c.dom.Element;
+
+
+/**
+ * <p>Java class for MessageType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="MessageType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="service" type="{http://www.w3.org/2001/XMLSchema}QName"/>
+ *         &lt;element name="port" type="{http://www.w3.org/2001/XMLSchema}NCName"/>
+ *         &lt;element name="operation" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;any/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+ at XmlAccessorType(XmlAccessType.FIELD)
+ at XmlType(name = "MessageType", propOrder = {
+    "service",
+    "port",
+    "operation",
+    "any"
+})
+public class MessageType {
+
+    @XmlElement(required = true)
+    protected QName service;
+    @XmlElement(required = true)
+    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
+    @XmlSchemaType(name = "NCName")
+    protected String port;
+    @XmlElement(required = true)
+    protected String operation;
+    @XmlAnyElement(lax = true)
+    protected List<Object> any;
+
+    /**
+     * Gets the value of the service property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link javax.xml.namespace.QName }
+     *     
+     */
+    public QName getService() {
+        return service;
+    }
+
+    /**
+     * Sets the value of the service property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link javax.xml.namespace.QName }
+     *     
+     */
+    public void setService(QName value) {
+        this.service = value;
+    }
+
+    /**
+     * Gets the value of the port property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getPort() {
+        return port;
+    }
+
+    /**
+     * Sets the value of the port property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setPort(String value) {
+        this.port = value;
+    }
+
+    /**
+     * Gets the value of the operation property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getOperation() {
+        return operation;
+    }
+
+    /**
+     * Sets the value of the operation property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setOperation(String value) {
+        this.operation = value;
+    }
+
+    /**
+     * Gets the value of the any property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the any property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getAny().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link org.w3c.dom.Element }
+     * {@link Object }
+     * 
+     * 
+     */
+    public List<Object> getAny() {
+        if (any == null) {
+            any = new ArrayList<Object>();
+        }
+        return this.any;
+    }
+
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/NotifyType.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/NotifyType.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/NotifyType.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,100 @@
+
+package org.wstf.docs.scenarios.sc002;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import org.w3c.dom.Element;
+
+
+/**
+ * <p>Java class for NotifyType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="NotifyType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="text" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;any/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+ at XmlAccessorType(XmlAccessType.FIELD)
+ at XmlType(name = "NotifyType", propOrder = {
+    "text",
+    "any"
+})
+public class NotifyType {
+
+    @XmlElement(required = true)
+    protected String text;
+    @XmlAnyElement(lax = true)
+    protected List<Object> any;
+
+    /**
+     * Gets the value of the text property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * Sets the value of the text property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setText(String value) {
+        this.text = value;
+    }
+
+    /**
+     * Gets the value of the any property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the any property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getAny().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link org.w3c.dom.Element }
+     * {@link Object }
+     * 
+     * 
+     */
+    public List<Object> getAny() {
+        if (any == null) {
+            any = new ArrayList<Object>();
+        }
+        return this.any;
+    }
+
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/ObjectFactory.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/ObjectFactory.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/ObjectFactory.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,231 @@
+
+package org.wstf.docs.scenarios.sc002;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlElementDecl;
+import javax.xml.bind.annotation.XmlRegistry;
+import javax.xml.namespace.QName;
+
+
+/**
+ * This object contains factory methods for each 
+ * Java content interface and Java element interface 
+ * generated in the org.wstf.docs.scenarios.sc002 package. 
+ * <p>An ObjectFactory allows you to programatically 
+ * construct new instances of the Java representation 
+ * for XML content. The Java representation of XML 
+ * content can consist of schema derived interfaces 
+ * and classes representing the binding of schema 
+ * type definitions, element declarations and model 
+ * groups.  Factory methods for each of these are 
+ * provided in this class.
+ * 
+ */
+ at XmlRegistry
+public class ObjectFactory {
+
+    private final static QName _SessionData_QNAME = new QName("http://www.wstf.org/docs/scenarios/sc002", "SessionData");
+    private final static QName _EndResponse_QNAME = new QName("http://www.wstf.org/docs/scenarios/sc002", "EndResponse");
+    private final static QName _End_QNAME = new QName("http://www.wstf.org/docs/scenarios/sc002", "End");
+    private final static QName _Echo_QNAME = new QName("http://www.wstf.org/docs/scenarios/sc002", "Echo");
+    private final static QName _BeginResponse_QNAME = new QName("http://www.wstf.org/docs/scenarios/sc002", "BeginResponse");
+    private final static QName _EchoResponse_QNAME = new QName("http://www.wstf.org/docs/scenarios/sc002", "EchoResponse");
+    private final static QName _SendMessages_QNAME = new QName("http://www.wstf.org/docs/scenarios/sc002", "SendMessages");
+    private final static QName _Begin_QNAME = new QName("http://www.wstf.org/docs/scenarios/sc002", "Begin");
+    private final static QName _Notify_QNAME = new QName("http://www.wstf.org/docs/scenarios/sc002", "Notify");
+    private final static QName _SendMessagesResponse_QNAME = new QName("http://www.wstf.org/docs/scenarios/sc002", "SendMessagesResponse");
+
+    /**
+     * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: org.wstf.docs.scenarios.sc002
+     * 
+     */
+    public ObjectFactory() {
+    }
+
+    /**
+     * Create an instance of {@link org.wstf.docs.scenarios.sc002.EndType }
+     * 
+     */
+    public EndType createEndType() {
+        return new EndType();
+    }
+
+    /**
+     * Create an instance of {@link org.wstf.docs.scenarios.sc002.EchoType }
+     * 
+     */
+    public EchoType createEchoType() {
+        return new EchoType();
+    }
+
+    /**
+     * Create an instance of {@link org.wstf.docs.scenarios.sc002.SendMessagesType.Messages }
+     * 
+     */
+    public SendMessagesType.Messages createSendMessagesTypeMessages() {
+        return new SendMessagesType.Messages();
+    }
+
+    /**
+     * Create an instance of {@link org.wstf.docs.scenarios.sc002.BeginType }
+     * 
+     */
+    public BeginType createBeginType() {
+        return new BeginType();
+    }
+
+    /**
+     * Create an instance of {@link org.wstf.docs.scenarios.sc002.BeginResponseType }
+     * 
+     */
+    public BeginResponseType createBeginResponseType() {
+        return new BeginResponseType();
+    }
+
+    /**
+     * Create an instance of {@link org.wstf.docs.scenarios.sc002.EchoResponseType }
+     * 
+     */
+    public EchoResponseType createEchoResponseType() {
+        return new EchoResponseType();
+    }
+
+    /**
+     * Create an instance of {@link org.wstf.docs.scenarios.sc002.MessageType }
+     * 
+     */
+    public MessageType createMessageType() {
+        return new MessageType();
+    }
+
+    /**
+     * Create an instance of {@link org.wstf.docs.scenarios.sc002.EndResponseType }
+     * 
+     */
+    public EndResponseType createEndResponseType() {
+        return new EndResponseType();
+    }
+
+    /**
+     * Create an instance of {@link org.wstf.docs.scenarios.sc002.SendMessagesResponseType }
+     * 
+     */
+    public SendMessagesResponseType createSendMessagesResponseType() {
+        return new SendMessagesResponseType();
+    }
+
+    /**
+     * Create an instance of {@link org.wstf.docs.scenarios.sc002.SendMessagesType }
+     * 
+     */
+    public SendMessagesType createSendMessagesType() {
+        return new SendMessagesType();
+    }
+
+    /**
+     * Create an instance of {@link org.wstf.docs.scenarios.sc002.NotifyType }
+     * 
+     */
+    public NotifyType createNotifyType() {
+        return new NotifyType();
+    }
+
+    /**
+     * Create an instance of {@link SessionDataType }
+     * 
+     */
+    public SessionDataType createSessionDataType() {
+        return new SessionDataType();
+    }
+
+    /**
+     * Create an instance of {@link javax.xml.bind.JAXBElement }{@code <}{@link SessionDataType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://www.wstf.org/docs/scenarios/sc002", name = "SessionData")
+    public JAXBElement<SessionDataType> createSessionData(SessionDataType value) {
+        return new JAXBElement<SessionDataType>(_SessionData_QNAME, SessionDataType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link javax.xml.bind.JAXBElement }{@code <}{@link org.wstf.docs.scenarios.sc002.EndResponseType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://www.wstf.org/docs/scenarios/sc002", name = "EndResponse")
+    public JAXBElement<EndResponseType> createEndResponse(EndResponseType value) {
+        return new JAXBElement<EndResponseType>(_EndResponse_QNAME, EndResponseType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link javax.xml.bind.JAXBElement }{@code <}{@link org.wstf.docs.scenarios.sc002.EndType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://www.wstf.org/docs/scenarios/sc002", name = "End")
+    public JAXBElement<EndType> createEnd(EndType value) {
+        return new JAXBElement<EndType>(_End_QNAME, EndType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link javax.xml.bind.JAXBElement }{@code <}{@link org.wstf.docs.scenarios.sc002.EchoType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://www.wstf.org/docs/scenarios/sc002", name = "Echo")
+    public JAXBElement<EchoType> createEcho(EchoType value) {
+        return new JAXBElement<EchoType>(_Echo_QNAME, EchoType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link javax.xml.bind.JAXBElement }{@code <}{@link org.wstf.docs.scenarios.sc002.BeginResponseType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://www.wstf.org/docs/scenarios/sc002", name = "BeginResponse")
+    public JAXBElement<BeginResponseType> createBeginResponse(BeginResponseType value) {
+        return new JAXBElement<BeginResponseType>(_BeginResponse_QNAME, BeginResponseType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link javax.xml.bind.JAXBElement }{@code <}{@link org.wstf.docs.scenarios.sc002.EchoResponseType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://www.wstf.org/docs/scenarios/sc002", name = "EchoResponse")
+    public JAXBElement<EchoResponseType> createEchoResponse(EchoResponseType value) {
+        return new JAXBElement<EchoResponseType>(_EchoResponse_QNAME, EchoResponseType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link javax.xml.bind.JAXBElement }{@code <}{@link org.wstf.docs.scenarios.sc002.SendMessagesType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://www.wstf.org/docs/scenarios/sc002", name = "SendMessages")
+    public JAXBElement<SendMessagesType> createSendMessages(SendMessagesType value) {
+        return new JAXBElement<SendMessagesType>(_SendMessages_QNAME, SendMessagesType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link javax.xml.bind.JAXBElement }{@code <}{@link org.wstf.docs.scenarios.sc002.BeginType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://www.wstf.org/docs/scenarios/sc002", name = "Begin")
+    public JAXBElement<BeginType> createBegin(BeginType value) {
+        return new JAXBElement<BeginType>(_Begin_QNAME, BeginType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link javax.xml.bind.JAXBElement }{@code <}{@link org.wstf.docs.scenarios.sc002.NotifyType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://www.wstf.org/docs/scenarios/sc002", name = "Notify")
+    public JAXBElement<NotifyType> createNotify(NotifyType value) {
+        return new JAXBElement<NotifyType>(_Notify_QNAME, NotifyType.class, null, value);
+    }
+
+    /**
+     * Create an instance of {@link javax.xml.bind.JAXBElement }{@code <}{@link org.wstf.docs.scenarios.sc002.SendMessagesResponseType }{@code >}}
+     * 
+     */
+    @XmlElementDecl(namespace = "http://www.wstf.org/docs/scenarios/sc002", name = "SendMessagesResponse")
+    public JAXBElement<SendMessagesResponseType> createSendMessagesResponse(SendMessagesResponseType value) {
+        return new JAXBElement<SendMessagesResponseType>(_SendMessagesResponse_QNAME, SendMessagesResponseType.class, null, value);
+    }
+
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/Sc002Port.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/Sc002Port.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/Sc002Port.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,93 @@
+
+package org.wstf.docs.scenarios.sc002;
+
+import javax.jws.Oneway;
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebResult;
+import javax.jws.WebService;
+import javax.jws.soap.SOAPBinding;
+
+
+/**
+ * This class was generated by the JAX-WS RI.
+ * JAX-WS RI 2.1.2-hudson-182-RC1
+ * Generated source version: 2.0
+ * 
+ */
+ at WebService(name = "sc002Port", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002")
+ at SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
+public interface Sc002Port {
+
+
+    /**
+     * 
+     * @param sessionData
+     * @param begin
+     * @return
+     *     returns org.wstf.docs.scenarios.sc002.BeginResponseType
+     */
+    @WebMethod(operationName = "Begin", action = "http://www.wstf.org/docs/scenarios/sc002/Begin")
+    @WebResult(name = "BeginResponse", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "BeginResponse")
+    public BeginResponseType begin(
+        @WebParam(name = "Begin", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "Begin")
+        BeginType begin,
+        @WebParam(name = "SessionData", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", header = true, partName = "SessionData")
+        SessionDataType sessionData);
+
+    /**
+     * 
+     * @param sessionData
+     * @param notify
+     */
+    @WebMethod(operationName = "Notify", action = "http://www.wstf.org/docs/scenarios/sc002/Notify")
+    @Oneway
+    public void notify(
+        @WebParam(name = "Notify", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "Notify")
+        NotifyType notify,
+        @WebParam(name = "SessionData", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", header = true, partName = "SessionData")
+        SessionDataType sessionData);
+
+    /**
+     * 
+     * @param sessionData
+     * @param echo
+     * @return
+     *     returns org.wstf.docs.scenarios.sc002.EchoResponseType
+     */
+    @WebMethod(operationName = "Echo", action = "http://www.wstf.org/docs/scenarios/sc002/Echo")
+    @WebResult(name = "EchoResponse", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "EchoResponse")
+    public EchoResponseType echo(
+        @WebParam(name = "Echo", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "Echo")
+        EchoType echo,
+        @WebParam(name = "SessionData", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", header = true, partName = "SessionData")
+        SessionDataType sessionData);
+
+    /**
+     * 
+     * @param sessionData
+     * @param end
+     * @return
+     *     returns org.wstf.docs.scenarios.sc002.EndResponseType
+     */
+    @WebMethod(operationName = "End", action = "http://www.wstf.org/docs/scenarios/sc002/End")
+    @WebResult(name = "EndResponse", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "EndResponse")
+    public EndResponseType end(
+        @WebParam(name = "End", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "End")
+        EndType end,
+        @WebParam(name = "SessionData", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", header = true, partName = "SessionData")
+        SessionDataType sessionData);
+
+    /**
+     * 
+     * @param sendMessages
+     * @return
+     *     returns org.wstf.docs.scenarios.sc002.SendMessagesResponseType
+     */
+    @WebMethod(operationName = "SendMessages", action = "http://www.wstf.org/docs/scenarios/sc002/SendMessages")
+    @WebResult(name = "SendMessagesResponse", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "SendMessagesResponse")
+    public SendMessagesResponseType sendMessages(
+        @WebParam(name = "SendMessages", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "SendMessages")
+        SendMessagesType sendMessages);
+
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/Sc002Service.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/Sc002Service.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/Sc002Service.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,68 @@
+
+package org.wstf.docs.scenarios.sc002;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.logging.Logger;
+import javax.xml.namespace.QName;
+import javax.xml.ws.Service;
+import javax.xml.ws.WebEndpoint;
+import javax.xml.ws.WebServiceClient;
+
+
+/**
+ * This class was generated by the JAX-WS RI.
+ * JAX-WS RI 2.1.2-hudson-182-RC1
+ * Generated source version: 2.0
+ * 
+ */
+ at WebServiceClient(name = "sc002Service", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", wsdlLocation = "wsdl/sc002.wsdl")
+public class Sc002Service
+    extends Service
+{
+
+    private final static URL SC002SERVICE_WSDL_LOCATION;
+    private final static Logger logger = Logger.getLogger(Sc002Service.class.getName());
+
+    static {
+        URL url = null;
+        try {
+            URL baseUrl;
+            baseUrl = Sc002Service.class.getResource(".");
+            url = new URL(baseUrl, "wsdl/sc002.wsdl");
+        } catch (MalformedURLException e) {
+            logger.warning("Failed to create URL for the wsdl Location: 'wsdl/sc002.wsdl', retrying as a local file");
+            logger.warning(e.getMessage());
+        }
+        SC002SERVICE_WSDL_LOCATION = url;
+    }
+
+    public Sc002Service(URL wsdlLocation, QName serviceName) {
+        super(wsdlLocation, serviceName);
+    }
+
+    public Sc002Service() {
+        super(SC002SERVICE_WSDL_LOCATION, new QName("http://www.wstf.org/docs/scenarios/sc002", "sc002Service"));
+    }
+
+    /**
+     * 
+     * @return
+     *     returns Sc002Port
+     */
+    @WebEndpoint(name = "soap11port")
+    public Sc002Port getSoap11Port() {
+        return super.getPort(new QName("http://www.wstf.org/docs/scenarios/sc002", "soap11port"), Sc002Port.class);
+    }
+
+    /**
+     * 
+     * @return
+     *     returns Sc002Port
+     */
+    @WebEndpoint(name = "soap12port")
+    public Sc002Port getSoap12Port() {
+        return super.getPort(new QName("http://www.wstf.org/docs/scenarios/sc002", "soap12port"), Sc002Port.class);
+    }
+
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/SendMessagesResponseType.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/SendMessagesResponseType.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/SendMessagesResponseType.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,71 @@
+
+package org.wstf.docs.scenarios.sc002;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlType;
+import org.w3c.dom.Element;
+
+
+/**
+ * <p>Java class for SendMessagesResponseType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="SendMessagesResponseType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;any/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+ at XmlAccessorType(XmlAccessType.FIELD)
+ at XmlType(name = "SendMessagesResponseType", propOrder = {
+    "any"
+})
+public class SendMessagesResponseType {
+
+    @XmlAnyElement(lax = true)
+    protected List<Object> any;
+
+    /**
+     * Gets the value of the any property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the any property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getAny().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link org.w3c.dom.Element }
+     * {@link Object }
+     * 
+     * 
+     */
+    public List<Object> getAny() {
+        if (any == null) {
+            any = new ArrayList<Object>();
+        }
+        return this.any;
+    }
+
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/SendMessagesType.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/SendMessagesType.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/SendMessagesType.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,199 @@
+
+package org.wstf.docs.scenarios.sc002;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.ws.wsaddressing.W3CEndpointReference;
+import org.w3c.dom.Element;
+
+
+/**
+ * <p>Java class for SendMessagesType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="SendMessagesType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="epr" type="{http://www.w3.org/2005/08/addressing}EndpointReferenceType"/>
+ *         &lt;element name="messages">
+ *           &lt;complexType>
+ *             &lt;complexContent>
+ *               &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                 &lt;sequence>
+ *                   &lt;element name="message" type="{http://www.wstf.org/docs/scenarios/sc002}MessageType" maxOccurs="unbounded"/>
+ *                 &lt;/sequence>
+ *               &lt;/restriction>
+ *             &lt;/complexContent>
+ *           &lt;/complexType>
+ *         &lt;/element>
+ *         &lt;any/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+ at XmlAccessorType(XmlAccessType.FIELD)
+ at XmlType(name = "SendMessagesType", propOrder = {
+    "epr",
+    "messages",
+    "any"
+})
+public class SendMessagesType {
+
+    @XmlElement(required = true)
+    protected W3CEndpointReference epr;
+    @XmlElement(required = true)
+    protected Messages messages;
+    @XmlAnyElement(lax = true)
+    protected List<Object> any;
+
+    /**
+     * Gets the value of the epr property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link javax.xml.ws.wsaddressing.W3CEndpointReference }
+     *     
+     */
+    public W3CEndpointReference getEpr() {
+        return epr;
+    }
+
+    /**
+     * Sets the value of the epr property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link javax.xml.ws.wsaddressing.W3CEndpointReference }
+     *     
+     */
+    public void setEpr(W3CEndpointReference value) {
+        this.epr = value;
+    }
+
+    /**
+     * Gets the value of the messages property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link org.wstf.docs.scenarios.sc002.SendMessagesType.Messages }
+     *     
+     */
+    public Messages getMessages() {
+        return messages;
+    }
+
+    /**
+     * Sets the value of the messages property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link org.wstf.docs.scenarios.sc002.SendMessagesType.Messages }
+     *     
+     */
+    public void setMessages(Messages value) {
+        this.messages = value;
+    }
+
+    /**
+     * Gets the value of the any property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the any property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getAny().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link org.w3c.dom.Element }
+     * {@link Object }
+     * 
+     * 
+     */
+    public List<Object> getAny() {
+        if (any == null) {
+            any = new ArrayList<Object>();
+        }
+        return this.any;
+    }
+
+
+    /**
+     * <p>Java class for anonymous complex type.
+     * 
+     * <p>The following schema fragment specifies the expected content contained within this class.
+     * 
+     * <pre>
+     * &lt;complexType>
+     *   &lt;complexContent>
+     *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       &lt;sequence>
+     *         &lt;element name="message" type="{http://www.wstf.org/docs/scenarios/sc002}MessageType" maxOccurs="unbounded"/>
+     *       &lt;/sequence>
+     *     &lt;/restriction>
+     *   &lt;/complexContent>
+     * &lt;/complexType>
+     * </pre>
+     * 
+     * 
+     */
+    @XmlAccessorType(XmlAccessType.FIELD)
+    @XmlType(name = "", propOrder = {
+        "message"
+    })
+    public static class Messages {
+
+        @XmlElement(required = true)
+        protected List<MessageType> message;
+
+        /**
+         * Gets the value of the message property.
+         * 
+         * <p>
+         * This accessor method returns a reference to the live list,
+         * not a snapshot. Therefore any modification you make to the
+         * returned list will be present inside the JAXB object.
+         * This is why there is not a <CODE>set</CODE> method for the message property.
+         * 
+         * <p>
+         * For example, to add a new item, do as follows:
+         * <pre>
+         *    getMessage().add(newItem);
+         * </pre>
+         * 
+         * 
+         * <p>
+         * Objects of the following type(s) are allowed in the list
+         * {@link MessageType }
+         * 
+         * 
+         */
+        public List<MessageType> getMessage() {
+            if (message == null) {
+                message = new ArrayList<MessageType>();
+            }
+            return this.message;
+        }
+
+    }
+
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/SessionDataType.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/SessionDataType.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/SessionDataType.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,100 @@
+
+package org.wstf.docs.scenarios.sc002;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import org.w3c.dom.Element;
+
+
+/**
+ * <p>Java class for SessionDataType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="SessionDataType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="ID" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;any/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+ at XmlAccessorType(XmlAccessType.FIELD)
+ at XmlType(name = "SessionDataType", propOrder = {
+    "id",
+    "any"
+})
+public class SessionDataType {
+
+    @XmlElement(name = "ID", required = true)
+    protected String id;
+    @XmlAnyElement(lax = true)
+    protected List<Object> any;
+
+    /**
+     * Gets the value of the id property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getID() {
+        return id;
+    }
+
+    /**
+     * Sets the value of the id property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setID(String value) {
+        this.id = value;
+    }
+
+    /**
+     * Gets the value of the any property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the any property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getAny().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link org.w3c.dom.Element }
+     * {@link Object }
+     * 
+     * 
+     */
+    public List<Object> getAny() {
+        if (any == null) {
+            any = new ArrayList<Object>();
+        }
+        return this.any;
+    }
+
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/package-info.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/package-info.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc002/package-info.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,2 @@
+ at javax.xml.bind.annotation.XmlSchema(namespace = "http://www.wstf.org/docs/scenarios/sc002", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
+package org.wstf.docs.scenarios.sc002;

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc003/Sc003Port.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc003/Sc003Port.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc003/Sc003Port.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,59 @@
+
+package org.wstf.docs.scenarios.sc003;
+
+import javax.jws.Oneway;
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebResult;
+import javax.jws.WebService;
+import javax.jws.soap.SOAPBinding;
+import org.wstf.docs.scenarios.sc002.EchoResponseType;
+import org.wstf.docs.scenarios.sc002.EchoType;
+import org.wstf.docs.scenarios.sc002.NotifyType;
+import org.wstf.docs.scenarios.sc002.SessionDataType;
+
+
+/**
+ * This class was generated by the JAX-WS RI.
+ * JAX-WS RI 2.1.2-hudson-182-RC1
+ * Generated source version: 2.0
+ * 
+ */
+ at WebService(name = "sc003Port", targetNamespace = "http://www.wstf.org/docs/scenarios/sc003")
+ at SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
+public interface Sc003Port {
+
+
+    /**
+     * 
+     * @param sessionData
+     * @param notify
+     */
+    @WebMethod(operationName = "Notify", action = "http://www.wstf.org/docs/scenarios/sc002/Notify")
+    @Oneway
+    public void notify(
+        @WebParam(name = "Notify", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "Notify")
+        NotifyType notify,
+        @WebParam(name = "SessionData", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", header = true, partName = "SessionData")
+        SessionDataType sessionData);
+
+    /**
+     * 
+     *         Note the use of distinct action values for the input and
+     *         output messages of this operation.
+     *       
+     * 
+     * @param sessionData
+     * @param echo
+     * @return
+     *     returns org.wstf.docs.scenarios.sc002.EchoResponseType
+     */
+    @WebMethod(operationName = "Echo", action = "http://www.wstf.org/docs/scenarios/sc002/Echo")
+    @WebResult(name = "EchoResponse", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "EchoResponse")
+    public EchoResponseType echo(
+        @WebParam(name = "Echo", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", partName = "Echo")
+        EchoType echo,
+        @WebParam(name = "SessionData", targetNamespace = "http://www.wstf.org/docs/scenarios/sc002", header = true, partName = "SessionData")
+        SessionDataType sessionData);
+
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc003/Sc003Service.java
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc003/Sc003Service.java	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/src/org/wstf/docs/scenarios/sc003/Sc003Service.java	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,74 @@
+
+package org.wstf.docs.scenarios.sc003;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.logging.Logger;
+import javax.xml.namespace.QName;
+import javax.xml.ws.Service;
+import javax.xml.ws.WebEndpoint;
+import javax.xml.ws.WebServiceClient;
+
+
+/**
+ * This class was generated by the JAX-WS RI.
+ * JAX-WS RI 2.1.2-hudson-182-RC1
+ * Generated source version: 2.0
+ * 
+ */
+ at WebServiceClient(name = "sc003Service", targetNamespace = "http://www.wstf.org/docs/scenarios/sc003", wsdlLocation = "wsdl/sc003.wsdl")
+public class Sc003Service
+    extends Service
+{
+
+    private final static URL SC003SERVICE_WSDL_LOCATION;
+    private final static Logger logger = Logger.getLogger(Sc003Service.class.getName());
+
+    static {
+        URL url = null;
+        try {
+            URL baseUrl;
+            baseUrl = Sc003Service.class.getResource(".");
+            url = new URL(baseUrl, "wsdl/sc003.wsdl");
+        } catch (MalformedURLException e) {
+            logger.warning("Failed to create URL for the wsdl Location: 'wsdl/sc003.wsdl', retrying as a local file");
+            logger.warning(e.getMessage());
+        }
+        SC003SERVICE_WSDL_LOCATION = url;
+    }
+
+    public Sc003Service(URL wsdlLocation, QName serviceName) {
+        super(wsdlLocation, serviceName);
+    }
+
+    public Sc003Service() {
+        super(SC003SERVICE_WSDL_LOCATION, new QName("http://www.wstf.org/docs/scenarios/sc003", "sc003Service"));
+    }
+
+    /**
+     * 
+     *         This port supports the optional use of WS-Addressing 1.0.
+     *       
+     * 
+     * @return
+     *     returns Sc003Port
+     */
+    @WebEndpoint(name = "soap11port")
+    public Sc003Port getSoap11Port() {
+        return super.getPort(new QName("http://www.wstf.org/docs/scenarios/sc003", "soap11port"), Sc003Port.class);
+    }
+
+    /**
+     * 
+     *         This port supports the optional use of WS-Addressing 1.0.
+     *       
+     * 
+     * @return
+     *     returns Sc003Port
+     */
+    @WebEndpoint(name = "soap12port")
+    public Sc003Port getSoap12Port() {
+        return super.getPort(new QName("http://www.wstf.org/docs/scenarios/sc003", "soap12port"), Sc003Port.class);
+    }
+
+}

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/web/index.jsp
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/web/index.jsp	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/web/index.jsp	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,23 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+    pageEncoding="UTF-8"%>
+<%@page import="java.util.Iterator"%>
+<%@page import="java.util.Map"%>
+<%@page import="com.jboss.transaction.wstf.test.TestConstants"%>
+<%@page import="com.jboss.transaction.wstf.webservices.sc002.Sc002Constants"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>JBoss WSTF Scenario 2 and 3 Test Endpoints List</title>
+</head>
+<body>
+<h1>JBoss WSTF Scenario 2 and 3 Test Endpoints List</h1>
+<p>This web application implements several of the interoperability tests specified by the <a href="http://www.wstf.org/">Web Services Test Forum</a> Group.</p>
+<p>Please send any queries to the <a href="mailto:adinn at redhat.com?subject=WSTF%20interop%20query">Red Hat Test Forum contact</a></p>
+<ul>
+<li>Basic WS Service <a href="sc002/index.jsp">Sc002</a>
+<li>WS Addressing <a href="sc003/index.jsp">Sc003</a>
+</ul>
+</body>
+</html>
\ No newline at end of file

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/web/sc002/details.jsp
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/web/sc002/details.jsp	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/web/sc002/details.jsp	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,90 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+    pageEncoding="UTF-8"%>
+<%@page import="com.jboss.transaction.wstf.test.TestConstants"%>
+<%@page import="java.util.Enumeration"%>
+<%@page import="junit.framework.TestResult"%>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<%@page import="junit.framework.TestFailure"%>
+<%@page import="junit.framework.TestCase"%>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>JBoss Transactions WS-TX Interop detail page</title>
+</head>
+<body>
+<h1>Results</h1>
+<%
+	final TestResult testResult = (TestResult)session.getAttribute(TestConstants.ATTRIBUTE_TEST_RESULT) ;
+	if (testResult == null)
+	{
+%>
+No JUnit test results generated.
+<%
+	}
+	else
+	{
+		final String type = request.getParameter("type") ;
+		
+		Enumeration detailEnum = null ;
+		if (type != null)
+		{
+		    if ("error".equals(type))
+		    {
+		        detailEnum = testResult.errors() ;
+		    }
+		    else if ("failure".equals(type))
+		    {
+		        detailEnum = testResult.failures() ;
+		    }
+		}
+		
+		Integer indexInt = null ;
+		if (detailEnum != null)
+		{
+			final String indexVal = request.getParameter("index") ;
+			try
+			{
+			    indexInt = Integer.valueOf(indexVal) ;
+			}
+			catch (final NumberFormatException nfe) {}
+		}
+		
+		TestFailure testFailure = null ;
+		if (indexInt != null)
+		{
+		    int index = indexInt.intValue() ;
+		    if (index > 0)
+		    {
+			    while(detailEnum.hasMoreElements())
+			    {
+		        		final Object current = detailEnum.nextElement() ;
+		        		if (--index == 0)
+		        		{
+		        		    testFailure = (TestFailure)current ;
+		        		    break ;
+		        		}
+			    }
+		    }
+		}
+		
+		if (testFailure == null)
+		{
+%>
+<p>Invalid request parameters</p>
+<%
+		}
+		else
+		{
+		    final TestCase failure = (TestCase)testFailure.failedTest() ;
+%>
+<p>Test: <%= failure.getName() %></p>
+<pre>
+<%= testFailure.trace() %>
+</pre>
+<%
+		}
+	}
+%>
+<p>Return to <a href="sc002/results.jsp">results page</a></p>
+</body>
+</html>
\ No newline at end of file

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/web/sc002/index.jsp
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/web/sc002/index.jsp	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/web/sc002/index.jsp	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,51 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+    pageEncoding="UTF-8"%>
+<%@page import="java.util.Iterator"%>
+<%@page import="java.util.Map"%>
+<%@page import="com.jboss.transaction.wstf.test.TestConstants"%>
+<%@page import="com.jboss.transaction.wstf.webservices.sc002.Sc002Constants"%>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>JBoss Transactions WSTF Sc002 Interop</title>
+</head>
+<body>
+<h1>JBoss Transactions WSTF Sc002 Interop</h1>
+<h2>Introduction</h2>
+<p>This web application implements the <a href="http://www.wstf.org/docs/scenarios/sc002/sc002.xml">scenario sc002</a> interoperability tests specified by the <a href="http://www.wstf.org/">Web Services Test Forum</a> Group.</p>
+<p>Please send any queries to the <a href="mailto:adinn at redhat.com?subject=WSTF%20interop%20query">Red Hat Test Forum contact</a></p>
+<h2>Sc002 tests</h2>
+<p>Enter the URL of the sc002 participant service to be used to run these tests and a timeout for each individual test<br>
+ n.b. the JBoss participant has URL http://localhost:8080/wstf/sc002/Sc002Service</p>
+<form action="../test" method="post">
+<p>Sc002 Participant Service URI: <input name="<%= TestConstants.PARAM_SERVICE_URI %>" maxlength="2000" size="100" value="http://localhost:8080/wstf/sc002/Sc002Service"/></p>
+<p>Test timeout: <input name="<%= TestConstants.PARAM_TEST_TIMEOUT %>" maxlength="10" size="10" value="120000"/></p>
+<!-- the current JaxWS based interop11 tests only runs synchronous tests for now
+<p>Asynchronous Test application: <input name="<%= TestConstants.PARAM_ASYNC_TEST %>" type="checkbox" checked="checked"/></p>
+-->
+<select name="<%= TestConstants.PARAM_TEST %>">
+<option value="<%= TestConstants.NAME_ALL_TESTS_SC002 %>">All Sc002 tests</option>
+<%
+
+  final Map descriptions = TestConstants.DESCRIPTIONS_SC002 ;
+  final Iterator entryIter = descriptions.entrySet().iterator() ;
+  while(entryIter.hasNext())
+  {
+      final Map.Entry entry = (Map.Entry)entryIter.next() ;
+      final String testName = (String)entry.getKey() ;
+      final String testDescription = (String)entry.getValue() ;
+%>
+<option value="<%= testName %>"><%=testName + " - " + testDescription%></option>
+<%
+
+}
+%>
+</select>
+<p>
+<input type="submit" value="Execute"/>
+</p>
+</form>
+</body>
+</html>
\ No newline at end of file

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/web/sc002/results.jsp
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/web/sc002/results.jsp	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/web/sc002/results.jsp	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,90 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+    pageEncoding="UTF-8"%>
+<%@page import="com.jboss.transaction.wstf.test.TestConstants"%>
+<%@page import="java.util.Enumeration"%>
+<%@page import="junit.framework.TestCase"%>
+<%@page import="junit.framework.TestFailure"%>
+<%@page import="junit.framework.TestResult"%>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>JBoss Transactions WS-TX Interop results page</title>
+</head>
+<body>
+<h1>Results</h1>
+<h2>Processed results</h2>
+<%
+	final String logName = (String)session.getAttribute(TestConstants.ATTRIBUTE_LOG_NAME) ;
+    if (logName != null)
+    {
+%>
+<p>View <a href="logs/<%= logName %>">log file</a></p>
+<%
+    }
+%>
+<h2>JUnit results</h2>
+<%
+	final TestResult testResult = (TestResult)session.getAttribute(TestConstants.ATTRIBUTE_TEST_RESULT) ;
+	if (testResult == null)
+	{
+%>
+No JUnit test results generated.
+<%
+	}
+	else
+	{
+		final int runCount = testResult.runCount() ;
+		final int errorCount = testResult.errorCount() ;
+		final int failureCount = testResult.failureCount() ;
+%>
+<p>Run count: <%= runCount %></p>
+<p>Error count: <%= errorCount %></p>
+<p>Failure count: <%= failureCount %></p>
+<%
+		if ((errorCount > 0) || (failureCount > 0))
+		{
+			if (errorCount > 0)
+			{
+				final Enumeration enumeration = testResult.errors() ;
+%>
+<H3>Errors</H3>
+<%
+				int count = 0 ;
+				while(enumeration.hasMoreElements())
+				{
+				    final TestFailure testFailure = (TestFailure)enumeration.nextElement() ;
+				    count++ ;
+				    final TestCase failedTest = (TestCase)testFailure.failedTest() ;
+				    final String name = failedTest.getName() ;
+				    final String description = (String)TestConstants.DESCRIPTIONS_SC002.get(name) ;
+%>
+<p><a href="sc002/details.jsp?type=error&index=<%= count %>"><%= name %></a> <%= description %></p>
+<%
+				}
+			}
+			if (failureCount > 0)
+			{
+				final Enumeration enumeration = testResult.failures() ;
+%>
+<H3>Failures</H3>
+<%
+				int count = 0 ;
+				while(enumeration.hasMoreElements())
+				{
+				    final TestFailure testFailure = (TestFailure)enumeration.nextElement() ;
+				    count++ ;
+				    final TestCase failedTest = (TestCase)testFailure.failedTest() ;
+				    final String name = failedTest.getName() ;
+				    final String description = (String)TestConstants.DESCRIPTIONS_SC002.get(name) ;
+%>
+<p><a href="sc002/details.jsp?type=failure&index=<%= count %>"><%= name %></a> <%= description %></p>
+<%
+				}
+			}
+		}
+	}
+%>
+<p>Return to <a href="sc002/index.jsp">main page</a></p>
+</body>
+</html>
\ No newline at end of file

Added: labs/jbosstm/workspace/interop/WSTFSC02-interop/web.xml
===================================================================
--- labs/jbosstm/workspace/interop/WSTFSC02-interop/web.xml	                        (rev 0)
+++ labs/jbosstm/workspace/interop/WSTFSC02-interop/web.xml	2008-08-14 14:55:00 UTC (rev 21545)
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
+	version="2.4">
+    <display-name>JBoss WSTF interop</display-name>
+
+    <description>JBoss WSTF interop</description>
+
+    <!-- base URL for location of Interop services -->
+    <context-param>
+        <param-name>BaseURI</param-name>
+        <param-value>http://@HOST@:@PORT@/wstf</param-value>
+    </context-param>
+
+    <!-- Define WSTF Server Endpoints -->
+    <servlet>
+        <servlet-name>WSTF Sc002 Service</servlet-name>
+        <servlet-class>com.jboss.transaction.wstf.webservices.sc002.sei.Sc002PortImpl</servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+
+    <!-- define proxy, logging and junit test runner servlets -->
+    <servlet>
+        <servlet-name>JUnit test servlet</servlet-name>
+        <servlet-class>com.jboss.transaction.wstf.test.TestServlet</servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+    
+    <servlet>
+        <servlet-name>Log servlet</servlet-name>
+        <servlet-class>com.jboss.transaction.wstf.test.TestLogServlet</servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+
+    <!-- Define WSTF JaxWS Server Endpoint Mappings -->
+    <servlet-mapping>
+      <servlet-name>WSTF Sc002 Service</servlet-name>
+      <url-pattern>/sc002/Sc002Service</url-pattern>
+    </servlet-mapping>
+
+    <!-- define logging and junit test runner servlet mappings -->
+    <servlet-mapping>
+        <servlet-name>JUnit test servlet</servlet-name>
+        <url-pattern>/test</url-pattern>
+    </servlet-mapping>
+    
+    <servlet-mapping>
+        <servlet-name>Log servlet</servlet-name>
+        <url-pattern>/logs/*</url-pattern>
+    </servlet-mapping>
+
+    <!-- welcome file is for sc007 endpoint -->
+    <welcome-file-list>
+        <welcome-file>index.jsp</welcome-file>
+    </welcome-file-list>
+</web-app>




More information about the jboss-svn-commits mailing list