Using code that was generated with wsimport
, can the service endpoint be overridden without having to regenerate the code?
I have written a simple java webservice, following are the steps:
wsimport http://localhost:8080/service/helloservice?Wsdl
The problem is that is the service is deployed on an app server running on port other than 8080, the communication between client and service never happens. I am trying to know what is the best way to create stubs that does not have server and port hardcoded in the stub used by the client.
The wsimport command-line tool processes an existing Web Services Description Language (WSDL) file and generates the required artifacts for developing Java™ API for XML-Based Web Services (JAX-WS) web service applications.
The wsimport tool generates JAX-WS portable artifacts, such as: Service Endpoint Interface (SEI) Service. Exception class mapped from wsdl:fault (if any) Async Reponse Bean derived from response wsdl:message (if any)
You can run wsimport command from any directory where you like to generate stubs. We have published a sample soap web service which we going to use in this example. You can use this sample service URL https://test.java4coding.com/core/service/service.php?wsdl to test the wsimport command.
Your client can set the end-point in the service "port" at runtime via the BindingProvider interface.
Consider the JAX-WS client in this JAX-WS tutorial. Another way to write this code would be:
HelloService service = new HelloService(); Hello port = service.getHelloPort(); BindingProvider bindingProvider = (BindingProvider) port; bindingProvider.getRequestContext().put( BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://foo:8086/HelloWhatever"); String response = port.sayHello(name);
Caveat: I haven't downloaded the tutorial code and tested this code against it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With