Johnny
Johnny

Reputation: 2573

How do I find the URL of my web service?

I know this might seem a stupid question but I am just not able to find any information regarding this question. I have a java web service (generated using NetBeans) and inside the web service class I would like to know the URL at which the web service was deployed. For example, if I am deploying the web service on my local glassFish server, the web service is available at "http://localhost:8080/MyService/" where "MyService" is the name of my service. The reason I need to know this URL is because my web service generates some files that I need to make available at this URL. For example, the web service call returns a URL "http://localhost:8080/MyService/report.html" I have found some links about "WebServiceContext" but I am not able to get the URL at which my web service is running.

Edited

To clarify: Inside MyWebService.java class I want to find out the URL at which my web service was deployed (in this case, my web service is running at "http://localhost:8080/MyService/", but once it is deployed on a production server, this URL will change)

Upvotes: 16

Views: 91596

Answers (5)

Shaikh Aziz
Shaikh Aziz

Reputation: 1

It could be found on your wsdl file as:

therefore: http://localhost:8080/TestSOAPWebservice/services/TestClassImpl?wsdl would be the url to your wsdl file.

Upvotes: 0

Deepak Sharma
Deepak Sharma

Reputation: 51

Add the below property in your webservice class.

@Resource    
private WebServiceContext wsCtxt;

Now below code snippet will give you the values you are looking for:

    MessageContext msgCtxt = wsCtxt.getMessageContext();
    HttpServletRequest request =
        (HttpServletRequest)msgCtxt.get(MessageContext.SERVLET_REQUEST);

    String hostName = request .getServerName();
    int port = request .getServerPort();

to check from where the webservice was invoked, use the below code.

    String clientIP = request .getRemoteAddr();

Related imports are below:

import javax.annotation.Resource;

import javax.servlet.http.HttpServletRequest;

import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;

import weblogic.jws.Context;

import weblogic.wsee.jws.JwsContext;

Upvotes: 3

Rozgeboy
Rozgeboy

Reputation: 91

Easier in my opinion, for example:

@GET
public URI redirectSendMail(@Context UriInfo ui) {
  return ui.getBaseUri();
}

If we want to send a String back to the client, indicating the exact path of some resource, we might want something like this.

@GET
public String getResourcePath(@Context UriInfo ui) {
  return ui.getAbsolutePath();
}

Upvotes: 8

Uriah Carpenter
Uriah Carpenter

Reputation: 6726

If you are asking how to find the hostname (e.g. 'localhost' or 'www.example.com') that your servlet container is listening to you have a few options:

  • Add a configuration point that is set at deployment time (e.g. config file, system property)
  • Look into if your servlet container exposes any 'virtual host' configuration via JMX or read its config files (e.g. tomcat hosts)
  • Find the IP Address of the server and do a DNS lookup to get its configured hostname
  • Inspect the 'Host' header of the incoming HttpServletRequest

    String hostname = request.getRequestHeader("Host");

Upvotes: 5

Mike
Mike

Reputation: 8545

Hopefully I am able to help you, I have just recently started working with webservices (Jersey REST) and I have found that the url to your endpoint is : 'http://localhost:8080/MyService/XXX/YYY'
where XXX = the URL pattern in the servlet mapping in your web.xml file (eg. file below)

<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>   

and the YYY is the path defined by your webservice's @Path() parameter so in the case of this example it would be something like:

'http://localhost:8080/MyService/rest/myPathDefinition'

Another thing to note is that you can in fact change the web context root in eclipse, though it will default to the name of your Java project. Please let me know if you need further clarification or if this did not help / someone can expand on it.

Upvotes: 2

Related Questions