O'Reilly logo

Java SOA Cookbook by Eben Hewitt

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Creating a Web Service Client Based on an Existing SOAP Envelope

Problem

You want to manually create a client to invoke a web service. You have a SOAP envelope in a plain-text file, perhaps as the result of some XSL transformation.

Solution

Use the SAAJ 1.3 API to build your message by hand. Then use a Dispatch<T> to call the service with your message. There are several steps involved:

  1. Create a URL based on the WSDL location.

  2. Create a QName object representing the service.

  3. Create a QName object representing the port to invoke.

  4. Create a Dispatch object using the port QName. Parameterize Dispatch on javax.xml.soap.SOAPMessage to indicate that you will build the entire SOAP envelope yourself and provide it to the Dispatch.

  5. When creating the Dispatch, indicate Message for the mode and use SOAPMessage.class as the data type.

  6. Read in the text file containing a complete SOAP envelope for Message mode and use it to create an instance of SOAPMessage.

  7. Call the invoke method of your dispatch. Because your Dispatch is parameterized on SOAPMessage, that is what you’ll get back in response.

Discussion

Let’s turn to the business at hand. It can be very tricky getting started, so I’ll spell things out along the way.

On the server side, you have an EJB web service with the definition as shown in Example 5-3. This is the service your client will invoke.

Example 5-3. Catalog EJB web service

@WebService(serviceName="CatalogService", name="Catalog", targetNamespace="http://ns.soacookbook.com/ws/catalog") @Stateless ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required