How do I find the URL of my web service?

2019-03-25 08:28发布

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)

标签: java url service
5条回答
何必那么认真
2楼-- · 2019-03-25 08:42

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.

查看更多
时光不老,我们不散
3楼-- · 2019-03-25 08:53

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;
查看更多
再贱就再见
4楼-- · 2019-03-25 08:58

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");

查看更多
叛逆
5楼-- · 2019-03-25 09:00

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();
}
查看更多
The star\"
6楼-- · 2019-03-25 09:00

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.

查看更多
登录 后发表回答