ページの先頭行へ戻る
Interstage Application Server V13.0.0 GlassFish 設計・構築・運用ガイド
FUJITSU Software

3.1.1 Webサービスアプリケーションの開発

Webサービスとは、任意の方法で実現されたサーバープログラム(Webサービスアプリケーション)を、HTTPなどのインターネット標準の技術を利用してネットワーク経由で利用するための技術です。通信メッセージフォーマットとしてSOAPを用い、Webサービスを利用するためのインターフェイス情報の記述にはWSDLを用います。本機能では、WS-I Basic Profile 1.1に従ったWebサービスアプリケーションを実行可能です。


Webサービスアプリケーションの開発ではAPIにJAX-WSを使用して、Implementing Enterprise Web Services仕様に従ったアプリケーションモジュールを作成します。

参考

本項で使用しているXMLのネームスペースのprefixは以下のとおりです。

prefix

ネームスペース

wsdl

http://schemas.xmlsoap.org/wsdl/

xs

http://www.w3.org/2001/XMLSchema

Webサービスアプリケーションの開発手順例

1. エンドポイントの実装クラスの作成

Webサービスアプリケーションには、以下のいずれかをエンドポイントの実装クラスとして含める必要があります。エンドポイントの実装クラスのpublicメソッドが、Webサービスのオペレーションとして公開対象となります。公開対象のメソッドで利用できるデータ型については、「3.1.3 Webサービスの通信で利用できるデータ型」を参照してください。

以下では、エンドポイントの実装クラスにJAX-WSエンドポイントを使用する場合の例について説明します。

JAX-WSエンドポイントの場合

  package stock.server;
  @javax.jws.WebService
  public class StockQuoteProvider {
    public StockQuoteProvider () {}
    
    public float getLastTradePrice (String tickerSymbol) {
      return "abc".equals(tickerSymbol)? 1234.0f : 0.0f;
    }
  }

注意

  • Java識別子(メソッド、変数、Beanプロパティなど)、@javax.jws.WebParamアノテーション、および@javax.jws.WebResultアノテーションのname要素などには、大文字小文字問わず"xml"または"xml"で始まる値を使用しないでください。

  • Webサービスに付与するアノテーションやWSDLファイル内で使用している要素のname属性などには、Javaの予約語を指定しないでください。

  • document/literal形式の場合、parameterStyle属性の値にBAREを指定することは推奨しません。

  • document/literal形式かつparameterStyle属性にBAREを指定した場合、out/inoutパラメタには@javax.jws.WebParamアノテーションのname属性を必ず指定してください。@javax.jws.WebParamアノテーションのname属性を指定しない場合、正しいWSDLを生成できません。

  • エンドポイントの実装クラスを複数配備する場合、パッケージ名が同じ実装クラス間で同名のメソッドは定義しないでください。

  • パッケージ名の一部に「.jaxws」を含むクラスは、Webサービスアプリケーション、およびその公開メソッドのパラメタ、復帰値、例外として使用しないでください。

  • javax.jws.WebServiceアノテーションのwsdlLocation属性またはwebservices.xmlの<wsdl- file>タグに既存のWSDLファイルを指定する場合は、対象のWSDLファイルを配備するモジュール内に含め、モジュールのルートからの相対URLを指定してください。

  • エンドポイントのURLを構成する文字(例えば、@javax.jws.WebServiceアノテーションのserviceName属性値)やWSDLのanyURI型の属性に変換される文字には、ASCIIコード範囲の利用可能な文字だけを使用してください。

  • サービスエンドポイントインターフェイスを作成する場合、サービスエンドポイントインターフェイスのjavax.jws.WebServiceアノテーションでendpointinterface属性を指定しないでください。


2. エンドポイントの実装クラスのコンパイル

エンドポイントの実装クラスをコンパイルします。コンパイルでは、javacコマンドに以下のオプションを指定してください。

-endorseddirs C:\Interstage\glassfish5\glassfish\modules\endorsed;C:\Interstage\glassfish5\glassfish\lib\endorsed

-endorseddirs /opt/FJSViaps/glassfish5/glassfish/modules/endorsed:/opt/FJSViaps/glassfish5/glassfish/lib/endorsed

javac -endorseddirs C:\Interstage\glassfish5\glassfish\modules\endorsed;C:\Interstage\glassfish5\glassfish\lib\endorsed -classpath WEB-INF\classes WEB-INF\classes\stock\server\StockQuoteProvider.java

javac -endorseddirs /opt/FJSViaps/glassfish5/glassfish/modules/endorsed:/opt/FJSViaps/glassfish5/glassfish/lib/endorsed -classpath WEB-INF/classes WEB-INF/classes/stock/server/StockQuoteProvider.java


3. パッケージング

WARモジュール/ejb-jarモジュールにパッケージングします。

jar cvf StockQuote.war .

注意

  • パッケージ名がjava.やjavaxで始まるAPIを除き、Webサービスの実装クラスから直接利用しているクラス、およびサービスエンドポイントインターフェイスが存在する場合は、サービスエンドポイントインターフェイスとその関連クラスはすべてモジュール内に含めてください。

  • WARモジュール/ejb-jarモジュールにソースファイルを含めることは推奨しません。WARモジュール/ejb-jarモジュールにソースファイルを含める場合は、クラスファイルを生成したときのソースファイルを入れてください。

  • Webサービスアプリケーションのみをモジュールにパッケージする場合は、Web application deployment descriptor(web.xml)または EJB application deployment descriptor (ejb-jar.xml)などをモジュールに含める必要はありません。
    これらをモジュールに含める場合は、Implementing Enterprise Web Services仕様に正しく従うよう特に注意してください。

配備とWSDLの取得・保管

パッケージングしたモジュールは、通常のモジュールと同様にGlassFish Serverクラスターに配備します。

WARモジュールをGlassFish ServerクラスターClusterWSに配備する場合

C:\Interstage\glassfish5\glassfish\bin\asadmin deploy --target ClusterWS StockQuote.war

/opt/FJSViaps/glassfish5/glassfish/bin/asadmin deploy --target ClusterWS StockQuote.war

配備したアプリケーションが運用可能な状態のとき、エンドポイントのURLに"?wsdl"を付加したURLからWSDLを取得できます。エンドポイントのURLは、deployment descriptorにservlet-mappingなど指定している場合はその指定したURL(Servletと同様)になります。特に指定していない場合、下記となります。

JAX-WSエンドポイント
http://ホスト名:ポート番号/コンテキストルート/Webサービス名
Stateless Session BeanおよびSingleton Session Bean
http://ホスト名:ポート番号/Webサービス名/エンドポイント名

上記の各項目について説明します。

項目

説明

"http"

SSLを使用する場合は"https"になります。

ホスト名、ポート番号

配備したホストのWebアプリケーションにアクセスするホスト名およびポート番号。ポート番号がトランスポートプロトコル(HTTP/HTTPS)のデフォルト(80/443)の場合、":ポート番号"は省略できます。

コンテキストルート

WARファイルのコンテキストルート(デフォルトはWARファイル名から".war"を除いたもの)。

Webサービス名

deployment descriptorやjavax.jws.WebServiceアノテーションでserviceName属性を指定した場合は、その名前です。指定していない場合、実装クラスのパッケージ名を含まないクラス名の後ろに"Service"を付加した名前です。

エンドポイント名

deployment descriptorでポートコンポーネント名やjavax.jws.WebServiceアノテーションでname属性を指定した場合は、その名前です。指定していない場合、実装クラスのパッケージ名を含まないクラス名です。

WSDLは、通常、wsdl:import要素やxs:import要素などの外部XMLを取り込む機構によって複数のファイルで構成されます。wsimportコマンドで取り込み先も合せて一式を取得できます。

wsimportコマンドでWSDL一式を取得する例]

C:\Interstage\glassfish5\glassfish\bin\wsimport -nogenerate -s dev\wsdl http://ws.example.com/StockQuote/StockQuoteProviderService?wsdl

/opt/FJSViaps/glassfish5/glassfish/bin/wsimport -nogenerate -s dev/wsdl http://ws.example.com/StockQuote/StockQuoteProviderService?wsdl

取得したWSDLは、Webサービスのインターフェイス定義として、一式を保管・管理します。

注意

wsimportコマンドで取得保存されるWSDLは、インターフェイス定義の記録・管理用です。wsdl:import要素などが取り込むXMLのURLも含め、取得した内容のまま保存されます。wsimportコマンドの引数に指定したWSDLと共に、取り込まれる対象のファイルも取得保存されますが、取得保存されたファイルは取り込み元から参照されていないため、取得したWSDL一式だけをそのまま利用することはできません。

WebサービスクライアントへのWSDLの提供

Webサービスクライアントの開発者に、Webサービスのインターフェイス定義としてWSDLを提供します。以下のいずれかの方法で提供できますが、通常はWSDL取得URLの通知で行ってください。