Hitachi

Cosminexus V11 アプリケーションサーバ Webサービス開発ガイド


16.1.5 パラメタおよび戻り値からメッセージのパートへのマッピング(wrapperスタイルの場合)

SEIのメソッドのパラメタからWSDL(wsdl:part要素のname属性)へのマッピングについて説明します。

ここでは,wrapperスタイルの場合について説明します。

〈この項の構成〉

(1) マッピング

wrapperスタイルの場合,SEIのメソッド名およびSEIのメソッド名と同じ名称のリクエストbeanが生成されます。また,接尾辞"Response"を付加したレスポンスbeanが生成されます。リクエストbeanおよびレスポンスbeanの生成には,hwsgenコマンドで自動生成する方法と,Webサービスの開始時に動的に生成する方法があります。動的に生成する方法の場合は,Webサービスの開始時にエラーが発生しないように,コンパイルしたWebサービス実装クラスに対してhwsgenコマンドを実行することで,事前にエラーチェックができます。詳細については,「10.23.1 hwsgenコマンドによるエラーチェックについて」を参照してください。

メソッドのパラメタとメッセージのパートのマッピング例を次の図に示します。

図16‒4 メソッドのパラメタとメッセージのパートのマッピング例(wrapperスタイル)

[図データ]

メソッドの戻り値とメッセージのパートのマッピング例を次の図に示します。

図16‒5 メソッドの戻り値とメッセージのパートのマッピング例(wrapperスタイル)

[図データ]

メソッドのパラメタおよび戻り値からメッセージのパートへのマッピング規則を次に示します。

注※

argNのNは,パラメタの順番に依存した0以上の整数を表します。

javax.xml.bind.annotation.XmlElementアノテーションについては,「16.2.10 javax.xml.bind.annotation.XmlElementアノテーション」を参照してください。

(2) パラメタに指定できるJava型

Holder(javax.xml.ws.Holder)型以外のJava型と,Holder型を指定するときの条件および注意事項について説明します。

(a) Holder型以外のJava型

Holder型以外のJava型は,JAXB 2.2仕様に従ってWSDLのスキーマの型にマッピングされます。Holder型以外のJava型を指定するときの注意事項について説明します。

  • Javaプリミティブ型は,outおよびinoutパラメタに指定できません。

  • Javaプリミティブ型は,javax.xml.ws.Holderクラスの型パラメタとしても指定できません。指定した場合,javacコマンドの実行時にエラーとなり終了します。

  • Java型をoutおよびinoutパラメタに指定する場合,javax.xml.ws.Holderクラスの型パラメタとして指定できます。

(b) javax.xml.ws.Holder型

javax.xml.ws.Holder型を指定するときの注意事項について説明します。

  • javax.xml.ws.Holderクラスの型パラメタに,javax.jws.WebParamアノテーションを指定する場合,mode要素でMode.OUTまたはMode.INOUTを指定する必要があります。

  • 次の場合の動作は保証されません。

    • javax.xml.ws.Holderクラスをメソッドの引数以外に指定した場合

    • javax.xml.ws.Holderクラスの配列を使用した場合

    • javax.xml.ws.Holderクラスの型パラメタに型を指定していない場合

    • javax.xml.ws.Holderクラスの型パラメタに,javax.xml.ws.Holderクラスやそれを継承したクラスを指定した場合

    • Webサービス開始時にリクエストbeanとレスポンスbeanを動的に生成する際,javax.xml.ws.Holderクラスの型パラメタにbyte型以外の多次元配列とbyte型の3次元以上の配列を指定した場合

(c) Java型のマッピング

Java型をマッピングするときの注意事項について説明します。

  • javax.jws.WebParamアノテーションのmode要素でカスタマイズしていない場合,javax.xml.ws.Holderクラスの型パラメタ以外の引数は,inパラメタとしてマッピングされ,javax.xml.ws.Holderクラスの型パラメタは,inoutパラメタとしてマッピングされます。outパラメタとしてマッピングする方法については,「16.2.7(4) mode要素(javax.jws.WebParam)」を参照してください。

  • inputメッセージ名は,オペレーション名でマッピングされます。outputメッセージ名は,オペレーション名に接尾辞"Response"を付加した値でマッピングされます。

  • SEIのメソッドのパラメタは,Javaの仕様に従って254個まで定義できます。255個以上定義した場合は,javacコマンドの実行時にコンパイルエラーとなり終了します。

(3) Javaメソッドのパラメタの条件

Javaメソッドのパラメタ名は,WSDLにマッピングされないため,Java言語仕様で定めるJava識別子の命名規則に従って記述してください。

(4) パラメタと戻り値の組み合わせ

inパラメタ,inoutパラメタ,outパラメタ,および戻り値は,自由に組み合わせて記述できます。

(5) 名前衝突時の動作

wrapper beanクラス名とグローバル要素の名前についての規則,および名前衝突したときの動作について説明します。

(6) java.util.Mapクラスの使用

SEIの引数または戻り値にjava.util.Mapクラスを使用する場合,SEIのjava.util.Map型の引数または戻り値に対して,次の作業をする必要があります。

  1. value typeを作成します。

    JAXB 2.2仕様に従い,java.util.Map(bound type)に対応するvalue type(マーシャル/アンマーシャルできるJavaBeanクラス)を作成します。

  2. アダプタを作成します。

    javax.xml.bind.annotation.adapters.XmlAdapterを継承するjava.util.Map(bound type)およびvalue typeを相互変換するアダプタを作成し,unmarshalメソッドおよびmarshalメソッドを実装します。

  3. javax.xml.bind.annotation.adapters.XmlJavaTypeAdapterアノテーションでアノテートします。

    java.util.Map型の引数または戻り値を,2.のアダプタを値に持つXmlJavaTypeAdapterアノテーションでアノテートします。

  4. javacコマンドを実行します。

    アノテート済みのSEIをjavacコマンドでコンパイルします。

    value type,アダプタ,xmlJavaTypeAdapterアノテーションが適用されたリクエストbeanクラス/レスポンスbeanクラスの関係と実装例を次に示します。

    図16‒6 java.util.Mapの使用例

    [図データ]