Menu Close

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 部分の値は、サービスのターゲット namespace です。サービスのターゲット namespace は、@WebService アノテーションの targetNamespace プロパティーで指定されます。QName のローカルパートの値は、wsdl:port 要素の name 属性の値です。この値は、以下のいずれかの方法で決定できます。

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

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

例25.4「Service オブジェクトへのポートの追加」に、例25.2「Service オブジェクトの作成」で作成した Service オブジェクトにポートを追加するコードを示します。

例25.4 Service オブジェクトへのポートの追加

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「Service オブジェクトへのポートの追加」のコードは、以下を行います。

portName パラメーターの QName を作成する。

addPort() メソッドを呼び出す。

エンドポイントが SOAP バインディングを使用することを指定する。

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