Webサービス¶
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サーバに Apache HTTP Server 2.2.x を利用している場合、Resin の mod_caucho にて負荷分散が実現可能です。 分散構成の場合、各 Web Application Server に同じ Web サービスをデプロイする必要があります。Web Application Server 間でデプロイされている Web サービスが異なる場合、Web サービスの負荷分散は正しく動作しません。
Axis2 - 1.4.xの現行仕様についての内容です。¶
Webサービスのメッセージ要素に、継承関係を持つクラスを指定することはできません。 Web サービスのメッセージ要素に、内部クラスを指定することはできません。スタブが正しく処理できません。 Web サービスとして公開するメソッドの返却値が void で、かつ、例外をスローしない場合、何らかのエラーが発生しても、Web サービス・クライアント側にエラーは通知されません。 SOAPMonitor は、intra-mart Accel Platform と同一マシンで Web サーバが稼動している場合のみ利用可能です。 Axis2 の管理コンソール(http://hostname/imart/axis2-admin/index.jsp)は、URL rewriteing を利用したセッション 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とすることはできません。
Webサービスに対する認証・認可についての内容です。¶
Web サービスの実行後、明示的に破棄(ログアウト)されます。したがって、intra-mart ログインセッションのスコープは Web サービスの呼び出し単位となります。 認証時に利用するパスワードは、常に intra-mart Accel Platform のアカウント情報が保持しているものを利用します。LDAP 連携を行っている場合、LDAP 側で管理されているパスワードは利用されません。 intra-mart Accel Platform ユーザの認証・認可は、WS-Security に対応していません。 Web サービスのアンデプロイ時に、該当 Web サービスに設定されていたアクセス権限は削除されません。
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() JavaEE フレームワークのイベントフレームワークの Web サービス化に関して、aar ファイル内に Web サービスとして公開する Java クラスが格納されていると、Web サービスが動作しません。
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 サービス・オペレーションを利用できません。 SOAP メッセージ要素名に先頭に一文字だけの大文字英字を指定することができません。たとえば、SOAP メッセージの要素名が「A0001」である場合、Axis2 はアクセッサメソッドが「getA0001」「setA0001」の JavaBeans を生成します。この JavaBeans からプロパティ名を取得すると「a0001」が返されるため返却値オブジェクトのプロパティ名は「a0001」となります。これは、先頭に一文字だけ存在する大文字英字がJavaBean 仕様のプロパティ名にしたがい小文字にされるためです。