Как найти 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.