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.