Chapter 36. Implementing a WS Client

36.1. WS Client Overview


The key object in a WS client is the WS client proxy object, which enables you to access the remote Web service by invoking methods on the SEI. The proxy object itself can easily be instantiated using the jaxws:client element in Spring XML.

Demonstration location

The code presented in this chapter is taken from the following demonstration:
For details of how to download and install the demonstration code, see Chapter 33, Demonstration Code for Camel/CXF

WSDL contract

The WSDL contract is a platform-neutral and language-neutral description of the Web service interface. It contains all of the metadata that a client needs to find a Web service and invoke its operations. You can generate Java stub code from the WSDL contract, which provides an API that makes it easy to invoke the remote WSDL operations.

Service Endpoint Interface (SEI)

The most important piece of the generated stub code is the SEI, which is an ordinary Java interface that represents the Web service interface in the Java language.

WS client proxy

The WS client proxy is an object that converts Java method invocations to remote procedure calls, sending and receiving messages to a remote instance of the Web service across the network. The methods of the proxy are exposed through the SEI.
The proxy type is generated dynamically by Apache CXF at run time. That is, their is no class in the stub code that corresponds to the implementation of the proxy (the only relevant entity is the SEI, which defines the proxy's interface).

The CustomerService client

To take a specific example, consider the customer-ws-client demonstration, which is available from the following location:
Figure 36.1, “Building a WS Client” shows an overview of the files required to implement and build the WS client.

Figure 36.1. Building a WS Client

Building a WS Client

Implementing and building the WS client

To implement and build the sample WS client shown in Figure 36.1, “Building a WS Client”, starting from scratch, you would perform the following steps:
  1. Obtain a copy of the WSDL contract.
  2. Generate the Java stub code from the WSDL contract using a WSDL-to-Java converter, ws2java. This gives you the SEI, CustomerService, and its related classes, such as Customer.
  3. Implement the main client class, ClientInvoker, which invokes the Web service operations. In this class define a bean property of type, CustomerService, so that the client class can receive a reference to the WS client proxy by property injection.
  4. In a Spring XML file, instantiate the WS client proxy and inject it into the main client class, ClientInvoker.