You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.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