You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by ba...@apache.org on 2006/12/06 05:19:32 UTC

svn commit: r482887 - in /webservices/axis2/trunk/java/modules/jaxws: ./ test-resources/wsdl/ test/org/apache/axis2/jaxws/framework/ test/org/apache/axis2/jaxws/sample/ test/org/apache/axis2/jaxws/sample/parallelasync/ test/org/apache/axis2/jaxws/sampl...

Author: barrettj
Date: Tue Dec  5 20:19:29 2006
New Revision: 482887

URL: http://svn.apache.org/viewvc?view=rev&rev=482887
Log:
AXIS2-1830
Contributed by Mike Rheinheimer.  Adds test for parallel async.

Added:
    webservices/axis2/trunk/java/modules/jaxws/test-resources/wsdl/async_doclitwr.wsdl
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/ParallelAsyncTests.java
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/CallbackHandler.java
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/Constants.java
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/KillerThread.java
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/PausableExecutor.java
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncService.java
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/DocLitWrappedPortImpl.java
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/META-INF/
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/META-INF/MANIFEST.MF
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/META-INF/async_doclitwr.wsdl
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/META-INF/services.xml
Modified:
    webservices/axis2/trunk/java/modules/jaxws/maven.xml
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java

Modified: webservices/axis2/trunk/java/modules/jaxws/maven.xml
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/maven.xml?view=diff&rev=482887&r1=482886&r2=482887
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/maven.xml (original)
+++ webservices/axis2/trunk/java/modules/jaxws/maven.xml Tue Dec  5 20:19:29 2006
@@ -117,6 +117,13 @@
     	    <classpath location="${compiled.classes.dir}"/>
     	   	<arg line="-d ${schema.generated.src.dir} -quiet -wsdl ${wsdl.source.dir}/AddNumbers.wsdl"/>
     	</java>
+    	<ant:echo>Generating java from async_doclitwr.wsdl</ant:echo>
+    	<java classname="com.sun.tools.xjc.Driver" fork="true"> 
+    	    <jvmarg line="${maven.junit.jvmargs}"/>
+    	    <classpath refid="maven.dependency.classpath"/>
+    	    <classpath location="${compiled.classes.dir}"/>
+    	   	<arg line="-d ${schema.generated.src.dir} -wsdl ${wsdl.source.dir}/async_doclitwr.wsdl"/>
+    	</java>
 
     	<ant:echo>Generating java from FaultyWebService.wsdl</ant:echo>
     	<java classname="com.sun.tools.xjc.Driver" fork="true"> 
@@ -427,6 +434,17 @@
 			   <ant:include name="org/apache/axis2/jaxws/sample/addnumbers/**"/>
 			</ant:fileset>
 			<ant:fileset dir="test/org/apache/axis2/jaxws/sample/addnumbers">
+			   <ant:include name="META-INF/**"/>
+			</ant:fileset>
+			<ant:fileset dir="target/classes">
+			   <ant:include name="org/apache/axis2/jaxws/server/**"/>
+			</ant:fileset>
+		</ant:copy>
+		<ant:copy toDir="target/test-classes/services/AsyncService/">
+			<ant:fileset dir="target/test-classes">
+			   <ant:include name="org/apache/axis2/jaxws/sample/parallelasync/**"/>
+			</ant:fileset>
+			<ant:fileset dir="test/org/apache/axis2/jaxws/sample/parallelasync/server">
 			   <ant:include name="META-INF/**"/>
 			</ant:fileset>
 			<ant:fileset dir="target/classes">

Added: webservices/axis2/trunk/java/modules/jaxws/test-resources/wsdl/async_doclitwr.wsdl
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test-resources/wsdl/async_doclitwr.wsdl?view=auto&rev=482887
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test-resources/wsdl/async_doclitwr.wsdl (added)
+++ webservices/axis2/trunk/java/modules/jaxws/test-resources/wsdl/async_doclitwr.wsdl Tue Dec  5 20:19:29 2006
@@ -0,0 +1,312 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+	xmlns:tns="http://org/test/parallelasync"
+	xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="async"
+	targetNamespace="http://org/test/parallelasync">
+	
+	<wsdl:types>
+		<xsd:schema
+			targetNamespace="http://org/test/parallelasync"
+			xmlns:tns="http://org/test/parallelasync"
+			xmlns:xsd="http://www.w3.org/2001/XMLSchema">		
+			
+			<xsd:element name="ping">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="message" type="xsd:string" />						
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>		
+			
+			<xsd:element name="pingResponse">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="response" type="xsd:string" />
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>			
+			
+			<xsd:element name="sleep">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="message" type="xsd:string" />						
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>		
+			
+			<xsd:element name="sleepResponse">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="message" type="xsd:string" />
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>		
+
+			<xsd:element name="isAsleep">
+				<xsd:complexType />
+			</xsd:element>	
+
+			<xsd:element name="isAsleepResponse">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="message" type="xsd:string" />
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>	
+
+			<xsd:element name="wakeUp">
+				<xsd:complexType />
+			</xsd:element>	
+
+			<xsd:element name="wakeUpResponse">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="message" type="xsd:string" />						
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>	
+
+			<xsd:element name="invokeAsync">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="request" type="xsd:string" />						
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+
+			<xsd:element name="invokeAsyncResponse">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="response" type="xsd:string" />						
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+
+			<xsd:element name="customAsync">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="request" type="xsd:string" />						
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+
+			<xsd:element name="customAsyncResponse">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="response" type="xsd:string" />						
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+
+			<xsd:element name="another">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="request" type="xsd:string" />						
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+
+			<xsd:element name="anotherResponse">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="response" type="xsd:string" />						
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+
+		</xsd:schema>
+	</wsdl:types>
+
+	<wsdl:message name="pingRequest">
+		<wsdl:part name="request" element="tns:ping" />
+	</wsdl:message>
+
+	<wsdl:message name="pingResponse">
+		<wsdl:part name="response" element="tns:pingResponse" />
+	</wsdl:message>
+
+	<wsdl:message name="sleepRequest">
+		<wsdl:part name="request" element="tns:sleep" />
+	</wsdl:message>
+
+	<wsdl:message name="sleepResponse">
+		<wsdl:part name="response" element="tns:sleepResponse" />
+	</wsdl:message>
+	
+	<wsdl:message name="wakeUpRequest">
+		<wsdl:part name="response" element="tns:wakeUp" />	
+	</wsdl:message>
+
+	<wsdl:message name="wakeUpResponse">
+		<wsdl:part name="response" element="tns:wakeUpResponse" />	
+	</wsdl:message>	
+	
+	<wsdl:message name="isAsleepRequest">
+	<wsdl:part name="response" element="tns:isAsleep" />
+	</wsdl:message>
+
+	<wsdl:message name="isAsleepResponse">
+		<wsdl:part name="response" element="tns:isAsleepResponse" />	
+	</wsdl:message>		
+	
+	<wsdl:message name="invokeAsyncRequest">
+		<wsdl:part name="request" element="tns:invokeAsync" />
+	</wsdl:message>
+
+	<wsdl:message name="invokeAsyncResponse">
+		<wsdl:part name="response" element="tns:invokeAsyncResponse" />
+	</wsdl:message>	
+	
+	<wsdl:message name="customAsyncRequest">
+		<wsdl:part name="request" element="tns:customAsync" />
+	</wsdl:message>
+
+	<wsdl:message name="customAsyncResponse">
+		<wsdl:part name="response" element="tns:customAsyncResponse" />
+	</wsdl:message>		
+	
+	<wsdl:message name="anotherRequest">
+		<wsdl:part name="request" element="tns:another" />
+	</wsdl:message>
+
+	<wsdl:message name="anotherResponse">
+		<wsdl:part name="response" element="tns:anotherResponse" />
+	</wsdl:message>		
+	
+	<wsdl:portType name="AsyncPort">
+		
+		<!-- simple ping operation that will be used for DocLitWrapped async test-->
+		<wsdl:operation name="ping">
+			<wsdl:input  message="tns:pingRequest" />
+			<wsdl:output message="tns:pingResponse" />
+		</wsdl:operation>		
+		
+		<!-- request for the server to goto sleep until release is called-->
+		<wsdl:operation name="sleep">
+			<wsdl:input  message="tns:sleepRequest" />
+			<wsdl:output message="tns:sleepResponse" />
+		</wsdl:operation>
+		
+		<!-- check to see if the sleep operation has been called yet -->
+		<wsdl:operation name="isAsleep">
+			<wsdl:input  message="tns:isAsleepRequest" />
+			<wsdl:output message="tns:isAsleepResponse" />
+		</wsdl:operation>			
+		
+		<!-- force the sleep operation to stop sleeping -->
+		<wsdl:operation name="wakeUp">
+			<wsdl:input  message="tns:wakeUpRequest" />
+			<wsdl:output message="tns:wakeUpResponse" />
+		</wsdl:operation>		
+			
+			
+			
+		<!-- Second suite of tests for Async operation naming:
+			 will test for how the implementation responds to
+		     methods ending in Async with async binding enabled
+		 -->
+		<wsdl:operation name="invokeAsync">
+			<wsdl:input  message="tns:invokeAsyncRequest" />
+			<wsdl:output message="tns:invokeAsyncResponse" />
+		</wsdl:operation>			
+			
+		<!-- will test for how the implementation responds to
+		     methods ending in async with async binding enabled
+		 -->			
+		<wsdl:operation name="customAsync">
+			<wsdl:input  message="tns:customAsyncRequest" />
+			<wsdl:output message="tns:customAsyncResponse" />
+		</wsdl:operation>
+		
+		<!-- we will map this operation to a java method ending in Async
+		 -->		
+		<wsdl:operation name="another">
+			<wsdl:input  message="tns:anotherRequest" />
+			<wsdl:output message="tns:anotherResponse" />
+		</wsdl:operation>					
+			
+	</wsdl:portType>
+	
+	<wsdl:binding name="Async" type="tns:AsyncPort">
+		<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
+		
+		<wsdl:operation name="ping">
+			<soap:operation soapAction="http://org/test/parallelasync/ping" />
+			<wsdl:input>
+				<soap:body use="literal"  />
+			</wsdl:input>
+			<wsdl:output>
+				<soap:body use="literal"  />
+			</wsdl:output>
+		</wsdl:operation>		
+		
+		<wsdl:operation name="sleep">
+			<soap:operation soapAction="http://org/test/parallelasync/sleep" />
+			<wsdl:input>
+				<soap:body use="literal"  />
+			</wsdl:input>
+			<wsdl:output>
+				<soap:body use="literal"  />
+			</wsdl:output>
+		</wsdl:operation>
+	
+		<wsdl:operation name="isAsleep">
+			<soap:operation soapAction="http://org/test/parallelasync/isAsleep" />
+			<wsdl:input>
+				<soap:body use="literal"  />
+			</wsdl:input>
+			<wsdl:output>
+				<soap:body use="literal"  />
+			</wsdl:output>
+		</wsdl:operation>	
+	
+		<wsdl:operation name="wakeUp">
+			<soap:operation soapAction="http://org/test/parallelasync/wakeUp" />
+			<wsdl:input>
+				<soap:body use="literal"  />
+			</wsdl:input>
+			<wsdl:output>
+				<soap:body use="literal"  />
+			</wsdl:output>
+		</wsdl:operation>
+	
+		<wsdl:operation name="invokeAsync">
+			<soap:operation soapAction="http://org/test/parallelasync/invokeAsync" />
+			<wsdl:input>
+				<soap:body use="literal"  />
+			</wsdl:input>
+			<wsdl:output>
+				<soap:body use="literal"  />
+			</wsdl:output>
+		</wsdl:operation>		
+	
+		<wsdl:operation name="customAsync">
+			<soap:operation soapAction="http://org/test/parallelasync/customAsync" />
+			<wsdl:input>
+				<soap:body use="literal"  />
+			</wsdl:input>
+			<wsdl:output>
+				<soap:body use="literal"  />
+			</wsdl:output>
+		</wsdl:operation>		
+	
+		<wsdl:operation name="another">
+			<soap:operation soapAction="http://org/test/parallelasync/another" />
+			<wsdl:input>
+				<soap:body use="literal"  />
+			</wsdl:input>
+			<wsdl:output>
+				<soap:body use="literal"  />
+			</wsdl:output>
+		</wsdl:operation>	
+	
+	</wsdl:binding>
+	
+	<wsdl:service name="AsyncService">
+		<wsdl:port binding="tns:Async" name="AsyncPort">
+			<soap:address location="http://localhost:9080/jaxws.async/services/AsyncDocLitWrappedService" />
+		</wsdl:port>
+	</wsdl:service>
+	
+</wsdl:definitions>

Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java?view=diff&rev=482887&r1=482886&r2=482887
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java Tue Dec  5 20:19:29 2006
@@ -72,6 +72,7 @@
 import org.apache.axis2.jaxws.sample.FaultyWebServiceTests;
 import org.apache.axis2.jaxws.sample.MtomSampleTests;
 import org.apache.axis2.jaxws.sample.NonWrapTests;
+import org.apache.axis2.jaxws.sample.ParallelAsyncTests;
 import org.apache.axis2.jaxws.sample.WrapTests;
 import org.apache.axis2.jaxws.sample.faultsservice.FaultsService;
 import org.apache.axis2.jaxws.security.BasicAuthSecurityTests;
@@ -144,6 +145,7 @@
         suite.addTestSuite(WrapTests.class);
         suite.addTestSuite(NonAnonymousComplexTypeTests.class);
         suite.addTestSuite(AddNumbersTests.class);
+        suite.addTestSuite(ParallelAsyncTests.class);
         suite.addTestSuite(FaultyWebServiceTests.class);
         
         suite.addTestSuite(FaultsServiceTests.class);

Added: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/ParallelAsyncTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/ParallelAsyncTests.java?view=auto&rev=482887
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/ParallelAsyncTests.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/ParallelAsyncTests.java Tue Dec  5 20:19:29 2006
@@ -0,0 +1,148 @@
+package org.apache.axis2.jaxws.sample;
+
+import java.util.Map;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Future;
+
+import javax.xml.ws.BindingProvider;
+import javax.xml.ws.Response;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.apache.axis2.jaxws.sample.parallelasync.server.AsyncPort;
+import org.apache.axis2.jaxws.sample.parallelasync.server.AsyncService;
+import org.test.parallelasync.CustomAsyncResponse;
+import org.test.parallelasync.SleepResponse;
+
+/**
+ * Tests for Asynchrony in JAX-WS. Most of the simple invokeAsync/async
+ * exceptions have been covered under jaxws.dispatch and jaxws.proxy test suites
+ * 
+ * ExecutionException tests are covered in jaxws.dispatch and jaxws.proxy
+ */
+public class ParallelAsyncTests extends TestCase {
+
+    private static final String DOCLITWR_ASYNC_ENDPOINT =
+        "http://localhost:8080/axis2/services/AsyncService";
+
+    public ParallelAsyncTests(String str) {
+        super(str);
+    }
+
+    public static Test suite() {
+        TestSuite suite = new TestSuite(ParallelAsyncTests.class);
+        return suite;
+        
+    }
+
+    public void setUp() {
+        System.out.println("==================== " + getName());
+    }
+    
+    // TODO delete this test once the next is running.  This test prevents a
+    // failure because JUNIT doesn't like when a test suite has no tests
+    public void testPREVENT_FAILURE() throws Exception {
+        
+    }
+    
+    /**
+     * @testStrategy Test that the service is up and running before running any
+     *               other tests
+     * @wsdl async.wsdl + async.xml
+     * @target AsyncPortImpl
+     */
+    public void _intestService_isAlive() throws Exception {
+        final String MESSAGE = "testServiceAlive";
+
+        AsyncPort port = getPort(null);
+
+        String req1 = "sleepAsync";
+        String req2 = "remappedAsync";
+
+        for (int i = 0; i < 10; i++) {
+            Response<SleepResponse> resp1 = port.sleepAsync(req1);
+            Response<CustomAsyncResponse> resp2 = port.remappedAsync(req2);
+
+            waitBlocking(resp2);
+            port.wakeUp();
+
+            waitBlocking(resp1);
+        
+            try {
+                String req1_result = resp1.get().getMessage();
+                String req2_result = resp2.get().getResponse();
+            } catch (Exception e) {
+                e.printStackTrace();
+                fail(e.toString());
+            }
+
+            assertEquals("sleepAsync did not return expected response ", req1, resp1.get().getMessage());
+            assertEquals("remappedAsync did not return expected response", req2, resp2.get().getResponse());
+        }
+        
+    }
+
+    /**
+     * Auxiliary method used for doiing isAsleep checks. Will perform isAsleep
+     * up to a MAX_ISASLEEP_CHECK number of checks. Will sleep for
+     * SLEEP_ISASLEEP_SEC seconds in between requests. If reaches maximum number
+     * fo retries then will fail the test
+     */
+    private boolean isAsleepCheck(String MESSAGE, AsyncPort port) {
+        boolean asleep = false;
+        int check = 30;
+        String msg = null;
+        do {
+            msg = port.isAsleep();
+            asleep = (msg != null);
+
+            // fail the test if we ran out of checks
+            if ((check--) == 0)
+                fail("Serve did not receive sleep after several retries");
+
+            // sleep for a bit
+            try {
+                Thread.sleep(30);
+            } catch (InterruptedException e) {
+            }
+
+        } while (!asleep);
+
+        if (asleep) {
+            assertTrue("Sleeping on an incorrect message", MESSAGE.equals(msg));
+        }
+
+        return true;
+    }
+    
+    /**
+     * Auxiliary method used for obtaining a proxy pre-configured with a
+     * specific Executor
+     */
+    private AsyncPort getPort(Executor ex) {
+        AsyncService service = new AsyncService();
+
+        if (ex!= null)
+            service.setExecutor(ex);
+        
+        AsyncPort port = service.getAsyncPort();
+        assertNotNull("Port is null", port);
+
+        Map<String, Object> rc = ((BindingProvider) port).getRequestContext();
+        rc.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
+                DOCLITWR_ASYNC_ENDPOINT);
+        
+        return port;
+    }
+    
+    private void waitBlocking(Future<?> monitor){
+        while (!monitor.isDone()){
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+            }
+        }
+    }
+}

Added: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/CallbackHandler.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/CallbackHandler.java?view=auto&rev=482887
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/CallbackHandler.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/CallbackHandler.java Tue Dec  5 20:19:29 2006
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *      
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.jaxws.sample.parallelasync.common;
+
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeoutException;
+
+import javax.xml.ws.AsyncHandler;
+import javax.xml.ws.Response;
+
+import org.apache.axis2.jaxws.sample.parallelasync.common.Constants;
+
+/**
+ * Generic Async callback handler. The get method emulates Response.get by
+ * throwning an exception if one is received. 
+ */
+public class CallbackHandler<T> implements AsyncHandler<T> {
+
+    private T response = null;
+    private Response<T> resp = null;
+    
+    private Exception exception = null;
+
+    public void handleResponse(Response<T> response) {
+
+        try {
+            T res = (T) response.get();
+            this.response = res;
+            this.resp = response;
+        } catch (Exception e) {
+            this.exception = e;
+        }
+    }
+
+    public Response<T> getResponse(){
+        return this.resp;
+    }
+    
+    public T get() throws Exception {
+
+        if (exception != null)
+            throw exception;
+        return this.response;
+    }
+
+    /**
+     * Auxiliary method used to wait for a monitor for a certain amount of time
+     * before timing out
+     * 
+     * @param monitor
+     */
+    public void waitBlocking(Future<?> monitor) throws Exception {
+        // wait for request to complete
+        int sec = Constants.CLIENT_MAX_SLEEP_SEC;
+        while (!monitor.isDone()) {
+            Thread.sleep(1000);
+            sec--;
+            if (sec <= 0) break;
+        }
+
+        if (sec <= 0)
+            throw new TimeoutException("Stopped waiting for Async response after "
+                    + Constants.CLIENT_MAX_SLEEP_SEC + " sec");
+    }   
+    
+}

Added: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/Constants.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/Constants.java?view=auto&rev=482887
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/Constants.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/Constants.java Tue Dec  5 20:19:29 2006
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *      
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.jaxws.sample.parallelasync.common;
+
+import javax.xml.namespace.QName;
+
+/**
+ * This class holds constant strings such as endpoint addresses and common
+ * conversion methods
+ */
+public class Constants {
+
+    // server hostName and WC port
+    private static final String SERVER = "localhost:8080";
+    
+    //public static final String WSDL_NAMESPACE = "http://common.wsfvt.async.jaxws";
+    public static final String WSDL_NAMESPACE = "http://org/test/parallelasync";
+
+    public static final String SOAP11_NAMESPACE = "http://schemas.xmlsoap.org/soap/envelope";
+
+    public static final String SOAP12_NAMESPACE = "http://www.w3.org/2003/05/soap-envelope";
+
+    public static final QName SERVICE_QNAME = new QName(WSDL_NAMESPACE,
+            "AsyncService");
+
+    public static final QName PORT_QNAME = new QName(WSDL_NAMESPACE,
+            "AsyncPort");
+
+    // Endpoint addresses
+    public static final String BASE_ENDPOINT = "http://" + SERVER
+            + "/axis2/services/";
+
+    public static final String DOCLITWR_ASYNC_ENDPOINT = BASE_ENDPOINT
+            + "AsyncService"; //+ "AsyncDocLitWrappedService";
+
+    public static final String DOCLIT_ASYNC_ENDPOINT = BASE_ENDPOINT
+            + "AsyncService"; //+ "AsyncDocLitService";
+
+    public static final String RPCLIT_ASYNC_ENDPOINT = BASE_ENDPOINT
+            + "AsyncService"; //+ "AsyncRpcLitService";
+
+    public static final String THE_STRING = "This Is Just A Test";
+
+    // how long the server should seep for before returning a response
+    public static final long SERVER_SLEEP_SEC = 120;
+
+    // maximum amount of time to wait for async operation to complete
+    public static final int CLIENT_MAX_SLEEP_SEC = 120;
+
+    // maximum amount of time to wait for async operation to complete
+    public static final int CLIENT_SHORT_SLEEP_SEC = 15;
+
+    // maximum number of times the client should check to see if
+    // the server received sleep request
+    public static final int MAX_ISASLEEP_CHECK = 10;
+
+    // number of sec to sleep in between isAsleep checks
+    public static final int SLEEP_ISASLEEP_SEC = 1;
+
+}

Added: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/KillerThread.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/KillerThread.java?view=auto&rev=482887
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/KillerThread.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/KillerThread.java Tue Dec  5 20:19:29 2006
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *      
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.jaxws.sample.parallelasync.common;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.ThreadPoolExecutor;
+
+import javax.xml.ws.Service;
+
+public class KillerThread extends Thread{
+
+    private Service svc = null;
+    
+    private boolean isKilled = false;
+    private boolean interrupt = false;
+    
+    private int waitUntilKillingSec = 30;
+    
+    public KillerThread(Service service, int client_max_sleep_sec) {
+        this.waitUntilKillingSec = client_max_sleep_sec;
+        this.svc = service;
+    }
+
+    public void run(){
+        Executor e = svc.getExecutor();
+        
+        System.out.println("KillerThread: " + e.getClass().getName());
+        ExecutorService es = (ExecutorService) e;
+        
+
+        int i = waitUntilKillingSec;
+        while (i > 0 && !interrupt){
+                    
+            try {
+                System.out.println("KillerThread: going to sleep");
+                Thread.sleep(1000);
+                i --;
+            } catch (InterruptedException e1) {
+                System.out.println("KillerThread: interrupted");
+            }
+        }
+        
+        // force executor to stop
+        if (!interrupt){
+            isKilled = true;
+            es.shutdownNow();
+        }
+    }
+
+    public boolean isKilled() {
+        return isKilled;
+    }
+    
+    public void abort(){
+        this.interrupt = true;
+        this.interrupt();
+    }
+}

Added: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/PausableExecutor.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/PausableExecutor.java?view=auto&rev=482887
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/PausableExecutor.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/common/PausableExecutor.java Tue Dec  5 20:19:29 2006
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *      
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.jaxws.sample.parallelasync.common;
+
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.ReentrantLock;
+
+/**
+ * A custom executor that can be paused for testing of exceptions that occur
+ * before an item is executed. This executor provides absolue control over its
+ * thread size via size parameter in the constructor
+ */
+public class PausableExecutor extends ThreadPoolExecutor {
+    private boolean isPaused;
+
+    private ReentrantLock pauseLock = new ReentrantLock();
+
+    private Condition unpaused = pauseLock.newCondition();
+
+    public PausableExecutor(int size) {
+        super(size, size, 1, TimeUnit.SECONDS,
+                new ArrayBlockingQueue<Runnable>(size));
+    }
+    
+    protected void beforeExecute(Thread t, Runnable r) {
+        super.beforeExecute(t, r);
+        pauseLock.lock();
+        try {
+            while (isPaused)
+                unpaused.await();
+        } catch (InterruptedException ie) {
+            t.interrupt();
+        } finally {
+            pauseLock.unlock();
+        }
+    }
+
+    public void pause() {
+        pauseLock.lock();
+        try {
+            isPaused = true;
+        } finally {
+            pauseLock.unlock();
+        }
+    }
+
+    public void resume() {
+        pauseLock.lock();
+        try {
+            isPaused = false;
+            unpaused.signalAll();
+        } finally {
+            pauseLock.unlock();
+        }
+    }
+}

Added: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java?view=auto&rev=482887
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java Tue Dec  5 20:19:29 2006
@@ -0,0 +1,283 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *      
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.jaxws.sample.parallelasync.server;
+
+import java.util.concurrent.Future;
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebResult;
+import javax.jws.WebService;
+import javax.xml.ws.AsyncHandler;
+import javax.xml.ws.Holder;
+import javax.xml.ws.RequestWrapper;
+import javax.xml.ws.Response;
+import javax.xml.ws.ResponseWrapper;
+import org.test.parallelasync.AnotherResponse;
+import org.test.parallelasync.CustomAsyncResponse;
+import org.test.parallelasync.InvokeAsyncResponse;
+import org.test.parallelasync.PingResponse;
+import org.test.parallelasync.SleepResponse;
+
+
+/**
+ * This class was generated by the JAXWS SI.
+ * JAX-WS RI 2.0.1-jaxws-rearch-2005-nightly_2006-08-16_02-32-03-M1
+ * Generated source version: 2.0
+ * 
+ */
+@WebService(name = "AsyncPort", targetNamespace = "http://org/test/parallelasync")
+public interface AsyncPort {
+
+
+    /**
+     * 
+     * @param message
+     * @return
+     *     returns javax.xml.ws.Response<org.test.parallelasync.PingResponse>
+     */
+    @WebMethod(operationName = "ping", action = "http://org/test/parallelasync/ping")
+    @RequestWrapper(localName = "ping", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.Ping")
+    @ResponseWrapper(localName = "pingResponse", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.PingResponse")
+    public Response<PingResponse> pingAsync(
+        @WebParam(name = "message", targetNamespace = "")
+        String message);
+
+    /**
+     * 
+     * @param message
+     * @param asyncHandler
+     * @return
+     *     returns java.util.concurrent.Future<? extends java.lang.Object>
+     */
+    @WebMethod(operationName = "ping", action = "http://org/test/parallelasync/ping")
+    @RequestWrapper(localName = "ping", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.Ping")
+    @ResponseWrapper(localName = "pingResponse", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.PingResponse")
+    public Future<?> pingAsync(
+        @WebParam(name = "message", targetNamespace = "")
+        String message,
+        @WebParam(name = "asyncHandler", targetNamespace = "")
+        AsyncHandler<PingResponse> asyncHandler);
+
+    /**
+     * 
+     * @param message
+     * @return
+     *     returns java.lang.String
+     */
+    @WebMethod(action = "http://org/test/parallelasync/ping")
+    @WebResult(name = "response", targetNamespace = "")
+    @RequestWrapper(localName = "ping", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.Ping")
+    @ResponseWrapper(localName = "pingResponse", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.PingResponse")
+    public String ping(
+        @WebParam(name = "message", targetNamespace = "")
+        String message);
+
+    /**
+     * 
+     * @param message
+     * @return
+     *     returns javax.xml.ws.Response<org.test.parallelasync.SleepResponse>
+     */
+    @WebMethod(operationName = "sleep", action = "http://org/test/parallelasync/sleep")
+    @RequestWrapper(localName = "sleep", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.Sleep")
+    @ResponseWrapper(localName = "sleepResponse", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.SleepResponse")
+    public Response<SleepResponse> sleepAsync(
+        @WebParam(name = "message", targetNamespace = "")
+        String message);
+
+    /**
+     * 
+     * @param message
+     * @param asyncHandler
+     * @return
+     *     returns java.util.concurrent.Future<? extends java.lang.Object>
+     */
+    @WebMethod(operationName = "sleep", action = "http://org/test/parallelasync/sleep")
+    @RequestWrapper(localName = "sleep", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.Sleep")
+    @ResponseWrapper(localName = "sleepResponse", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.SleepResponse")
+    public Future<?> sleepAsync(
+        @WebParam(name = "message", targetNamespace = "")
+        String message,
+        @WebParam(name = "asyncHandler", targetNamespace = "")
+        AsyncHandler<SleepResponse> asyncHandler);
+
+    /**
+     * 
+     * @param message
+     */
+    @WebMethod(action = "http://org/test/parallelasync/sleep")
+    @RequestWrapper(localName = "sleep", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.Sleep")
+    @ResponseWrapper(localName = "sleepResponse", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.SleepResponse")
+    public void sleep(
+        @WebParam(name = "message", targetNamespace = "", mode = WebParam.Mode.INOUT)
+        Holder<String> message);
+
+    /**
+     * 
+     * @return
+     *     returns java.lang.String
+     */
+    @WebMethod(action = "http://org/test/parallelasync/isAsleep")
+    @WebResult(name = "message", targetNamespace = "")
+    @RequestWrapper(localName = "isAsleep", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.IsAsleep")
+    @ResponseWrapper(localName = "isAsleepResponse", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.IsAsleepResponse")
+    public String isAsleep();
+
+    /**
+     * 
+     * @return
+     *     returns java.lang.String
+     */
+    @WebMethod(action = "http://org/test/parallelasync/wakeUp")
+    @WebResult(name = "message", targetNamespace = "")
+    @RequestWrapper(localName = "wakeUp", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.WakeUp")
+    @ResponseWrapper(localName = "wakeUpResponse", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.WakeUpResponse")
+    public String wakeUp();
+
+    /**
+     * 
+     * @param request
+     * @return
+     *     returns javax.xml.ws.Response<org.test.parallelasync.InvokeAsyncResponse>
+     */
+    @WebMethod(operationName = "invokeAsync", action = "http://org/test/parallelasync/invokeAsync")
+    @RequestWrapper(localName = "invokeAsync", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.InvokeAsync")
+    @ResponseWrapper(localName = "invokeAsyncResponse", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.InvokeAsyncResponse")
+    public Response<InvokeAsyncResponse> invokeAsyncAsync(
+        @WebParam(name = "request", targetNamespace = "")
+        String request);
+
+    /**
+     * 
+     * @param asyncHandler
+     * @param request
+     * @return
+     *     returns java.util.concurrent.Future<? extends java.lang.Object>
+     */
+    @WebMethod(operationName = "invokeAsync", action = "http://org/test/parallelasync/invokeAsync")
+    @RequestWrapper(localName = "invokeAsync", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.InvokeAsync")
+    @ResponseWrapper(localName = "invokeAsyncResponse", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.InvokeAsyncResponse")
+    public Future<?> invokeAsyncAsync(
+        @WebParam(name = "request", targetNamespace = "")
+        String request,
+        @WebParam(name = "asyncHandler", targetNamespace = "")
+        AsyncHandler<InvokeAsyncResponse> asyncHandler);
+
+    /**
+     * 
+     * @param request
+     * @return
+     *     returns java.lang.String
+     */
+    @WebMethod(action = "http://org/test/parallelasync/invokeAsync")
+    @WebResult(name = "response", targetNamespace = "")
+    @RequestWrapper(localName = "invokeAsync", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.InvokeAsync")
+    @ResponseWrapper(localName = "invokeAsyncResponse", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.InvokeAsyncResponse")
+    public String invokeAsync(
+        @WebParam(name = "request", targetNamespace = "")
+        String request);
+
+    /**
+     * 
+     * @param request
+     * @return
+     *     returns javax.xml.ws.Response<org.test.parallelasync.CustomAsyncResponse>
+     */
+    @WebMethod(operationName = "customAsync", action = "http://org/test/parallelasync/customAsync")
+    @RequestWrapper(localName = "customAsync", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.CustomAsync")
+    @ResponseWrapper(localName = "customAsyncResponse", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.CustomAsyncResponse")
+    public Response<CustomAsyncResponse> remappedAsync(
+        @WebParam(name = "request", targetNamespace = "")
+        String request);
+
+    /**
+     * 
+     * @param asyncHandler
+     * @param request
+     * @return
+     *     returns java.util.concurrent.Future<? extends java.lang.Object>
+     */
+    @WebMethod(operationName = "customAsync", action = "http://org/test/parallelasync/customAsync")
+    @RequestWrapper(localName = "customAsync", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.CustomAsync")
+    @ResponseWrapper(localName = "customAsyncResponse", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.CustomAsyncResponse")
+    public Future<?> remappedAsync(
+        @WebParam(name = "request", targetNamespace = "")
+        String request,
+        @WebParam(name = "asyncHandler", targetNamespace = "")
+        AsyncHandler<CustomAsyncResponse> asyncHandler);
+
+    /**
+     * 
+     * @param request
+     * @return
+     *     returns java.lang.String
+     */
+    @WebMethod(operationName = "customAsync", action = "http://org/test/parallelasync/customAsync")
+    @WebResult(name = "response", targetNamespace = "")
+    @RequestWrapper(localName = "customAsync", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.CustomAsync")
+    @ResponseWrapper(localName = "customAsyncResponse", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.CustomAsyncResponse")
+    public String remapped(
+        @WebParam(name = "request", targetNamespace = "")
+        String request);
+
+    /**
+     * 
+     * @param request
+     * @return
+     *     returns javax.xml.ws.Response<org.test.parallelasync.AnotherResponse>
+     */
+    @WebMethod(operationName = "another", action = "http://org/test/parallelasync/another")
+    @RequestWrapper(localName = "another", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.Another")
+    @ResponseWrapper(localName = "anotherResponse", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.AnotherResponse")
+    public Response<AnotherResponse> anotherAsyncAsync(
+        @WebParam(name = "request", targetNamespace = "")
+        String request);
+
+    /**
+     * 
+     * @param asyncHandler
+     * @param request
+     * @return
+     *     returns java.util.concurrent.Future<? extends java.lang.Object>
+     */
+    @WebMethod(operationName = "another", action = "http://org/test/parallelasync/another")
+    @RequestWrapper(localName = "another", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.Another")
+    @ResponseWrapper(localName = "anotherResponse", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.AnotherResponse")
+    public Future<?> anotherAsyncAsync(
+        @WebParam(name = "request", targetNamespace = "")
+        String request,
+        @WebParam(name = "asyncHandler", targetNamespace = "")
+        AsyncHandler<AnotherResponse> asyncHandler);
+
+    /**
+     * 
+     * @param request
+     * @return
+     *     returns java.lang.String
+     */
+    @WebMethod(operationName = "another", action = "http://org/test/parallelasync/another")
+    @WebResult(name = "response", targetNamespace = "")
+    @RequestWrapper(localName = "another", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.Another")
+    @ResponseWrapper(localName = "anotherResponse", targetNamespace = "http://org/test/parallelasync", className = "org.test.parallelasync.AnotherResponse")
+    public String anotherAsync(
+        @WebParam(name = "request", targetNamespace = "")
+        String request);
+
+}

Added: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncService.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncService.java?view=auto&rev=482887
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncService.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncService.java Tue Dec  5 20:19:29 2006
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *      
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.jaxws.sample.parallelasync.server;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+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 JAXWS SI.
+ * JAX-WS RI 2.0.1-jaxws-rearch-2005-nightly_2006-08-16_02-32-03-M1
+ * Generated source version: 2.0
+ * 
+ */
+@WebServiceClient(name = "AsyncService", targetNamespace = "http://org/test/parallelasync", wsdlLocation = "async_doclitwr.wsdl")
+public class AsyncService
+    extends Service
+{
+
+    private final static URL ASYNCSERVICE_WSDL_LOCATION;
+    private static String wsdlLocation="/test/org/apache/axis2/jaxws/sample/parallelasync/server/META-INF/async_doclitwr.wsdl";
+    static {
+        URL url = null;
+        try {
+            try{
+                String baseDir = new File(".").getCanonicalPath();
+                wsdlLocation = new File(baseDir + wsdlLocation).getAbsolutePath();
+            }catch(Exception e){
+                e.printStackTrace();
+            }
+            File file = new File(wsdlLocation);
+            url = file.toURL();
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        }
+        ASYNCSERVICE_WSDL_LOCATION = url;
+    }
+    
+
+    public AsyncService(URL wsdlLocation, QName serviceName) {
+        super(wsdlLocation, serviceName);
+    }
+
+    public AsyncService() {
+        super(ASYNCSERVICE_WSDL_LOCATION, new QName("http://org/test/parallelasync", "AsyncService"));
+    }
+
+    /**
+     * 
+     * @return
+     *     returns AsyncPort
+     */
+    @WebEndpoint(name = "AsyncPort")
+    public AsyncPort getAsyncPort() {
+        return (AsyncPort)super.getPort(new QName("http://org/test/parallelasync", "AsyncPort"), AsyncPort.class);
+    }
+
+}

Added: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/DocLitWrappedPortImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/DocLitWrappedPortImpl.java?view=auto&rev=482887
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/DocLitWrappedPortImpl.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/DocLitWrappedPortImpl.java Tue Dec  5 20:19:29 2006
@@ -0,0 +1,239 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *      
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.jaxws.sample.parallelasync.server;
+
+import java.util.concurrent.Future;
+
+import javax.jws.WebService;
+import javax.xml.ws.AsyncHandler;
+import javax.xml.ws.Holder;
+import javax.xml.ws.Response;
+
+import org.apache.axis2.jaxws.sample.parallelasync.common.Constants;
+import org.test.parallelasync.AnotherResponse;
+import org.test.parallelasync.CustomAsyncResponse;
+import org.test.parallelasync.InvokeAsyncResponse;
+import org.test.parallelasync.PingResponse;
+import org.test.parallelasync.SleepResponse;
+
+/**
+ * Async endpoint used for Async client side tests. Clients will invokeAsync
+ * sleep method to force the server to block until wakeUp is called. The client
+ * can call isAsleep to verify that sleep has been called by the async thread.
+ */
+/*
+@WebService(
+        serviceName="AsyncService",
+        portName="AsyncPort",
+        targetNamespace = "http://org/test/parallelasync",
+        endpointInterface = "org.test.parallelasync.AsyncPort",
+        wsdlLocation="WEB-INF/wsdl/async_doclitwr.wsdl")
+        */
+@WebService(endpointInterface="org.apache.axis2.jaxws.sample.parallelasync.server.AsyncPort")
+public class DocLitWrappedPortImpl implements AsyncPort {
+
+    private static final boolean DEBUG = true;
+
+    private static String msg = "";
+
+    private static Thread sleeper = null;
+
+    private static boolean doCancell = false;
+
+    public void sleep(Holder<String> message) {
+
+        boolean cancelRequested = false;
+
+        msg = message.value;
+
+        synchronized (msg) {
+
+            Thread myThread = Thread.currentThread();
+            sleeper = myThread;
+
+            try {
+
+                doCancell = false;
+
+                if (DEBUG)
+                    System.out.println("Starting to sleep on "
+                            + myThread.getId() + " " + msg);
+
+                // wait until either a timeout or client releases us
+                // or if another request begins (lockId changes)
+                long sec = Constants.SERVER_SLEEP_SEC;
+
+                while (sec > 0 && !doCancell && sleeper == myThread) {
+                    if (DEBUG)
+                        System.out.println("Sleeping on " + myThread.getId()
+                                + " timeLeft=" + sec);
+                    sec--;
+
+                    msg.wait(500);
+                }
+            } catch (InterruptedException e) {
+                System.out.println("Sleep interrupted on " + myThread.getId());
+            } finally {
+
+                if (DEBUG)
+                    System.out.println("Woke up " + myThread.getId());
+
+                // if we timed out while waiting then
+                // release the wait
+                if (sleeper == myThread) {
+                    cancelRequested = doCancell;
+                    doCancell = false;
+                    sleeper = null;
+                }
+
+                // only notify if cancel was requested
+                if (cancelRequested) {
+                    if (DEBUG)
+                        System.out.println("Notify " + myThread.getId()
+                                + " isDone");
+
+                    // wake up the release thread
+                    msg.notify();
+                }
+            }
+        }// synch
+    }
+
+    public String isAsleep() {
+
+        // return the message we're sleeping on or if we aren't return a null
+        return (sleeper != null) ? msg : null;
+    }
+
+    public String wakeUp() {
+
+        String wakeUp = null;
+
+        if (sleeper == null) {
+            if (DEBUG)
+                System.out.println("No one to wake up");
+        } else {
+            if (DEBUG)
+                System.out.println("Interrupting " + sleeper.getId());
+
+            // interrupt the sleeper
+            sleeper.interrupt();
+
+            if (DEBUG)
+                System.out.println("release before synched");
+
+            // block until sleep completes
+            synchronized (msg) {
+
+                if (DEBUG)
+                    System.out.println("release enter synched");
+
+                wakeUp = msg;
+                msg = null;
+            }
+        }
+
+        return wakeUp;
+    }
+
+    /**
+     * client side tests for remapping operation names, on the server side all
+     * we need to do is roundtrip the message
+     */
+
+    public String invokeAsync(String request) {
+        return request;
+    }
+
+    public String customAsync(String request) {
+        return request;
+    }
+
+    public String another(String request) {
+        return request;
+    }
+
+    public String ping(String message) {
+        return message;
+    }
+
+    // NOT USED:
+    
+    public String anotherAsync(String request) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Future<?> anotherAsyncAsync(String request, AsyncHandler<AnotherResponse> asyncHandler) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Response<AnotherResponse> anotherAsyncAsync(String request) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Future<?> invokeAsyncAsync(String request, AsyncHandler<InvokeAsyncResponse> asyncHandler) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Response<InvokeAsyncResponse> invokeAsyncAsync(String request) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Future<?> pingAsync(String message, AsyncHandler<PingResponse> asyncHandler) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Response<PingResponse> pingAsync(String message) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public String remapped(String request) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Future<?> remappedAsync(String request, AsyncHandler<CustomAsyncResponse> asyncHandler) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Response<CustomAsyncResponse> remappedAsync(String request) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Future<?> sleepAsync(String message, AsyncHandler<SleepResponse> asyncHandler) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Response<SleepResponse> sleepAsync(String message) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+}

Added: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/META-INF/MANIFEST.MF?view=auto&rev=482887
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/META-INF/MANIFEST.MF (added)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/META-INF/MANIFEST.MF Tue Dec  5 20:19:29 2006
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Ant-Version: Apache Ant 1.6.1
+Created-By: 2.3 (IBM Corporation)
+

Added: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/META-INF/async_doclitwr.wsdl
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/META-INF/async_doclitwr.wsdl?view=auto&rev=482887
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/META-INF/async_doclitwr.wsdl (added)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/META-INF/async_doclitwr.wsdl Tue Dec  5 20:19:29 2006
@@ -0,0 +1,312 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+	xmlns:tns="http://org/test/parallelasync"
+	xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="async"
+	targetNamespace="http://org/test/parallelasync">
+	
+	<wsdl:types>
+		<xsd:schema
+			targetNamespace="http://org/test/parallelasync"
+			xmlns:tns="http://org/test/parallelasync"
+			xmlns:xsd="http://www.w3.org/2001/XMLSchema">		
+			
+			<xsd:element name="ping">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="message" type="xsd:string" />						
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>		
+			
+			<xsd:element name="pingResponse">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="response" type="xsd:string" />
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>			
+			
+			<xsd:element name="sleep">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="message" type="xsd:string" />						
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>		
+			
+			<xsd:element name="sleepResponse">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="message" type="xsd:string" />
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>		
+
+			<xsd:element name="isAsleep">
+				<xsd:complexType />
+			</xsd:element>	
+
+			<xsd:element name="isAsleepResponse">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="message" type="xsd:string" />
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>	
+
+			<xsd:element name="wakeUp">
+				<xsd:complexType />
+			</xsd:element>	
+
+			<xsd:element name="wakeUpResponse">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="message" type="xsd:string" />						
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>	
+
+			<xsd:element name="invokeAsync">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="request" type="xsd:string" />						
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+
+			<xsd:element name="invokeAsyncResponse">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="response" type="xsd:string" />						
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+
+			<xsd:element name="customAsync">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="request" type="xsd:string" />						
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+
+			<xsd:element name="customAsyncResponse">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="response" type="xsd:string" />						
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+
+			<xsd:element name="another">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="request" type="xsd:string" />						
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+
+			<xsd:element name="anotherResponse">
+				<xsd:complexType>
+					<xsd:sequence>
+						<xsd:element name="response" type="xsd:string" />						
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+
+		</xsd:schema>
+	</wsdl:types>
+
+	<wsdl:message name="pingRequest">
+		<wsdl:part name="request" element="tns:ping" />
+	</wsdl:message>
+
+	<wsdl:message name="pingResponse">
+		<wsdl:part name="response" element="tns:pingResponse" />
+	</wsdl:message>
+
+	<wsdl:message name="sleepRequest">
+		<wsdl:part name="request" element="tns:sleep" />
+	</wsdl:message>
+
+	<wsdl:message name="sleepResponse">
+		<wsdl:part name="response" element="tns:sleepResponse" />
+	</wsdl:message>
+	
+	<wsdl:message name="wakeUpRequest">
+		<wsdl:part name="response" element="tns:wakeUp" />	
+	</wsdl:message>
+
+	<wsdl:message name="wakeUpResponse">
+		<wsdl:part name="response" element="tns:wakeUpResponse" />	
+	</wsdl:message>	
+	
+	<wsdl:message name="isAsleepRequest">
+	<wsdl:part name="response" element="tns:isAsleep" />
+	</wsdl:message>
+
+	<wsdl:message name="isAsleepResponse">
+		<wsdl:part name="response" element="tns:isAsleepResponse" />	
+	</wsdl:message>		
+	
+	<wsdl:message name="invokeAsyncRequest">
+		<wsdl:part name="request" element="tns:invokeAsync" />
+	</wsdl:message>
+
+	<wsdl:message name="invokeAsyncResponse">
+		<wsdl:part name="response" element="tns:invokeAsyncResponse" />
+	</wsdl:message>	
+	
+	<wsdl:message name="customAsyncRequest">
+		<wsdl:part name="request" element="tns:customAsync" />
+	</wsdl:message>
+
+	<wsdl:message name="customAsyncResponse">
+		<wsdl:part name="response" element="tns:customAsyncResponse" />
+	</wsdl:message>		
+	
+	<wsdl:message name="anotherRequest">
+		<wsdl:part name="request" element="tns:another" />
+	</wsdl:message>
+
+	<wsdl:message name="anotherResponse">
+		<wsdl:part name="response" element="tns:anotherResponse" />
+	</wsdl:message>		
+	
+	<wsdl:portType name="AsyncPort">
+		
+		<!-- simple ping operation that will be used for DocLitWrapped async test-->
+		<wsdl:operation name="ping">
+			<wsdl:input  message="tns:pingRequest" />
+			<wsdl:output message="tns:pingResponse" />
+		</wsdl:operation>		
+		
+		<!-- request for the server to goto sleep until release is called-->
+		<wsdl:operation name="sleep">
+			<wsdl:input  message="tns:sleepRequest" />
+			<wsdl:output message="tns:sleepResponse" />
+		</wsdl:operation>
+		
+		<!-- check to see if the sleep operation has been called yet -->
+		<wsdl:operation name="isAsleep">
+			<wsdl:input  message="tns:isAsleepRequest" />
+			<wsdl:output message="tns:isAsleepResponse" />
+		</wsdl:operation>			
+		
+		<!-- force the sleep operation to stop sleeping -->
+		<wsdl:operation name="wakeUp">
+			<wsdl:input  message="tns:wakeUpRequest" />
+			<wsdl:output message="tns:wakeUpResponse" />
+		</wsdl:operation>		
+			
+			
+			
+		<!-- Second suite of tests for Async operation naming:
+			 will test for how the implementation responds to
+		     methods ending in Async with async binding enabled
+		 -->
+		<wsdl:operation name="invokeAsync">
+			<wsdl:input  message="tns:invokeAsyncRequest" />
+			<wsdl:output message="tns:invokeAsyncResponse" />
+		</wsdl:operation>			
+			
+		<!-- will test for how the implementation responds to
+		     methods ending in async with async binding enabled
+		 -->			
+		<wsdl:operation name="customAsync">
+			<wsdl:input  message="tns:customAsyncRequest" />
+			<wsdl:output message="tns:customAsyncResponse" />
+		</wsdl:operation>
+		
+		<!-- we will map this operation to a java method ending in Async
+		 -->		
+		<wsdl:operation name="another">
+			<wsdl:input  message="tns:anotherRequest" />
+			<wsdl:output message="tns:anotherResponse" />
+		</wsdl:operation>					
+			
+	</wsdl:portType>
+	
+	<wsdl:binding name="Async" type="tns:AsyncPort">
+		<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
+		
+		<wsdl:operation name="ping">
+			<soap:operation soapAction="http://org/test/parallelasync/ping" />
+			<wsdl:input>
+				<soap:body use="literal"  />
+			</wsdl:input>
+			<wsdl:output>
+				<soap:body use="literal"  />
+			</wsdl:output>
+		</wsdl:operation>		
+		
+		<wsdl:operation name="sleep">
+			<soap:operation soapAction="http://org/test/parallelasync/sleep" />
+			<wsdl:input>
+				<soap:body use="literal"  />
+			</wsdl:input>
+			<wsdl:output>
+				<soap:body use="literal"  />
+			</wsdl:output>
+		</wsdl:operation>
+	
+		<wsdl:operation name="isAsleep">
+			<soap:operation soapAction="http://org/test/parallelasync/isAsleep" />
+			<wsdl:input>
+				<soap:body use="literal"  />
+			</wsdl:input>
+			<wsdl:output>
+				<soap:body use="literal"  />
+			</wsdl:output>
+		</wsdl:operation>	
+	
+		<wsdl:operation name="wakeUp">
+			<soap:operation soapAction="http://org/test/parallelasync/wakeUp" />
+			<wsdl:input>
+				<soap:body use="literal"  />
+			</wsdl:input>
+			<wsdl:output>
+				<soap:body use="literal"  />
+			</wsdl:output>
+		</wsdl:operation>
+	
+		<wsdl:operation name="invokeAsync">
+			<soap:operation soapAction="http://org/test/parallelasync/invokeAsync" />
+			<wsdl:input>
+				<soap:body use="literal"  />
+			</wsdl:input>
+			<wsdl:output>
+				<soap:body use="literal"  />
+			</wsdl:output>
+		</wsdl:operation>		
+	
+		<wsdl:operation name="customAsync">
+			<soap:operation soapAction="http://org/test/parallelasync/customAsync" />
+			<wsdl:input>
+				<soap:body use="literal"  />
+			</wsdl:input>
+			<wsdl:output>
+				<soap:body use="literal"  />
+			</wsdl:output>
+		</wsdl:operation>		
+	
+		<wsdl:operation name="another">
+			<soap:operation soapAction="http://org/test/parallelasync/another" />
+			<wsdl:input>
+				<soap:body use="literal"  />
+			</wsdl:input>
+			<wsdl:output>
+				<soap:body use="literal"  />
+			</wsdl:output>
+		</wsdl:operation>	
+	
+	</wsdl:binding>
+	
+	<wsdl:service name="AsyncService">
+		<wsdl:port binding="tns:Async" name="AsyncPort">
+			<soap:address location="http://localhost:9080/jaxws.async/services/AsyncDocLitWrappedService" />
+		</wsdl:port>
+	</wsdl:service>
+	
+</wsdl:definitions>

Added: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/META-INF/services.xml
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/META-INF/services.xml?view=auto&rev=482887
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/META-INF/services.xml (added)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/parallelasync/server/META-INF/services.xml Tue Dec  5 20:19:29 2006
@@ -0,0 +1,29 @@
+<serviceGroup>
+ <service name="AsyncService">
+  <messageReceivers>
+   <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.jaxws.server.JAXWSMessageReceiver"/>
+  </messageReceivers>
+  <parameter locked="false" name="ServiceClass">org.apache.axis2.jaxws.sample.parallelasync.server.DocLitWrappedPortImpl</parameter>
+  <operation name="ping" mep="http://www.w3.org/2004/08/wsdl/in-out">
+    <actionMapping/>
+  </operation>
+  <operation name="sleep" mep="http://www.w3.org/2004/08/wsdl/in-out">
+    <actionMapping/>
+  </operation>
+  <operation name="isAsleep" mep="http://www.w3.org/2004/08/wsdl/in-out">
+    <actionMapping/>
+  </operation>
+  <operation name="wakeUp" mep="http://www.w3.org/2004/08/wsdl/in-out">
+    <actionMapping/>
+  </operation>
+  <operation name="invokeAsync" mep="http://www.w3.org/2004/08/wsdl/in-out">
+    <actionMapping/>
+  </operation>
+  <operation name="customAsync" mep="http://www.w3.org/2004/08/wsdl/in-out">
+    <actionMapping/>
+  </operation>
+  <operation name="another" mep="http://www.w3.org/2004/08/wsdl/in-out">
+    <actionMapping/>
+  </operation>
+ </service>
+</serviceGroup>



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org