5

wsgenがMavenを介して生成したWebサービスがあります。サービスをGlassfishにデプロイすると、サーバーのURLがWSDLに配置されます。Glassfishサーバーの前面にはApacheプロキシサーバーがあります。

これが意味するのは、誰かが私たちのWSDLにアクセスし、サービスエンドポイントと彼らが見るsoapアドレスの場所を見るときです。

http://app server url/service...

それ以外の

http://proxy server url/service...

いくつかの項目について説明が必要だと思います...

  1. このエンドポイントアドレスは重要ですか?エンドポイントアドレスが、サービスを呼び出すために呼び出すプロキシサーバーのURLと一致しない場合でも、クライアントは機能できますか。これは基本的に、「インターフェースはオブジェクトに対するものであるため、WSDLはWebサービスに対するものである」という質問をします。

    更新:この最初の質問に答えると、「インターフェースとしてのWebサービスへのWSDLはオブジェクトに対するものである」ように見えます。WSDLで指定されたエンドポイントアドレスは重要ではありません。実際、ここで説明するように、WSDLで指定されているエンドポイントとは異なるエンドポイントでWebサービス操作を呼び出すことは比較的簡単です。

    //生成されたServiceクラスからサービスとプロキシを作成します。
    HelloService service = new HelloService();
    HelloPortプロキシ=service.getHelloPort();
    
    //エンドポイントアドレスを上書きします
    ((BindingProvider)proxy).getRequestContext()。put(
            BindingProvider.ENDPOINT_ADDRESS_PROPERTY、
            " http:// new / endpointaddress ");
    proxy.sayHello( "Hello World!");
    

  2. Glassfishにデプロイすると、WSDLが自動的に生成されます。アプリサーバーの設定を使用して、Glassfishで生成されたこのエンドポイントアドレスをオーバーライドする簡単な方法はありますか?その場合、生成されたWSDLにプロキシサーバーのURLを自動的に配置する設定を作成できます。

1が本当に重要であり、2でオーバーライドできない場合は、基本的に、開発と本番用に別々のビルドを実行する必要があることを意味します。別のサーバーにデプロイするために必要なのは、ある環境から新しいサーバーに既存の(そしてテストされた)戦争をドロップすることだけだと私には思えるので、これは「正しい」とは言えません。

4

2 に答える 2

5

サービスが展開されている場所にServer Nameパラメーターがあることがわかりました。HTTP ListenerGlassfish 管理コンソールからこの値を指定すると、Glassfish は要求 URL でホスト名ではなくこの名前を使用します。

残念ながら、アプリ サーバーとプロキシ サーバーが同じものを使用していない場合 (私たちのものは使用していません)、このパラメーターではポートまたはプロトコル (http から https) をオーバーライドすることはできません。

代わりに、サービスがこれを処理するための単純なサーブレット フィルターを作成しました。

于 2010-01-29T19:42:00.620 に答える