24.3.2. 必要なアノテーション

概要

Java コードからサービスを作成するには、コードに 1 つのアノテーションを追加するだけで済みます。@WebService アノテーションを SEI と実装クラスの両方に追加する必要があります。

@WebService アノテーション

@WebService アノテーションは javax.jws.WebService インターフェイスによって定義され、サービスとして使用されるインターフェイスまたはクラスに配置されます。@WebService には、表24.1「@WebService プロパティー」 で説明されているプロパティーがあります。

表24.1 @WebService プロパティー

プロパティー説明

name

サービスインターフェイスの名前を指定します。このプロパティーは、WSDL コントラクトのサービスのインターフェイスを定義する wsdl:portType 要素の name 属性にマッピングされます。デフォルトでは、PortType を実装クラスの名前に追加します。 [a]

targetNamespace

サービスが定義されているターゲット名前空間を指定します。このプロパティーが指定されていない場合、ターゲット名前空間はパッケージ名から派生します。

serviceName

公開されたサービスの名前を指定します。このプロパティーは、公開されたサービスを定義する wsdl:service 要素の name 属性にマッピングされます。デフォルトでは、サービスの実装クラスの名前を使用します。

wsdlLocation

サービスの WSDL コントラクトが保存されている URL を指定します。これは、相対 URL を使用して指定する必要があります。デフォルトは、サービスがデプロイされている URL です。

endpointInterface

実装クラスが実装する SEI のフルネームを指定します。このプロパティーは、属性がサービス実装クラスで使用される場合にのみ指定されます。

portName

サービスが公開されるエンドポイントの名前を指定します。このプロパティーは、公開されたサービスのエンドポイントの詳細を指定する wsdl:port 要素の name 属性にマッピングされます。デフォルトは、サービスの実装クラスの名前に Port を追加します。

[a] SEI から WSDL を生成する場合、実装クラスの名前の代わりにインターフェイスの名前が使用されます。
注記

@WebService アノテーションのプロパティーに値を指定する必要はありません。ただし、できるだけ多くの情報を提供することをお勧めします。

SEI に注釈を付ける

SEI では、@WebService アノテーションを追加する必要があります。SEI はサービスを定義するコントラクトなので、@WebService アノテーションのプロパティーにサービスの詳細をできるだけ多く指定する必要があります。

例24.3「@WebService アノテーションあるインターフェイス」は、@WebService アノテーションにより 例24.1「シンプルな SEI」 で定義したインターフェイスを示しています。

例24.3 @WebService アノテーションあるインターフェイス

package com.fusesource.demo;

import javax.jws.*;

@WebService(name="quoteUpdater",
            targetNamespace="http:\\demos.redhat.com",
	        serviceName="updateQuoteService",
            wsdlLocation="http:\\demos.redhat.com\quoteExampleService?wsdl",
            portName="updateQuotePort")
public interface quoteReporter
{
  public Quote getQuote(String ticker);
}

例24.3「@WebService アノテーションあるインターフェイス」@WebService アノテーションは以下を行います。

サービスインターフェイスを定義する wsdl:portType 要素の name 属性の値が quoteUpdater であることを指定します。

サービスのターゲット名前空間が http:\\demos.redhat.com であることを指定します。

公開されたサービスを定義する wsdl:service 要素の name の値が updateQuoteService であることを指定します。

サービスが WSDL コントラクトを http:\\demos.redhat.com\quoteExampleService?wsdl で公開することを指定します。

サービスを公開するエンドポイントを定義する wsdl:port 要素の name 属性の値が updateQuotePort であることを指定します。

サービス実装に注釈を付ける

また、SEI に @WebService アノテーションを付ける必要があります。また、サービス実装クラスに @WebService アノテーションを付ける必要があります。アノテーションをサービス実装クラスに追加する場合は、endpointInterface プロパティーのみを指定する必要があります。例24.4「アノテーション付きサービス実装クラス」 に示すようにプロパティーは、SEI のフルネームに設定する必要があります。

例24.4 アノテーション付きサービス実装クラス

package org.eric.demo;

import javax.jws.*;

@WebService(endpointInterface="com.fusesource.demo.quoteReporter")
public class stockQuoteReporter implements quoteReporter
{
public Quote getQuote(String ticker)
  {
  ...
  }
}