2.2. Webサービスの作成

2.2.1. Webサービス作成ウィザードについて

WebOTX DeveloperのWebサービス作成ウィザードを使うと、とても簡単にJakarta EE 8に対応したWebサービスを開発することができます。ここでは、WebOTX Developerが提供するWebサービスの開発機能である「Webサービス作成ウィザード」と、その関連機能について詳しく説明します。
2.2.1.1. Webサービス作成ウィザードを使用する前に
Webサービス作成ウィザードを使用する前に次の設定をご確認下さい。
JREの設定
インストール済みのJREについては、WebOTX Developer's Studioの[JREの設定]を参照してください。

WebOTX Developer's Studioのメニュー ウインドウ > 設定 を選択すると、 設定ダイアログが起動します。
設定ダイアログでJava > コンパイラーを選択すると、コンパイラーページが表示します。
コンパイラーページで、コンパイラー準拠レベルは「17」を選択。

JREの設定 コンパイラー コンパイラー準拠レベル 「1.5」以上 選択

WebOTXアプリケーションサーバのインストール
デフォルトランタイムの確認
デフォルトランタイムは設定されているかを確認します。WebOTX Developer's Studioのメニュー ウインドウ > 設定を選択すると、 設定ダイアログが起動します。
設定ダイアログで サーバー > ランタイム環境 を選択すると、 サーバー・ランタイム環境 ページが表示します。

設定ダイアログ サーバー・ランタイム環境

サーバー・ランタイム環境 ページで、WebOTX Application Server <当該バージョン>(Local Default)が設定されているかを確認できます。
ランタイムの設定
デフォルトランタイムが設定されていない場合、ランタイムを設定する必要があります。
WebOTX Developer's Studioの[WebOTXランタイムの設定]を参照して、ローカルのアプリケーションサーバーランタイムを作成してください。
自動的にビルドの設定
WebOTX Developer's Studioのメニュー プロジェクト > 自動的にビルドをチェックします。

プロジェクト 自動的にビルド チェック

Webサービス作成ウィザードの起動
Webサービス作成ウィザードの起動方法は二つあります。
新規ダイアログ
WebOTX Developer's Studioのメニュー ファイル > 新規 > その他を選択すると、 新規ダイアログが起動します。
Webサービス作成ウィザードを開始するには、Web サービス > Web サービス(JAX-WS)を選択し、次へをクリック。

新規 その他 新規ダイアログ

ポップアップメニュー
動的Webプロジェクトまたは EJB プロジェクトを選択し、WebOTX Developer'sStudioの右クリックメニュー Web サービス > JAX-WS Web サービスの生成を選択すると、Webサービスダイアログが起動します。

Web サービス JAX-WS Web サービスの生成

Memo
選択したプロジェクトのプロジェクト名とロケーションがWebサービスダイアログに表示されます。



2.2.2. JAX-WS(Webサービス作成ウィザード)

Webサービス作成ウィザードを使用したJAX-WSに準拠したWebサービスの作成方法について説明します。
Webサービス
プロジェクト名にWebサービスを生成するプロジェクトの名前を指定します。カレントワークスペースにある既存プロジェクトまたは新規に作成するプロジェクト名を指定できます。プロジェクトは、デフォルトでは
<WebOTX_DIR>\Studio\workspace\指定したプロジェクト名
というフォルダに作成されます。もし、別の場所に作成したい場合は、デフォルトロケーションの使用 をOFFにして、任意の場所を絶対パスで指定します。
新規に作成 を選択。
以上の設定を終了したら、次へ をクリック。

Web サービス(JAX-WS) webサービス仕様 JAX-WS 選択

既存のプロジェクトを指定している場合、下記の点をご注意ください。

Caution
指定したプロジェクトにウィザードで作成したWebサービスが既に存在している場合、Webサービスを生成することができません。

Caution
プロジェクトには動的Webプロジェクトと EJB プロジェクトのみを指定できます。

Memo
プロジェクト名に含めてはいけない文字を含めると、エラーメッセージが表示されます。

Memo
<WebOTX_DIR>はWebOTXのインストールルートディレクトリのことです。

Webサービスの基本設定
Webサービスを作成するための最も基本的な情報を指定します。すべて設定が終了したら、 次へをクリック。

Webサービスの基本設定 Webサービス名 入力

設定項目
設定内容
Webサービス名
Webサービス名を英数字とアンダーバーを使用して指定します。
Webサービスの属する名前空間URI
省略可能。
Webサービスの存在する名前空間をURI(URL、URN)形式で指定します。http:やurn:などのスキームに続けて任意の名前を指定します。
(入力例)
urn:webotx.nec.com
http://www.nec.com/webotx

Caution
Webサービスの属する名前空間URIの値に基づいてパッケージを生成するため、長すぎる名前空間名を指定すると、全体のファイルパス長がWindowsOSの制限となる256文字を超えることがあります。

Memo
Webサービス名は、Webサービス作成時にクラス名として使用するため、Javaの識別子の規則に従っていないとエラーメッセージが表示されます。

Memo
名前空間は、Webサービスが存在する空間の名前のことです。Javaのパッケージ名に相当します。

Memo
URIは、ウェブ上でリソースを識別する手段で、スキームに続けて名前を指定する形式です。http:、mailto:、urn:などのスキームはよく知られたところでしょう。詳細は、「URI」でウェブ検索してください。

Webサービスの実装形式選択
Webサービスを実装する形式を選択します。選択したら、次へ をクリック。

Web サービス(JAX-WS) 実装形式 選択

Memo
Webアプリケーション を選択した場合、動的Webプロジェクトを生成します。EJB を選択した場合、EJB プロジェクトを生成します。

ここでWebサービスの作成を開始できます
この画面が出たら、Webサービスを作成するための最低限の設定は終わったことを表します。 完了 をクリックすると、Webサービスの作成を開始します。 次へ をクリックすると、詳細設定の画面に移ります。

Web サービス(JAX-WS) Web サービス 作成開始

詳細設定
詳細設定を行う画面です。
SOAPメッセージ形式の選択
SOAPエンジンが作成するSOAPメッセージの形式をRPC/literalDocument/literal/wrapped、Document/literal/bareから選択。
完了 をクリックすると、Webサービスの作成を開始します。

Web サービス(JAX-WS) 詳細設定

Webサービスロジックの実装
ウィザードでのWebサービスの生成が成功すると、Webサービス名 に指定した値のクラスが生成されます。
生成されたクラスに public 属性のメソッドで Webサービスのロジックを記述してください。

プロジェクト・エクスプローラー 生成されたクラス

Memo
ロジックを作成する際に、アノテーション エディタを使用するとアノテーションの入力が簡単に行えます。アノテーションエディタについては、 [ 開発環境の構築(WebOTX Developer) > アノテーション定義支援ツール ] を参照して下さい。

以上でJAX-WS準拠のWebサービスの作成は終了です。作成したWebサービスアプリケーションの配備については、[Webサービスのデプロイ]を参照してください。
2.2.2.1.
ここでは、JAX-WS準拠のWebサービスを生成した場合の 動的Webプロジェクトの内容について説明します。
■settingsフォルダ
settingsフォルダにプロジェクトのFacetファイルが格納されます。
プロジェクトのXMLファイル「wizard.xml」がここに生成されます。
Webサービスの動作に必要な各種ソースコードが生成されます。基本構成は次の通りです。
新規に作成のWebサービス
クラス名
役割
Webサービス名
サービスエンドポイントクラスです。
WSDL から作成のWebサービス
クラス名
役割
WSDLファイルの定義によりクラス名
Webサービスインタフェースに必要な各種ソースコードです。
Webサービス名Impl
サービスエンドポイントクラスです。
■src/main/webapp/WEB-INFフォルダ
web.xmlとnec-jaxws.xmlファイルが生成されます。
■src/main/webapp/WEB-INF/wsdl フォルダ
WSDLファイルからWebサービスを作成する時、WSDLファイルが生成されます。
2.2.2.2.
ここでは、JAX-WS準拠のWebサービスを生成した場合のEJB プロジェクトの内容について説明します。
■settingsフォルダ
settingsフォルダにプロジェクトのFacetファイルが格納されます。
プロジェクトのXMLファイル「wizard.xml」がここに生成されます。
■build\classesフォルダ
build\classesフォルダにあるソースコードをビルドした結果が格納されます。
■ejbModuleフォルダ
Webサービスの動作に必要な各種ソースコードが生成されます。基本構成は[動的Webプロジェクト - Webサービス(JAX-WS)]の[srcフォルダ]を参照してください。
■ejbModule\META-INFフォルダ
MANIFEST.MFファイルが生成されます。
2.2.2.3.
ここでは、[JAX-WS(Webサービス作成ウィザード)]で作成したプロジェクトを元にWSDLファイルの生成方法について説明します。
WSDLファイルを生成する前に
メニュー ウィンドウ > 設定 を選択すると、設定ダイアログが起動されます。WebOTX > Webサービス > JAX-WS構成 を選択し、JAX-WS構成の画面が表示されます。

設定 WebOTX Webサービス JAX-WS構成

ソースファイル、クラスファイルを削除しないをONにした場合、WSDLファイルと同時に生成されたソースファイルは削除されません。
ソースファイル、クラスファイルを削除しないをOFFにした場合、WSDLファイルと同時に生成されたソースファイルは削除されます。
ポップアップメニュー
[JAX-WS(Webサービス作成ウィザード)]で作成したプロジェクトを選択し、WebOTX Developer'sStudioの右クリックメニュー Web サービス > WSDLファイル生成を選択すると、WSDLファイルを生成します。

Web サービス WSDLファイル生成

WSDLファイル(例:HelloService.wsdl)とスキーマファイル(例:HelloService_schema1.xsd)が生成されます。
動的Webプロジェクト
動的Webプロジェクト場合、WSDLファイルの位置は下記の通りです。
「/src/main/webapp/WEB-INF/wsdl」

動的Webプロジェクト WSDLファイルの位置

EJB プロジェクト
EJBプロジェクト場合、WSDLファイルの位置は下記の通りです。
「/ejbModule/META-INF/wsdl」

EJBプロジェクト WSDLファイルの位置

Memo
特定の状況でWSDLファイル生成を実行すると、「対象外のプロジェクトが指定されています。」のエラーが発生する可能性があります。エラーの詳細と対応方法は [ 注意制限事項 > 注意事項 > WSDLファイルを生成する場合 ]を参照してください。

Caution
WSDLを生成するためには、Webサービスクラスの *.class ファイルが必要です。自動ビルドを OFF にしている場合など、*.class が無い場合は実行できませんので 予めビルドして下さい。

2.2.2.4. 添付ファイル
Web サービスで使用するSOAP メッセージには添付ファイルをつけることができます。
Web サービスで添付ファイルを利用する場合、以下の2つの形式があります。 MTOM の利用方法については、[JAX-WS準拠Webサービスのカスタマイズ > MTOM (Message Transmission and OptimizationMechanism)の利用] を参照してください。
WS-I Attachments Profile の利用方法は、jakarta.activation.DataHandler のコンストラクタに @jakarta.xml.bind.annotation.XmlAttachmentRef アノテーションを宣言します。 他の設定は必要ありません。通常のデータ型と同様の処理を行ってください。
2.2.2.5. Web サービスと型
Web サービスのデータのやり取りはXML を利用します。Java とXML ではデータ型の種類が異なっているため、それぞれの型同士を結び付けて互換性を取る必要があります。 JAX-WS仕様ではJava の型からXML の型への変換規則、 XML の型からJava の型への変換規則を規定しています。 WebOTX はJAX-WSの規定している型変換法則に対応しています。Web サービス作成ウィザードでは、その中でJava の型とXML の型の相互変換をする時に可逆である型の組み合わせを使用しており、実際に利用できる型は次に挙げるものです。 ランタイムの種類、ウィザード中で選択するモードによって対応する型に違いがありますので、 ビジネスロジックの引数と返り値の型が対応しているかどうかをよくご確認ください。 引数や返り値に任意に作成したBean を使用している場合、そのフィールドに含まれる変数の型についても同様に考慮する必要がありますのでご注意ください。
Java の型 WS-I mode ON
WS-I mode OFF
RPC/literal
WS-I mode OFF
Document/literal
boolean
xsd:boolean
★byte
xsd:byte
★byte[]
xsd:base64Binary
short
xsd:short
int
xsd:int
long
xsd:long
float
xsd:float
double
xsd:double
java.lang.String
xsd:string
java.math.BigInteger
xsd:integer
java.math.BigDecimal
xsd:decimal
java.util.Calendar
xsd:dateTime
javax.xml.namespace.QName
xsd:QName
java.net.URI
xsd:anyURI
java.lang.Boolean
xsd:boolean
java.lang.Float
xsd:float
java.lang.Double
xsd:double
java.lang.Integer
xsd:int
java.lang.Short
xsd:short
java.lang.Byte
xsd:byte
2.2.2.6. 型に関する注意
詳細設定画面でRPC/literal の設定をしたとき、メソッド選択画面で選択した全てのメソッドの引数、返却値について、次の型の組み合わせについては同時に複数使用することができません。
同時に選択できない型の組み合わせ
java.lang.Boolean[]
boolean[]
java.lang.Float[]
float[]
java.lang.Double[]
double[]
java.lang.Integer[]
int[]
java.lang.Short[]
short[]
※[]は配列の意味です。
2.2.2.7.
自動生成されるJava クラスのパッケージ名を変更することができます。変更方法は次の通りです。
<workspace>/.metadata/.plugins/org.eclipse.core.runtime/.settingsにある com.nec.webotx.webservice.prefsファイルにcommon.package=新パッケージ名+「.」を追加します。
(例)common.package=homo.moge.
com.nec.webotx.webservice.prefsファイルがなければ、手動で同じ名前のテキストファイルを新規作成する必要があります。ファイルを新規作成または値を変更した場合、Developerを再起動してください。
デフォルトのパッケージ名はwebotx.ws.ds.「Web サービス名」です。

2.2.3. SOAPメッセージを直接処理するサーブレット

HTTPを直接処理できるサーブレットを使って、任意のXML文書を処理する方法について説明します。ここではSAAJを利用してSOAPを処理する方法を紹介します。文中では「SAAJ」サンプルを参照する箇所がありますので、あわせて「SAAJ」サンプルをご覧ください。

Caution
SOAPメッセージの処理に必ずSAAJを使用しなければならないということではありません

2.2.3.1. サーブレットのインタフェースを決める
まず、交換するXML文書の書式とサーブレット詳細(URLやmethodなど)を決めます。XML文書の書式を自分で決める必要がある場合には、 XMLスキーマなどを使って定義します。サーブレットが受け取るXMLと返却するXMLの書式が別々の場合には、それぞれについて定義します。
2.2.3.2. WSDLの作成
サーブレットのインタフェースをWSDLに反映します。先に作成しておいたXMLスキーマなどのXML書式を types要素の中でimportして使用すると便利です。

Caution
WSDLは必ず作成しなければならないものではありません。

2.2.3.3. プロジェクトを作成する
サーブレットを作成するために、動的Webプロジェクトを作成します。
新規プロジェクトダイアログ
WebOTX Developerのメニューから、ファイル > 新規 > プロジェクトを選択すると、 新規プロジェクトダイアログが起動します。
Web >動的Webプロジェクトを選択し、次へ をクリック。

ファイル 新規 プロジェクト 動的Webプロジェクト 選択

新規動的Webプロジェクト
プロジェクト名」に 動的Webプロジェクトの名前を指定します。プロジェクトは、デフォルトでは
<WebOTX_DIR>\Studio\workspace\指定したプロジェクト名
というフォルダに作成されます。もし、別の場所に作成したい場合は、プロジェクトコンテンツの デフォルトの使用をOFFにして、任意の場所を絶対パスで指定します。
ターゲットランタイムはWebOTX Application server <当該バージョン>(local Default)に設定します。まだ、サーバの登録をしていない場合は、新規ランタイム をクリックし、[新規サーバー・ランタイム環境]ダイアログに移ります。ここで WebOTX Application Server(local)を選択し、次へ をクリックします。
[WebOTXサーバーランタイムの新規作成]ダイアログでWebOTXサーバのインストールパスを設定し、 終了 をクリックします。
構成の変更からプロジェクトファセットを設定できますがここでは特に設定する必要はありません。 次へ をクリックします。
Webモジュール画面も特に設定する必要はありませんが、コンテキストルート などが設定できます。最後に 終了 をクリックします。
これで動的Webプロジェクトが作成されます。

新規 動的Webプロジェクト

新規 サーバー・ランタイム環境

新規 サーバー・ランタイム環境 WebOTXサーバーランタイムの新規作成

プロジェクト・ファセット 動的 Webモジュール

新規 動的Webプロジェクト Web モジュール

2.2.3.4. Webプロジェクトの設定をする
サーブレットの中でXML処理用に使用するライブラリがある場合は、動的Webプロジェクトの設定でライブラリをクラスパスに追加します。
2.2.3.5. サーブレットを作成する
サーブレットウィザードを使ってWebプロジェクトにサーブレットを追加します。
サーブレットの作成ウィザード
作成した動的Webプロジェクトで右クリックし、、新規 > サーブレットを実行します。
Web プロジェクト、Java パッケージ、クラス名 を設定します。ここでは順に、[SaajSample]、[com.nec.webotx.webservice.sample]、[SAAJServlet]を設定しています。
次へ をクリック。

新規 サーブレット作成

名前」はサーブレット名です。[SAAJService]に変更します。URL マッピングは[sample]に変更します。URL マッピングの Edit をクリックして変更します。

新規 サーブレット作成 名前 URL マッピング 入力

また、メソッドはinitdoPostをONにして、終了 をクリック。

新規 サーブレット作成 メソッド・スタブ 選択

Caution
サーブレット作成ダイアログのインターフェースに jakarta.servlet.Servlet を指定した場合、サーブレットが正常に作成できません。インターフェースに jakarta.servlet.Servlet を指定したい場合、サーブレット作成後に手動で指定してください。
例)
import jakarta.servlet.Servlet;
public class SAAJServlet extends HttpServlet implements Servlet {

Caution
プロジェクト作成時「動的 web モジュール バージョン」に「6.0」指定した場合、生成したJavaコードに「@WebServlet("/{Servlet名}")」が付与されません。次のいずれかの対応をお願いします。

2.2.3.6. 生成されたサーブレットクラスの編集
生成されたサーブレットクラスにソースコードを追加します。追加内容は、SAAJサンプルの [SAAJServlet]クラスを参照してください。doPostメソッドでリクエストメッセージからSAAJのSOAPMessageオブジェクトを生成したり、SOAPMessageオブジェクトからレスポンスメッセージを生成する処理を行っている汎用のクラスです。
2.2.3.7. SOAPメッセージ処理クラスの追加
サーブレットクラスの中で、doPostメソッド内で取り出したSOAPMessageを処理するメソッドとして onMessageメソッドを用意しています。このonMessageメソッドを実装することで、SOAPメッセージに封入されたXML文書を処理することができます。onMessageメソッドを実装するには、作っておいたサーブレットクラスを継承したクラスを作成し、onMessageメソッドをオーバライドします。サーブレットクラスを継承したクラスは次のように作成します。
メニュー ファイル > 新規 > クラス を選択し、 名前スーパークラスを指定し、完了 をクリック。ソース・フォルダやパッケージはSaajSampleプロジェクトを選択した状態でこのダイアログを開くと自動的に設定されていますが、変更もできます。なお、スーパークラスは、あらかじめ作っておいたサーブレットクラスを指定します。

新規 Java クラス SOAPメッセージ処理クラス 追加

ここで作成したクラスに、サンプルのクラス[SAAJService]を参照して、内容を追加します。
2.2.3.8. WARファイルを作成する
作成したサーブレットをWAR形式でアーカイブし、サーバに配備できる状態にします。
Webプロジェクトへのファイル追加
Webサービスのインタフェースを公開する場合、WSDLとXMLスキーマをWebプロジェクトのコンテンツディレクトリに追加しておくと便利です。
エクスポート
メニュー ファイル > エクスポートを選び、選択画面で Web > WAR fileを選択し、次へ をクリック。プロジェクトはここで作ったWebプロジェクトを、出力ファイルに出力先を指定し、 完了 をクリック。
2.2.3.9. WARファイルを配備する
ウィンドウ > パースペクティブを開く > その他を実行し、リストから「 WebOTX運用管理ツール」を指定し、 OK をクリック。接続ダイアログで設定をし、ドメインに接続します。

WARファイル 配備 パースペクティブ その他 WebOTX運用管理ツール 接続

ドメインのツリーのアプリケーションで右クリックし、「コンポーネントの配備」を実行します。
コンポーネントタイプで「Webコンポーネント」を選択し、ファイルに作成したWARファイルを指定し、 次へ2回クリック。

WARファイル 配備 コンポーネント配備

コンテキストルートを指定します。コンテキストルートはWebサービスのURLに次のように影響します。
http://<ホスト名>:<ポート番号>/<コンテキストルート><サーブレット作成時に指定したURL>
最後に配備をクリックし、配備を行います。

WARファイル 配備 コンテキストルート