Comment trouver L'URL de mon service web?

je sais que cela peut sembler une question stupide mais je ne suis tout simplement pas en mesure de trouver des informations concernant cette question. J'ai un service Web java (généré à L'aide de NetBeans) et à l'intérieur de la classe de service web, j'aimerais connaître l'URL à laquelle le service web a été déployé. Par exemple, si je déploie le service web sur mon serveur glassFish local, le service web est disponible à "http://localhost:8080/MyService / "où" MyService " est le nom de mon service. La raison j'ai besoin de savoir ce URL est parce que mon service Web génère des fichiers que je dois rendre disponibles à cette URL. Par exemple, l'appel de service web renvoie une URL "http://localhost:8080/MyService/report.HTML" J'ai trouvé quelques liens sur "WebServiceContext" mais je ne suis pas en mesure d'obtenir l'URL à laquelle mon service web est en cours d'exécution.

Modifié

pour clarifier: à L'intérieur de MyWebService.classe java je veux savoir L'URL à laquelle mon service web a été déployé (dans ce cas, mon service web est en cours d'exécution) à "http://localhost:8080/MyService/", mais une fois qu'il est déployé sur un serveur de production, cette URL va changer)

12
demandé sur Johnny 2011-02-04 01:44:36

5 réponses

Si vous vous demandez comment trouver le nom d'hôte (par exemple, 'localhost' ou 'www.example.com') que votre conteneur de servlet, c'est l'écoute, vous avez plusieurs options:

  • Ajouter un point de configuration qui est défini au moment du déploiement (par exemple fichier de configuration, propriété du système)
  • regardez si votre conteneur servlet expose une configuration 'hôte virtuel' via JMX ou lisez ses fichiers de configuration (par exemple hôtes tomcat)
  • trouver L'adresse IP du serveur et faire Recherche DNS pour obtenir son nom d'hôte configuré
  • Inspectez l'en-tête 'Host' de la requête HttpServletRequest entrante

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

4
répondu Uriah Carpenter 2011-03-15 00:46:45

plus Facile à mon avis, par exemple:

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

si nous voulons renvoyer une chaîne au client, indiquant le chemin exact d'une ressource, nous pourrions vouloir quelque chose comme ceci.

@GET
public String getResourcePath(@Context UriInfo ui) {
  return ui.getAbsolutePath();
}
8
répondu Rozgeboy 2012-12-25 15:06:36

J'espère que je suis en mesure de vous aider, je viens de commencer à travailler avec webservices (Jersey REST) et j'ai trouvé que l'url de votre endpoint est : "http://localhost:8080/MyService/XXX/YYY'

où XXX = le motif D'URL dans le mappage de servlet dans votre web.fichier xml (par exemple. le fichier ci-dessous)

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

et le YYY est le chemin défini par le paramètre @Path() de votre service web, donc dans le cas de cet exemple, ce serait quelque chose comme:

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

une autre chose à noter est que vous pouvez en fait changer la racine du contexte web dans eclipse, bien qu'elle soit par défaut au nom de votre projet Java. Veuillez me faire savoir si vous avez besoin de plus de précisions ou si cela n'a pas aidé / quelqu'un peut développer.

2
répondu Mike 2011-02-03 23:36:51

ajouter la propriété ci-dessous dans votre classe webservice.

@Resource    
private WebServiceContext wsCtxt;

maintenant ci-dessous code snippet vous donnera les valeurs que vous recherchez:

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

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

pour vérifier d'où le service Web a été invoqué, utilisez le code ci-dessous.

    String clientIP = request .getRemoteAddr();

les importations connexes sont les suivantes:

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;
1
répondu Deepak Sharma 2013-05-20 20:38:25

Il pourrait être trouvé sur votre fichier wsdl:

par conséquent: