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 インターフェイスであるため、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.