(57)【要約】      （修正有）【課題】メッセージを受信する場合、分割取得する方法を提供する。【解決手段】ネットワークを介して他の装置１０１からメッセージを受信するメッセージ通信装置において、メッセージを分割して取得するためのインタフェース定義を解釈する。そして、そのインタフェース定義を解釈した結果に応じて、受信したメッセージを分割したオブジェクトに変換する。また、そのインタフェース定義を解釈した結果に応じて、分割して設定されたオブジェクトのデータを一つのメッセージに変換して送信する。【選択図】図２
2010244143.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介して他の装置からメッセージを受信するメッセージ通信装置であって、
メッセージを分割して取得するためのインタフェース定義を解釈する解釈手段と、
前記インタフェース定義を解釈した結果に応じて、前記受信したメッセージを分割したオブジェクトに変換するオブジェクト変換手段と、
を有することを特徴とするメッセージ通信装置。
【請求項２】
ネットワークを介して他の装置へメッセージを送信するメッセージ通信装置であって、
メッセージを分割して設定するためのインタフェース定義を解釈する解釈手段と、
前記インタフェース定義を解釈した結果に応じて、分割して設定されたオブジェクトのデータを一つのメッセージに変換して送信するメッセージ変換手段と、
を有することを特徴とするメッセージ通信装置。
【請求項３】
前記オブジェクト変換手段は、前記インタフェース定義に記述された受信データを指定するデータ型を拡張した、前記メッセージを分割して取得することを可能とする拡張データ型を使用して前記受信したメッセージを前記拡張データ型のオブジェクトに変換することを特徴とする請求項１に記載のメッセージ通信装置。
【請求項４】
前記メッセージ変換手段は、前記インタフェース定義に記述された送信データを指定するデータ型を拡張した、前記メッセージを分割して設定することを可能とする拡張データ型を使用して前記拡張データ型に設定されたオブジェクトを一つのメッセージに変換することを特徴とする請求項２に記載のメッセージ通信装置。
【請求項５】
前記データ型に、所定の型が含まれているか否かを判定し、含まれていると判定された場合に、前記拡張データ型を生成してサービスを実行するためのオブジェクトを生成し、含まれていないと判定された場合には、定義されている型と同じ型を使用してサービスを実行するためのオブジェクトを生成する手段を更に有することを特徴とする請求項３又は４に記載のメッセージ通信装置。
【請求項６】
前記拡張データ型の生成を行なう型を指定するファイルを読み取り、拡張の設定がある型の拡張データ型を生成することを特徴とする請求項５に記載のメッセージ通信装置。
【請求項７】
ネットワークを介して他の装置からメッセージを受信するメッセージ通信装置の処理方法であって、
解釈手段が、メッセージを分割して取得するためのインタフェース定義を解釈する解釈工程と、
オブジェクト変換手段が、前記インタフェース定義を解釈した結果に応じて、前記受信したメッセージを分割したオブジェクトに変換するオブジェクト変換工程と、
を有することを特徴とするメッセージ通信装置の処理方法。
【請求項８】
ネットワークを介して他の装置へメッセージを送信するメッセージ通信装置の処理方法であって、
解釈手段が、メッセージを分割して設定するためのインタフェース定義を解釈する解釈工程と、
メッセージ変換手段が、前記インタフェース定義を解釈した結果に応じて、分割して設定されたオブジェクトのデータを一つのメッセージに変換して送信するメッセージ変換工程と、
を有することを特徴とするメッセージ通信装置の処理方法。
【請求項９】
請求項７又は８に記載のメッセージ通信装置の処理方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークを介して他の装置とメッセージを通信するメッセージ通信装置及びその処理方法に関する。
【背景技術】
【０００２】
近年、ネットワークを介して複数の装置同士がデータを授受するＷｅｂサービス技術を用いたパーソナルコンピュータ（ＰＣ）や機器の連携が一般的に行なわれている。Ｗｅｂサービスにおけるデータのやり取りでは、一般的に通信装置が、アプリケーションが設定したオブジェクトをＸＭＬデータにして送信し、受信したＸＭＬデータをオブジェクトにしてアプリケーションに返す。サービスを利用する側の通信装置上のアプリケーションは、サービスを提供する側のアプリケーション呼び出しの引数に、送信するオブジェクトを設定し、受信したオブジェクトを戻り値として受け取る。一方、サービスを提供する側の通信装置上のアプリケーションは、アプリケーション呼び出しの引数に、サービス利用側からのオブジェクトを受信し、戻り値をオブジェクトとして返す。ここで、オブジェクトとは、アプリケーションの環境においてデータ、或いはデータとデータの操作を指定する実体である。
【０００３】
このようなアプリケーション呼び出しにおいて、サービス提供側のアプリケーションがどのようなオブジェクトを受け取り、どのようなオブジェクトを返すかをインタフェース定義文書として事前に定義する。このインタフェース定義文書の一般的な例としてＸＭＬをベースとした言語仕様であるＷｅｂサービス記述言語（ＷＳＤＬ）が存在する。ここで、サービス提供側もサービス利用側も、このＷＳＤＬに従ってサービスを実行するためのオブジェクトを生成する。このＷＳＤＬには、インタフェースの命令単位を示すオペレーションの記述があり、オペレーション毎にサービス利用側とサービス提供側との間で授受するメッセージ構造が規定されている。また、送信データ、受信データのデータ型情報も規定されている。
【０００４】
例えば、特許文献１には、ＷＳＤＬに従ってサービス利用側がサービスを実行するためのオブジェクトやサービス提供側がサービスのインタフェースを指定するオブジェクトをサービス実行オブジェクトとして自動生成することが開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−１６４２６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、アプリケーション呼び出しを行なう際に、アプリケーションが受け取るオブジェクトや設定するオブジェクトが大量のデータを保持可能な型である場合がある。例えば、配列のデータやリスト型は格納するデータ数に制限がないため、大量のデータを設定可能である。また、単なる文字列型でもデータが膨大な場合があり、そのようなオブジェクトの作成は、特に、組込み機器のようなメモリ容量が少ない環境下で処理を実行する場合、メモリ容量の制限により、実行できない場合がある。
【課題を解決するための手段】
【０００７】
本発明は、ネットワークを介して他の装置からメッセージを受信するメッセージ通信装置であって、
メッセージを分割して取得するためのインタフェース定義を解釈する解釈手段と、
前記インタフェース定義を解釈した結果に応じて、前記受信したメッセージを分割したオブジェクトに変換するオブジェクト変換手段と、
を有することを特徴とする。
【発明の効果】
【０００８】
本発明によれば、他の装置から大量のデータが送られてきた場合や他の装置に大量のデータを送信したい場合、大量のメモリを消費せずに動作することができる。
【図面の簡単な説明】
【０００９】
【図１】本実施形態におけるメッセージ通信装置のハードウェア構成例を示す図。
【図２】本実施形態におけるメッセージ通信装置のソフトウェア構成例を示す図。
【図３】サービス実行オブジェクト生成処理部の処理を示すフローチャート。
【図４】サービス実行処理部の処理を示すフローチャート。
【図５】サービスを定義する情報を記述したＷＳＤＬファイルの一例を示す図。
【図６】ＷＳＤＬファイルに対応する拡張対象設定ファイルの一例を示す図。
【図７】生成されたサービス実行オブジェクトの一例を示す図。
【図８】アプリケーションのサービス実行オブジェクト使用例を示す図。
【図９】サービスへの送信メッセージの一例を示す図。
【図１０】サービスからの受信メッセージの一例を示す図。
【発明を実施するための形態】
【００１０】
以下、図面を参照しながら発明を実施するための形態について詳細に説明する。まず、メッセージ通信装置のハードウェア構成及びソフトウェア構成を、図１及び図２を用いて説明する。図１において、他の装置１０１とメッセージ通信装置１０２とはネットワーク１１３を介してＷｅｂサービスのメッセージを授受するパーソナルコンピュータ（ＰＣ）などのコンピュータである。ここで、他の装置１０１はサービスを提供する側（サービス提供側）でもサービスを利用する側（サービス利用側）でも良い。
【００１１】
メッセージ通信装置１０２には、ＣＰＵ１０３、メモリ１０４、ＨＤ（ハードディスク）装置１０５、表示ボード１０６、周辺コントローラ１０７、ネットワークＩ／Ｆ１０８が含まれる。ＣＰＵ１０３はプログラムに従ってメッセージ通信装置１０２の各処理部の処理を実行する。プログラムはＨＤ装置１０５やメモリ１０４に格納されており、ＣＰＵ１０３がプログラムを実行時にＲＡＭに読み込まれる。メモリ１０４はプログラムや制御データを格納するＲＯＭとＣＰＵ１０３の作業領域としてのＲＡＭを含み、更にＸＭＬの要素やオブジェクトも格納される。
【００１２】
ＨＤ装置１０５はハードディスクへのアクセスを制御するインタフェースを含み、各種データを記憶する。表示ボード１０６はディスプレイ装置１０９を接続するためのインタフェースを含み、メッセージ通信装置１０２の状態や処理結果をディスプレイ装置１０９に表示させる。周辺コントローラ１０７はマウス１１０やキーボード１１１を接続するためのインタフェースを含み、メッセージ通信装置１０２への指示や各種入力を制御する。ネットワークＩ／Ｆ１０８はネットワーク１１３との間で通信するためのインタフェースを含み、他の装置１０１との通信を制御する。
【００１３】
システムバス１１２は上述の各部を接続する。ネットワーク１１３は他の装置１０１とメッセージ通信装置１０２がメッセージを通信できればどのような形態でもよく、例えばインターネット、ＷＡＮ、ＬＡＮなどである。
【００１４】
図２は、本実施形態におけるメッセージ通信装置１０２のソフトウェア構成例を示す図である。Ｗｅｂサービス記述言語ファイル（ＷＳＤＬファイル）２０１は、Ｗｅｂサービスのインタフェース定義を記述したＷＳＤＬの仕様に従った定義文書である。具体的には、サービス提供側のアプリケーションがどのようなオブジェクトを受け取り、どのようなオブジェクトを返すのかに関するメッセージのインタフェースを記述したファイルである。拡張対象設定ファイル２０２は、ＷＳＤＬファイル２０１に記述されているメッセージの送信データや受信データのデータ型に対して、所定の拡張データ型を生成するか否かをＸＭＬで記述したファイルである。尚、ＷＳＤＬファイル２０１や拡張対象設定ファイル２０２は、ユーザがディスプレイ装置１０９とマウス１１０やキーボード１１１とを使用して指定するファイルである。
【００１５】
メッセージ通信装置１０２には、アプリケーション２０３、サービス実行オブジェクト生成処理部２０４、サービス実行処理部２０５が含まれる。サービス実行オブジェクト生成処理部２０４は、アプリケーション２０３からＷＳＤＬファイル２０１と拡張対象設定ファイル２０２を受け取り、ファイルの記述内容を解釈してサービス実行オブジェクトを自動生成する。サービス実行処理部２０５は、アプリケーション２０３からの要求に応じて、サービス実行オブジェクトを用いて他の装置１０１にメッセージを送信、或いは他の装置１０１からメッセージを受信する。サービス実行処理部２０５は、他の装置１０１がサービス利用側であればサービス提供側として機能し、他の装置１０１がサービス提供側であればサービス利用側として機能する。
【００１６】
メッセージ通信装置１０２におけるアプリケーション２０３は、他の装置１０１へ送信するメッセージのオブジェクトを設定し、また他の装置１０１から受信したメッセージのオブジェクトを受け取る。
【００１７】
サービス実行オブジェクト生成処理部２０４には、拡張対象型読取判定部２０６、拡張データ型生成部２０７、サービス実行オブジェクト生成部２０８が含まれる。拡張対象型読取判定部２０６は、アプリケーション２０３から受け取ったＷＳＤＬファイル２０１と拡張対象設定ファイル２０２をパースして読み込み、どの型の拡張データ型を生成するかを判定する。そして、拡張データ型が必要な型に対して、その生成を拡張データ型生成部２０７に要求する。拡張データ型生成部２０７は、拡張対象型読取判定部２０６から指定された型の拡張データ型を生成する。サービス実行オブジェクト生成部２０８は、拡張対象型読取判定部２０６から渡された情報と、拡張データ型生成部２０７で生成された拡張データ型に基づいて他の装置１０１とメッセージの送受信が可能なサービス実行オブジェクト２０９を生成する。
【００１８】
サービス実行処理部２０５には、サービス実行オブジェクト２０９、メッセージ変換部２１０、記憶領域２１１、オブジェクト変換部２１２が含まれる。サービス実行オブジェクト２０９は、サービス実行オブジェクト生成部２０８によって生成されたサービス実行オブジェクトであり、アプリケーション２０３が使用する。サービス実行オブジェクト２０９には、メッセージを送受信するために必要な引数と戻り値が存在する。サービス実行処理部２０５がサービス提供側の場合、アプリケーション２０３はサービス実行オブジェクト２０９の引数に他の装置１０１から受信したオブジェクトを受け取り、戻り値に他の装置１０１に送信するオブジェクトを設定する。一方、サービス実行処理部２０５がサービス利用側の場合、アプリケーション２０３はサービス実行オブジェクト２０９の引数に他の装置１０１に送信するオブジェクトを設定し、戻り値に他の装置１０１から受信したオブジェクトを受け取る。また、サービス利用側の場合には、サービス実行オブジェクト２０９を呼び出す際に、図１に示すディスプレイ装置１０９とマウス１１０やキーボード１１１が使用される。
【００１９】
メッセージ変換部２１０は、必要な場合、サービス実行オブジェクト２０９の引数又は戻り値として渡されたオブジェクトを記憶領域２１１に一時的に格納し、メッセージを作成して他の装置１０１に送信する。ここで、必要な場合とは、データの型が拡張データ型になっている場合である。また、データの型が拡張データ型になっていない場合は、そのままメッセージを作成して他の装置１０１に送信する。
【００２０】
記憶領域２１１は、メッセージ変換部２１０がサービス実行オブジェクト２０９から渡されたデータを一時退避させる領域である。また、記憶領域２１１はオブジェクト変換部２１２が他の装置１０１から渡されたデータを一時退避させる領域である。具体的には、図１に示すＨＤ装置１０５が使用される。
【００２１】
オブジェクト変換部２１２は、他の装置１０１からメッセージを受け取り、必要な場合、そのデータを記憶領域２１１に一時的に格納し、サービス実行オブジェクトの引数又は戻り値としてオブジェクトを返す。ここで、必要な場合とは、データを格納する型が拡張データ型になっている場合である。また、データを格納する型が拡張データ型になっていない場合は、そのままサービス実行オブジェクトの引数又は戻り値としてオブジェクトを返す。
【００２２】
ここで、本実施形態におけるメッセージ通信装置の特徴的な処理を、図３乃至図１０を用いて説明する。まず、サービス実行オブジェクト生成処理部２０４の処理を、図３を用いて説明する。この処理では、図５に示すようなサービスを定義している情報を記述したＷＳＤＬファイル２０１と図６に示すような拡張対象設定ファイル２０２とを読み込み、サービスを実行することが可能なサービス実行オブジェクト２０９を生成する。
【００２３】
まず、Ｓ３０１において、拡張対象型読取判定部２０６が拡張対象設定ファイル２０２を読み込む。拡張対象設定ファイル２０２は、どの型を拡張データ型に変更するかを記述したファイルであり、必ずしも指定されていなくても良い。尚、指定がなければ、大量のデータを保持可能な型全てが拡張データ型になる。ここで、大量のデータを保持可能な型とは、配列やリスト型など複数のデータを保持することが可能な型を指す。また、単なる文字列型でもデータ量に制限がない場合は膨大なデータを保持できるため、そのような型も含まれる。ここでは、拡張対象設定ファイル２０２を指定した場合を説明する。次に、Ｓ３０２において、拡張対象型読取判定部２０６はＷＳＤＬファイル２０１を読み込み、Ｓ３０３において、オペレーションを検索する。図５に示すＷＳＤＬファイル２０１では、符号５０１で示すMemberというサービスで、符号５０２で示すgetMemberInfoというオペレーションを持つ。
【００２４】
検索の結果、オペレーションを発見しなければ、処理を終了するが、オペレーションを発見するとＳ３０４へ処理を進める。Ｓ３０４では、そのオペレーションの型情報（符号５０３及び５０４）から、その型が大量のデータを保持可能な型か否かを判定する。この例では、符号５０６で示す引数の型及び符号５０８で示す戻り値の型が何れも配列であり、符号５０５及び５０７で示すように、その上限値が無制限であり、大量のデータを保持可能であると判定する。また、戻り値の型が保持する内部フィールドの情報（符号５０９）においても、大量のデータを保持可能なString型（文字列型）や上限値が無制な配列が存在する。よって、拡張対象型読取判定部２０６はオペレーションに大量のデータを保持可能な型が存在すると判定し（Ｓ３０４でＹｅｓ）、Ｓ３０５へ処理を進める。
【００２５】
Ｓ３０５では、拡張対象型読取判定部２０６が図６に示す拡張対象設定ファイル２０２に基づき、拡張データ型の生成が指定されているか否かを判定する。拡張対象設定ファイル２０２では、MemberサービスにおけるgetMemberInfoオペレーションの引数の型と戻り値の型を拡張データ型に指定している。符号６０１で示す引数の型の拡張設定はtrueと記述し、文字列型の配列を拡張データ型に指定している。また、符号６０２で示す戻り値の型の拡張設定でもtrueと記述し、MemberInfo型の配列を拡張データ型に指定している。このMemberInfo型は、符号６０３で示す複数の内部フィールドを保持する。その中で、大量メッセージを保持可能な型として１つの配列と４つの文字列型がある。そのうち、NameとAddressとTelはfalseと記述し、拡張データ型に指定していない。一方、Listはtrueとし、array型でデータを取得する設定をtrue、一度に取得する配列の個数設定のlengthを５としている。
【００２６】
ここで、array型はデフォルトでfalseが設定され、データは一つ一つ設定又は取得できる拡張データ型が生成される。しかし、array型の設定をtrueに指定した場合、データは設定された個数分の配列を設定又は取得できる拡張データ型が生成される。この詳細は、図８を用いて更に後述する。そして、Messageは拡張設定をtrueと記述し、一度に取得する文字列の長さ設定のlengthを５としている。このMessageは配列ではないので、array型の設定は必ずfalseとなる。
【００２７】
上述のMemberInfo型のうち拡張設定がFalseに指定されているNameとAddressとTelは拡張データ型の生成は行なわない（Ｓ３０５でＹｅｓ）。一方、拡張設定がtrueに指定されている引数の型、MemberInfo型のうちListとMessageは拡張データ型の生成を行なう（Ｓ３０５でＮｏ）。拡張データ型生成部２０７が、拡張対象型読取判定部２０６から生成を要求された型の拡張データ型を生成する。拡張対象設定ファイル２０２において、対象の型の生成を明示的にfalseに指定しない限り、拡張データ型の生成はtrueとして動作する。
【００２８】
Ｓ３０６において、拡張データ型生成部２０７は生成するサービス実行オブジェクトがサービス利用側用か、サービス提供側用かを判定する。図７に示す例では、サービス実行オブジェクト２０９がサービス利用側であるので（Ｓ３０６でＮｏ）、Ｓ３０７へ処理を進め、拡張する型が引数の型か否かを判定する。ここで、戻り値の型であるMemberInfoのうちListとMessageはＳ３０７でＮｏと判定され、Ｓ３０８へ処理を進め、受信用の拡張データ型として生成される。受信用のMemberInfo拡張データ型のインタフェース７０６には、MemberInfoのデータを一つ一つ取得するnextMemberInfoメソッドと次のデータがまだあるかを通知するhasNextメソッドが存在する。
【００２９】
MemberInfoのうちListは受信用のString配列拡張データ型であり、そのインタフェース７０７にはsetLength、nextStringArray、hasNextの各メソッドが存在する。Listの配列拡張設定は、array型の設定がtrueに指定されているので、nextStringArrayメソッドの戻り値はStringの配列になる。一度に取得する配列の個数が５に設定されているので、５個ずつ配列が返される。尚、setLengthメソッドを使用して一度に取得する配列の個数を途中から変更することも可能である。そして、hasNextメソッドによって次の配列がまだあるかを通知する。
【００３０】
MemberInfoのうちMessageは受信用のString拡張データ型であり、そのインタフェース７０８にはsetLength、nextString、hasNextの各メソッドが存在する。Messageの拡張設定は、一度に取得するデータの長さが５に設定されているので、そのデータの長さ分、文字列データを取得する。尚、setLengthメソッドを使用して一度に取得するデータの長さを途中から変更することも可能である。そして、hasNextメソッドによってデータの残りがまだあるかを通知する。
【００３１】
一方、引数の型である文字列型はＳ３０７でＹｅｓと判定され、Ｓ３０９へ処理を進め、送信用の拡張データ型として生成される。送信用のString拡張データ型のインタフェース７０４には文字列型のデータを一つ一つ設定するaddStringメソッドと全てのデータを設定し終えたことを通知するfinishメソッドが存在する。
【００３２】
また、Ｓ３０６でメッセージ通信装置１０２がサービス提供側の場合、Ｓ３１０へ処理を進め、サービス利用側の場合とは逆に、戻り値の型が送信用、引数の型が受信用の拡張データ型として生成する。次に、Ｓ３１１において、オペレーションに存在する全ての型の処理を終了するまで上述のＳ３０４以降の処理を繰り返す。そして、オペレーションに存在する全ての型の処理を終了するとＳ３１２へ処理を進め、サービス実行オブジェクト生成部２０８がサービス実行オブジェクト２０９を生成する。その際、拡張データ型生成部２０７によって生成された拡張データ型が存在する場合はそれを使用する。
【００３３】
ここで生成されたサービス実行オブジェクト２０９のインタフェース７０１には、図７に示すように、サービス名に対応するMemberのインタフェース７０１が生成される。図５の５０２で記述されていたオペレーション名に対応するgetMemberInfoメソッドが定義されている。また、引数の型７０２としてサービス実行オブジェクト生成部２０８によって生成された送信用の拡張データ型が設定されている。メッセージ通信装置１０２がサービス利用側の場合、このサービス実行オブジェクトを使用する際の送信の型になる。また、戻り値の型７０３としてサービス実行オブジェクト生成部２０８によって生成されたMemberInfoの受信用の拡張データ型が設定されている。サービス利用側の場合、このサービス実行オブジェクトを使用する際の受信の型になる。
【００３４】
複合型のMemberInfoクラスのインタフェース７０５が生成されている。内部には、図５の５１１に対応する各フィールドが定義されている。この配列のフィールド名Listと文字列型のフィールド名Messageは、型がサービス実行オブジェクト生成部２０８によって生成された受信用のString拡張データ型になっている。文字列型のフィールド名NameとAddress、配列のフィールド名Telは、拡張対象設定ファイル２０２において、拡張データ型を生成しない設定になっていたため、図５に定義してある型と同じである。
【００３５】
次に、サービス実行処理部２０５の処理を、図４を用いて説明する。この処理は、サービス実行処理部２０５が、サービス実行オブジェクト生成処理部２０４が生成したサービス実行オブジェクト２０９を用いて他の装置１０１とメッセージを送受信する。尚、アプリケーション２０３のサービス実行オブジェクト使用例を図８に示す。また、サービスへの送信メッセージの一例を図９に、サービスからの受信メッセージの一例を図１０に示す。
【００３６】
まず、Ｓ４０１において、サービス実行処理部２０５がサービス提供側かサービス利用側かを判定する。ここでは、サービス利用側であるとして説明を進める。サービス利用側である場合（Ｓ４０１でＮｏ）、まずメッセージ変換部２１０がアプリケーション２０３の処理を待つ。アプリケーション２０３は、オペレーションを呼び出す際に、最初に図７の７０４に示す送信用のString拡張データ型であるStringSendクラスのインスタンス８０１を生成する。即ち、Ｓ４０２において、アプリケーション２０３が送信用の拡張データ型のインスタンスを生成したことになる。そして、符号８０２に示すように、addStringメソッドを使用して送信するデータである会員のＩＤを一つ一つ分割して設定する。ここで、メッセージ変換部２１０は、Ｓ４０３において、設定されたデータをファイルに逐次書き出し、記憶領域２１１に退避させる。そして、アプリケーション２０３がfinishメソッド８０３を呼ぶと、データの設定が全て終了したことを意味し、メッセージ変換部２１０はファイルへの書き出しを終了し、ファイルをクローズする。
【００３７】
次に、アプリケーション２０３は、Memberクラスのインスタンス８０４を生成し、データを設定したStringSendクラスのインスタンスを引数に設定してgetMemberInfoメソッド８０５を実行する。ここで、メッセージ変換部２１０は、Ｓ４０４を実行し、次のＳ４０５において、設定された送信の型に拡張データ型が含まれるか否かを判定する。StringSendクラスは拡張データ型であるので（Ｓ４０５でＹｅｓ）、Ｓ４０６へ処理を進め、設定されたデータを書き出したファイルを記憶領域２１１から取得する。次に、Ｓ４０７において、他の装置１０１に対して送信するメッセージ（図９）を作成して送信する。これにより、サービス提供側である他の装置１０１にアプリケーション２０３がセットした複数のＩＤ情報が送信される。
【００３８】
アプリケーション２０３がセットしたＩＤの数が１００００個だった場合、これを通常のサービス実行オブジェクトによって送信する場合、Stringのオブジェクトの配列が１００００個できることになる。しかし、本実施形態で生成されたサービス実行オブジェクト２０９を使用すると、Ｓ４０３で、一旦ファイルにそのデータの書き出しを行なうので、オブジェクトをデータの数分生成しない。よって、メモリの少ない組み込みシステム上でアプリケーションを実行したい場合に、メモリの枯渇を防ぎ、他の装置に大量のデータを送信することができる。
【００３９】
次に、サービス実行処理部２０５がサービス利用側の場合（Ｓ４０８でＮｏ）、処理がオブジェクト変換部２１２に移り、サービス提供側である他の装置１０１からメッセージを受信するのを待つ。まず、Ｓ４０９において、送信したＩＤに対応する会員情報を他の装置１０１から受信する。受信したメッセージを図１０に示す。各会員情報はMemberInfo要素内に記述されている。次に、Ｓ４１０において、呼び出したサービス実行オブジェクト２０９の受信の型に、拡張データ型が含まれるか否かを判定する。
【００４０】
ここで、実行したgetMemberInfoオペレーションの受信の型がMemberInfoの拡張データ型であるので（Ｓ４１０でＹｅｓ）、Ｓ４１１へ処理を進め、受信したデータをファイルに書き出し、記憶領域２１１に退避させる。次に、Ｓ４１２において、呼び出したサービス実行オブジェクト２０９の戻り値としてオブジェクトをアプリケーション２０３に受け渡す。アプリケーション２０３は、オペレーション呼び出し８０５の戻り値として、受信用のMembeInfo拡張データ型であるMemberInfoReceiveクラスを受け取る。MemberInfoReceiveクラスのhasNextメソッド８０６の戻り値がtrueである限り、MemberInfoクラスのデータが存在する。アプリケーション２０３は、hasNextメソッドの戻り値がtrueである限り、nextStringメソッド８０７を呼び出す。
【００４１】
オブジェクト変換部２１２はＳ４１３において、アプリケーション２０３が拡張データ型のオブジェクトであるMemberInfoクラスのデータを要求したと判定する。これにより、Ｓ４１４において、MemberInfoクラスのデータを格納してあるファイルを記憶領域２１１から取得し、そのデータをアプリケーション２０３にnextStringメソッドが呼び出されるたびに渡す。そして、アプリケーション２０３が、取得したMemberInfoクラスから内部に保持するフィールドの値を取得する場合、拡張データ型の型ではないフィールドは、オブジェクト変換部２１２が、そのまま全てのデータを格納する。フィールド名Telは、型が配列のStringであるため、アプリケーション２０３はその配列の数分だけループをまわしてデータを取得する（８０８）。
【００４２】
一方、フィールド名Listのデータの場合は、型が受信用のString配列拡張データ型であるStringArrayReceiveクラス８０９である。そして、StringArrayReceiveクラスのhasNextメソッドの戻り値がtrueである限り（８１０）、データが存在する。また、StringArrayReceiveクラスのsetLengthメソッドを呼び出し、一度に取得する配列の個数を設定することができる。上述したように、一度に取得する配列の個数を５に設定していたため、５個ずつ配列を取得することができる。アプリケーション２０３は、hasNextメソッドの戻り値がtrueである限り、nextStringArrayメソッドを呼び出し、オブジェクト変換部２１２は、Stringクラスの配列を５個ずつ分割して返す（８１１）。更に、フィールド名Messageのデータの場合は、型が受信用のString拡張データ型であるStringReceiveクラス８１２である。そして、StringReceiveクラスのsetLengthメソッドを呼び出し、取得するデータの文字数を設定する（８１３）。尚、取得するデータの文字数を５に設定していたが、ここでは１０に変更した。hasNextメソッドの戻り値がtrueである限り（８１４）、データが存在する。アプリケーション２０３は、hasNextメソッドの戻り値がtrueである限り、nextStringメソッドを呼び出す。オブジェクト変換部２１２は文字列データを文字数１０毎に分割して返す（８１５）。この例では、サービス利用側であるので（Ｓ４１５でＮｏ）、処理を終了する。
【００４３】
図１０に示すように、送信された１００００個のＩＤに対応して１００００個の会員情報が返信されてくる。そのため、送信時と同様に、通常のサービス実行オブジェクトによって受信する際にはMemberInfoのオブジェクト配列が１００００個できることになってしまう。しかし、本実施形態で生成されたサービス実行オブジェクト２０９を使用すると、Ｓ４１４で受信したデータを一旦ファイルに書き出し、アプリケーションから要求される毎に１つのオブジェクトを生成してデータ渡す。従って、メモリの少ない組み込みシステム上でアプリケーションを実行したい場合に、メモリの枯渇を防ぎ、他の装置から大量のデータを受信することができる。
【００４４】
また、MemberInfoクラス内部のフィールドにおいて、Telは配列の数が膨大になる可能性は低いので配列のままで良いが、Listは配列の数が膨大になる可能性が高いので、拡張データ型にしたい場合がある。また、文字列型のデータでもデータ量が膨大な場合は拡張データ型にしたいということもある。その場合は、図６のように、拡張対象設定ファイル２０２を作成することで、アプリケーションがデータの内容に応じて自由に拡張データ型にする型の指定が可能である。
【００４５】
一方、サービス実行処理部２０５がサービス提供側である場合は、上述のサービス利用側の処理と逆の処理になる。最初に、オブジェクト変換部２１２がサービス利用側である他の装置１０１からメッセージを受信するのを待つ。そして、メッセージ変換部２１０でアプリケーション２０３の処理を待つ。
【００４６】
本実施形態では、メッセージ変換部２１０がアプリケーション２０３からStringSendクラスのインスタンスに設定されたデータを一旦ファイルに書き出す。そして、アプリケーション２０３がgetMemberInfoメソッドを呼び出した時に、一旦書き出したファイルからデータを取得し、他の装置１０１へそのデータを送信していた。しかし、アプリケーション２０３がまだデータを何も設定していないStringSendクラスのインスタンスを引数に設定し、先にgetMemberInfoメソッドを呼び出しても良い。その場合、アプリケーション２０３からそのインスタンスにaddStringメソッドによってデータを設定されると、そのデータをファイルには書き出さずに、設定されたデータをすぐにメッセージとして書き出し、他の装置１０１へ逐次送信する。アプリケーション２０３がfinishメソッドを呼び出すと、データの設定が終了したと判断し、メッセージの最後を書き出して、送信を終了する。
【００４７】
また、図３に示す処理では、拡張対象設定ファイル２０２において、対象の型の生成を明示的にfalseに指定しない限り、拡張データ型の生成はtrueとして動作した。しかし、拡張対象設定ファイル２０２において、対象の型の生成を明示的にtrueに指定しない限り、拡張データ型の生成を行なわないようにしても構わない。
【００４８】
更に、本実施形態では、大量のデータを保持可能な型として配列や文字列型を例に挙げて説明した。しかし、List型やVector型なども大量のデータを保持可能な型の対象となることは明らかである。
【図１】
2010244143.tif 000003
【図２】
2010244143.tif 000004
【図３】
2010244143.tif 000005
【図４】
2010244143.tif 000006
【図６】
2010244143.tif 000007
【図７】
2010244143.tif 000008
【図８】
2010244143.tif 000009
【図９】
2010244143.tif 000010
【図１０】
2010244143.tif 000011
【図５】
2010244143.tif 000012