Red Hat Training
A Red Hat training course is available for Red Hat Fuse
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:clientelement in Spring XML.
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
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-clientdemonstration, 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
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:
- Obtain a copy of the WSDL contract.
- 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
- 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.
- In a Spring XML file, instantiate the WS client proxy and inject it into the main client class,