Je sais que cette question peut sembler stupide, mais je ne trouve aucune information à ce sujet .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 à l'adresse Par exemple, si je déploie le service Web sur mon serveur glassFish local, il est disponible à l'adresse "http: // localhost: 8080/MyService /", où "MyService" est le nom de mon service. La raison pour laquelle j'ai besoin de connaître cette URL est que mon service Web génère des fichiers que je dois rendre disponibles sur cette URL. Par exemple, l'appel de service Web renvoie l'URL "http: // localhost: 8080/MyService/report.html" J'ai trouvé des liens concernant "WebServiceContext" mais je ne parviens pas à obtenir l'adresse URL à laquelle mon site Web a été ajouté. le service est en cours d'exécution.
Édité
Pour clarifier: À l'intérieur de la classe MyWebService.Java, je souhaite connaître l'URL à laquelle mon service Web a été déployé (dans ce cas, mon service Web s'exécute à l'adresse "http: // localhost: 8080/MyService /", mais une fois déployé sur un serveur de production, cette URL changera)
Si vous demandez comment trouver le nom d'hôte (par exemple, "localhost" ou "www.example.com") écouté par votre conteneur de servlets, vous avez quelques options:
Inspecter l'en-tête 'Host' de la requête HttpServletRequest entrante
String hostname = request.getRequestHeader("Host");
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, en indiquant le chemin exact de certaines ressources, nous pourrions vouloir quelque chose comme ceci.
@GET
public String getResourcePath(@Context UriInfo ui) {
return ui.getAbsolutePath();
}
Si tout va bien, je peux vous aider. Je viens tout juste de commencer à travailler avec des services Web (Jersey REST) et j’ai constaté que l’URL de votre terminal est: '
où XXX = le modèle d'URL dans le mappage de servlet dans votre fichier web.xml (par exemple, fichier ci-dessous)
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
et YYY est le chemin défini par le paramètre @Path () de votre service Web. Dans le cas de cet exemple, il s’agirait ainsi:
'http: // localhost: 8080/MyService/rest/myPathDefinition'
Une autre chose à noter est que vous pouvez en fait changer la racine de contexte Web dans Eclipse, bien que le nom de votre projet Java soit défini par défaut. S'il vous plaît laissez-moi savoir si vous avez besoin de plus amples précisions ou si cela n'a pas aidé/quelqu'un peut développer sur elle.
Ajoutez la propriété ci-dessous dans votre classe de services Web.
@Resource
private WebServiceContext wsCtxt;
Maintenant, l'extrait de code ci-dessous 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é appelé, utilisez le code ci-dessous.
String clientIP = request .getRemoteAddr();
Les importations connexes sont ci-dessous:
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;
Vous pouvez le trouver sur votre fichier wsdl en tant que:
donc: http: // localhost: 8080/TestSOAPWebservice/services/TestClassImpl? wsdl serait l'URL de votre fichier WSDL.