intra-mart Accel Platform 2021 Winter(Dandelion) リリースノート 初版 2021-12-01

9.2.10. Webサービス

9.2.10.1. Webサービス全般の制約があります。

  • Webサービスエンジンとして「Axis 2 ver1.4.1」を利用することを前提とします。

  • Axis2 の詳細は Axis2 のWebサイト(http://axis.apache.org/axis2/java/core/index.html) を参照してください。

  • Web サービスのトランスポート層は HTTP を利用すること前提とします。

  • Web サービスの暗号化は SSL にて実現することを前提とします。

  • document-literal スタイルの Web サービスを公開することを前提とします。

  • Webサービスの負荷分散は、ロードバランサの機能で実現します。
  • 分散構成の場合、各 Web Application Server に同じ Web サービスをデプロイする必要があります。
    Web Application Server 間でデプロイされている Web サービスが異なる場合、Web サービスの負荷分散は正しく動作しません。

9.2.10.2. Axis2 - 1.4.xの現行仕様についての内容です。

  • Webサービスのメッセージ要素に、継承関係を持つクラスを指定することはできません。
  • Web サービスのメッセージ要素に、内部クラスを指定することはできません。スタブが正しく処理できません。
  • Web サービスとして公開するメソッドの返却値が void で、かつ、例外をスローしない場合、何らかのエラーが発生しても、Web サービス・クライアント側にエラーは通知されません。
  • Axis2 の管理コンソール(http://hostname/imart/axis2-admin/index.jsp)は、URL rewriting を利用したセッション ID の維持に対応していません。
  • メッセージレシーバ「RPCxxxxMessageReceiver」を利用した XML から Java オブジェクトへのマッピングに関して、「配列」として定義されている Java オブジェクトに対する SOAP メッセージの該当要素がなかった場合、「空の配列」に変換される場合と「null」に変換される場合があります。
  • データバインディング方式に「ADB」を利用した Axis2 のスタブに関して、XML からJava オブジェクトへマッピングされる際、「配列」として定義されている Java オブジェクトが以下のように変換されます。この現行仕様により、Web サービス・プロバイダ側で「null」を送信した場合、Web サービス・クライアント側では「配列長が 1 の配列(最初の要素は「null」)」として解釈されたり、Web サービス・プロバイダ側で「空の配列」を送信した場合、Web サービス・クライアント側では「null」として解釈されたりします。
  • Axis2-1.4.1 でAXIS2-3870 が改修されました。しかし、Axis2 のスタブを使用した場合にメモリリークが発生することが確認されました。
    Axis2 1.4.1 client stub not freed (https://issues.apache.org/jira/browse/AXIS2-4007)
  • intra-mart Accel Platform では、AXIS2-4007 を改修したAxis2-1.4.1 を利用しています。改修を行ったクラスは「org.apache.axis2.client.Stub」です。
  • Webサービスとして公開するメソッドの引数にJavaBeanが指定されている場合、そのJavaBean内の「バイト配列(=byte[])」形式のプロパティは、データが正しく送受信されません。これは、Axis2 の現行仕様による制限です。バイナリファイルを送受信する場合は、JavaBean のプロパティではなく、Web サービスとして公開するメソッドに「バイト配列(=byte[])」形式の引数を指定してください。
  • Webサービスとして公開するメソッドの返却型をvoidとすることはできません。
  • AXIS2-3921 により、WSDL内にstringまたはlongという要素名が存在するWebサービスのスタブクラスの生成を行うとコンパイルエラーが発生するスタブクラスが生成されます。

9.2.10.3. Webサービスに対する認証・認可についての内容です。

  • intra-mart ログインセッションのスコープは、Web サービスの呼び出しごとに管理されます。
    したがって、Web サービスの実行後は、明示的に破棄(ログアウト)されます。
  • 認証時に利用するパスワードは、常に intra-mart Accel Platform のアカウント情報が保持しているものを利用します。LDAP 連携を行っている場合、LDAP 側で管理されているパスワードは利用されません。
  • intra-mart Accel Platform ユーザの認証・認可は、WS-Security に対応していません。

  • Web サービスのアンデプロイ時に、該当 Web サービスに設定されていたアクセス権限は削除されません。

9.2.10.4. Webサービス・プロバイダについての内容です。

  • 既存の Java クラス、または、JavaScript 関数を Web サービス化することを対象とします。(ボトムアップアプローチによるWebサービス化)
  • スクリプト開発モデルの Web サービス化に関して、リクエストパラメータを引数とする関数は、Web サービス化の対象外です。リクエストパラメータを引数とする関数とは、init()関数、close()関数、および、
    リンクやフォームの action 属性に対応する関数を意味します。
  • スクリプト開発モデルの Web サービス化に関して、引数に対して値を更新する処理を行う関数は、Webサービス化の対象外です。引数に対して値を更新する処理を行う関数とは、引数の利用用途が、関数内部で読み取られるだけでなく、関数実行終了後の結果としても利用される関数を意味します。
  • スクリプト開発モデルの Web サービス化に関して、以下の API を利用している関数は、Web サービス化の対象外です。
    • forward()
    • redirect()
    • secureRedirect()
    • transmission()
    • Debug.browse()
    • HTTPResponse.sendMessageBody()
    • HTTPResponse.sendMessageBodyString()
    • Module.download.send()
    • Module.alert.back()
    • Module.alert.link()
    • Module.alert.reload()
    • Module.alert.write()
    • PageManager.redirect()
    • HTTPResponse.sendMessageBodyFile()
    • HTTPResponse.sendMessageBodyAsBinary()
    • HTTPResponse.sendMessageBodyAsText()
    • Transfer.toErrorPage()
    • Transfer.toInformationPage()
    • Transfer.toWarningPage()
  • JavaEE フレームワークのイベントフレームワークの Web サービス化に関して、aar ファイル内に Web サービスとして公開する Java クラスが格納されていると、Web サービスが動作しません。

9.2.10.5. Webサービス・クライアントに関する制限事項です。

  • SOAPClient オブジェクトは、Axis2 の CodeGenerationEngine クラスを利用しています。したがって、CodeGenerationEngine が対応していない Web サービスを呼び出すことはできません。
  • SOAPClient オブジェクトは、データバインディング方式に「ADB」を利用した Axis2 のスタブを使用しています。
  • SOAPClient オブジェクトの getSampleCode()関数は、XML スキーマの restriction で定義されている型などは、サンプルデータが生成されません。サンプルデータが生成されていない型については、実行する Web サービスの仕様を確認してください。
  • SOAPClientオブジェクトのgetSampleCode()関数は、Webサービス・オペレーションの入力メッセージ要素の子要素が「maxOccurs=”unbounded”」指定されている場合、正しく表示できません。
  • SOAPClient オブジェクトは、document-literal スタイルの Web サービスに対応しています。
  • SOAPClient は、非同期型コールバック形式の Web サービスに対応していません。
  • SOAPClient オブジェクトを WebSphere で利用するためには、「クラス・ローダーの順序」を「最初にアプリケーション・クラス・ローダーをロードしたクラス」に設定する必要があります。
  • SOAPClient オブジェクト利用時に、自動生成されたJavaスタブ・クラスのコンパイルに失敗する場合は、環境変数「AXIS2_HOME」を設定する必要があります。
  • SOAPClient オブジェクトは、JavaScript の予約語と同一名称の Web サービス・オペレーションを利用できません。
  • SOAPClient オブジェクトに指定するWSDL内に1文字目が大文字英字でかつ2文字目が小文字英字または数値で始まる要素名が存在する場合、対象のWebサービスを実行できません。
    例えば、SOAP メッセージの要素名が「A0001」である場合、Axis2 はアクセッサメソッドが「getA0001」「setA0001」の JavaBeans を生成します。
    この JavaBeans からプロパティ名を取得すると「a0001」が返されるため返却値オブジェクトのプロパティ名は「a0001」となります。これは、先頭に一文字だけ存在する大文字英字がJavaBean 仕様のプロパティ名にしたがい小文字にされるためです。
  • SOAPClient オブジェクトに指定するWSDL内にstringまたはlongという要素名が存在する場合、対象のWebサービスを実行できません。CodeGenerationEngine にてコンパイルが通らないスタブクラスが生成されるためです。
  • SOAPClient オブジェクトのスタブコードは 2013 Summer(8.0.3)以前と互換性がありません。SOAPClient オブジェクトにおいて以下の条件に当てはまる場合、正常に動作しません。
    • 2013 Spring(8.0.3)以前の環境から移行する場合
    • SOAPClient APIを利用する際に、スタブの作成方法をNeverモードとして利用されている場合
    • 2013 Spring(8.0.3)以前のSOAPClientを利用して生成したスタブコードを配置している場合
    上記条件に当てはまる場合、2013 Spring(8.0.3)以前において作成したスタブコードと、2013 Summer(8.0.4)以降において生成されるスタブコードに互換性がありません。その為、再度新しい2013 Summer(8.0.4)版以降のSOAPClient APIを利用してスタブコードを生成し配置する必要があります。
  • SOAPClient オブジェクトに指定するWSDL内に空の要素が存在する場合、は対象のWebサービスを実行できません。

9.2.10.6. パスワード保存方式が「ハッシュ化」の場合、WebサービスのWSSE認証モジュールによる認証が行えません。

  • WSSE認証ではWebサービスのリクエストを受け付けた際に、Webサービス・クライアントで生成した認証用文字列とサーバで生成した認証用文字列を比較して認証判断を行います。
    パスワード保存方式が「ハッシュ化」の場合、認証用文字列生成時に必要な平文のパスワードを取得できないため認証に必ず失敗します。