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() メソッド

addPortQNameportNameStringbindingIdStringendpointAddressWebServiceException

portName の値は QName です。その名前空間部分の値は、サービスのターゲット名前空間です。サービスのターゲット namespace は、 @WebService アノテーションの targetNamespace プロパティーで指定されます。QName の local part の値は、wsdl:port 要素の name 属性の値です。この値は、次のいずれかの方法で決定できます。

  1. @WebService アノテーションの portName プロパティーでこれを指定します。
  2. @WebService アノテーションの name プロパティーの値に Port を追加します。
  3. SEI の名前に Port を追加します。

bindingId パラメーターの値は、エンドポイントによって使用されるバインディングタイプを一意に識別する文字列です。SOAP バインディングでは、標準の SOAP namespace: http://schemas.xmlsoap.org/soap/ を使用します。エンドポイントが SOAP バインディングを使用しない場合、bindingId パラメーターの値はバインディング開発者が決定されます。 endpointAddress パラメーターの値は、エンドポイントがパブリッシュされるアドレスです。SOAP/HTTP エンドポイントの場合、アドレスは HTTP アドレスです。HTTP 以外のトランスポートは、異なるアドレススキームを使用します。

例25.4「サービスのオブジェクトへの ポートの追加 例25.2「Serivce オブジェクトの作成」 で作成した 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 バインディングを使用することを指定します。

エンドポイントが公開されるアドレスを指定します。