WebServiceプロキシクラス
-
02-10-2019 - |
質問
Java Webサービスを作成し、Tomcatに展開し、Webbrowserを介してサービスWSDLにアクセスしました。次のステップは、クライアントがウェブサイトと通信するために使用できるプロキシクラスを生成することでした。これが私が次にしたことです:
私のWSDLがアクセス可能であると仮定しましょう。 http:// localhost:8080/testsvc/testsvc?wsdl
wsimportツールを使用して、次のコマンドを使用してプロキシを生成します。$> wsimport http:// localhost:8080/testsvc/testsvc?wsdl
問題は、LocalHost:8080が生成されたクラスでハードコードされ、8080以外のポートにサービスを展開すると、クライアントがポート8080でサービスにアクセスしようとするため、クライアントが到達できないことです。
とにかく、ポート番号がハードコードされていない方法でプロキシクラスを開発することはありますか?サービスを任意のポートに展開できるようにしますか?
EndPoint_Address_Propertyを更新しようとしましたが、プロキシクラスのインスタンスがインスタンスになった瞬間にコードが失敗するため、それは役に立ちません。プロキシクラスから準備ができていることをEndPoint_Addressを上書きすることができるポイントに実際に到達することはありません。
解決
1つの方法は、WSImportパラメーターを使用することです
-wsdllocation <location>
そして、それをあなたの新しいWSDLに向けてください。
または、を使用できます
-カタログ オプション。
アドレスを変更するには、次のようなコードを動的に使用します。
service = new Service();
port = service.getxxxPort();
((BindingProvider) port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, newUrl);
他のヒント
使用 -keep
パラメーター WSImportが生成するソースファイルを保持するため。そこから、必要に応じてWSIMPORTが生成したソースコードのエンドポイントURLを変更できます。