Как найти URL-адрес моего веб-сервиса?

Я знаю, что это может показаться глупым вопросом, но я просто не могу найти никакой информации по этому вопросу. У меня есть веб-служба java (сгенерированная с помощью NetBeans), и внутри класса веб-службы я хотел бы знать URL, по которому была развернута веб-служба. Например, если я развертываю веб-службу на своем локальном сервере glassFish, веб-служба доступна по адресу "http://localhost:8080/MyService/" где "MyService" - это название моей службы. Причина мне нужно знать этот URL-адрес вызван тем, что моя веб-служба генерирует некоторые файлы, которые мне нужно сделать доступными по этому URL-адресу. Например, вызов веб-службы возвращает URL-адрес "http://localhost:8080/MyService/report - ... формат html" Я нашел некоторые ссылки о "WebServiceContext", но я не могу получить URL-адрес, на котором работает моя веб-служба.

редактировать

чтобы уточнить: внутри MyWebService.класс java я хочу узнать URL, по которому была развернута моя веб-служба (в этом случае моя веб-служба бег на ...http://localhost:8080/MyService/", но как только он будет развернут на рабочем сервере, этот URL-адрес изменится)

5 ответов


Если вы спрашиваете, как найти имя хоста (например, 'localhost' или 'www.example.com') что ваш контейнер сервлета слушает вас, у вас есть несколько вариантов:

  • добавьте точку конфигурации, заданную во время развертывания (например, файл конфигурации, системное свойство)
  • посмотрите, если ваш контейнер сервлетов предоставляет любую конфигурацию "виртуального хоста" через JMX или читает его файлы конфигурации (например,хост Tomcat)
  • найдите IP-адрес сервера и сделайте поиск DNS, чтобы получить настроенное имя хоста
  • Проверьте заголовок "Host" входящего HttpServletRequest

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


проще на мой взгляд, например:

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

Если мы хотим отправить строку обратно клиенту, указав точный путь к некоторому ресурсу, нам может понадобиться что-то вроде этого.

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

надеюсь, я смогу вам помочь, я только недавно начал работать с веб-сервисами (Jersey REST) , и я обнаружил, что url-адрес вашей конечной точки : 'http://localhost:8080/MyService/XXX/YYY'
где XXX = шаблон URL в сопоставлении сервлетов в вашем интернете.XML-файл (например. файл ниже)

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

и YYY-это путь, определенный параметром @Path() вашего веб-сервиса, поэтому в случае этого примера это будет что-то вроде:

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

еще одна вещь, чтобы отметить, что вы можете фактически изменить корень веб-контекста в eclipse, хотя он будет по умолчанию имя вашего проекта Java. Пожалуйста, дайте мне знать, если вам нужны дополнительные разъяснения или если это не помогло / кто-то может расширить его.


добавьте свойство ниже в свой класс webservice.

@Resource    
private WebServiceContext wsCtxt;

теперь ниже фрагмента кода даст вам значения, которые вы ищете:

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

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

чтобы проверить, откуда был вызван веб-сервис, используйте приведенный ниже код.

    String clientIP = request .getRemoteAddr();

связанный импорт ниже:

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;

его можно найти в вашем файле wsdl как:

таким образом: http://localhost:8080/TestSOAPWebservice/services/TestClassImpl?язык WSDL будет url-адрес вашего файла wsdl.