FaqWebServiceLocation
How can I change URL the web service client connects to at runtime
JAX-WS client (Java EE 5)
Using BindingProvider.ENDPOINT_ADDRESS_PROPERTY:
... //get an instance of port hello.client.HelloPort port = service.getHelloPort(); //change the wsdl location ((BindingProvider) port).getRequestContext().put( BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://new.server.com/some/path/toWs?wsdl"); ...
Using Web Service injection (@WebServiceRef)
Inside the Java EE 5 container the wsdl url can be specified in @WebServicRef annotation :
public class ClientServlet extends HttpServlet { @WebServiceRef(wsdlLocation = "http://localhost:8080/WebApplication1/Hello?wsdl") private hello.client.HelloService service; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... hello.client.HelloPort port = service.getHelloPort(); .... } ... }
Specifying WSDL Url in web.xml
Inside the web container (e.g. in servlet) the WSDL URL can be specified more dynamicaly - in deployment descriptor:
<web-app ...> <context-param> <param-name>wsdl-url</param-name> <param-value>http://localhost:8080/WebApplication1/Hello?wsdl</param-value> </context-param> ... </web-app>
then, the previous code ca be modified in servlet class:
public class ClientServlet extends HttpServlet { ... //get an instance of port hello.client.HelloPort port = service.getHelloPort(); //change the wsdl location ((BindingProvider) port).getRequestContext().put( BindingProvider.ENDPOINT_ADDRESS_PROPERTY,getWsdlUrl()); ... private String getWsdlUrl() { return getServletContext().getInitParameter("wsdl-url"); } }
JAX-RPC client (J2EE 1.4)
... //get an instance of port test.CounterService port = service.getCounterServicePort(); //change the wsdl location ((javax.xml.rpc.Stub) port)._setProperty( javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY, "http://new.server.com/some/path/toWs?wsdl"); ...