WebSphere Application Server Version 6.1 Feature Pack for Web Services   
             オペレーティング・システム: AIX , HP-UX, i5/OS, Linux, Solaris, Windows, Windows Vista, z/OS

             目次と検索結果のパーソナライズ化
             New or updated topic for this feature pack

アノテーションを使用した JAX-WS アプリケーションのサービス・エンドポイント実装の開発

Java API for XML-Based Web Services (JAX-WS) は、 XML メッセージ・レベルでサービスを使用できるようにするために、標準 JavaBeans サービス・エンドポイント・インターフェースと新規プロバイダー・インターフェースの 2 つの異なるサービス・エンドポイント実装タイプをサポートします。 サービス・エンドポイントまたはクライアントでアノテーションを使用することによって、 サービス・エンドポイントを Web サービスとして定義できます。

始める前に

Web サービスの開発環境をセットアップし、既存の JavaBeans Web アーカイブ (WAR) ファイルにアクセスします。

このタスクについて

このタスクは、 JavaBeans コンポーネントから JAX-WS Web サービスを開発するために必要なステップです。

JAX-WS テクノロジーにより、 標準 JavaBeans サービス・エンドポイント・インターフェースと新規プロバイダー・インターフェースの両方をベースにした Web サービスの実装が使用可能になります。 JAX-WS の JavaBeans エンドポイントは、 Java API for XML-based RPC (JAX-RPC) 仕様のエンドポイント実装に類似しています。 JAX-RPC とは異なり、サービス・エンドポイント・インターフェース (SEI) の要件は、 JavaBeans ベースのサービスではオプションです。 関連付けられた SEI を持たない JAX-WS サービスは、 暗黙的な SEI を持っていると見なされます。 それに対して、関連付けられた SEI を持つサービスは、明示的な SEI を持っていると見なされます。 JAX-WS が必要とするサービス・エンドポイント・インターフェースは、 JAX-RPC が必要とするサービス・エンドポイント・インターフェースよりも汎用で使用されます。 JAX-RPC 仕様では、java.rmi.Remote インターフェースを拡張するために SEI が 必要ですが、JAX-WS の場合、SEI は必要ありません。

JAX-WS プログラミング・モデルは、サービス・エンドポイント・アプリケーションを Web サービスとして定義し、クライアントが Web サービスをアクセスする方法を定義するために、 メタデータがある Java クラスのアノテーション付けのサポートも活用します。 JAX-WS は Java プログラミング言語 (JSR 175) 仕様のメタデータ機能、Java Platform (JSR 181) 仕様の Web サービス・メタデータ、および JAX-WS 2.0 (JSR 224) 仕様によって定義されたアノテーション (Java Architecture for XML Binding (JAXB) アノテーションを含みます) に基づいてアノテーションをサポートします。 アノテーションを使用することにより、サービス・エンドポイント実装は、WSDL ファイルを必要とすることなく単独で Web サービスを記述することができます。 アノテーションは、サービス・エンドポイント実装または Web サービス・クライアントの構成に必要な WSDL 情報のすべてを提供できます。 アノテーションは、クライアントおよびサーバーが使用するサービス・エンドポイント・インターフェースで指定することも、サーバー側のサービス実装クラスで指定することもできます。

JAX-WS Web サービスを開発するには、 JavaBeans エンドポイント用の javax.jws.WebService アノテーション、 またはプロバイダー・エンドポイント用の javax.jws.WebServiceProvider アノテーションを 使用して Java クラスにアノテーションを付ける必要があります。 これらのアノテーションは、Java クラスを Web サービス・エンドポイントとして定義します。 JavaBeans エンドポイントの場合、サービス・エンドポイント・インターフェース またはサービス・エンドポイント実装は、それぞれ、特定の Web サービスによって提供されるビジネス・メソッドを宣言する Java インターフェースまたは Java クラスです。 Web サービス・クライアントが起動できる、JavaBeans エンドポイントのメソッドは、 明示的または暗黙的サービス・エンドポイント・インターフェースに定義されているビジネス・メソッドのみです。

すべての JavaBeans エンドポイントは、Bean クラスに @WebService (javax.jws.WebService) アノテーションが含まれている必要があります。 サービス実装 Bean が SEI も使用する場合、そのエンドポイント・インターフェースは、 そのアノテーションの endpointInterface 属性によって参照する必要があります。 サービス実装 Bean が SEI を使用しない場合、 サービスは Bean に定義されている暗黙的 SEI によって記述されます。

JAX-WS プログラミング・モデルは、サービス・エンドポイント・インターフェースの代替として javax.xml.ws.Provider という新規プロバイダー API を 導入しています。 プロバイダー・インターフェースは、Web サービスに対する、よりメッセージング指向の強いアプローチをサポートします。 プロバイダー・インターフェースを使用して、汎用サービス実装クラスを生成するための、 単純なインターフェースを実装する Java クラスを作成できます。 プロバイダー・インターフェースには invoke メソッドという 1 つのメソッドがあります。 これは、さまざまなメッセージまたはメッセージ・ペイロードを処理するときに総称を使用して入力タイプと出力タイプの両方をコントロールしています。 すべてのプロバイダー・エンドポイントには、@WebServiceProvider (javax.xml.ws.WebServiceProvider) アノテーションを使用してアノテーションを付ける必要があります。 サービス実装は、javax.xml.ws.Provider インターフェースを実装している場合には @WebService アノテーションを指定できません。

プロシージャー

  1. Web サービス・アプリケーションのサービス・エンドポイント要件を識別します。

    初めに、サービス実装が JavaBeans エンドポイントであるか、それともプロバイダー・エンドポイントであるかを判別します。JavaBeans エンドポイントの使用を選択した場合は、 明示的 SEI を使用するのか、または Bean 自体に暗黙的 SEI があるのかを判別します。

  2. サービス・エンドポイントにアノテーションを付けます。 Web サービスを実装する Java クラスでは、 javax.jws.WebService アノテーションまたは javax.xml.ws.WebServiceProvider アノテーションのいずれかを指定する必要があります。 両方のアノテーションが 1 つの Java クラスに存在していてはなりません。 javax.xml.ws.WebServiceProvider アノテーションは、 javax.xml.ws.Provider インターフェースを実装するクラスでのみサポートされます。
    • Java クラスの明示的サービス・エンドポイント・インターフェースがある場合は、 endpointInterface パラメーターを使用してサービス・エンドポイント・インターフェース・クラス名を javax.jws.WebService アノテーションに指定します。 @WebMethod アノテーションをサービス・エンドポイント・インターフェースのメソッドに追加して Java から WSDL へのマッピングをカスタマイズできます。すべての public メソッドは、 @WebMethod アノテーションの指定の有無に関係なく、公開メソッドと見なされます。 exclude 属性を含むサービス・エンドポイント・インターフェースに @WebMethod アノテーションを付けることは不適切です。
    • Java クラスの暗黙的サービス・エンドポイント・インターフェースがある場合、 javax.jws.WebService アノテーションは、 serviceNameportNametargetNamespace の各パラメーターにデフォルトの値を使用します。 これらのデフォルト値をオーバーライドするには、これらのパラメーターの値を @WebService アノテーションに指定します。 @WebMethod アノテーションを指定しない場合、継承されたメソッドを含むすべての public メソッドが公開されます。ただし、java.lang.Object から継承されたメソッドは除外されます。 @WebMethod アノテーションの exclude パラメーターは、 公開するメソッドの制御に使用できます。
    • プロバイダー・インターフェースを使用する場合は、 プロバイダー・エンドポイントで javax.xml.ws.WebServiceProvider アノテーションを使用します。

結果

Web サービス・アプリケーションを表すサービス・エンドポイント実装 を定義しました。サポートされる JAX-WS アノテーションの追加情報については、 JAX-WS アノテーションを参照してください。

JavaBeans サービス・エンドポイント実装およびインターフェースのサンプル

以下の例は、単純な明示的 JavaBeans サービス・エンドポイント実装、およびそれに関連したサービス・エンドポイント・インターフェースを示しています。
/** This is an excerpt from the service implementation file, EchoServicePortTypeImpl.java 
package com.ibm.was.wssample.echo;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.transform.stream.StreamSource;

@javax.jws.WebService(serviceName = "EchoService", endpointInterface = "com.ibm.was.wssample.echo.EchoServicePortType", targetNamespace="http://com/ibm/was/wssample/echo/", portName="EchoServicePort")
public class EchoServicePortTypeImpl implements EchoServicePortType {

                	public EchoServicePortTypeImpl() {
                }

                	public String invoke(String obj) {
                        String str;
                        ....
                        				str = obj;
                        ....
                        
                        		return str;

                }

}
/**  This is a sample EchoServicePortType.java service interface */

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.*;


@WebService(name = "EchoServicePortType", targetNamespace = "http://com/ibm/was/wssample/echo/", wsdlLocation="WEB-INF/wsdl/Echo.wsdl")
public interface EchoServicePortType {


    /** ...the method process ...*/
        @WebMethod
    @WebResult(name = "response", targetNamespace = "http://com/ibm/was/wssample/echo/")
    @RequestWrapper(localName = "invoke", targetNamespace = "http://com/ibm/was/wssample/echo/", className = "com.ibm.was.wssample.echo.Invoke")
    @ResponseWrapper(localName = "echoStringResponse", targetNamespace = "http://com/ibm/was/wssample/echo/", className = "com.ibm.was.wssample.echo.EchoStringResponse")
    public String invoke(
        @WebParam(name = "arg0", targetNamespace = "http://com/ibm/was/wssample/echo/")
        String arg0);

}

プロバイダー・エンドポイント実装のサンプル

以下の例は、Java クラス用の単純なプロバイダー・サービス・エンドポイント・インターフェースを示しています。
package jaxws.provider.source;

import javax.xml.ws.Provider;
import javax.xml.ws.WebServiceProvider;
import javax.xml.transform.Source;

@WebServiceProvider()
public class SourceProvider implements Provider<Source> {

    public Source invoke(Source data) {
        return data;
    }
}

この例では、プロバイダー実装の javax.xml.transform.Source タイプは、 汎用の <Source> メソッドで指定します。 汎用の <Source> メソッドは、入力タイプと出力タイプの両方が Source オブジェクトであることを指定します。 プロバイダー・インターフェースを実装するエンドポイント・インターフェースには、 @WebServiceProvider アノテーションを含める必要があります。

次の作業

JavaBeans から JAX-WS アプリケーション用 Java 成果物を作成します



関連タスク
JavaBeans からの Web サービス・アプリケーションの開発
JavaBeans からの JAX-WS アプリケーション用 Java 成果物の作成
関連資料
JAX-WS のアノテーション
関連情報
Web サービス仕様と API
Java API for XML Web Services (JAX-WS) API documentation
タスク・トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 4:10:06 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.wsfep.multiplatform.doc/info/ae/ae/twbs_devjaxwsendpt.html