Skip to main content Skip to complementary content

JAX-WS Client Development Options

WSDL2Java generated Client

One of the most common scenarios is that where you have a service which you may or not manage and this service has a WSDL. In this case you'll often want to generate a client from the WSDL. This provides you with a strongly typed interface by which to interact with the service. Once you've generated a client, typical usage of it will look like so:

HelloService service = new HelloService();
            Hello client = service.getHelloHttpPort();
            String result = client.sayHi("Joe");

The WSDL2Java tool will generate JAX-WS clients from your WSDL. You can run WSDL2java one of three ways:

  • The command line

  • The Maven Plugin

  • With the WSDL2Java API

For more in depth information read Developing a JAX-WS consumer or see the Hello World demos inside the distribution.

JAX-WS Proxy

Instead of using a wsdl2java-generated stub client directly, you can use Service.create to create Service instances, the following code illustrates this process:

import java.net.URL;
            import javax.xml.ws.Service;
            ...
            
            URL wsdlURL = new URL("http://localhost/hello?wsdl");
            QName SERVICE_NAME = new QName("http://apache.org/hello_world_soap_http", 
            "SOAPService");
            Service service = Service.create(wsdlURL, SERVICE_NAME);
            Greeter client = service.getPort(Greeter.class);
            String result = client.greetMe("test");

JAX-WS Dispatch APIs

JAX-WS provides the "dispatch" mechanism which makes it easy to dynamically invoke services which you have not generated a client for. Using the Dispatch mechanism you can create messages (which can be JAXB objects, Source objects, or a SAAJMessage) and dispatch them to the server. A simple example might look like this:

import java.net.URL;
            import javax.xml.transform.Source;
            import javax.xml.ws.Dispatch;
            import javax.xml.ws.Service;
            ...
            
            URL wsdlURL = new URL("http://localhost/hello?wsdl");
            Service service = Service.create(wsdlURL, new QName("HelloService"));
            Dispatch<Source> disp = service.createDispatch(new QName("HelloPort"),
            Source.class, Service.Mode.PAYLOAD);
            
            Source request = new StreamSource("<hello/>")
            Source response = disp.invoke(request);

NOTE: you can also use dispatches without a WSDL.

For more in depth information see the Hello World demos inside the distribution.

Did this page help you?

If you find any issues with this page or its content – a typo, a missing step, or a technical error – please let us know!