2011-02-03 12 views
12

これは愚かな質問と思われるかもしれませんが、私はこの質問に関する情報を見つけることができません。 私は(NetBeansを使用して生成された)Java Webサービスを持っており、Webサービスクラス内でWebサービスがデプロイされたURLを知りたいと思います。 たとえば、ローカルのGlassFishサーバーにWebサービスをデプロイする場合、Webサービスはhttp:// localhost:8080/MyService /にあります。ここで、 "MyService"は自分のサービスの名前です。 私はこのURLを知る必要がある理由は、私のWebサービスがこのURLで利用可能にする必要のあるファイルを生成するためです。たとえば、Webサービスコールは「http:// localhost:8080/MyService/report.html」というURLを返します。 「WebServiceContext」についてのリンクがいくつか見つかりましたが、WebサービスのURLを取得できませんランニング。インサイドMyWebService.javaクラスIは、(このケースでは、私のWebサービスは、HTTP「で実行されている自分のWebサービスをデプロイしたときのURLを知りたい:// localhostを:8080明確にするためにWebサービスのURLはどのようにして見つけられますか?

を編集

/MyService/"と表示されますが、プロダクションサーバーにデプロイされると、このURLは変更されます)

答えて

4

あなたはいくつかのオプションがあり、あなたのサーブレットコンテナがあなたに聞いていること(たとえば、「localhostの」や「www.example.com」)ホスト名を見つける方法を求めている場合は、次の

  • 構成ポイントを追加します。それはのIPアドレスを探す
  • (例えばtomcat hosts)サーブレットコンテナは、JMX経由で任意の「仮想ホストの設定を公開したり、その設定ファイルを読み込む場合に見て、展開時間(例えば設定ファイル、システムプロパティ)
  • に設定されていますサーバーを検索し、DNSルックアップを実行して構成されたホスト名を取得します
  • 例えば、私の意見では簡単

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

+0

私は現在、設定ファイルからURLを読むように設定しています。私はホストURLを見つけるのに十分なはずだと思っていたので、この設定の設定を削除しようとしています。 – Johnny

+0

本当にサーバー側の構成をゼロにしたい場合は、HTTP要求に含まれている「Host」ヘッダーを使用する必要があります。 –

+0

ウリア、「ホスト」ヘッダーからそのURLを取得できませんでした。コードを表示できる場合はお知らせください。ありがとう。 – Johnny

2

私はあなたにお手伝いできます。私はちょうど最近webservices(Jersey 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 '

Javaプロジェクトの名前がデフォルトになりますが、実際にはEclipseのWebコンテキストルートを変更することができます。それ以上の説明が必要な場合、またはこれが助けにならなかった場合は誰かにお知らせください。

+0

私は自分自身を十分にはっきりさせていないと思うので、私は質問を再整理しようとします。私はそれを展開しているので、私のWebサービスのURLを知っています。問題は、プログラムでそのURLを取得する方法です。 MyWebservice.javaクラスの内部では、WebサービスがデプロイされたURLを知りたい(この場合は "http:// localhost:8080/MyService"ですが、Webサービスがプロダクションサーバー)。 – Johnny

8

HttpServletRequestに入ってくるの 'ホスト' ヘッダーを点検:

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

我々は戻って文字列を送信する場合クライアント、いくつかのリソースの正確なパスを示す、我々はこのようなものが欲しいかもしれません。

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

ウェブサービスクラスに下記のプロパティを追加します。以下のコードを使用して、Webサービスが呼び出された場所から確認すること

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

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

:今のコードスニペット以下

@Resource  
private WebServiceContext wsCtxt; 

はあなたが捜している値が得られます。

String clientIP = request .getRemoteAddr(); 

関連の輸入は以下のとおりです。したがって、

:それのようにWSDLファイルで見つけることができ

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; 
+0

@Resourceが下nullを返しますようです特定の状況...こちらをご覧ください:https://stackoverflow.com/questions/15346630/jax-ws-webservicecontext-remains-null-annotation-injection-fails – JGFMK

関連する問題