2009-03-16 3 views
2

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

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

ありがとうございます!

答えて

1

コンストラクタは、MyServiceを作成するときに必要なWSDLのURL(http://someurl:someport/service?wsdl)を渡す必要があります。

+0

ちょうど私は理解しています... MyServiceはWSDLを要求し、タグにあるものを使用して実際にサービスがどこにあるかを判断します。 –

+0

私はそれが正しいと思う、私はそれを見てみましたが、私は明確に答えて何も見つけることができません。 –

+0

はい。 JAX-WSはwsdlLocationでWSDLをロードし、serviceNameおよびportNameで指定されたサービスおよびポートのWSDLをそれぞれ解析します。 JAX-WSは、Webサービスを呼び出すときにWSDLポートで指定されたURLを使用します。したがって、上記のコードを使用してリモートサービスと対話するには、WSDL URL、サービスQName、およびポートQNameを知る必要があります。 – DavidValeri

1

あなたが生成されたコンストラクタの近くに生成されたソースで顔をしている場合は、デフォルトコンストラクタから、それに入れてかを把握することができる必要があり、次のようになります。

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

あなたはすべきですクラス内の静的フィールドのWSDL_LOCATIONのdefを見つけることができます。

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をintialize言うまでもないです。 (nullに) 以下のように2つのコンストラクタはありません。 Webサービスを呼び出す

public final static URL WSDL_LOCATION = null; 
public HelloWorldWebServiceImplService(URL wsdlLocation) { 
    super(wsdlLocation, SERVICE); 
} 

public HelloWorldWebServiceImplService(URL wsdlLocation, QName serviceName) { 
    super(wsdlLocation, serviceName); 
} 

は今、あなたは

//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を渡してインスタンス化し、クライアントの呼び出しでだからここにあなたが動的にWebサービスのURLを指すことができます。

関連する問題