2

Web サービス用の WSDL ファイルがあります。JAX-WS/wsimport を使用して、Web サービスへのクライアント インターフェイスを生成しています。Web サービスが実行されるホストを前もって知りませんが、それがhttp://localhost:8080ではないことはほぼ保証できます。コマンドライン引数などから、実行時にホスト URL を指定するにはどうすればよいですか?

生成されたコンストラクターMyService(URL wsdlLocation, QName serviceName)は私が望んでいるようには見えませんが、そうでしょうか? おそらくService.getPort(...)?の変種の 1 つです。

ありがとう!

4

3 に答える 3

1

コンストラクターは、必要に応じて正常に動作するはずです。MyService を作成するときに、必要な WSDL の URL、つまりhttp://someurl:someport/service?wsdl を渡します

于 2009-03-16T07:12:02.670 に答える
1

生成されたコード (例: "HelloWorldWebServiceImplService" など) で、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; を初期化します。(to 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 の呼び出し:このオブジェクトをインスタンス化するクライアント呼び出しで、示されているように Web サービスの 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 を動的に指定できます。

于 2014-01-28T22:19:01.300 に答える
1

生成されたコンストラクターの近くで生成されたソースを見ると、デフォルトのコンストラクターから何を入れるかを理解できるはずです。次のようになります。

public OrdersService() {
    super(WSDL_LOCATION, new QName("http://namespace.org/order/v1", "OrdersService"));
}

クラスのさらに上の静的フィールドで WSDL_LOCATION の定義を見つけることができるはずです。

于 2010-08-19T09:50:49.443 に答える