16

WSDL の場所に相対的な、または少なくともサーバーに相対的な WSDL 内の soap:address の場所を持つことはできますか? たとえば、私は書きたい:

<soap:address location="https://exampleserver.com/axis2/services/ExampleService" />

なので:

<soap:address location="/axis2/services/ExampleService" />

これにより、テスト サーバーなどの複数のサーバーへの展開を高速化できます。また、axis2c の場合、サービスを HTTP と HTTPS の両方から使用したい場合、サービスを使用する開発者は、デフォルトの場所「?WSDL」から WSDL を単純にインポートできないため、サービスを使用するのが難しくなります。

4

3 に答える 3

8

WSDL は、Web サービスと対話するために必要なメッセージ形式、タイプ、パラメーターなどをクライアントに記述します。これは、対話に必要なコードを生成するためにWSDL2Cなどのツールによって使用されます。

ただし、HTTP または HTTPS でサービスを公開する場合でも、クライアント スタブ コードは同じになります。エンドポイント アドレスごとにクライアント スタブを再生成しません。クライアントはそのままで、変更されるのはアクセス ポイントです。

このアドレスは、生成されたクライアント コードにハードコーディングしないでください。クライアント アプリケーション内で構成可能な URL にする必要があります。

確かに、WSDL 内に指定された URL があり、Web サービスを開発サーバーにデプロイし、ステージングして次に本番環境にデプロイするときは面倒です。エンドポイントは環境ごとに異なります (HTTP + HTTPS の場合は 2 倍になる可能性があります) が、この時点ではコードを再生成しないため、開発者は影響を受けません。

Web サービスへのアクセスに関しては、たとえそれが何かに対して相対的であっても絶対的であっても、(開発サーバー、ステージング サーバー、および製品サーバー用に) 異なるアドレスを持つことになります。したがって、アクセス ポイントをクライアント構成で管理する必要があるため、WSDL 内に相対アドレスを使用することがどのように役立つかわかりません。

于 2011-09-02T19:49:36.223 に答える
4

WSDL を取得するには 2 つの方法があります。

ハードコーディングされた wsdl が提供される場所。たとえば、次のようになります。

https://hostname/contextname/services/myAPIService/myAPI.wsdl

もう 1 つは、生成された wsdl が提供される場所です。たとえば、次のようになります。

https://hostname/contextname/services/myAPIService?wsdl

動的オプションを使用すると、次のコードが使用されます。

req.getRequestURL().toString();

生成された WSDL で使用される URL を取得します。このコードは、クラス ListingAgent (パッケージ org.apache.axis2.transport.http 内) にあります。

質問で述べたことから、相対的な場所が必要な場合は、複数のサーバーで使用する必要があるため、動的オプションを使用する必要があります。

動的オプションに関して私が見つけた問題の 1 つは、元の WSDL で場所が HTTP を使用している場合、HTTPS を使用してアクセスしたとしても、生成された場所でも HTTP を使用することです。(これは、私のプロジェクトが使用しているバージョン 1.5 で発生します)

もう 1 つの問題は、ロード バランサーを使用している場合です。これは、生成された WSDL がバランサーではなく最終サーバーの場所で生成されるためです。このためのオプションは、クラス AxisServlet および ListingAgent を拡張して、上記のコードを置き換えることです。

于 2013-07-25T13:49:06.680 に答える
3

長い検索の後、soap:addresslocation属性が絶対 URL でなければならないことはほぼ確実です。開発、テスト、本番など、さまざまな環境で作業する場合、これはさらに複雑になります。

おそらく回避策は、クライアント側で、構成ファイルから URL の最初の部分 (例: https://exampleserver.com) と WSDL から最後の部分(例: ) を読み取り、/axis2/services/ExampleServiceそれらを組み合わせて絶対パスを作成することです。前者では、環境を切り替えることができます。

于 2012-01-10T09:08:37.100 に答える