説明

メッセージ通信装置及びその処理方法

【課題】メッセージを分割取得する方法を提供する。
【解決手段】ネットワーク109を介して他の装置110へメッセージを送信するメッセージ通信装置100において、メッセージを分割して設定するためのインタフェース定義を解釈する。そして、そのインタフェース定義に記載されたオペレーションを用いて、分割して設定されたオブジェクトのデータを一つのメッセージに変換して送信する。他の装置110から大量のデータが送られてきた場合や他の装置に大量のデータを送信したい場合、大量のメモリを消費しない。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ネットワークを介して他の装置とメッセージを通信するメッセージ通信装置及びその処理方法に関する。
【背景技術】
【0002】
近年、ネットワークを介して複数の装置同士がデータを授受するWebサービス技術を用いたパーソナルコンピュータ(PC)や機器の連携が一般的に行なわれている。Webサービスにおけるデータのやり取りでは、一般的に通信装置が、アプリケーションが設定したオブジェクトをXMLデータにして送信し、受信したXMLデータをオブジェクトにしてアプリケーションに返す。サービスを利用する側の通信装置上のアプリケーションは、サービスを提供する側のアプリケーション呼び出しの引数に、送信するオブジェクトを設定し、受信したオブジェクトを戻り値として受け取る。一方、サービスを提供する側の通信装置上のアプリケーションは、アプリケーション呼び出しの引数に、サービス利用側からのオブジェクトを受信し、戻り値をオブジェクトとして返す。ここで、オブジェクトとは、アプリケーションの環境においてデータもしくはデータとデータの操作を表現する実体である。
【0003】
このようなアプリケーション呼び出しにおいて、サービス提供側のアプリケーションがどのようなオブジェクトを受け取り、どのようなオブジェクトを返すかをインタフェース定義文書として事前に定義する。このインタフェース定義文書の一般的な例としてXMLをベースとした言語仕様であるWebサービス記述言語(WSDL)が存在する。ここで、サービス提供側もサービス利用側も、このWSDLに従ってサービスを実行するためのオブジェクトを生成する。このWSDLには、インタフェースの命令単位を示すオペレーションの記述があり、オペレーション毎にサービス利用側とサービス提供側との間で授受するメッセージ構造が規定されている。また、送信データ、受信データのデータ型情報も規定されている。
【0004】
例えば、特許文献1には、WSDLに従ってサービス利用側がサービスを実行するためのオブジェクトやサービス提供側がサービスのインタフェースを表現するオブジェクトをサービス実行オブジェクトとして自動生成することが開示されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2006−164264号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、アプリケーション呼び出しを行なう際に、アプリケーションが受け取るオブジェクトや設定するオブジェクトが大量のデータを保持可能な型である場合がある。例えば、配列のデータやリスト型は格納するデータ数に制限がないため、大量のデータを設定可能である。また、単なる文字列型でもデータが膨大な場合があり、そのようなオブジェクトの作成は、特に、組込み機器のようなメモリ容量が少ない環境下で処理を実行する場合、メモリ容量の制限により、実行できない場合がある。
【課題を解決するための手段】
【0007】
ネットワークを介して他の装置へメッセージを送信するメッセージ通信装置であって、
メッセージを分割して設定するためのインタフェース定義を解釈する解釈手段と、
前記インタフェース定義に記載されたオペレーションを用いて、分割して設定されたオブジェクトのデータを一つのメッセージに変換して送信するメッセージ変換手段と、
を有することを特徴とする。
【発明の効果】
【0008】
本発明によれば、他の装置から大量のデータが送られてきた場合や他の装置に大量のデータを送信したい場合、大量のメモリを消費せずに動作することができる。
【図面の簡単な説明】
【0009】
【図1】本実施形態におけるメッセージ通信装置のハードウェア構成例を示す図。
【図2】本実施形態におけるメッセージ通信装置のソフトウェア構成例を示す図。
【図3】サービス実行オブジェクト生成部の処理を示すフローチャート。
【図4】サービスを定義する情報を記述したWSDL文書の一例を示す図。
【図5】生成されたサービス実行オブジェクトの一例を示す図。
【図6】サービス利用側のサービス実行オブジェクトの呼び出し例を示す図。
【図7】サービス利用側のメソッド処理部の処理を示すフローチャート。
【図8】サービス提供側のメソッド処理部の処理を示すフローチャート。
【図9】メッセージ変換部の処理を示すフローチャート。
【図10】オブジェクト変換部の処理を示すフローチャート。
【発明を実施するための形態】
【0010】
以下、図面を参照しながら発明を実施するための形態について詳細に説明する。まず、メッセージ通信装置のハードウェア構成及びソフトウェア構成を、図1及び図2を用いて説明する。図1において、他の装置110とメッセージ通信装置100とはネットワーク109を介してWebサービスのメッセージを授受するパーソナルコンピュータ(PC)などのコンピュータである。ここで、他の装置110はサービスを提供する側(サービス提供側)でもサービスを利用する側(サービス利用側)でも良い。また、他の装置110が本発明を実施するメッセージ通信装置でも良い。
【0011】
メッセージ通信装置100には、主な構成要素として、全体の制御を司るコントローラ部101、操作部102、表示部103、ハードディスク104、ネットワークアダプタ108が含まれる。また、コントローラ部101はCPU105、ROM106、RAM107等を備える。CPU105は、メッセージ通信装置100における各処理部の処理を実行する。ROM106には、CPU105が実行する各種プログラムやプログラムが必要とするデータ等が記憶される。また、一部のプログラムやデータは、ハードディスク104に予め格納しておき、RAM107に読み出される。この例では、ハードディスク104にアプリケーションを実行するプログラムやメッセージを記憶する。RAM107は、メッセージ通信装置100における各処理部の作業領域であり、プログラム実行中に使用するデータを一時的に記憶する。
【0012】
操作部102は、ユーザが行なう操作を入力する入力部であり。キーボート、マウスがこれに該当する。表示部103は、後述する処理を実行するアプリケーションのGUI(グラフィカルユーザインタフェース)を表示する。表示部103には、アプリケーションのパネル、ボタン、テキストフィールドなどのGUIが表示され、キーボード、マウス等の操作部102から入力を受けると、それぞれGUI部品に対応付けられたプログラムが実行される。例えば、アプリケーションのGUI操作に基づいて他の装置110に対するメッセージ送信を行ないたい場合、操作部102、表示部103を使用する。
【0013】
ネットワークアダプタ108は、ネットワーク109を介して他の装置110に接続するためのものであり、例えばLANカードに相当する。ここで、ネットワーク109は、メッセージを通信できれば形態は問わず、例えばインターネット、WAN、LANなどである。
【0014】
図2に示すWebサービス記述言語(WSDL)文書201は、Webサービスのインタフェース定義を記述したWSDLの仕様に従った定義文書である。WSDL文書201には、サービスの命令単位であるオペレーションやオペレーションに対してサービス提供側とサービス利用側間でやり取りされるメッセージの定義などが記述されている。
【0015】
メッセージ通信装置100には、サービス実行オブジェクト生成部202、アプリケーション203、サービス実行処理部204が含まれる。サービス実行オブジェクト生成部202は、WSDL文書201を入力し、WSDL文書201に記述されたオペレーションや送受信するメッセージ構造を解釈してサービスを実行するためのサービス実行オブジェクト205を生成する。サービス実行処理部204は、アプリケーション203からの要求に応じて、サービス実行オブジェクト205を用いて他の装置110にメッセージを送信、或いは他の装置110からメッセージを受信する。ここで、サービス実行処理部204は他の装置110がサービス利用側であればサービス提供側として機能し、他の装置110がサービス提供側であればサービス利用側として機能する。
【0016】
メッセージ通信装置100におけるアプリケーション203は、他の装置110とメッセージの送受信を行なうために、送受信するデータをサービス実行オブジェクト205のインタフェースに応じた型のオブジェクトとして設定及び取得を行なう。
【0017】
サービス実行処理部204には、サービス実行オブジェクト205、メソッド処理部209、メッセージ変換部206、オブジェクト変換部207、記憶領域208が含まれる。サービス実行オブジェクト205は、サービス実行オブジェクト生成部202が生成したアプリケーション203と実際の送受信処理を行なう処理部とのインタフェースとなるオブジェクトである。サービス実行オブジェクト205は、送受信するメッセージを引数や戻り値として表現するメソッドを持つ。ここでメソッドとは、WSDL文書201から生成されたサービス実行オブジェクトでオペレーションを実行するために呼び出すインタフェースである。
【0018】
本実施形態では、Java(登録商標)を使用して説明するため、このメソッドは、Java(登録商標)でのメソッドとして表現される。しかし、本発明はJava(登録商標)に限るものではなく、別のプログラム環境でも良く、メソッドは例えば、C言語、ベーシック言語等の関数として表現されても良い。
【0019】
WSDL文書201のオペレーションを呼び出すための、このメソッド呼び出しをすることで、受信メッセージの内容をオブジェクトとして取得したり、送信メッセージに表現したいデータをオブジェクトとして設定することができる。例えば、メッセージ通信装置100がサービス提供側の場合、アプリケーション203は、サービス実行オブジェクト205のメソッドの引数に、他の装置110から受信したメッセージのデータを表現するオブジェクトを受け取る。そして、戻り値に他の装置110に送信するデータを表現するオブジェクトを設定する。
【0020】
一方、メッセージ通信装置100がサービス利用側の場合、アプリケーション203は、サービス実行オブジェクト205のメソッドの引数に、他の装置110に送信するデータを表現するオブジェクトを設定する。そして、戻り値として他の装置110から受信したメッセージのデータを表現するオブジェクトを受け取る。
【0021】
メソッド処理部209は、サービス利用側の場合、サービス実行オブジェクト205からの呼び出しに従ってメッセージ変換部206及びオブジェクト変換部207を使用してメッセージ送受信を制御する。また、メソッド処理部209は、サービス提供側の場合、サービス実行オブジェクト205のメソッド呼び出しを制御し、メッセージ変換部206及びオブジェクト変換部207を使用してメッセージ送受信処理を行なう。
【0022】
メッセージ変換部206は、サービス実行オブジェクト205のメソッドの引数又は戻り値として渡されたオブジェクトをメッセージに変換する。1つのメッセージを生成するためにメソッド処理部209から複数回に渡ってオブジェクトを設定された場合には順次メッセージを生成し、最後のオブジェクトが渡された段階でメッセージを完成させる。
【0023】
オブジェクト変換部207は、他の装置110から受信したメッセージをサービス実行オブジェクト205の引数又は戻り値として渡すオブジェクトに変換する。尚、受信したメッセージが大量データを保持可能なメッセージ構造である場合、メッセージを部分的にオブジェクトに変換する。大量データを扱わないメッセージ構造である場合にはデータを分割せずにオブジェクトを生成する。
【0024】
記憶領域208は、メッセージ変換部206が生成したメッセージやオブジェクト変換部207が他の装置110から渡されたメッセージを一時保存するためのメモリである。本実施形態では、図1に示すハードディスク104を使用する。
【0025】
ここで、本実施形態におけるメッセージ通信装置の特徴的な処理を、図3乃至図10を用いて説明する。まず、サービス実行オブジェクト生成部202の処理を、図3を用いて説明する。この処理では、図4に示すようなサービスを定義する情報を記述したWSDL文書201を読み込み、その記述に従ってサービスを実行することが可能なサービス実行オブジェクト205を生成する。図4の例は、「DataService」というサービス名401で、「setData」402、「getData」403という2つのオペレーションを持つWSDL文書201である。また、サービス実行オブジェクト生成部202で生成されるサービス実行オブジェクトの一例を図5に示す。尚、本実施形態では、サービス実行オブジェクト205やアプリケーション203を、Java(登録商標)のコードを例に挙げて説明するが、これに限るものではない。
【0026】
まず、S301において、図4に示すWSDL文書201の読み込みを行なう。そして、S302において、WSDL文書201からオペレーションを検索する。検索の結果、オペレーション「setData」402を検出すると(S302でYes)、S303へ処理を進め、検索したオペレーションをメソッドとして表現する際の引数、戻り値となる型を決定する。図4に示すWSDL文書201の例では、オペレーション「setData」402のリクエストメッセージ、即ち、引数のデータ型は「CustomerData」404である。この「CustomerData」404は、出現最大個数を表現するmaxOccursが無制限であるunbounded405として宣言されている。また、レスポンスメッセージ、即ち、戻り値の型はboolean型406であり、maxOccurs“1”407に指定されている。ここで、サービス実行オブジェクト205の引数、戻り値の型を決定する。引数については、大量データを無制限に保持可能であることを表現するため「CustomerData」型の配列に決定し、戻り値についてはboolean型に決定する。
【0027】
次に、S304において、S303で決定した引数、戻り値となる型を生成する。この引数の型はWSDL文書201で新たに定義されたデータ型であるため「CustomerData」型のオブジェクトを生成する。生成した「CustomerData」型のオブジェクトの一例を図5の503として示す。503の詳細な説明については後述する。また、戻り値booleanは、Java(登録商標)のboolean型をそのまま利用するため、新たな型オブジェクトは生成しない。
【0028】
次に、S305において、引数に配列表現を持つか否かを判定する。配列表現を持つと判定された場合はS307へ処理を進める。このS307では、オペレーションに対するメソッドに、引数に設定する値が最後のデータであることを示すboolean型の引数(終端通知情報)を追加する。次に、S308において、メソッド呼び出しがどのセッションのメッセージ処理か特定するためのID(セッション管理ID)を引数として追加する。このオペレーション「setData」は、引数に「CustomerData」型の配列を持つため、引数に最後のデータであることを示すboolean型の引数とID型の引数とを追加する。
【0029】
一方、S305において、引数に配列を持たないと判定された場合はS306へ処理を進め、戻り値が配列型か否かを判定する。配列型であると判定された場合はS308へ処理を進め、メソッド呼び出しがどのセッションのメッセージ処理か特定するためのIDを引数として追加する。また、引数、戻り値が共に配列型を持たない場合はS309へ処理を進め、引数の追加は行なわない。S309では、上述の処理で確定したオペレーション「setData」のメソッド名、引数、戻り値を記憶しておき、上述のS302に戻り、次のオペレーションの検索を行なう。ここで、メソッド名は、オペレーションの名前そのものを用いる。
【0030】
また同様に、S302において、図4の例の場合、オペレーション「getData」403が検索され、オペレーション「setData」の場合と同様に、メソッド名、引数、戻り値を決定する。オペレーション「getData」403は、WSDL文書201の上で引数はなく、レスポンスメッセージが「CustomerData」型408でmaxOccurがunboundedの戻り値を持っている。即ち、戻り値は「CustomerData」型503の配列で示され、戻り値に配列を持つため、メソッドの引数として、セッション管理IDが追加される。オペレーション「getData」についても、メソッド名、引数、戻り値を確定し、記憶する。
【0031】
その後、S302において、オペレーションを検出しなければ、WSDL文書201のオペレーションを全て処理したと判定し、S310へ処理を進める。S310では、記憶しておいたメソッドの情報に基づき、オペレーションに対応したメソッドを持つサービス実行オブジェクト205を生成する。
【0032】
ここで、サービス実行オブジェクト生成部202によって生成されるサービス実行オブジェクト205を説明する。図5に、サービス実行オブジェクト205として、サービス利用側のオブジェクト501、サービス提供側のオブジェクト502、メソッドの引数、戻り値として用いられる「CustomerData」型のオブジェクト503を示す。尚、サービス実行オブジェクト205には、サービス提供側が用いるオブジェクト、サービス利用側が用いるオブジェクトがあるが、本実施形態ではサービス実行オブジェクト生成部202がどちらも生成する。また、本発明は、これに限ることはなく、サービス実行オブジェクト生成部202にどちらを生成するかを設定可能にしても良い。
【0033】
サービス利用側のオブジェクト501は、オペレーション「setData」、「getData」に対応した「setData」メソッド、「getData」メソッドを有する。「setData」メソッドは、引数に「CustomerData」型の配列、終端通知情報、セッション管理ID、戻り値にbooleanを持つ。「getData」メソッドは、引数にセッション管理ID、戻り値に「CustomerData」型の配列を持つ。各メソッドには、アプリケーション203がメソッド呼び出しの際に、サービス実行処理部204を呼び出す処理が実装される。例えば、オペレーションとその引数に応じたメッセージ生成やメッセージからオペレーションの戻り値に応じたオブジェクトを生成するためにサービス実行処理部204が必要なWSDLの情報を渡す実装になる。ここで、WSDLの情報は、例えばXML Schema、SOAP action等の情報である。アプリケーション203が、サービス利用側のオブジェクト501のメソッドを呼び出すことにより、リクエストメッセージが生成され送信される。そして、サービスからのレスポンスメッセージがオブジェクトに変換されてメソッドの戻り値としてアプリケーション203に戻る。
【0034】
サービス提供側のオブジェクト502は、オペレーション「setData」、「getData」に対応した「setData」メソッド、「getData」メソッドを有する。但し、実装のされていないメソッドとして生成される。アプリケーション203はサービス提供側のオブジェクト502をサービス実行オブジェクトとしてサービス実行処理部204に予め登録しておく。登録の際に、アプリケーション203は提供するオペレーションの機能に従った実装を行なう。サービス実行処理部204は、受信したメッセージに応じて、メッセージをオブジェクトに変換して、そのオブジェクトを引数としてオペレーションに該当するサービス提供側のオブジェクト502のメソッドを呼び出す。
【0035】
サービス提供側のオブジェクト502には、もう一つ「getWSDLInfo」メソッドが定義されている。これは、WSDL上の情報(XML Schema、SOAP action等)を取得するために定義されている。サービス実行処理部204は、受信メッセージに該当するオペレーションの特定、引数へのオブジェクト変換、オブジェクトから送信メッセージへの変換処理にWSDL上の情報を用いる。サービス実行オブジェクト生成部202は、読み込んだWSDL文書201から必要な情報を提供するように「getWSDLInfo」メソッドを生成する。
【0036】
「CustomerData」型のオブジェクト503は、メソッドの引数や戻り値として使用される。図4のWSDL文書の「CustomerData」のcomplexType定義410をオブジェクトとして表現したものである。「CustomerData」のcomplexType定義は、string型のfirstNameという名前の要素とstring型のlastNameという名前の要素を持つように定義されている。その要素を表現するため、「CustomerData」型のオブジェクトはfirstNameというString型の変数、lastNameというString型の変数を持つ。そして、これら変数の値を設定、取得するメソッド、「setFirstName」、「getFirstName」「setLastName」、「getLastName」を有する。
【0037】
次に、サービス利用側のアプリケーション203がサービス実行オブジェクト205を呼び出す際の呼び出し例を、図6を用いて説明する。図6に、サービス利用側のアプリケーションプログラムコードの一部を示す。まず、「setData」オペレーションを呼び出すためのサービス実行オブジェクト205の使い方について説明する。このコード例では、ファイルにCSV形式で保存されているfirstName、lastNameの情報を読み出し、「setData」オペレーションを使用してDataServiceのWebサービスに送る。図5のサービス利用側のオブジェクト「DataServiceRequester」クラスを使用して、setDataオペレーションを呼び出す。
【0038】
符号601で示す部分は、サービス実行オブジェクト205のメソッドの引数や戻り値の変数を定義している。ここで、「result」は戻り値用の変数、「customerData」は送信する「CustomerData」型の配列サイズが5の変数である。「id」は引数となるセッション管理ID、「ID」クラスは、本実施形態では「newInstance」メソッドを呼び出すことにより毎回一意な「ID」を作成するものとする。そして、「end」は終端通知情報用の変数であり、trueの場合に最後のデータであることを示す。
【0039】
符号602で示す、「csvFile」は、firstName、lastNameの情報を記載したCSV形式のファイルを表す「CSVFile」型の変数である。「CSVFile」クラスは「getCustomerData」メソッドにより指定したCSV形式のファイルから指定した範囲のデータを「CustomerData」型で返すものとする。符号603で示す、「dataService」は「DataServiceRequester」型の変数で、このクラスの「setData」メソッドを使用して「setData」オペレーションを呼び出す。
【0040】
符号604で示す部分は、for文のブロックで、CSVファイルから5つずつデータを「CustomerData」型で読み出して、「setData」オペレーションを呼び出す処理を示している。符号605は、「csvFile」の「getCustomerData」メソッドを呼び出し、CSVファイル中のi番目から(i-1)番目までの情報を「CustomerData」型の配列で取得することを示している。符号606で、CSVファイルから最後の情報を取り出したか否かを判断するif文のブロックで、最後のデータであれば、「end」変数にtrueを設定する。
【0041】
符号607は、「dataService」の「setData」メソッドを呼び出し、「setData」オペレーションを呼び出している。引数には、CSVファイルから読み出した送信データである「customerData」、セッション管理ID「id」、終端を通知する「end」を設定している。「end」をtrueにして呼び出すと、送信する全てのデータが揃うのでメッセージが完成する。完成したメッセージはDataService Webサービスに送信され、受信メッセージがサービス実行処理部204によってboolean型の受信データに変換されて「setData」メソッドの戻り値として返る。
【0042】
次に、「getData」オペレーションを呼び出すためのサービス実行オブジェクト205の使い方を説明する。このコード例では、「geteData」オペレーションを呼び出し、DataService Webサービスから返される「CustomerData」を標準出力する例を示している。符号608で示す部分は、サービス実行オブジェクト205のメソッドの引数や戻り値の変数を定義している。「resultCustomerData」は戻り値用の変数で、「id」はセッション管理IDである。符号609で示す部分は、「getData」オペレーションの呼び出しで受信したメッセージの全ての「CustomerData」を戻り値として返されるまで処理を続けることを示すwhileブロックである。「getData」メソッドは受信メッセージに表現された「CustomerData」を全てオブジェクトとして変換した場合にnullを返す。そのため、whileを継続する条件式は「getData」メソッドの戻り値がnullでない場合となる。
【0043】
サービス実行処理部204は「getData」メソッドが呼ばれると、引数には配列はないため、最初のメソッド呼び出しで送信メッセージが確定し、Webサービスにメッセージを送信する。そして、メッセージを受信すると、受信メッセージをidに関連して保存し、部分的に「CustomerData」型のオブジェクトに変換した値を戻り値として返す。その後、順次「getData」メソッドが呼び出されると、指定されたidに関して保存したメッセージを「CustomerData」型に変換して戻り値として返す。受信メッセージを全て処理した場合にはnullを返す。符号610の部分では、取得した「resultCustomerData」を標準出力している。「CustomerData」クラスの「getFirstName」、「getLastName」メソッドを使用して、取得した「firstName」、「lastName」の情報を標準出力している。
【0044】
以上、アプリケーション203がサービス実行オブジェクト205をサービス利用側のオブジェクトとして呼び出す処理を説明した。次に、アプリケーション203がサービス実行処理部204にサービス提供側のオブジェクトを登録し、サービス実行オブジェクト205を実装する例を説明する。ここでは、サービス提供側のオブジェクト502のDataServiceProviderクラスの「setData」、「getData」に実行する処理を実装する。具体的には、DataServiceProviderクラスを継承したクラスを作成する。このクラスのメソッドは、メソッドに対応するオペレーションのメッセージを受信した場合に、メソッド処理部209によって呼び出される。このメソッドの戻り値はメッセージ変換部206によって送信メッセージに変換されてサービス利用者側に送信される。
【0045】
まず、「setData」メソッドの場合、引数は「CustomerData」の配列、セッション管理ID、終端通知情報の三つである。サービス実行処理部204は、受信メッセージが「setData」オペレーションであると判断した場合、アプリケーション203から登録されたサービス実行オブジェクト205の「setData」メソッドを呼び出す。その際、受信メッセージの「CustomerData」を順次少量ずつ「CustomerData」型の配列としてオブジェクトに変換する。メッセージの最後の「CusotmerData」をオブジェクトに変換した場合には、終端通知情報「end」をtrueに設定し、またメッセージの処理が途中であればfalseを設定して呼び出す。セッション管理IDは、ある1つのメッセージを処理している場合は同じものを渡す。「setData」メソッドの実装は、セッション管理IDに基づいて処理されているメッセージを識別し、「CustomerData」型の配列を処理する。そして、「end」がtrueに設定された場合には、送信メッセージに設定すべき正しいbooleanの値を戻り値として返すようにする。
【0046】
次に、「getData」メソッドの場合、引数はセッション管理IDのみで、戻り値は「CustomerData」型の配列である。メソッド処理部209は、受信メッセージが「getData」オペレーションであると判断した場合、アプリケーション203から登録されたサービス実行オブジェクト205の「getData」メソッドを呼び出す。「getData」メソッドの場合、戻り値が配列であるため、送信メッセージに設定する「CustomerData」型の値が分割されて渡される可能性がある。そのため、最後のデータであることを示すnullが返るまで、「getData」メソッドを呼び出す。そして、呼び出しの度に戻り値のオブジェクトをメッセージ変換部206でメッセージに変換する処理を実行し、nullが返った時点でメッセージを完成させてサービス呼び出し元にメッセージを送信する。この「getData」メソッドを呼び出す際に、同じメッセージに関する処理をしている場合は同じID、新規に処理するメッセージの場合は新しいIDを生成して引数に渡す。
【0047】
「getData」メソッドの実装は、セッション管理IDに基づいて処理されているセッションを識別しながら、同じセッション管理IDである場合は、「CustomerData」型の配列オブジェクトを順次戻り値として返す。そして、そのセッションにおいて返すべき配列の値がない場合にnullを返すようにする。
【0048】
次に、サービス実行処理部204のメソッド処理部209がサービス利用側として動作する場合の処理を、図7を用いて説明する。サービス利用側では、まずアプリケーション203がサービス実行オブジェクト205のメソッド呼び出しを行なう。メソッドが呼ばれると、アプリケーション203から引数の情報と、メッセージ生成やオブジェクト変換に必要なWSDLの情報がメソッド処理部209に渡される。メソッド処理部209は、渡された情報に基づいて送信メッセージの生成と受信メッセージからのオブジェクト生成を行なう。そして、オブジェクトに変換した値をサービス実行オブジェクト205に返し、そのオブジェクトがサービス実行オブジェクト205のメソッド呼び出しの戻り値としてアプリケーション203に渡る。
【0049】
まず、メソッド処理部209はサービス実行オブジェクト205のメソッドが呼ばれるとメッセージ送信が完了しているか否かを判定する(S701)。この判定では、IDに関してメッセージ送信が完了したか否かを記憶しているため、メソッド呼び出しでIDが指定されている場合、そのIDから送信完了を判定する。一方、メソッド呼び出しの引数にIDがなければ、ID=nullに対して記憶している送信状況に基づき判定する。次に、メソッド処理部209はサービス実行オブジェクト205から渡された引数の値、ID、終端通知情報、WSDL情報に基づいてメッセージ生成を行なうために、メッセージ変換部206を呼び出す(S702)。この際、引数、戻り値の型に配列がない場合、ID、終端通知情報はメソッドに渡されないため、ID=null、end=trueをメッセージ変換部206に渡す。
【0050】
ここで、メッセージ変換部206が渡された情報に基づいてメッセージ生成を行ない、メッセージ送信を完了したか否かをメソッド処理部209に返す(S703)。メッセージ変換部206の処理は図9を用いて更に後述する。次に、メソッド処理部209は送信完了であれば(S704でYes)、このIDのメッセージ送信が完了し、メッセージの転送処理モードを受信として記憶する(S705)。次に、メソッド処理部209は送信したメッセージに対する応答メッセージを受信する(S706)。一方、メソッド処理部209は送信完了でなければ(S704でNo)、サービス実行オブジェクト205のメソッド呼び出しを完了させるため、適当な戻り値を返す(S707)。ここで、送信が未完了と判断されるのは、引数の値に配列が含まれ、終端通知情報がfalseの場合のみである。この終端通知情報がfalseであることから、最後の値がまだ設定されていないので、アプリケーション203はこのメソッドの戻り値が正しい値と判断しない。そのため、返す値は受信メッセージに基づいて生成された戻り値でなくてもかまわない。例えば、nullで表現できる戻り値についてはnullを返し、プリミティブな値であれば、数値に関しては0やbooleanの場合はfalse等、初期値として使用される値を返す。
【0051】
メッセージ変換部206でメッセージ送信が未完了となると、同じIDのメソッド呼び出しで終端通知情報がtrueに設定された場合に完成され、Webサービスに送信される。そのため、それまでは、メッセージ変換部206にて記憶領域208に保管された状態になる。アプリケーション203が終端通知情報をtrueに設定してメソッドを呼び出すと、メソッド処理部209はIDに対して送信処理が未完了と判定する(S701でNo)。そして、上述したように、メソッド処理部209はメッセージ変換部206を呼び出し(S702)、メッセージ変換部206がメッセージを完成させてメッセージ送信を行なう(S703)。そして、送信側処理が完了したと判定し(S704でYes)、転送処理モードを受信として記憶する(S705)。その後、メッセージを受信すると(S706)、メッセージ送信完了と判定する(S701でYes)。そして、受信したメッセージのストリームと変換する戻り値の型、IDを渡してオブジェクト変換部207を呼び出す(S708)。
【0052】
ここで、オブジェクト変換部207が渡された情報に基づいてオブジェクト生成処理を行ない、オブジェクトと共に受信したメッセージの処理が全て完了したか否かをメソッド処理部209に返す(S709)。ここで、受信側の処理が完了していれば(S710でYes)、メソッド処理部209は記憶しているIDの転送処理モードの情報を削除する(S712)。そして、メソッド処理部209はオブジェクト変換部207から渡されたオブジェクトをサービス実行オブジェクト205のメソッドに返し、メソッド呼び出しに対する処理を終了する(S711)。一方、受信側の処理が完了していなければ(S710でNo)、IDに対する現在の転送処理モードの情報は削除せずに、メソッド呼び出しに対する処理を終了する。ここで、受信側の処理が未完了となる場合は、メソッドの戻り値が配列で、まだ配列の終端までメッセージをオブジェクトにしてない場合である。この場合、アプリケーション203はメソッド呼び出しの戻り値が配列型であり、nullが返るまでメソッドを呼び出し、全ての配列のデータを取得する。戻り値がnullにならない間は、メソッド処理部209ではS701でYes、S710でNoになる処理を繰り返す。その後、nullになるとS710でYesになり、このセッション管理IDに関する送受信処理が完了となる。
【0053】
次に、サービス実行処理部204のメソッド処理部209がサービス提供側として動作する場合の処理を、図8を用いて説明する。メソッド処理部209がサービス提供側として動作する場合、メッセージを受信したことをきっかけにして処理を開始する。メソッド処理部209は受信したメッセージに応じて、予め登録されたサービス実行オブジェクト205のメソッド呼び出しを行なう。そして、メソッド処理部209はオブジェクト変換部207が返したオブジェクトを引数にメソッドを呼び出し、メッセージ変換部206で戻り値をメッセージに変換して呼び出し元に応答メッセージを返す。
【0054】
まず、メソッド処理部209がメッセージを受信し(S801)、受信したメッセージに対応するサービス実行オブジェクト205のメソッドを特定する(S802)。具体的には、メソッド処理部209はアプリケーション203から登録されたサービス実行オブジェクト205に保持されているWSDL情報を取得し、そのWSDL情報から受信したメッセージのオペレーションを特定する。そして、メソッド処理部209はそのオペレーションからメソッド名、引数の型を導き出し、メソッドを特定する。次に、メソッド処理部209はメソッドの引数にセッション管理IDがあるか否かを判定し(S803)、あれば(S803でYes)、セッション管理IDを新規に生成する(S804)。次に、メソッド処理部209はメソッドの引数に設定するオブジェクトを生成するために、受信したメッセージのストリーム、セッション管理ID、引数の型、WSDL情報を指定してオブジェクト変換部207を呼び出す(S805)。
【0055】
ここで、オブジェクト変換部207が渡された情報に基づきオブジェクト生成の処理を行ない、オブジェクトと共に受信したメッセージの処理が全て完了したか否かをメソッド処理部209に返す(S806)。次に、メソッド処理部209では、オペレーションに該当するメソッドの引数に従ってオブジェクト変換部207から返されたオブジェクト、セッション管理ID、終端通知情報を指定してメソッドを呼び出す(S807)。また、メソッド処理部209は終端通知情報にオブジェクト変換部207が受信メッセージ処理を全て完了したか否かを指定する。尚、完了していれば、true、未完了であればfalseを指定する。
【0056】
次に、メソッド処理部209はメソッド呼び出しの戻り値をメッセージに変換するために、メッセージ変換部206に渡す終端通知情報を特定する。メッセージ変換部206が渡された終端通知情報に基づいて生成したメッセージを完成させて送信するか否かを決定する。そのため、受信メッセージの処理が全て完了し、且つメソッド呼び出しの戻り値がメッセージに設定する最終の値であるかを判断基準にしてメッセージ変換部206に渡す終端通知情報を決定する。ここで、メソッド処理部209はメソッド呼び出しの戻り値がnullでない配列の場合は、最終の値ではないと判断する。一方、メソッド処理部209はnullの配列或いは戻り値の型が配列でない場合は、最終の値と判断する。従って、戻り値が最終の値で、S806でオブジェクト変換部207が受信メッセージ処理を全て完了したと返してきた場合に(S808でYes)、終端通知情報のendをtrueに設定する(S810)。一方、S808でNoの場合には、終端通知情報のendをfalseに設定する(S809)。
【0057】
次に、メソッド処理部209はこの段階までに確定したセッション管理ID、メソッド呼び出しの戻り値、終端通知情報end、WSDL情報を指定してメッセージ変換部206を呼び出す(S811)。そして、メッセージ変換部206が与えられた情報に基づいてメッセージを生成し、メッセージ送信を完了したか否かをメソッド処理部209に返す(S812)。メソッド処理部209は返された情報に基づき、メッセージ送信が完了したか否かを判定する。完了していれば(S813でYes)、そのセッションのメッセージ送受信の処理が全て完了したことになる。一方、メッセージ送信が完了してなければ(S813でNo)、完了していない受信側の処理、或いは送信側の処理を続ける。受信側の処理が完了していれば(S814でYes)、メソッド呼び出しの配列型の引数にnull、終端通知情報endをtrueに設定し(S815)、メソッド呼び出しを行なう(S807)。そして、メソッド呼び出しの戻り値をメッセージに変換する処理を続ける。一方、受信側の処理が完了していない場合は(S814でNo)、受信側の処理を完了させるため、S805に戻り、受信メッセージをオブジェクト変換する処理を繰り返す。
【0058】
上述した処理により、サービス提供側のメソッド処理部209はサービス利用側からの要求メッセージの受信、サービス実行オブジェクト205のメソッド呼び出し、応答メッセージの生成と送信を行なう。
【0059】
ここで、メッセージ変換部206の処理を、図9を用いて説明する。メッセージ変換部206はセッション管理ID、終端通知情報、WSDL情報を用いてオブジェクトをメッセージに変換する処理を行なう。WSDL情報は、例えばXML Schemaのようなメッセージの構造を示す情報を持っているため、メッセージ変換部206はその構造情報とオブジェクトに基づき、XMLメッセージを生成することができる。
【0060】
まず、メッセージ変換部206は渡されたセッション管理IDがnullか否かを判定する(S901)。IDがnullの場合は、サービス実行オブジェクト205のメソッドにIDがない(戻り値にも引数も配列型がない)ことを示し、メッセージ変換部206の1回の処理で送信メッセージを確定し、生成したメッセージを即送信してよいことを示す。そのため、IDがnullと判断した場合(S901でYes)、WSDL情報に基づきオブジェクトをメッセージに変換し(S902)、生成したメッセージを即送信する(S903)。一方、IDがnullでないと判断した場合(S901でNo)、メッセージ記憶リストにIDが登録されているか判定する(S904)。このメッセージ記憶リストとは、処理中のメッセージをそのセッションIDと共に記憶するためのリストである。このリストにIDが登録されていない場合(S904でNo)、メッセージ変換部206はオブジェクトとWSDL情報から新規に生成したメッセージをファイルとして記憶領域208に保存し(S906)、IDとファイルをリストに登録する(S907)。しかし、このリストにIDが登録されている場合(S904でYes)、メッセージ変換部206はファイルに保存したメッセージにオブジェクトとWSDL情報から作成したメッセージを追加更新して保存する。
【0061】
次に、終端通知情報endがfalseである場合(S908でNo)、メッセージ変換部206はメッセージを送信せずに、メッセージ送信が未完了であることを呼び出し元に伝えて(S913)、処理を終了する。一方、終端通知情報endがtrueである場合(S908でYes)、メッセージ変換部206はメッセージを完成させて(S909)、送信する(S910)。次に、メッセージ変換部206はメッセージ記憶リストからIDとメッセージを保存したファイルを削除し(S911)、メッセージ送信が完了したことを呼び出し元に伝えて(S912)、処理を終了する。
【0062】
ここで、オブジェクト変換部207の処理を、図10を用いて説明する。オブジェクト変換部207は受信メッセージのストリーム、変換するオブジェクトの型情報、WSDL情報を用いてメッセージをオブジェクトに変換する処理を行なう。また、WSDL情報はメッセージの構造を示す情報を持っており、オブジェクト変換部207はその構造情報とメッセージに基づき、オブジェクトを生成する。
【0063】
まず、オブジェクト変換部207は変換するオブジェクトの型に配列型があるか否かを判別する(S1001)。配列型がない場合(S1001でNo)、オブジェクト変換部207はメッセージを一度にオブジェクトに変換し(S1002)、オブジェクトと受信メッセージが処理したことを返して、処理を終了する。例えば、サービス利用側でsetDataオペレーションを処理している場合、戻り値がboolean型で、配列ではないので、boolean型のオブジェクトに変換してbooleanの値とメッセージ処理完了を返す。しかし、配列型がある場合は(S1001でYes)、オブジェクト変換部207は上述したメッセージ記憶リストにIDとメッセージが登録されているか否かを判定する(S1003)。登録されていなければ(S1003でNo)、オブジェクト変換部207は受信メッセージをファイルとして記憶領域208に記憶し、IDと共にメッセージ記憶リストに登録する(S1004)。そして、オブジェクト変換部207はメッセージからオブジェクトを生成する(S1006)。一方、既に登録されていれば(S1003でYes)、オブジェクト変換部207はそのIDに対するメッセージを取得する(S1005)。そして、オブジェクト変換部207は取得したメッセージからオブジェクトを生成する(S1006)。
【0064】
尚、渡された型、WSDL情報に基づいてオブジェクトを生成する。配列型のデータについては該当するメッセージ中の全てのデータを一度にオブジェクトにするのではなく、部分的にオブジェクトに変換する。ある配列サイズ分オブジェクトに変換し、次にオブジェクト変換部207が呼び出された際に、その続きからオブジェクトに変換する処理を行なう。例えば、サービス利用側でgetDataオペレーションを処理している場合、戻り値としてCustomerData型の配列にオブジェクト変換する。メッセージ中の冒頭5つのCustomerDataのデータをCustomerData型のオブジェクトに変換する。そして、オブジェクト変換部207が再度呼び出されると、続く6番目から10番目までをオブジェクト変換し、順次呼び出される毎に5個をオブジェクト変換する。
【0065】
次に、メッセージの全てをオブジェクトに変換する処理が完了していれば(S1007でYes)、オブジェクト変換部207はメッセージ記憶リストからIDとメッセージを削除する(S1008)。そして、オブジェクト変換部207は生成したオブジェクトと共にメッセージの全てをオブジェクトに変換する処理が完了したことを呼び出し元に返し(S1009)、処理を終了する。一方、配列型のデータに対して最後のデータまでオブジェクト変換が完了していなければ、オブジェクト変換部207は生成したオブジェクトとオブジェクト変換処理が未完了であることを呼び出し元に返し(S1010)、処理を終了する。
【0066】
サービス利用側で、例えばgetDataオペレーションに対する応答メッセージ中に10,000人のCustomerDataが含まれる場合、全てCustomerData型のオブジェクトにするとメモリを大量に消費する。本実施形態では、メッセージを一旦保存してからメッセージを分割してオブジェクトに変換するため、一度にCustomerData型がオブジェクトとしてメモリに展開する量を削減できる。
【0067】
また、サービス利用側でsetDataオペレーションを使用してメッセージを生成する際も、10,000人のCustomerData型のオブジェクトを生成してメソッド呼び出しをするとメモリを大量に消費する。本実施形態では、少量ずつオブジェクトを設定し、メッセージを逐次生成、保存しながら処理を行なうため、メモリの使用量を削減できる。
【0068】
このように、メモリの少ない組み込みシステム上でアプリケーションを実行したい場合に、メモリの枯渇を防ぎ、他の装置との間で大量のデータを送受信することができる。
【0069】
尚、オブジェクト変換部207で分割してオブジェクトのサイズを固定として説明したが、外部からサイズを指定できるようにしても良い。また、メッセージ通信装置100がサービス実行オブジェクト生成部202を有する構成を説明した。しかし、サービス実行処理部204が使用するサービス実行オブジェクト205は、サービス実行オブジェクト生成部202を有する別装置で生成されたものでも良い。

【特許請求の範囲】
【請求項1】
ネットワークを介して他の装置へメッセージを送信するメッセージ通信装置であって、
メッセージを分割して設定するためのインタフェース定義を解釈する解釈手段と、
前記インタフェース定義に記載されたオペレーションを用いて、分割して設定されたオブジェクトのデータを一つのメッセージに変換して送信するメッセージ変換手段と、
を有することを特徴とするメッセージ通信装置。
【請求項2】
ネットワークを介して他の装置からメッセージを受信するメッセージ通信装置であって、
メッセージを分割して取得するためのインタフェース定義を解釈する解釈手段と、
前記インタフェース定義に記載されたオペレーションを用いて前記受信したメッセージを分割したオブジェクトに変換するオブジェクト変換手段と、
を有することを特徴とするメッセージ通信装置。
【請求項3】
前記メッセージ変換手段は、前記インタフェース定義に記載されたオペレーションから導き出されるメソッドを介して前記分割して設定されたデータを一つのメッセージに変換し、送信すべき全てのオブジェクトのデータが変換されたメッセージを送信することを特徴とする請求項1に記載のメッセージ通信装置。
【請求項4】
前記インタフェース定義とは、ソフトウェアへの命令であるオペレーションと該オペレーションに対するデータ型の情報を定義した定義文書であり、前記定義文書に記述されたオペレーションが大量のデータを保持可能な型のデータを扱うか否かを判定し、前記オペレーションが大量のデータを保持可能な型を扱うと判断した場合に、前記大量のデータとなるオブジェクトを一つのメッセージに変換して送信するメソッドを定義することを特徴とする請求項3に記載のメッセージ通信装置。
【請求項5】
前記オブジェクト変換手段は、前記インタフェース定義に記載されたオペレーションから導き出されるメソッドで大量のデータを扱う型として宣言されたオブジェクトに変換する場合に、前記受信したメッセージを分割した大量のデータのオブジェクトに変換することを特徴とする請求項2に記載のメッセージ通信装置。
【請求項6】
前記インタフェース定義とは、ソフトウェアへの命令であるオペレーションと該オペレーションに対するデータ型の情報を定義した定義文書であり、前記定義文書に記述されたオペレーションが大量のデータを保持可能な型のデータを扱うか否かを判定し、前記オペレーションが大量のデータを保持可能な型を扱うと判断した場合に、前記受信したメッセージを分割した大量のデータのオブジェクトに変換するメソッドを定義することを特徴とする請求項5に記載のメッセージ通信装置。
【請求項7】
ネットワークを介して他の装置へメッセージを送信するメッセージ通信装置の処理方法であって、
解釈手段が、メッセージを分割して設定するためのインタフェース定義を解釈する解釈工程と、
メッセージ変換手段が、前記インタフェース定義に記載されたオペレーションを用いて、分割して設定されたオブジェクトのデータを一つのメッセージに変換して送信するメッセージ変換工程と、
を有することを特徴とするメッセージ通信装置の処理方法。
【請求項8】
ネットワークを介して他の装置からメッセージを受信するメッセージ通信装置の処理方法であって、
解釈手段が、メッセージを分割して取得するためのインタフェース定義を解釈する解釈工程と、
オブジェクト変換手段が、前記インタフェース定義に記載されたオペレーションを用いて前記受信したメッセージを分割したオブジェクトに変換するオブジェクト変換工程と、
を有することを特徴とするメッセージ通信装置の処理方法。
【請求項9】
請求項7又は8に記載のメッセージ通信装置の処理方法をコンピュータに実行させるためのプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2010−244144(P2010−244144A)
【公開日】平成22年10月28日(2010.10.28)
【国際特許分類】
【出願番号】特願2009−89579(P2009−89579)
【出願日】平成21年4月1日(2009.4.1)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】