JAX-WSで生成されたコードからWebサービスにアクセスするときにホストとポートを指定するにはどうすればよいですか?
-
19-08-2019 - |
質問
Webサービス用のWSDLファイルがあります。 JAX-WS / wsimportを使用して、Webサービスへのクライアントインターフェイスを生成しています。 Webサービスが実行されるホストが事前にわからないため、 httpにならないことをほぼ保証できます。 :// localhost:8080 。実行時にホストURLを指定する方法(例:コマンドライン引数から?
生成されたコンストラクターMyService(URL wsdlLocation, QName serviceName)
は、私が望むものとは思えませんが、おそらくそうでしょうか?おそらくService.getPort(...)
?
ありがとう!
解決
コンストラクターはニーズに応じて正常に機能するはずです。MyServiceを作成するときに、必要なWSDLのURLを渡します。つまり、 http:// someurl:someport / service?wsdl 。
他のヒント
生成されたコンストラクターの近くで生成されたソースを見る場合、デフォルトのコンストラクターから何を入れるかを把握できるはずです。次のようになります。
public OrdersService() {
super(WSDL_LOCATION, new QName("http://namespace.org/order/v1", "OrdersService"));
}
クラスのさらに上の静的フィールドでWSDL_LOCATIONのdefを見つけることができるはずです。
生成されたコード(例:say <!> quot; HelloWorldWebServiceImplService <!> quot;)で、META-INFの下にあるWSDL urlまたはwsdlファイルへの参照を持つ上部の静的ブロックを調べます。
/*
static {
URL url = null;
try {
url = new URL("http://loclahost/HelloWorld/HelloWorldWebServiceImpl?wsdl");
} catch (MalformedURLException e) {
java.util.logging.Logger.getLogger(HelloWorldWebServiceImplService.class.getName())
.log(java.util.logging.Level.INFO,
"Can not initialize the default wsdl from {0}", "http://loclahost/HelloWorld/HelloWorldWebServiceImpl?wsdl");
}
WSDL_LOCATION = url;
}
*/
これをコメントしたら、デフォルトのコンストラクタをコメントアウトする必要があります。言うまでもなく、静的なWSDL_LOCATION = nullを初期化します。 (nullへ) したがって、以下に示すような2つのコンストラクターはありません。
public final static URL WSDL_LOCATION = null;
public HelloWorldWebServiceImplService(URL wsdlLocation) {
super(wsdlLocation, SERVICE);
}
public HelloWorldWebServiceImplService(URL wsdlLocation, QName serviceName) {
super(wsdlLocation, serviceName);
}
Webserviceの呼び出し:これで、このオブジェクトをインスタンス化するクライアント呼び出しで、webservice URLを引数として引数として渡します
//You can read mywebserviceURL from property file as String.
String mywebserviceURL = "http://myqamachine.com/HelloWorld/HelloWorldWebServiceImpl?wsdl"
URL WsURL = new URL(mywebserviceURL);
HelloWorldWebServiceImplService webService = new HelloWorldWebServiceImplService(WsURL);
したがって、ここでWebサービスのURLを動的にポイントできます。