Menu Close

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

概要

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

@WebService アノテーション

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

表24.1 @WebService プロパティー

プロパティー説明

name

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

targetNamespace

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

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 に指定する。

サービスのターゲット namespace を http:\\demos.redhat.com に指定する。

公開するサービスを定義する wsdl:service 要素の name の値を updateQuoteService に指定する。

サービスが http:\\demos.redhat.com\quoteExampleService?wsdl で 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)
  {
  ...
  }
}