web-dev-qa-db-ja.com

WebサービスのURLを見つけるにはどうすればよいですか?

これは馬鹿げた質問に思えるかもしれませんが、この質問に関する情報を見つけることができません。 Java Webサービス(NetBeansを使用して生成))があり、Webサービスクラス内に、WebサービスがデプロイされたURLを知りたいです。たとえば、Webをデプロイしている場合ローカルのGlassFishサーバー上のサービスで、Webサービスは "http:// localhost:8080/MyService /"で利用できます。ここで、 "MyService"は私のサービスの名前です。このURLを知る必要があるのは、私のWebサービスがこのURLで使用可能にする必要があるいくつかのファイル。たとえば、Webサービス呼び出しがURL "http:// localhost:8080/MyService/report.html"を返す "WebServiceContext"に関するリンクをいくつか見つけたが、私はそうではないWebサービスが実行されているURLを取得できます。

編集済み

明確にするために:MyWebService.Javaクラス内で、WebサービスがデプロイされたURLを確認したい(この場合、Webサービスは "http:// localhost:8080/MyService /"で実行されています)。本番サーバーにデプロイすると、このURLは変更されます)

13
Johnny

サーブレットコンテナがリッスンしているホスト名(「localhost」や「www.example.com」など)を見つける方法を尋ねる場合は、いくつかのオプションがあります。

  • 展開時に設定される構成ポイント(構成ファイル、システムプロパティなど)を追加します。
  • サーブレットコンテナーがJMXを介して「仮想ホスト」構成を公開しているかどうか、またはその構成ファイルを読み取るかどうかを調べます(例: Tomcat hosts
  • サーバーのIPアドレスを見つけ、DNSルックアップを実行して、構成されたホスト名を取得します
  • 着信HttpServletRequestの「Host」ヘッダーを検査します

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

4
Uriah Carpenter

私の意見ではより簡単です、例えば:

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

あるリソースの正確なパスを示す文字列をクライアントに送り返したい場合は、次のようにすることができます。

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

以下のプロパティを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();

webサービスが呼び出された場所から確認するには、以下のコードを使用します。

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

うまくいけば、私はあなたを助けることができます、私は最近webサービス(ジャージーREST)での作業を始めたばかりであり、エンドポイントへのURLが:http:// localhost:8080/MyService/XXX/YYYであることがわかりました
ここで、XXX = web.xmlファイル内のサーブレットマッピングのURLパターン(例:以下のファイル)

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

yYYはWebサービスの@Path()パラメータで定義されたパスであるため、この例の場合は次のようになります。

「http:// localhost:8080/MyService/rest/myPathDefinition」

注意すべきもう1つの点は、デフォルトでJavaプロジェクトの名前に設定されますが、実際にはEclipseでWebコンテキストルートを変更できます。さらに説明が必要な場合、またはこれは役に立たなかった/誰かがそれを拡張できる。

2
Mike

それはあなたのwsdlファイルで次のように見つけることができます:

したがって: http:// localhost:8080/TestSOAPWebservice/services/TestClassImpl?wsdl は、wsdlファイルのURLになります。

0
Shaikh Aziz