web-dev-qa-db-ger.com

Wie finde ich die URL meines Webdienstes?

Ich weiß, dass dies eine dumme Frage sein könnte, aber ich bin einfach nicht in der Lage, Informationen zu dieser Frage zu finden. Ich habe einen Java-Webdienst (der mit NetBeans generiert wurde) und möchte innerhalb der Webdienstklasse wissen, unter welcher URL der Webdienst bereitgestellt wurde. Wenn ich beispielsweise den Webdienst auf meinem lokalen glassFish-Server bereitstelle, ist der Webdienst unter "http: // localhost: 8080/MyService /" verfügbar, wobei "MyService" der Name meines Dienstes ist. Der Grund, warum ich diese URL kennen muss, ist, dass mein Webdienst einige Dateien generiert, die ich unter dieser URL verfügbar machen muss. Beispielsweise gibt der Webdienstaufruf eine URL "http: // localhost: 8080/MyService/report.html" zurück. Ich habe einige Links zu "WebServiceContext" gefunden, kann jedoch die URL nicht ermitteln, unter der mein Webdienst ausgeführt wird .

Bearbeitet

Zur Verdeutlichung: In der Klasse MyWebService.Java möchte ich die URL ermitteln, unter der mein Webdienst bereitgestellt wurde (in diesem Fall wird mein Webdienst unter "http: // localhost: 8080/MyService /" ausgeführt, aber sobald dies der Fall ist) Auf einem Produktionsserver bereitgestellt, ändert sich diese URL.)

12
Johnny

Wenn Sie nach dem Hostnamen fragen (z. B. 'localhost' oder 'www.example.com'), den Ihr Servlet-Container hört, haben Sie einige Optionen:

  • Fügen Sie einen Konfigurationspunkt hinzu, der zum Zeitpunkt der Bereitstellung festgelegt wird (z. B. Konfigurationsdatei, Systemeigenschaft).
  • Prüfen Sie, ob Ihr Servlet-Container eine Konfiguration für 'virtuelle Hosts' über JMX verfügbar macht, oder lesen Sie die Konfigurationsdateien (z. B. Tomcat hosts ).
  • Suchen Sie die IP-Adresse des Servers und führen Sie eine DNS-Suche durch, um den konfigurierten Hostnamen abzurufen
  • Überprüfen Sie den "Host" -Header der eingehenden HttpServletRequest

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

4
Uriah Carpenter

Einfacher meiner Meinung nach zum Beispiel:

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

Wenn wir einen String an den Client zurücksenden möchten, der den genauen Pfad einer Ressource angibt, möchten wir vielleicht so etwas.

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

Hoffentlich kann ich Ihnen helfen. Ich habe vor kurzem mit Webservices (Jersey REST) ​​gearbeitet und habe festgestellt, dass die URL zu Ihrem Endpunkt lautet: 'Http: // localhost: 8080/MyService/XXX/JJJ '
Dabei ist XXX das URL-Muster in der Servlet-Zuordnung in Ihrer Datei web.xml (z. B. Datei unten)

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

und YYY ist der Pfad, der durch den @Path () -Parameter Ihres Webservice definiert wird. In diesem Beispiel würde dies wie folgt aussehen: 

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

Beachten Sie außerdem, dass Sie das Webkontextstammverzeichnis in Eclipse tatsächlich ändern können. Der Name Ihres Java-Projekts wird jedoch standardmäßig verwendet. Bitte lassen Sie mich wissen, wenn Sie weitere Abklärungen benötigen oder dies nicht geholfen hat/jemand es erweitern kann.

2
Mike

Fügen Sie die folgende Eigenschaft in Ihre Webservice-Klasse ein.

@Resource    
private WebServiceContext wsCtxt;

Das folgende Code-Snippet gibt Ihnen die Werte, nach denen Sie suchen:

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

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

um zu überprüfen, von wo aus der Webservice aufgerufen wurde, verwenden Sie den folgenden Code.

    String clientIP = request .getRemoteAddr();

Verwandte Importe sind unten:

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
Deepak Sharma

Es könnte in Ihrer wsdl-Datei gefunden werden als:

daher: http: // localhost: 8080/TestSOAPWebservice/services/TestClassImpl? wsdl wäre die URL zu Ihrer WSDL-Datei.

0
Shaikh Aziz