25.3. サービスへのポートの追加
概要
サービスのエンドポイント情報は wsdl:port
要素で定義され、Service
オブジェクトは WSDL コントラクトで定義された各エンドポイントのプロキシーインスタンスを作成します (指定されている場合)。Service
オブジェクトの作成時に WSDL コントラクトを指定しない場合、Service
オブジェクトにはサービスを実装するエンドポイントに関する情報がないため、プロキシーインスタンスを作成できません。この場合、addPort()
メソッドを使用して wsdl:port
要素を表すのに必要な情報を Service
オブジェクトに提供する必要があります。
addPort() メソッド
例25.3「addPort()
メソッド」に示すように、Service
クラスは addPort()
メソッドを定義します。これは、コンシューマーの実装に利用できる WSDL コントラクトがない場合に使用されます。addPort()
メソッドにより、サービス実装用のプロキシーを作成するのに必要な情報 (通常、wsdl:port
要素に保管される) を、Service
オブジェクトに提供することができます。
例25.3 addPort()
メソッド
addPort
QName
portName
String
bindingId
String
endpointAddress
WebServiceException
portName
の値は QName です。その名前空間部分の値は、サービスのターゲット名前空間です。サービスのターゲット namespace は、@WebService
アノテーションの targetNamespace
プロパティーで指定されます。QName の local part の値は、wsdl:port
要素の name
属性の値です。この値は、次のいずれかの方法で決定できます。
-
@WebService
アノテーションのportName
プロパティーでこれを指定します。 -
@WebService
アノテーションのname
プロパティーの値にPort
を追加します。 -
SEI の名前に
Port
を追加します。
bindingId
パラメーターの値は、エンドポイントによって使用されるバインディングタイプを一意に識別する文字列です。SOAP バインディングでは、標準の SOAP namespace: http://schemas.xmlsoap.org/soap/
を使用します。エンドポイントが SOAP バインディングを使用しない場合、bindingId
パラメーターの値はバインディング開発者が決定されます。 endpointAddress
パラメーターの値は、エンドポイントがパブリッシュされるアドレスです。SOAP/HTTP エンドポイントの場合、アドレスは HTTP アドレスです。HTTP 以外のトランスポートは、異なるアドレススキームを使用します。
例
例25.4「サービスのオブジェクトへの ポートの追加
」 例25.2「Service
オブジェクトの作成」 で作成した Service
オブジェクトにポートを追加するためのコードを表示します。
例25.4 サービスのオブジェクトへの ポートの追加
package com.fusesource.demo; import javax.xml.namespace.QName; import javax.xml.ws.Service; public class Client { public static void main(String args[]) { ... QName portName = new QName("http://demo.redhat.com", "stockQuoteReporterPort"); s.addPort(portName, "http://schemas.xmlsoap.org/soap/", "http://localhost:9000/StockQuote"); ... } }
例25.4「サービスのオブジェクトへの ポートの追加
」 のコードは、以下を行います。
portName
パラメーターの QName を作成します。
addPort()
メソッドを呼び出します。
エンドポイントが SOAP バインディングを使用することを指定します。
エンドポイントが公開されるアドレスを指定します。