Menu Close

24.2. SEI の作成

概要

サービスエンドポイントインターフェース (SEI) は、サービス実装とそのサービスに対してリクエストを行うコンシューマーとの間で共有される Java コードの一部です。SEI はサービスによって実装されるメソッドを定義し、サービスがエンドポイントとしてどのように公開されるかの詳細を提供します。WSDL コントラクトで開始すると、SEI がコードジェネレーターによって生成されます。ただし、Java から開始すると、開発者は SEI を作成する責任があります。 SEI の作成には、以下の 2 つの基本的なパターンがあります。

  • グリーンフィールド開発: このパターンでは、既存の Java コードまたは WSDL なしで新しいサービスを開発します。SEI を作成することから始めるのが最善です。その後、その SEI を使用するサービスプロバイダーおよびコンシューマーを実装する開発者に SEI を配布できます。

    注記

    グリーンフィールドサービス開発を行うための推奨される方法は、サービスとそのインターフェースを定義する WSDL コントラクトを作成することから始めることです。「26章WSDL コントラクト作成の開始」を参照してください。

  • サービスイネーブルメント: このパターンでは、通常、Java クラスとして実装されている既存の機能セットがあり、サービスでそれを有効にします。したがって、以下の 2 つのことが必要になります。

    1. サービスの一部として公開される操作 のみ が含まれる SEI を作成する。
    2. SEI を実装するように既存の Java クラスを変更する。

      注記

      JAX-WS アノテーションを Java クラスに追加できますが、これは推奨されません。

インターフェースの作成

SEI は標準の Java インターフェースです。これは、クラスが実装するメソッドのセットを定義します。また、実装するクラスがアクセスできるさまざまなメンバーフィールドや定数を定義することもできます。

SEI の場合、定義されたメソッドはサービスによって公開される操作にマッピングされることを意図しています。SEI は wsdl:portType 要素に対応します。SEI で定義されたメソッドは、wsdl:portType 要素の wsdl:operation 要素に対応します。

注記

JAX-WS は、サービスの一部として公開されないメソッドを指定できるようにするアノテーションを定義します。ただし、ベストプラクティスは、これらのメソッドを SEI から除外することです。

例24.1「単純な SEI」は、株式更新サービスの単純な SEI を示しています。

例24.1 単純な SEI

package com.fusesource.demo;

public interface quoteReporter
{
  public Quote getQuote(String ticker);
}

インターフェースの実装

SEI は標準の Java インターフェースであるため、これを実装するクラスは標準の Java クラスです。Java クラスから始める場合は、インターフェイスを実装するためにクラスを変更する必要があります。SEI から始める場合は、実装クラスが SEI を実装します。

例24.2「単純な実装クラス」は、例24.1「単純な SEI」のインターフェースを実装するクラスを示しています。

例24.2 単純な実装クラス

package com.fusesource.demo;

import java.util.*;

public class stockQuoteReporter implements quoteReporter
{
  ...
public Quote getQuote(String ticker)
  {
    Quote retVal = new Quote();
    retVal.setID(ticker);
    retVal.setVal(Board.check(ticker));[1]
    Date retDate = new Date();
    retVal.setTime(retDate.toString());
    return(retVal);
  }
}


[1] Board is an assumed class whose implementation is left to the reader.