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 a JAX-WS clients from your WSDL. You can run it one of three ways:
JAX-WS provides "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:
URL wsdlURL = new URL("http://localhost/hello?wsdl");
Service service = Service.create(new QName("HelloService"), wsdlURL);
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.
TODO: Document Service class usage
Simple Frontend Client Proxy
If you've developed a service using the simple frontend, you can use the ClientProxyFactoryBean API to create a Java proxy client for your service. This way you can use the service interface to talk to your service. For more information see the Simple Frontend documentation.
CXF includes a Client interface which allows you to invoke operations and pass parameters for those operations. For instance:
Client client = ....;
Object result = client.invoke("sayHi", "Dan");
There are two ways to create Clients at runtime. The first would be through the ClientFactoryBean and JaxWsClientFactoryBean classes. The second is through the DynamicClientFactory. The DynamicClientFactory goes the additional step of generating and compiling JAXB POJOs in the background for use at runtime via reflection. This is most useful when you're using a dynamic language such as Groovy with CXF.