Как мне найти URL моего веб-сервиса? - PullRequest
13 голосов
/ 04 февраля 2011

Я знаю, что это может показаться глупым вопросом, но я просто не могу найти какую-либо информацию по этому вопросу. У меня есть веб-служба 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 ]

8 голосов
/ 24 ноября 2011

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

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

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

@GET
public String getResourcePath(@Context UriInfo ui) {
  return ui.getAbsolutePath();
}
4 голосов
/ 04 февраля 2011

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

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

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

2 голосов
/ 04 февраля 2011

Надеюсь, я смогу вам помочь, я только недавно начал работать с веб-сервисами (Jersey REST) ​​и обнаружил, что URL вашей конечной точки: 'http://localhost:8080/MyService/XXX/YYY'
где XXX = шаблон URL в отображении сервлета вваш файл web.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.Пожалуйста, дайте мне знать, если вам нужны дальнейшие разъяснения или если это не помогло / кто-то может расширить это.

1 голос
/ 21 мая 2013

Добавьте следующее свойство в свой класс веб-сервиса.

@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;
0 голосов
/ 17 июня 2017

Может быть найдено в вашем файле wsdl как:

поэтому: http://localhost:8080/TestSOAPWebservice/services/TestClassImpl?wsdl будет URL вашего файла wsdl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...