此内容没有您所选择的语言版本。
Chapter 40. Developing Asynchronous Applications
Abstract
JAX-WS provides an easy mechanism for accessing services asynchronously. The SEI can specify additional methods that can be used to access a service asynchronously. The Apache CXF code generators generate the extra methods for you. You simply add the business logic.
In addition to the usual synchronous mode of invocation, Apache CXF supports two forms of asynchronous invocation:
- Polling approach — To invoke the remote operation using the polling approach, you call a method that has no output parameters, but returns a
javax.xml.ws.Responseobject. TheResponseobject (which inherits from thejavax.util.concurrency.Futureinterface) can be polled to check whether or not a response message has arrived. - Callback approach — To invoke the remote operation using the callback approach, you call a method that takes a reference to a callback object (of
javax.xml.ws.AsyncHandlertype) as one of its parameters. When the response message arrives at the client, the runtime calls back on theAsyncHandlerobject, and gives it the contents of the response message.
40.1. WSDL for Asynchronous Examples 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Example 40.1, “WSDL Contract for Asynchronous Example” shows the WSDL contract that is used for the asynchronous examples. The contract defines a single interface,
GreeterAsync, which contains a single operation, greetMeSometime.
Example 40.1. WSDL Contract for Asynchronous Example
<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://apache.org/hello_world_async_soap_http"
xmlns:x1="http://apache.org/hello_world_async_soap_http/types"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://apache.org/hello_world_async_soap_http"
name="HelloWorld">
<wsdl:types>
<schema targetNamespace="http://apache.org/hello_world_async_soap_http/types"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:x1="http://apache.org/hello_world_async_soap_http/types"
elementFormDefault="qualified">
<element name="greetMeSometime">
<complexType>
<sequence>
<element name="requestType" type="xsd:string"/>
</sequence>
</complexType>
</element>
<element name="greetMeSometimeResponse">
<complexType>
<sequence>
<element name="responseType"
type="xsd:string"/>
</sequence>
</complexType>
</element>
</schema>
</wsdl:types>
<wsdl:message name="greetMeSometimeRequest">
<wsdl:part name="in" element="x1:greetMeSometime"/>
</wsdl:message>
<wsdl:message name="greetMeSometimeResponse">
<wsdl:part name="out"
element="x1:greetMeSometimeResponse"/>
</wsdl:message>
<wsdl:portType name="GreeterAsync">
<wsdl:operation name="greetMeSometime">
<wsdl:input name="greetMeSometimeRequest"
message="tns:greetMeSometimeRequest"/>
<wsdl:output name="greetMeSometimeResponse"
message="tns:greetMeSometimeResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="GreeterAsync_SOAPBinding"
type="tns:GreeterAsync">
...
</wsdl:binding>
<wsdl:service name="SOAPService">
<wsdl:port name="SoapPort"
binding="tns:GreeterAsync_SOAPBinding">
<soap:address location="http://localhost:9000/SoapContext/SoapPort"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>