説明

Webサービス基盤システム

【課題】既存の業務システムを変更することなく、より容易に既存の業務システムをWebサービスとしてクライアントに提供する。
【解決手段】Webサービス基盤システム2であって、所定の通信プロトコルに従ってクライアント1との間でメッセージの送受信を行う通信処理手段22と、複数のサービスエンドポイント23と、全てのWebサービスに共通のWebサービス提供手段24とを有し、通信処理手段22は、クライアント1からのサービス要求をサービスエンドポイント23を介してWebサービス提供手段24に送出し、Webサービス提供手段24は、サービス要求を業務システム7、8が処理可能なデータ形式に変換して、サービス要求で指定されたWebサービスに対応する業務システム7、8に送信するとともに、業務システム7、8の処理結果を通信処理手段22が処理可能なデータ形式に変換して通信処理手段22に送出する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、クライアントにWebサービスを提供するためのWebサービス基盤技術に関する。
【背景技術】
【0002】
近年、様々な種類のWebサービスが開発され、クライアントに提供されている。また、Webサービスを実現するにあたりWSDLを使用する場合がある。WSDLは、W3C(World Wide Web Consortium)によって指定された標準のXMLドキュメントである。WSDLは、Webサービスを提供するサービス・プロバイダとWebサービスを利用するサービス・リクエスタ(クライアント)の間でインターフェイス情報をやり取りするために使用される。特許文献1には、コントローラ装置のプログラムと対話することができるWebサービスによりWSDLを使用する通信システムが記載されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2002−215486号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
ところで、既存の業務システムをWebサービスとしてクライアントに提供する場合、例えばSOAP(Simple Object Access Protocol)などの通信プロトコルに従って交換されるメッセージの記述形式に従ったプログラムの開発が必要となる。メッセージがXML(eXtensible Markup language)で記述されている場合、XMLによるメッセージのデータ形式とWebサービス・プロバイダ側におけるプログラム言語にて処理可能なデータ形式とは異なるため、各Webサービス・プロバイダ側においてデータ形式の相違を吸収する仕組みが必要となる。
【0005】
そのため、既存の業務システムをWebサービスとしてクライアントに提供する場合、システムの開発規模、開発コスト、作業負荷が大きく、既存の業務システムを容易にWebサービス化できないという問題がある。
【0006】
本発明は上記事情に鑑みてなされたものであり、本発明の目的は、既存の業務システムを変更することなく、より容易に既存の業務システムをWebサービスとしてクライアントに提供することにある。
【課題を解決するための手段】
【0007】
上記課題を解決するために、本発明は、業務システムが行う処理をWebサービスとしてクライアントに提供するWebサービス基盤システムであって、所定の通信プロトコルに従って、クライアントとの間でメッセージの送受信を行う通信処理手段と、Webサービス毎に設けられた、複数のサービスエンドポイントと、全てのWebサービスに共通のWebサービス提供手段と、を有し、前記通信処理手段は、前記クライアントからのサービス要求を、当該サービス要求で指定されたWebサービス用のサービスエンドポイントを介して、前記Webサービス提供手段に送出し、前記Webサービス提供手段は、前記サービス要求を前記業務システムが処理可能なデータ形式に変換して、当該サービス要求で指定されたWebサービスに対応する業務システムに送信するとともに、前記業務システムの処理結果を前記通信処理手段が処理可能なデータ形式に変換して、前記Webサービス用のサービスエンドポイントを介して前記通信処理手段に送出する。
【発明の効果】
【0008】
本発明では、既存の業務システムを変更することなく、より容易に既存の業務システムをWebサービスとしてクライアントに提供することができる。
【図面の簡単な説明】
【0009】
【図1】本発明の実施形態が適用されたWebサービス基盤システムの構成図である。
【図2】各装置のハードウェア構成例を示す図である。
【図3】リクエスト電文の一例を示す図である。
【図4】サービス呼出定義ファイルの一例を示す図である。
【図5】トランザクション呼出定義ファイル、データ変換定義ファイル、電文定義ファイルの一例を示す図である。
【図6】レスポンス電文の一例を示したものである。
【図7】WSDLの生成処理における入出力ファイルを示す図である。
【図8】WSDLの構造を模式的に示す図である。
【図9】WSDLの生成処理を示すフローチャートである。
【図10】WSDLと、トランザクション呼出定義ファイル、データ変換定義ファイルおよび電文定義ファイルとの関係を模式的に示す図である。
【図11】WSDLネーミングルールの一例を示す図である。
【図12】WSDLネーミングルールの一例を示す図である。
【図13】WSDLネーミングルールの一例を示す図である。
【図14】WSDLネーミングルールの一例を示す図である。
【図15】WSDLネーミングルールの一例を示す図である。
【図16】JavaBeansの一例を示す図である。
【図17】サービスエンドポイントの一例を示す図である。
【発明を実施するための形態】
【0010】
以下、本発明の実施の形態について説明する。
【0011】
図1は、本発明の実施形態が適用されたWebシステムの全体構成図である。本実施形態では、既存の業務システムを、スピーディに、かつ容易にWebサービス化するものである。
【0012】
図示するWebシステムは、ユーザが使用するクライアント1と、Webサービス基盤システム2と、既存の複数の業務システム7、8とを有する。第1の業務システム7は、Java(登録商標)で記述されたアプリケーションプログラム(トランザクション)を実行することにより各種のサービス(業務処理)を実行する。第2の業務システム8は、Java(登録商標)以外のCOBOL、C言語などで記述されたアプリケーションプログラム(トランザクション)を実行することにより各種のサービス(業務処理)を実行する。
【0013】
クライアント1とWebサービス基盤システム2とはインターネットなどのネットワークにより接続され、Webサービス基盤システム2と業務システム7、8とはLANなどのネットワークにより接続される。
【0014】
本実施形態のWebサービス基盤システム2は、クライアント1から送信される要求を対応する業務システム7、8のトランザクションに接続し、当該トランザクションによる処理結果を要求元のクライアント1に送信する。
【0015】
図示するWebサービス基盤システム2は、実行環境として、Webアプリケーション部21と、SOAPエンジン22(通信処理手段)と、複数のサービスエンドポイント23と、汎用のサービスクラス24および接続部28(Webサービス提供手段)と、サービス呼出定義ファイル31と、データ変換定義ファイル34と、電文定義ファイル35とを有する。
【0016】
また、Webサービス基盤システム2は、開発環境として、クライアント1にインストールされるWSDL11と、Webサービス基盤システム2の実行環境で使用するサービスエンドポイント23、サービス呼出定義ファイル31、JavaBeans32を生成する生成部29を有する。
【0017】
上記説明した、クライアント1、Webサービス基盤システム2、および業務システム7、8は、いずれも、例えば図2に示すようなCPU901と、メモリ902と、HDD等の外部記憶装置903と、キーボードやマウスなどの入力装置904と、ディスプレイやプリンタなどの出力装置905と、ネットワークと接続するための通信制御装置906と、を備えた汎用的なコンピュータシステムを用いることができる。このコンピュータシステムにおいて、CPU901がメモリ902上にロードされた所定のプログラムを実行することにより、各装置の各機能が実現される。
【0018】
例えば、Webサービス基盤システム2および業務システム7、8の各機能は、Webサービス基盤システム2用のプログラムの場合はWebサービス基盤システム2のCPU901が、そして、業務システム7、8用のプログラムの場合は業務システム7、8のCPU901が、それぞれ実行することにより実現される。
【0019】
なお、入力装置904および出力装置905については、各装置が必要に応じて備えるものとする。また、Webサービス基盤システム2は、複数のサーバで構成されるものであってもよい。例えば、実行環境用のサーバと、開発環境用のサーバとで構成することとしてもよい。
【0020】
[実行環境]
以下にWebサービス基盤システム2の実行環境について説明する。
【0021】
Webアプリケーション部21は、クライアント1から送信されたリクエスト電文(サービス要求)を受け付け、SOAPエンジン22に送出する。
【0022】
SOAPエンジン22は、クライアント1との間でリクエスト電文およびレスポンス電文などのメッセージ交換を行う。SOAP(Simple Object Access Protocol)は、XML、HTTPなどをベースとした、他のコンピュータにあるデータやサービスを呼び出すためのプロトコルである。SOAPによる通信では、XML文書にエンベロープと呼ばれる付帯情報が付いた電文・メッセージを、HTTPなどのプロトコルで交換する。Webサービス(以下、「サービス」という)を利用するクライアントと、サービスを提供する側のシステムの双方がSOAPの生成・解釈エンジンを持つことで、異なる環境間でのオブジェクト呼び出しを可能にしている。
【0023】
サービスエンドポイント23は、サービスを利用するクライアント1に公開するサービスの受け口(インターフェース、ポート)である。本実施形態では、サービス毎にサービスエンドポイント23を備える。
【0024】
サービスクラス24は、サービスエンドポイント23から呼び出されるWeb処理を行うミドルウェアである。本実施形態のサービスクラス24は、全てのサービスで共通に使用される汎用的なものである。サービスクラスについては、後述する。
【0025】
次に、本実施形態の実行環境における処理について説明する。
【0026】
なお、本実施形態では、後述する開発環境の生成部29によりあらかじめ生成された、クライアント1のWSDL11と、Webサービス基盤システム2のサービスエンドポイント23、サービス呼出定義ファイル31、JavaBeans32を用いる。
【0027】
まず、クライアント1は、ユーザの指示などを受け付けて、SOAPによるリクエスト電文をWebサービス基盤システム2に送信する。すなわち、クライアント1のアプリケーション13は、WSDL11から生成されるスタブ12を用いて、リクエスト電文を生成し、Webサービス基盤システム2に送信する。リクエスト電文には、ミドルヘッダと、アプリケーションデータと、当該リクエスト電文の送信先であるURL(Uniform Resource Locator)とが含まれる。ミドルヘッダは、クライアントと、Webサービス基盤システム2との間でやり取りする制御情報を保持するための領域である。なお、WSDL11については、後述する。
【0028】
図3は、クライアント1から送信されるリクエスト電文の一例を示すものである。図示すリクエスト電文は、HTTPヘッダとSOAP電文とを有する。HTTPヘッダには、所望のサービスを識別するためのURL301が含まれ、当該URL301の最後にはサービス名(図示する例では「PT01」)が設定されている。SOAP電文には、ミドルヘッダ302と、アプリケーションデータ303が設定されている。
【0029】
Webサービス基盤システム2のSOAPエンジン22は、Webアプリケーション部21を介してリクエスト電文を受け付け、当該リクエスト電文のURL301に設定されたサービス名に対応するサービス呼出定義ファイル31を読み出す。サービス呼出定義ファイル31は、サービス毎に生成されるものとする。また、サービス呼出定義ファイル31は、あらかじめ開発環境の生成部29により生成され、Webサービス基盤システム2の図示しない記憶部に記憶されている。
【0030】
図4は、サービス呼出定義ファイル31の一例を示すものである。図示するサービス呼出定義ファイル31には、サービス名として「PT01」401が記述され、呼出メソッド名としてサービスクラス24(Webサービスプロバイダ部25)を意味する「TRDOperation」402が記述されている。本実施形態では、全てのサービス呼出定義ファイル31において、同一の呼出メソッド名(「TRDOperation」)が設定される。これにより、各サービスエンドポイント23は、全てのサービスエンドポイントに共通の汎用サービスクラス24を呼び出す。
【0031】
また、サービス呼出定義ファイル31には、業務システムへ送信される上り電文で使用するJavaBeans(データ保持部品)の識別情報403(ミドルヘッダ用:「aifabean」、アプリケーションデータ用:「lay029bean」)と、クライアントへ送信される下り電文で使用するJavaBeansの識別情報404(アプリケーションデータ用:「pt01retaurnbean」)とが記述され、さらに、電文の型定義405が記述されている。
【0032】
SOAPエンジン22は、対応するサービス呼出定義ファイル31に基づいてリクエスト電文のSOAP電文をデシリアライズし、リクエスト電文で指定されたサービス名に対応するサービスエンドポイント23にJavaBeansを受け渡す。すなわち、SOAPエンジン22は、XMLで記述されたSOAP電文のデータをJava(登録商標)言語に変換し、サービス呼出定義ファイル31で指定された上り電文用のJavaBeansに格納して、サービスエンドポイント23に送出する。
【0033】
なお、図4に示すサービス呼出定義ファイル31の場合、SOAPエンジン22は、SOAP電文のミドルヘッダについては「aifabean」のJavaBeansに、SOAP電文のアプリケーションデータについては「lay029bean」のJavaBeansに、データを格納する。
【0034】
また、各サービスで使用するミドルヘッダ、上り電文および下り電文のJavaBeans(データが入っていない空の状態のデータ保持部品)は、あらかじめ開発環境の生成部29により生成され、Webサービス基盤システム2に設けられている。
【0035】
JavaBeansを受け付けたサービスエンドポイント23は、自サービスエンドポイントのサービスに対応するサービス呼出定義ファイル31を参照し、当該サービス呼出定義ファイル31に設定された情報に基づいて、汎用のサービスクラス24を呼び出す。具体的には、呼び出しメソッド名402(図4参照)に設定されたサービスクラス24を呼び出す。その際に、サービスエンドポイント23は、受け付けたJavaBeansおよびサービス呼出定義ファイルに設定された各種情報(サービス名、JavaBeansのIDなど)を引数として、サービスクラス24に受け渡す。
【0036】
サービスクラス24のデータ変換部26は、Webサービスプロバイダ部25を介して、JavaBeans32などの引数を受け取る。そして、データ変換部26は、受け取ったJavaBeans32に保持されたデータのデータチェックを行い、当該データをデータ記憶部36に格納する。本実施形態のデータ記憶部36は、データストアビーン(DSB)と、リクエストデータホルダー(RDH)と、セッションデータホルダー(SDH)とを有する。
【0037】
データ変換部26は、上り電文(アプリケーションデータ)のJavaBeansに保持されたデータについてはDSBに格納し、ミドルヘッダのJavaBeansに保持されたデータについてはRDHおよびSDHに格納する。なお、データ記憶部36は、業務システム7、8の全てのサービスからアクセスが可能なデータ領域である。
【0038】
そして、データ変換部26は、JavaBeans32から生成され、データ記憶部36に格納されたDSB、RDH、SDHのデータ、およびサービス名を引数として、トランザクション呼出部27を呼び出す。トランザクション呼出部27は、トランザクション呼出定義ファイル33を参照し、引数として設定されたサービス名に対応する業務システム7、8のトランザクションIDおよび呼出先を特定する。トランザクション呼出定義ファイル33は、業務システム7、8への呼び出しを定義するファイルであって、図示しない記憶部にあらかじめ記憶されている。
【0039】
図5(a)は、トランザクション呼出定義ファイル33の一例を示すものである。図示するトランザクション呼出定義ファイル33には、サービス名501と、当該サービス名501に対応する業務システムのトランザクションID502および呼出先503とが対応付けて記憶されている。呼出先503には、呼び出す業務システムを識別するための識別情報(システムID等)が設定される。なお、図示するトランザクション呼出定義ファイル33には、一組のサービス名とトランザクションID・呼出先しか記述されていないが、実際には複数の組のサービス名とトランザクションID・呼出先とが対応付けて記述されている。
【0040】
起動するトランザクションが第1の業務システム7のJava(登録商標)ロジックの場合、呼出先503として第1の業務システム7のシステムIDが設定される。一方、起動するトランザクションが第2の業務システム8のCOBOL、C言語などで記述されたアプリケーションプログラムの場合、呼出先503として接続部28が設定される。
【0041】
トランザクション呼出部27は、特定したトランザクションIDおよびDSB、RDH、SDHのデータを引数として、特定した呼出先を呼び出す。
【0042】
第1の業務システム7が呼び出された場合、第1の業務システム7は引数として指定されたトランザクションを起動し、引数として受け渡されたデータを用いて所定の業務処理を行い、処理結果をトランザクション呼出部27を介してデータ変換部26に送信する。なお、データ変換部26に送信される処理結果は、Java(登録商標)のデータ形式のデータである。
【0043】
一方、接続部28が呼び出された場合、接続部28は、引数として指定されたトランザクションIDに対応するデータ変換ファイル34を参照し、当該データ変換ファイル34で指定された電文定義ファイルIDを特定する。そして、接続部28は、特定した電文定義ファイルIDの電文定義ファイルを読み出す。データ変換ファイル34は、業務システムの入出力を定義するファイルであり、電文定義ファイル35は、各入出力毎のデータレイアウトを定義するファイルであって、これらのファイル34、35は図示しない記憶部にあらかじめ記憶されている。
【0044】
図5(b)は、データ変換ファイル34の一例を示すものである。図示するデータ変換ファイル34には、第2の業務システム8のトランザクションID511と、当該トランザクションID511に対応する上り電文用の電文定義ファイルID512および下り電文用の電文定義ファイルID513とが対応付けて記憶されている。
【0045】
図5(c)は、電文定義ファイル35の一例を示すものである。図示する電文定義ファイル35には、電文定義ファイルID521と、当該電文定義ファイルID521に対応する電文のデータレイアウト定義522(データ名、データタイプ、桁数、データの並び順、等)とが対応付けて記憶されている。
【0046】
接続部28は、データ変換ファイル34を参照して特定した上り電文用の電文定義ファイルID512の電文定義ファイル35を読み出し、当該電文定義ファイル35のデータレイアウト定義522を用いて、引数として受け渡されたDSBのデータを、第2の業務システム8のトランザクション(アプリケーションプログラム)で使用可能なデータ形式に変換する。そして、接続部28は、変換したデータおよびトランザクション呼出定義ファイル33から特定したトランザクションIDを引数として第2の業務システム8を呼び出す。
【0047】
第2の業務システム8は、引数として指定されたトランザクションを起動し、引数として受け渡されたデータを用いて所定の業務処理を行い、処理結果を接続部28に送信する。
【0048】
接続部28は、データ変換ファイル34で指定された下り電文用の電文定義ファイルID513に対応する電文定義ファイル35を読み出し、当該電文定義ファイル35のデータレイアウト定義を用いて、第2の業務システム8から送信された処理結果のデータをDSBのデータ形式(Java(登録商標)データ)に変換する。そして、接続部28は、変換したDSBのデータ形式のデータを、トランザクション呼出部27を介してデータ変換部26に送信する。
【0049】
データ変換部26は、業務システム7、8からDSBのデータ形式で受け付けた処理結果(下り電文を)を、データ記憶部36のDSBに記憶するととともに、サービス呼出定義ファイル31(図4参照)で記述された下り電文用のJavaBeansに格納する。なお、サービスエンドポイント23は、サービスクラス24を呼び出す際に、引数として下り電文用のJavaBeansのIDをサービスクラス24(データ変換部26)に通知しておく。
【0050】
そして、データ変換部26は、Webサービスプロバイダ部25および対応するサービスエンドポイント23を介して、下り電文用のJavaBeansをSOAPエンジン22に送出する。また、データ変換部26は、下り電文用のJavaBeansとともに、リターンコードを設定したミドルヘッダ用のJavaBeansを、SOAPエンジン22に送出することとしてもよい。
【0051】
SOAPエンジン22は、受け付けたJavaBeansに格納されたデータを、サービス呼出定義ファイル31に基づいてシリアライズしてレスポンス電文を生成し、クライアント1に送信する。すなわち、SOAPエンジン22は、JavaBeansに格納されたJava(登録商標)データを、XMLで記述されたSOAP電文に変換する。
【0052】
図6は、レスポンス電文の一例を示すものである。図示すレスポンス電文は、HTTPヘッダとSOAP電文とを有し、SOAP電文には、リターンコードが設定されたミドルヘッダ401と、アプリケーションデータ(処理結果)402が記述されている。
【0053】
[開発環境の処理]
次に、本実施形態における開発環境について説明する。
【0054】
Webサービス基盤システム2の生成部29は、クライアント1で使用するWSDL11と、Webサービス基盤システム2の実行環境で使用するサービスエンドポイント23、JavaBeans32、およびサービス呼出定義ファイル31とを生成する(図1参照)。
【0055】
<WSDLの生成>
まず、WSDLの生成処理について説明する。
【0056】
WSDL(Web Service Description Language:ウェブサービス記述言語)は、Webサービスを記述するための、XMLをベースとした言語仕様である。WSDLには、それぞれのWebサービスがどのような機能を持つのか、それを利用するためにはどのような要求をすればいいのか、などの定義が記述され、Webサービスを提供するサービスプロバイダとWebサービスを利用するサービスリクエスタ(クライアント)の間でインターフェイス情報をやり取りするために使用される。WSDLには、クライアントがWebサービスのメソッドを呼び出すのに必要な情報が含まれる。
【0057】
図7に示すように、本実施形態の生成部29は、実行環境で使用するトランザクション呼出定義ファイル33、データ変換定義ファイル34および電文定義ファイル35に基づいて、クライアント1で使用するWSDL11を生成する。なお、WSDL11の生成の際に、生成部29は、後述するWSDLネーミングルール701を用いる。
【0058】
図8は、WSDL11の構造を模式的に示す図である。
【0059】
WSDL11は、タイプ要素71、メッセージ要素72、ポートタイプ要素73、バインディング要素75及びサービス要素76とを有する。ポートタイプ要素73は、少なくとも1つのオペレーション要素74を有し、サービス要素76は、少なくとも1つのポート要素77を有する。また、WSDL11は、最上位の要素としてDefinitions要素70を、有する。
【0060】
タイプ要素71では、ミドルヘッダ、上り電文、下り電文、下り電文構造体などの下位のデータ型を定義する。ネストした型も定義することができる。メッセージ要素3では、送信データフォーマットを定義する。要求として受信するメッセージは、どのような名前の要素で、それにはどのタイプ要素71で定義されたデータ型が含まれるのかなどを定義する。
【0061】
ポートタイプ要素4では、メッセージ要素3で定義された送信データフォーマットをいくつか組み合わせて、1つの操作単位を論理的に定義する。具体的には、リクエスト電文(メッセージ)とそれに対応するレスポンス電文(メッセージ)とを定義する。
【0062】
バインディング要素75では、前記タイプ定義71、メッセージ定義72、ポートタイプ定義73などで定義されたインターフェイスの論理的なモデル(こういうデータ型を組み合わせて、こういうメッセージで、こういうやりとりをするという定義)と、物理的なモデル(例えば、SOAP-RPCを、HTTP上で行うという定義)とを結びつける定義をする。SOAP-RPCは、RPC(Remote Procedure Call)すなわち遠隔手続き呼び出しをSOAPすなわちXMLを使用した通信規約を使用して行うための仕様である。
【0063】
サービス要素76では、具体的なアクセスポイントを定義する。ポート要素77では、どのバインディング要素75のインターフェイスを、どのURLで提供するかを定義する。
【0064】
本実施形態では、実行環境で使用するトランザクション呼出定義ファイル33、データ変換定義ファイル34および電文定義ファイル35に基づいてタイプ定義71を作成し、タイプ定義71に基づいてメッセージ定義72を作成し、メッセージ定義72に基づいてポートタイプ定義73を作成し、ポートタイプ定義73に基づいてバインディング定義75を作成し、バインディング定義75に基づいてサービス定義76を作成する。
【0065】
図9は、WSDL11を生成する処理の流れを示すフローチャートである。図10は、トランザクション呼出定義ファイル33、データ変換定義ファイル34および電文定義ファイル35と、WSDL11との関連を模式的に示す関連図である。
【0066】
まず、生成部29は、トランザクション呼出定義ファイル33、データ変換定義ファイル34および電文定義ファイル35を入力し、図示しない記憶部に記憶する(S11)。
【0067】
図10に示すトランザクション呼出定義ファイル33の例では、「PT01」のサービス名に対して、「BE801」というトランザクションIDが関連付けられている。なお、図示するトランザクション呼出定義ファイル33には、一組のサービス名とトランザクションIDしか記述されていないが、実際には複数の組のサービス名とトランザクションIDとが対応付けて記述されているものとする。
【0068】
また、図10に示すデータ変換定義ファイル34の例では、「BE801」というトランザクションIDの上り電文に対して、「Lay029」(電文レイアウトID)の電文定義ファイルが関連付けられ、当該トランザクションIDの下り電文に対して、「Layout2」(電文レイアウトID)の電文定義ファイルが関連付けられている。また、図10に示す「Lay029」の電文定義ファイル35の例では、「memno」の項目名(カラム)のデータ型は文字列型であり、「passwd」のデータ項目名(カラム)のデータ型は文字列型であることが記述されている。
【0069】
そして、生成部29は、WSDL生成情報の入力を受け付ける(S12)。WSDL生成情報には、サービス名、WSDLファイル出力先ディレクトリ名、エンドポイントURLなどが含まれる。生成部29は、WSDL生成情報として入力されたサービス名に対応するWSDL11を、以降の処理により生成する。
【0070】
そして、生成部29は、S11で入力され、記憶部に記憶されたトランザクション呼出定義ファイル33を読み出し、S12で入力されたサービス名に対応するトランザクションIDを取得する(S13)。図9に示す例では、「PT01」のサービス名が入力された場合、「BE801」のトランザクションIDが取得される。
【0071】
そして、生成部29は、記憶部に記憶されたデータ変換定義ファイル34を読み出し、S13で取得したトランザクションIDに対応する電文レイアウトIDを取得し、取得した電文レイアウトIDの電文定義ファイルを記憶部から読み出す(S14)。図9に示す例では、「BE801」のトランザクションIDが取得された場合、上り電文については「Lay029」の電文レイアウトIDを、下り電文については「Layout2」の電文レイアウトIDを取得する。
【0072】
そして、生成部29は、S12で入力されたサービス名およびWSDLネーミングルール701に基づいて、WSDLのDefinitions定義を生成する(S15)。
【0073】
WSDLネーミングルール701は、図示しない記憶部にあらかじめ記憶され、サービスID名、出力WSDLファイル名、XML名前空間設定、XML宣言、タイプ定義、メッセージ定義、ポートタイプ定義、バインディング定義、サービス定義の各々に関するネーミングルールを有する。
【0074】
図11から図15は、記憶部に記憶されたWSDLネーミングルール701の一例を示すものである。図11は、サービス名、出力WSDLファイル名、XML名前空間設定、XML宣言に関するネーミングルールの一例を示す。
【0075】
サービス名は、Webサービスのサービス名であり、Webサービス(アプリケーション)ごとに異なる。このサービス名は、WSDL生成情報としてS12で入力される。出力WSDLファイル名は、生成されたWSDLの出力ファイル名であり、サービス名と拡張子”.wsdl”から構成される。
【0076】
XML名前空間設定のネーミングルールは、impl、wsdl、wsdlsoap、xsd、tns1、tns2及びsoapencから構成される。implは、サービスが属する名前空間であり、「サービス名」が設定されされる。wsdlは、WSDLフレームワークのためのWSDL名前空間を示す固定値(例えばhttp://schemas.xmlsoap.org/WSDL/)が設定される。Wsdlsoapは、WSDL SOAPバインディングのためのWSDL名前空間を示す固定値(例えばhttp://schemas.xmlsoap.org/WSDL/soap/)が設定される。xsdは、XSDで定義のスキーマ名前空間を示す固定値(例えばhttp://www.w3.org/2001/XMLScheme/が設定される。tns1は、ミドルヘッダの電文が属する名前空間を示す固定値(例えばhttp://PPPI.header.WSDL.info.nri.co.jp)が設定される。tns2は、上り電文及び下り電文が属する名前空間であり、例えばhttp://[サービス名].apl.wsd.info.nri.co.jpが設定される。soapencは、SOAP1.1で定義されているエンコーディング名前空間を示す固定値(例えばhttp://schemas.xmlsoap.org/soap/encoding/)が設定される。
【0077】
xml宣言のネーミングルールは、xml versionとencodingとを有する。xml versionは、XMLのバージョンを示す固定値であって、例えば1.0となる。encodingは、エンコーディングを示す固定値であって、例えばUTF-8となる。
【0078】
S12で入力されたサービス名が「PT01」であって、図11に示すWSDLネーミングルールを用いた場合に、生成部29が生成するWSDLのdifinitions要素の一例を以下に示す。
【0079】
<?xml version="1.0" encoding="UTF-8"?>
<WSDL:definitions targetNamespace="PT01" xmlns:impl=" PT01"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns1="http://PPPI.header.wsd.info.nri.co.jp"
xmlns:tns2="http:// PT01.apl.wsd.info.nri.co.jp"
xmlns:WSDL="http://schemas.xmlsoap.org/WSDL/"
xmlns:WSDLsoap="http://schemas.xmlsoap.org/WSDL/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
そして、生成部29は、S14で読み出した電文定義ファイル35及びWSDLネーミングルールに基づいてタイプ定義を作成する(S16)。
【0080】
図12および図13は、記憶部に記憶されたタイプ定義に関するWSDLネーミングルールの一例を示すものである。図示するように、タイプ定義は、ミドルヘッダ、上り電文、下り電文、下り電文構造体(ミドルヘッダ+下り電文)に関する定義から構成される。
【0081】
図11に示すように、ミドルヘッダ(O3Wヘッダ)は、タイプ定義名(complexType name)、targetNamespace、名前空間接頭辞、type項目名(element name)、type属性(type)から構成される。タイプ定義名は、ミドルヘッダのデータ名を示す固定値(例えば、O3WheadBean)が設定される。名前空間接頭辞は、ミドルヘッダの電文が属する名前空間の接頭辞を示す固定値(例えば、tns1)が設定される。targetNamespaceは、ミドルヘッダの電文が属する名前空間であり、tns1で指定した名前が設定される。type項目名は、ミドルヘッダとして設定する項目であり、電文定義ファイル35で設定された項目名が設定される。type属性は、ミドルヘッダのデータ型を示す固定値(例えば、xsd:string)が設定される。
【0082】
以下に、生成部29が生成するミドルヘッダのタイプ定義に対応するWSDLの一例を示す。
【0083】
<WSDL:types>
<schema targetNamespace="http://PPPI.header.wsd.info.nri.co.jp" xmlns="http://www.w3.org/2001/XMLSchema">
<complexType name="O3WheadBean">
<sequence>
<element name="APL_KYOSEI" type="xsd:string"/>
<element name="APLSYOGAI" type="xsd:string"/>
</sequence>
</complexType>
<element name="O3WheadBean" type="tns1:O3WheadBean"/>
</schema>
次に、タイプ定義の上り電文について説明する。図12に示すように、上り電文のネーミングルールは、type定義名(complexType name)、targetNamespace、名前空間接頭辞、type項目名(element name)、type属性(type)とを有する。type定義名は、上り電文のデータ名であり、[電文レイアウトID]+Beanが設定される。名前空間接頭辞には、上り電文が属する名前空間の接頭辞を示す固定値(例えばtns2)が設定される。targetNamespaceは、上り電文が属する名前空間であり、tns2で指定した名前空間が設定される。type項目名およびtype属性は、電文定義ファイル35で設定された項目名およびデータ型が設定される。
【0084】
以下に、生成部29が生成する上り電文のタイプ定義に対応するWSDLの一例を示す。
【0085】
<schema targetNamespace="http://PT01.apl.wsd.info.nri.co.jp" xmlns="http://www.w3.org/2001/XMLSchema">
<complexType name="Lay029Bean">
<sequence>
<element name="memmo" type="xsd:string"/>
<element name="passwd" type="xsd: string"/>
</sequence>
</complexType>
<element name=" Lay029Bean" type="tns2: Lay029Bean"/>
次に、タイプ定義の下り電文について説明する。図13に示すように、下り電文のネーミングルールは type定義名(complexType name)、targetNamespace、名前空間接頭辞、type項目名(element name)、type属性(type)から構成される。type定義名は、下り電文のデータ名であり、[電文レイアウトID]+Beanが設定され、名前空間接頭辞は、下り電文が属する名前空間の接頭辞を示す固定値(例えばtns2)が設定され、targetNamespaceは、下り電文が属する名前空間であり、tns2で指定した名前空間であって、上り電文と共有となる。
【0086】
type項目名およびtype属性は、電文定義ファイルで設定された項目名およびデータ型が設定される。
以下に、生成部29が生成する下り電文のタイプ定義に対応するWSDLの一例を示す。
【0087】
<complexType name="Layout2Bean">
<sequence>
<element name="swkl000ap00" type="xsd:string"/>
<element name="swkl1100d00" type=" xsd:string"/>
</sequence>
</complexType>
</schema>
</WSDL:types>
次に、タイプ定義の下り電文構造体について説明する。下り電文構造体は、ミドルヘッダと下り電文とから構成されるものである。図13に示すように、下り電文のネーミングルールは、type定義名(complexType name)、targetNameplace、名前空間接頭辞、type項目名(element name)、type属性(type)から構成される。type定義名は、下り電文構造体のデータ名であり、[サービス名]+ReturnBeanが設定される。名前空間接頭辞は、下り電文構造体が属する名前空間の接頭辞を示す固定値(例えばtns2)が設定される。
【0088】
targetNamespaceは、下り電文構造体が属する名前空間であり、tns2で指定した名前空間であって、上り電文と共有する。type項目名は、下り電文構造体として設定する項目であり、ミドルヘッダと下り電文のtype定義名を小文字にしたも(例えばo3wheadbeanなど)が設定される。type属性は、下り電文構造体のデータ型であり、例えば、ミドルヘッダに関してはtns1:O3WheadBean、下り単純電文に関してはtns2:[下り電文のtype定義名]が設定される。
【0089】
以下に、生成部29が生成する下り電文構造体のタイプ定義に対応するWSDLの一例を示す。
【0090】
<complexType name="PT01ReturnBean">
<sequence>
<element name="o3wheadbean" type="tns1:O3WheadBean"/>
<element name="layout2bean" type="tns2: Layout2Bean"/>
</sequence>
</complexType>
<element name=" PT01ReturnBean" type="tns2: PT01ReturnBean"/>
そして、生成部29は、S16で生成したタイプ定義およびWSDLネーミングルールに基づいて、WSDLのメッセージ定義を生成する(S17)。
【0091】
図14は、記憶部に記憶されたメッセージ定義およびポートタイプ定義に関するWSDLネーミングルールの一例を示すものである。図14に示すように、メッセージ定義は、リクエスト(Request)定義とレスポンス(Response)定義とから構成される。リクエスト定義およびレスポンス定義は、メッセージ名(message name)、パート名(part name)、パートタイプ(type)から構成される。
【0092】
リクエスト定義については、メッセージ名は、上り電文のメッセージ名であり、[サービス名]+Requestを設定する。パート名およびパートタイプは、ミドルヘッダと上り電文でそれぞれ生成される。ミドルヘッダについては、パート名には、ミドルヘッダのtype定義名を小文字にしたものが設定され、パートタイプには、ミドルヘッダの[type定義で設定したtargetNamespaceの名前空間接頭辞]+":"+[type定義名]が設定される。上り電文については、パート名には、上り電文のtype定義名を小文字にしたものが設定され、パートタイプには、上り電文の[type定義で設定したtargetNamespaceの名前空間接頭辞]+":"+[type定義名]が設定される。
【0093】
レスポンス定義については、メッセージ名は、下り電文構造体のメッセージ名であり、[サービス名]+Responseが設定される。パート名は、下り電文構造体のパート名であり、[下り電文構造体のtype定義名を小文字にしたもの]が設定される。パートタイプは、下り電文構造体のパートタイプであり、[下り電文構造体のtype定義で設定したtargetNamespaceの名前空間接頭辞]+":"+[type定義名]が設定される。
【0094】
以下に、生成部29が生成するWSDLのメッセージ定義の一例を示す。
【0095】
<WSDL:message name="PT01Request">
<WSDL:part name="o3wheadbean" type="tns1:O3WheadBean"/>
<WSDL:part name="lay029bean" type="tns2:Lay029Bean"/>
</WSDL:message>
<WSDL:message name="PT01Response">
<WSDL:part name=" pt01returnbean" type="tns2: PT01ReturnBean"/>
</WSDL:message>
そして、生成部29は、S17で生成したメッセージ定義およびWSDLネーミングルールに基づいて、WSDLのポートタイプ定義を生成する(S18)。
【0096】
図14に示すように、ポートタイプ定義は、ポートタイプ名(portType name)、parameterOrder、オペレーション名(operation name)、inputのメッセージ名(message)、データ名(name)、outputのメッセージ名(message)、データ名(name)から構成される。
【0097】
ポートタイプ名には、[サービス名]+"Server"が設定される。parameterOrderは、パラメータの順序を示す属性であり、"o3wheadbean"+[上り電文のtype定義名を小文字にしたもの]が設定される。オペレーション名は、サービスの呼び出しメソッド(サービスクラス24)を示す固定値(例えばTRDOperation)が設定される。
【0098】
inputのメッセージ名は、上り電文のメッセージ名であり、"impl:"+[message定義で設定したRequestメッセージ名]が設定される。inputのデータ名は、上り電文のデータ名であり、[サービス名]+"Request"が設定され、outputのメッセージ名は、下り電文構造体のメッセージ名であり、"impl:"+[message定義で設定したResponseメッセージ名]が設定される。outputのデータ名は、下り電文構造体のデータ名であり、[サービス名]+"Response"が設定される。
【0099】
以下に、生成部29が生成するWSDLのポートタイプ定義の一例を示す。
【0100】
<WSDL:portType name="PT01Server">
<WSDL:operation name="TRDOperation" parameterOrder="o3wheadbean trl_a1bean">
<WSDL:input message="impl:PT01Request" name="PT01Request"/>
<WSDL:output message="impl:PT01Response" name="PT01Response"/>
</WSDL:operation>
</WSDL:portType>
そして、生成部29は、S18で生成したポートタイプ定義およびWSDLネーミングルールに基づいて、WSDLのバインディング定義を生成する(S19)。
【0101】
図15は、記憶部に記憶されたバインディイング定義およびサービス定義に関するWSDLネーミングルールの一例を示すものである。図15に示すように、バインディング定義は、バインディング名(binding name)、バインディングタイプ(binding type)、transport、soapAction、バインディングスタイル(binding style)、オペレーション名(operation name)、inputのデータ名(input name)、inputのエンコード指定(use)、inputのエンコード形式(encodingStyle)、inputのネームスペース(namespace)、outputのデータ名(output name)、outputのエンコード指定(use)、outputのエンコード形式(encodingStyle)、outputのネームスペース(namespace)から構成される。
【0102】
バインディング名には、[サービス名]+"SoapBinding"が設定され、バインディングタイプは、"impl:"+[portType定義で設定したポートタイプ名]が設定される。transportは、使用するプロトコルを示す固定値(例えばhttp://schemas.xmlsoap.org/soap/http)が設定される。soapActionは、SOAPActionヘッダの値を示す固定値が設定され、バインディングスタイルは、固定値(例えばrpc)が設定される。オペレーション名は、[portType定義で設定したオペレーション名]が設定される。
【0103】
inputのデータ名は、上り電文のデータ名を示し、[portType定義で設定したRequestメッセージ名]が設定される。inputのエンコード指定は、上り電文のエンコード指定を示す固定値(例えばuse="encoded")が設定される。inputのエンコード形式は、上り電文のエンコード形式を示す固定値(例えばhttp://schemas.xmlsoap.org/soap/encoding/)が設定される。inputのネームスペースは、上り電文のネームスペースであって、[サービス名]が設定される。
【0104】
outputのデータ名は、下り電文構造体のデータ名を示し、[portType定義で設定したResponseメッセージ名]が設定される。outputのエンコード指定は、下り電文構造体のエンコード指定を示す固定値(例えばuse="encoded")が設定される。outputのエンコード形式は、下り電文構造体のエンコード形式を示す固定値(例えばhttp://schemas.xmlsoap.org/soap/encoding/)が設定される。outputのネームスペースは、下り電文構造体のネームスペースであって、[サービス名]が設定される。
【0105】
以下に、生成部29が生成するWSDLのポートタイプ定義の一例を示す。
【0106】
<WSDL:binding name="PLTr_A1SoapBinding" type="impl:PT01Server">
<WSDLsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<WSDL:operation name="TRDOperation">
<WSDLsoap:operation soapAction=""/>
<WSDL:input name="PT01Request">
<WSDLsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="PLTr_A1" use="encoded"/>
</WSDL:input>
<WSDL:output name="PT01Response">
<WSDLsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="PLTr_A1" use="encoded"/>
</WSDL:output>
</WSDL:operation>
</WSDL:binding>
そして、生成部29は、S19で生成したバインディング定義およびWSDLネーミングルールに基づいて、WSDLのサービス定義を生成する(S20)。
【0107】
図15に示すように、サービス定義は、サービス名(service name)、バインディング名(port binding)、ポート名(port name)、エンドポイントURL(address location)から構成される。
【0108】
サービス名には、 [サービス名]+ServerServiceが設定され、バインディング名には、”impl:”+[binding定義で設定したバインディング名]が設定される。ポート名には、[サービス名]が設定され、エンドポイントURLは、アクセスする際の相手先を示し、http://サーバアドレス/コンテキストルート/[サービス名]とする。
【0109】
以下に、生成部29が生成するWSDLのポートタイプ定義の一例を示す。
【0110】
<WSDL:service name="PT01ServerService">
<WSDL:port binding="impl:PT01SoapBinding" name="PT01">
<WSDLsoap:address location="http://localhost:8090/axis/services/PT01"/>
</WSDL:port>
</WSDL:service>
生成部29は、上記S15〜S20でそれぞれ生成したdifinitions定義、タイプ定義、メッセージ定義、ポートタイプ定義、バインディング定義及びサービス定義から構成されるWSDLファイルを、WSDL生成情報としてS12で入力されたWSDLファイル出力先ディレクトリに出力する(S21)。
【0111】
<サービス呼出定義ファイルの生成>
次に、サービス呼出定義ファイル31の生成について説明する。
【0112】
生成部29は、生成したWSDLに基づいてサービス呼出定義ファイル31(図4参照)を生成する。すなわち、生成部29は、WSDLを入力し、SOAPエンジンにより提供されている生成ツール(例えば、WSDL2Java等)を用いて、当該WSDLに対応するサービス呼出定義ファイル31を生成する。生成ツールは、WSDLからJava(登録商標)加工物を生成するためのツールである。生成部29は、生成ツールを用いて、入力されたWSDLを所定の条件に従って加工・編集することによりサービス呼出定義ファイル31を生成する。なお、本実施形態では、サービス呼出定義ファイル31の呼出メソッド名をサービス名ではなく、固定値(TRDOperation)となるように生成する。これにより、本実施形態では、複数のサービスを汎用のサービスクラスで実行することができる。
【0113】
<JavaBeansの生成>
次に、JavaBeans32の生成について説明する。
【0114】
生成部29は、生成したWSDLに基づいて、実行環境で使用するデータ保持用部品であるJavaBeans32を生成する。すなわち、生成部29は、WSDLを入力し、前記生成ツール(例えば、WSDL2Java等)を用いて、当該WSDLで使用するミドルヘッダ、上り電文、下り電文のJavaBeansを生成する。図16は、ミドルヘッダのJavaBeansの一例を示すものである。
【0115】
<サービスエンドポイントの生成>
次に、サービスエンドポイント23の生成について説明する。
【0116】
生成部29は、引数としてサービス名の入力を受け付け、サービスエンドポイント用のネーミングルールを参照し、入力されたサービス名のサービスエンドポイントを生成する。図17は、サービス名が、「BEsearch」のサービスエンドポイントの一例を示すものである。サービスエンドポイントは、図1に示すようにサービス毎に設ける必要があるため、生成部29は、全てのサービスについて、それぞれのサービスエンドポイントを生成する。
【0117】
以上説明した本実施形態によれば、既存の業務システムを変更することなく、より容易に既存の業務システムをWebサービスとしてクライアントに提供するができる。
【0118】
すなわち、本実施形態のWebサービス基盤システムは、クライアントから送信されたリクエスト電文を、業務システムが処理可能なデータ形式に変換して業務システムに送信するとともに、業務システムの処理結果をクライアントが処理可能なデータ形式のレスポンス電文に変換して、要求元のクライアントに送信する。つまり、クライアントからのリクエスト電文によりWebサービス基盤システムが起動され、業務システムのトランザクションを呼び出すことにより、既存の業務システムを変更することなく、データ形式の相違を吸収し、既存の業務システムをより容易、よりスピーディにWebサービスとしてクライアントに提供するができる。
【0119】
また、本実施形態では、実行環境で使用するトランザクション呼出定義ファイル、データ変換定義ファイルおよび電文定義ファイルに基づいて、クライアントで使用するWSDLを自動生成する。これにより、煩雑で誤りが発生しやすいWSDLのコーディングが不要となり、開発生産性を向上させることができる。また、本実施形態では、Webサービス基盤システムの実行環境で使用するサービスエンドポイント、JavaBeans、およびサービス呼出定義ファイルについても自動生成するため、システム開発者の作業負荷を低減することができる。
【0120】
また、本実施形態では、WSDLを接続仕様としたドキュメント中心型のWebシステムにすることにより、既存の業務システムとの相互接続性をより向上させることができる。また、本実施形態では、Webサービスの標準仕様に対応することで、Webサービスとしての相互運用性、可搬性を高めることができる。
【0121】
なお、本発明は上記の実施形態に限定されるものではなく、その要旨の範囲内で数々の変形が可能である。
【符号の説明】
【0122】
1:クライアント、11:WSDL、12:スタブ、13:アプリケーション、2:Webサービス基盤システム、21:Webアプリケーション部、22:SOAPエンジン、23:サービスエンドポイント、24:サービスクラス、25:Webサービスプロバイダ部、26:データ変換部、27:トランザクション呼出部、28:接続部、29:生成部、31:サービス呼出定義ファイル、32:JavaBeans、33:トランザクション呼出定義ファイル、34:データ変換定義ファイル、35:電文定義ファイル、36:データ記憶部、7:第1の業務システム、8:第2の業務システム

【特許請求の範囲】
【請求項1】
業務システムが行う処理をWebサービスとしてクライアントに提供するWebサービス基盤システムであって、
所定の通信プロトコルに従って、クライアントとの間でメッセージの送受信を行う通信処理手段と、
Webサービス毎に設けられた、複数のサービスエンドポイントと、
全てのWebサービスに共通のWebサービス提供手段と、を有し、
前記通信処理手段は、前記クライアントからのサービス要求を、当該サービス要求で指定されたWebサービス用のサービスエンドポイントを介して、前記Webサービス提供手段に送出し、
前記Webサービス提供手段は、前記サービス要求を前記業務システムが処理可能なデータ形式に変換して、当該サービス要求で指定されたWebサービスに対応する業務システムに送信するとともに、前記業務システムの処理結果を前記通信処理手段が処理可能なデータ形式に変換して、前記Webサービス用のサービスエンドポイントを介して前記通信処理手段に送出すること
を特徴とするWebサービス基盤システム。
【請求項2】
請求項1記載のWebサービス基盤システムであって、
Webサービス毎に、前記通信処理手段と前記Webサービス提供手段との間でデータを送受信するためのデータ保持部品と、サービスエンドポイントの呼び出し先として前記Webサービス提供手段を示す呼出先情報とが設定されたサービス呼出定義ファイルを、さらに有し、
前記通信処理手段は、前記サービス要求で指定されたWebサービスに対応するサービス呼出定義ファイルに設定されたデータ保持部品を特定し、当該データ保持部品に前記サービス要求のデータを格納して前記サービスエンドポイントに送出し、
前記サービスエンドポイントは、前記通信処理手段から受け付けた前記データ保持部品を、前記サービス呼出定義ファイルに設定された呼出先情報に基づいて前記Webサービス提供手段に送出すること
を特徴とするWebサービス基盤システム。
【請求項3】
請求項2記載のWebサービス基盤システムであって、
Webサービスと業務システムのトランザクションとを対応付けて記憶したトランザクション定義ファイルと、
トランザクション毎に、当該トランザクションで使用する電文のデータレイアウトのデータレイアウトIDが記憶されたデータ変換定義ファイルと、
データレイアウトID毎にデータレイアウトが記憶されたレイアウト定義ファイルと、をさらに有し、
前記Webサービス提供手段は、
前記トランザクション定義記憶手段を参照して、前記サービス要求で指定されたWebサービスに対応するトランザクションを特定し、
前記データ変換定義ファイルおよび前記レイアウト定義ファイルを参照して、特定したトランザクションに対応するデータレイアウトを読み出し、読み出したデータレイアウトに従って、前記サービスエンドポイントから受け付けたデータ保持部品のデータを変換し、業務システムの前記特定したトランザクションに送出すること
を特徴とするWebサービス基盤システム。
【請求項4】
請求項3記載のWebサービス基盤システムであって、
前記トランザクション定義ファイル、データ変換定義ファイルおよびレイアウト定義ファイルを用いて、前記クライアントで使用する所定のWebサービスのWSDLを生成する生成手段を、さらに有すること
を特徴とするWebサービス基盤システム。
【請求項5】
請求項4記載のWebサービス基盤システムであって、
前生成手段は、前記生成した所定のWebサービスのWSDLを用いて、当該所定のWebサービス用のサービス呼出定義ファイルおよびデータ保持部品を生成すること
を特徴とするWebサービス基盤システム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate