次の手順に従って、Web サービスを作成しました。
- @WebService および @WebMethod アノテーションを使用してサービス インターフェイスと実装を作成
- サービスをデプロイしました
- wsimport で生成されたクライアント スタブ
次のようなクライアント プログラムで呼び出された Web サービス:
public static void main(String[] args) throws Exception { URL url = new URL("http://SERVER:PORT/HelloWorldPOC/HelloWorldPOCImplService?wsdl"); QName qname = new QName("http://helloworld.poc.com/", "HelloWorldPOCImplService"); Service service = Service.create(url, qname); HelloWorldPOCImpl hello = service.getPort(HelloWorldPOCImpl.class); hello.execute("hello"); System.out.println("Done"); }
質問:
- WSDL の場所は、クライアント プログラムで提供されます。WSDL の場所は、wsimport によって生成されたクライアント スタブにもハードコーディングされています。この冗長性はなぜですか?
「localhost」パスを使用して wsimport を使用してクライアント スタブを作成しました。
wsimport -keep http://localhost:9080/HelloWorldPOC/HelloWorldPOCImplService?wsdl
- URLサーバー部分を「localhost」として、localhostからクライアントテストプログラムを実行しました。出来た。次に、サーバーのホスト名としてサーバー部分を使用して、別のシステムから同じクライアントを実行しました。出来た。
- これは、生成されたクライアント スタブ内の WSDL の場所が使用されていないことを意味しますか?
- また、localhost で WSDL を生成し、クライアント スタブを再生成せずにどこにでもデプロイできるのでしょうか? デプロイされたサーバーから WSDL を取得する必要があるのは、呼び出し元のクライアントだけです。これは受け入れられている慣行ですか、それともデプロイされたサーバーごとにクライアントを再生成する必要がありますか?