JP3831352B2 - プログラム生成処理をコンピュータに行わせるためのコンピュータ読み取り可能なプログラム - Google Patents
プログラム生成処理をコンピュータに行わせるためのコンピュータ読み取り可能なプログラム Download PDFInfo
- Publication number
- JP3831352B2 JP3831352B2 JP2003081246A JP2003081246A JP3831352B2 JP 3831352 B2 JP3831352 B2 JP 3831352B2 JP 2003081246 A JP2003081246 A JP 2003081246A JP 2003081246 A JP2003081246 A JP 2003081246A JP 3831352 B2 JP3831352 B2 JP 3831352B2
- Authority
- JP
- Japan
- Prior art keywords
- function
- web service
- name
- program
- handler
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Stored Programmes (AREA)
Description
【発明の属する技術分野】
本発明は、Webサービスの要求及び応答メッセージの記述形式と該Webサービスのプログラムで処理可能なデータ形式を変換するプログラムを自動生成するプログラムを提供するものである。
【0002】
【従来の技術】
近年、プリンタ、コピー、ファクシミリ、スキャナなどの各装置の機能を1つの筐体内に収納した画像形成装置が一般的に知られている。このような複合型の画像形成装置は、1つの筐体内に表示部、印刷部および撮像部などを設けるとともに、プリンタ、コピー、スキャナおよびファクシミリ装置にそれぞれ対応するアプリケーションを設け、アプリケーションの切り替えによって、当該装置をプリンタ、コピー、スキャナまたはファクシミリ装置として動作させるものである。
【0003】
【発明が解決しようとする課題】
しかしながら、上記従来の複合型画像形成装置において、ネットワークを介して個々のアプリケーションが画像形成処理をWebサービスとして提供する場合、そのネットワークプロトコルに従って交換されるメッセージの記述形式を意識したプログラム開発が必要であった。つまり、メッセージには、Webサービス機能に行わせる処理内容が指示されており、プログラムされたWebサービス機能は、該メッセージを解釈するための機能を組み込んでおく必要があった。メッセージの記述形式がXML(eXtensible Markup Language)である場合、Webサービス開発者は、XMLの知識を必要としていた。
【0004】
また、XMLによるメッセージのデータ形式とWebサービス機能におけるプログラム言語にて処理可能なデータ形式とは異なっているため、各Webサービス機能の中にこれらデータ形式の違いを吸収するための仕組みを持つ必要があった。このようなデータ形式の違いを吸収するための仕組みの開発では、単純で同じようなコードを大量に繰り返す必要があり、単純ミスによるバグが入りやすいという問題があった。
【0005】
そこで、本発明の課題は、複数のWebサービスを提供する該画像形成装置と接続される機器とで交換されるメッセージの記述形式に依存することなく該複数のWebサービスのプログラム開発を容易とする、該記述形式と該Webサービスの開発プログラムで処理可能なデータ形式を変換するプログラムを自動生成するプログラムを提供することである。
【0006】
【課題を解決するための手段】
上記課題を解決するため、本発明は、コンピュータに、Webサービスのインターフェイスを定義するインターフェイス定義を構成する複数の要素間の関連を示す第一要素木に基づいて、上記Webサービスを実行するWebサービス機能を関数コールするためのC言語プログラムによる入出力データ形式とXMLによって記述される該Webサービスに関する要求及び応答メッセージとの変換処理を行う変換プログラムを生成する変換プログラム生成手順を実行させるコンピュータ読み取り可能なプログラムであって、上記変換プログラム生成手順は、上記Webサービス機能のC言語プログラムによる入出力データ形式と上記要求及び応答メッセージに含まれる値のデータ型との変換を行う第一コードを生成する第一コード生成手順と、上記要求メッセージを構成する複数の要素間の関連を示す第二要素木の末端に設定される値を、上記Webサービス機能のC言語プログラムによる入力データ形式に変換する第二コードを生成する第二コード生成手順と、上記Webサービス機能のC言語プログラムによる出力データ形式を上記応答メッセージを構成する複数の要素間の関連を示す第三要素木の末端の値に変換する第三コードを生成する第三コード生成手順とを有するように構成される。
【0007】
このようなプログラムをインストールしたコンピュータ装置では、Webサービスのインターフェイスを定義するインターフェイス定義(例えば、WSDL(Web Service Description Language))から、Webサービス機能の入出力データ形式と所定記述形式(例えば、XML(eXtensible Markup Language))による要求及び応答メッセージとの変換を行うプログラム(例えば、実施例におけるハンドラ処理部)を生成することができる。従って、単純で同じようなコードを大量に生成することができるため、開発者による単純ミスによるバグが入り込むといった問題を解消することができる。また、短時間でプログラムを生成することができるため、開発者の負担を軽減することができる。
【0009】
このようなプログラムをインストールしたコンピュータ装置では、変換処理を行うプログラムとして、データ型変換プログラム(例えば、実施例におけるタイプライブラリ)と、所定記述形式による要求及び応答メッセージの解析及び生成を行うプログラム(例えば、実施例におけるハンドラソースコード)とを生成することができる。
【0011】
このようなプログラムをインストールしたコンピュータ装置では、所定記述形式(例えば、XML)による要素間の関連を示す要素木からWebサービス機能が処理可能なプログラム言語による入力データに変換、及び、プログラム言語による出力データを所定記述形式(例えば、XML)の要素木に変換するソースコードが自動生成される。
【0012】
また、上記第一要素木に基づいて、上記インターフェイス定義にて指定されるサービス名と操作名とによって上記変換プログラム生成手順によって生成された上記変換プログラムを実行する第一関数の関数名を生成し、その関数名によって該第一関数を宣言する第一関数宣言手順と、上記第一要素木に基づいて、上記インターフェイス定義にて指定されるサービス名と操作名とによって上記Webサービス機能を実行する第二関数の関数名を生成し、該インターフェイス定義にて指定される該サービス名と入力メッセージ名及び出力メッセージとによって引数の型と引数名とを決定し、その関数名と引数名とによって該第二関数を宣言する第二関数宣言手順とを有するように構成することができる。
【0013】
このようなプログラムをインストールしたコンピュータ装置では、インターフェイス定義(例えば、WSDL)にて指定されるサービス名、操作名、入力メッセージ名、出力メッセージ名等に基づいて、自動生成したプログラムの関数名及びWebサービス機能の関数名を宣言することができる。
【0014】
更に、上記第一要素木に基づいて、上記インターフェイス定義にて指定される上記サービス名と上記入力メッセージ名とによって入力データの構造体名を生成し、該インターフェイス定義にて指定されるパラメータ型と、パラメータ名とによって上記Webサービス機能によって処理可能な入力データ構造体を構成して定義する第一構造体定義手順と、上記第一要素木に基づいて、上記インターフェイス定義にて指定される上記サービス名と上記出力メッセージ名とによって出力データの構造体名を生成し、該インターフェイス定義にて指定されるパラメータ型と、パラメータ名とによって上記Webサービス機能によって処理可能な出力データ構造体を構成して定義する第二構造体定義手順とを有するように構成することができる。
【0015】
このようなプログラムをインストールしたコンピュータ装置では、インターフェイス定義(例えば、WSDL)に基づいて、Webサービス機能によって処理可能な入力データ及び出力データの構造体を定義することができる。
【0016】
更に、上記第一要素木におけるデータ型の定義に基づいて、上記Webサービス機能によって処理可能な型定義を生成する型定義生成手順と、上記第二要素木における入力データが格納される要素を上記Webサービス機能によって処理可能な定義された型に変換するデータ型変換関数の宣言を生成するデータ型関数宣言生成手順とを有するように構成することができる。また、本発明は、請求項7に記載されるように、上記型定義に基づいて、上記Webサービス機能による上記出力データのデータ型を上記第三要素木における出力データが格納される要素に変換するデータ型変換関数の宣言を生成するデータ型関数宣言生成手順とを有するように構成することができる。
【0017】
このようなプログラムをインストールしたコンピュータ装置では、インターフェイス定義(WSDL)の第一要素木に基づいて、入出力データのデータ型(例えば、列挙型、構造体、配列等)を定義し、要求メッセージの第二要素木に基づいて、入力データをWebサービス機能によって処理可能な型定義に対応させることができる。また、型定義に基づいて、Webサービス機能からの出力データを応答メッセージの第三要素木における処理結果を設定する要素に対応させることができる。
【0018】
上記課題を解決するための手段として、本発明は、上記プログラムをインストールしたコンピュータ装置におけるプログラム生成方法及び上記プログラムが記憶された記憶媒体とすることもできる。
【0019】
【発明の実施の形態】
以下、本発明の実施の形態を図面に基づいて説明する。
【0020】
本発明の一実施例に係るハンドラ自動生成装置は、図1に示すような機能構成を有する。図1は、本発明の一実施例に係るハンドラ自動生成装置の機能構成を示すブロック図である。図1において、ハンドラ自動生成装置500は、コンピュータ装置であって、メッセージのデータ形式とWebサービス機能におけるプログラム言語にて処理可能なデータ形式との違いを吸収するプログラムを生成するハンドラ自動生成部510と、WSDL(Web Service Description Language)によるインターフェイス定義521と、ハンドラを実行するために必要なソースコード531とを記憶するための記憶媒体(例えば、ハードディスクドライブ(HDD))有する。
【0021】
ハンドラ自動生成部510は、WSDL(Web Service Description Language)によるインターフェイス定義521を入力し、XML(eXtensible Markup Language)で記述された要求メッセージの構文を解析して要素木を生成して、要素木に基づいてWebサービス機能(WSF)を関数コールするための引数を設定すると共に、Webサービス機能からの戻り値を含むXMLによる応答メッセージを記述するための要素木を生成するハンドラ処理部のソースコードを生成して出力する処理部である。
【0022】
ハンドラ自動生成部510は、XML解析部511と、タイプライブラリ生成部512と、ハンドラソースコード生成部513と、XMLスキーマ解析部514と、タイプ要素解析部515と、メッセージ要素解析部516と、操作要素解析部517と、インターフェイス定義521を入力するファイル入力部520と、ソースコード531を出力するファイル出力部530とを有する。
【0023】
インターフェイス定義521は、どういうインターフェイスで1つのWebサービスを提供するかを定義し、WSDLによるインターフェイス定義ファイル522と、インターフェイス定義ファイル522からのインポートによって取り込まれる型定義ファイル523とで構成される。インターフェイス定義ファイル522にてインポートによって型定義ファイル523が取り込まれない場合は、型定義ファイル523が存在しない。
【0024】
ソースコード531は、例えば、C言語のソースコードであって、ハンドラ処理部のヘッダファイルとプログラムファイルとで構成されるハンドラソースコード532と、ハンドラソースコード532から参照されるタイプライブラリ533とで構成される。タイプライブラリ533は、ヘッダファイルとプログラムファイルとで構成される。
【0025】
ファイル入力部520は、利用者によって指定されたインターフェイス定義521をハンドラ自動生成部510に入力し(ステップS81)、XML解析部511に通知する(ステップS82)。XML解析部511は、ファイル入力部520から受け取ったインターフェイス定義521に基づいて、XMLの構文を解析して要素木を生成する。そして、XML解析部511は、その要素木をタイプ要素解析部515に通知し(ステップS83−1)、またメッセージ要素解析部516に通知し(ステップS83−2)、更に操作要素解析部517に通知する(ステップS83−3)。
【0026】
タイプ要素解析部515は、タイプライブラリを生成するために要素木内のtypes要素を解析する処理部であって、要素木を解析して型定義を示すtypes要素を検出し、XMLスキーマ解析部514に検出したtypes要素を解析させる(ステップS84−1)。そして、タイプ要素解析部515は、XMLスキーマ解析部514による解析結果をタイプライブラリ生成部512に通知する(ステップS85−1)。
【0027】
メッセージ要素解析部516は、ハンドラソースコードを生成するために要素木内のmessage要素を解析する処理部であって、その解析結果をハンドラソースコード生成部513に通知する(ステップS85−2)。操作要素解析部517は、ハンドラソースコードを生成するために要素木内のoperation要素を解析する処理部であって、その解析結果をハンドラソースコード生成部513に通知する(ステップS85−3)。
【0028】
タイプライブラリ生成部512は、タイプ要素解析部515から通知された解析結果に基づいてタイプライブラリを生成する処理部であって、生成されたタイプライブラリはファイル出力部530へ通知される(ステップS86−1)。ハンドラソースコード生成部513は、メッセージ要素解析部516及び操作要素解析部517から通知された解析結果に基づいて、ソースコードを生成してファイル出力部に通知する(ステップS86−2)。ファイル出力部530は、ハンドラソースコード生成部513から通知されたソースコードをハンドラソースコード532として、また、タイプライブラリ生成部512から通知されたタイプライブラリをタイプライブラリ533として、ソースコード531を出力する(ステップS87)。
【0029】
このように、ハンドラ自動生成装置500は、Webサービスを定義するインターフェイス定義521の入力によって、自動的にハンドラ処理部のソースコード531を出力することができる。
【0030】
このようなハンドラ自動生成装置500は、図2に示すようなハードウェア構成を有する。図2は、本発明の一実施例に係るハンドラ自動生成装置のハードウェア構成を示すブロック図である。
【0031】
図2において、ハンドラ自動生成装置500は、コンピュータによって制御されハンドラ自動生成部510を実行する装置であって、CPU(中央処理装置)551と、メモリユニット552と、表示ユニット553と、入力ユニット554と、記憶装置556と、ドライバ557とで構成され、システムバスBに接続される。
【0032】
CPU551は、メモリユニット552に格納されたプログラムに従ってハンドラ自動生成装置500を制御する。メモリユニット552は、RAM及びROM等にて構成され、CPU551にて実行されるプログラム、CPU551での処理に必要なデータ、CPU551での処理にて得られたデータ等を格納する。また、メモリユニット552の一部の領域が、CPU551での処理に利用されるワークエリアとして割り付けられている。
【0033】
表示ユニット553は、CPU551の制御のもとに必要な各種情報を表示する。入力ユニット554は、マウス、キーボード等を有し、利用者がハンドラ自動生成装置500が処理を行なうための必要な各種情報を入力するために用いられる。記憶装置556は、例えば、ハードディスクユニットにて構成され、図1に示すインターフェイス定義521及びソースコード531、ハンドラ処理部を生成するために必要なデータ等を格納する。
【0034】
ハンドラ自動生成装置500においてハンドラ自動生成部510によって行われる自動生成処理を実現するプログラムは、例えば、CD−ROM等の記憶媒体558によってハンドラ自動生成装置500に提供される。即ち、プログラムが保存された記憶媒体558がドライバ557にセットされると、ドライバ557が記憶媒体558からプログラムを読み出し、その読み出されたプログラムがシステムバスBを介して記憶装置556にインストールされる。そして、プログラムが起動されると、記憶装置556にインストールされたプログラムに従ってCPU551がその処理を開始する。尚、プログラムを格納する媒体としてCD−ROMに限定するものではなく、コンピュータが読み取り可能な媒体であればよい。
【0035】
ハンドラ自動生成部510によって実行されるハンドラ自動生成処理の全体について説明する。図3は、ハンドラ自動生成処理の全体を説明するフローチャート図である。図3において、ファイル入力部520によってインターフェイス定義ファイル521を読み込み(ステップS501)、XML解析部511がXMLによる記述を解析し要素木を生成する(ステップS502)。
【0036】
ハンドラ自動生成部510は、解析が成功したか否かを判断する(ステップS503)。解析が失敗した場合、エラーを表示ユニット553に表示し(ステップS504)、ハンドラ生成処理を終了する。解析が成功した場合、タイプライブラリ生成部512によってタイプライブラリが生成される(ステップS505)。また、ハンドラソースコード生成部513によって、ハンドラソースコードが生成され(ステップS506)、ハンドラ生成処理を終了する。
【0037】
タイプライブラリ生成部512によるタイプライブラリ生成処理(ステップS505)について詳述する。図4は、タイプライブラリ生成処理を説明するフローチャート図である。図4において、タイプ要素解析部515は、XML解析部511から通知された要素木からtypes要素を探す(ステップS511)。
【0038】
タイプ要素解析部515は、types要素が見つかったか否かを判断する(ステップS512)。見つからなかった場合、タイプライブラリ生成処理を終了する。一方、見つかった場合、空要素であるか否かを判断する(ステップS513)。空の要素である場合、タイプライブラリ生成処理を終了する。一方、空要素でない場合、外部ファイルのインポートか否かを判断する(ステップS514)。つまり、図1において、インターフェイス定義ファイル522が型定義ファイル523をインポートしているか否かを判断する。外部ファイル(型定義ファイル523)をインポートしていない場合、ステップS516へ進む。一方、外部ファイル(型定義ファイル523)をインポートしている場合、スキーマ定義ファイル(型定義ファイル523)を読み込む(ステップS515)。
【0039】
XMLスキーマ解析部514は、インターフェイス定義ファイル522のXMLスキーマを解析し(ステップS516)、ソースコードを生成する(ステップS517)。そして、ファイル出力部530によって、ヘッダファイルとプログラムファイルとで構成されるタイプライブラリ533として出力される。
【0040】
ステップS517のソースコード生成処理について図5から図11で説明する。先ず、types要素において、列挙型でデータ型が定義されている場合について説明する。図5は、ソースコード生成処理における列挙型定義生成処理を説明する図である。
【0041】
図5において、XMLスキーマ601は、列挙型でデータ型が定義されるXMLによる記述例である。XMLスキーマ601は、タグsimpleTypeによる記述602によって、「SomeValueEnum」という名前を持つ単純型のデータ型であることが定義される。更に、タグrestrictionによる記述603によって、記述604は、baseで指定される「string」によって基底型が文字列であるように制限される。例えば、記述604において、enumerationタグによって文字列が「VALUE1」、「VALUE2」、「VALUE3」の3つの値が列挙される。この場合、名前「SomeValueEnum」のデータ型は、3つの文字列を持つことが定義される。
【0042】
Cコード701は、列挙型でデータ型を定義するXMLスキーマ601から生成されたC言語のソースコードである。Cコード701において、記述702は、記述602に基づいて「_SomeValueEnum」が列挙型であることを定義し、記述603及び記述604に基づいて記述704が生成される。「SomeValueEnum_VALUE1」、「SomeValueEnum_VALUE2」、「SomeValueEnum_VALUE3」の3つが列挙される記述704によって、3つの文字列を持つことが定義される。そして、記述705は、「SomeValueEnum」が「enum _SomeValueEnum」と同じデータ型を定義することを示す。
【0043】
このように、types要素で列挙型が記述されているXMLスキーマ601からCコード701が生成される。
【0044】
次に、types要素において、構造体でデータ型が定義されている場合について説明する。図6は、ソースコード生成処理における構造体の型定義生成処理を説明する図である。
【0045】
図6において、XMLスキーマ611は、構造体でデータ型が定義されるXMLによる記述例である。XMLスキーマ611は、タグcomplexTypeによる記述612によって、「SomeStruct」という名前を持つ複合型のデータ型であることが定義される。タグsequenceによる記述613によって、データ順を規定する。タグelementによる記述614によって、構造体メンバー「strParam」が文字列であることが定義され、タグelementによる記述615によって、構造体メンバー「intParam」が整数であることが定義される。
【0046】
Cコード711は、構造体でデータ型を定義するXMLスキーマ611から生成されたC言語のソースコードである。Cコード711において、記述712は、記述612に基づいて「_SomeStruct」が構造体であることを定義し、記述614及び記述615に基づいて記述714による「char *strParam;」及び記述715による「int intParam;」が生成される。そして、記述715は、「SomeStruct」が「struct _SomeStruct」と同じデータ型を定義することを示す。
【0047】
このように、types要素で構造体が記述されているXMLスキーマ611からCコード711が生成される。
【0048】
次に、types要素において、配列でデータ型が定義されている場合について説明する。図7は、ソースコード生成処理における配列の型定義生成処理を説明する図である。
【0049】
図7において、XMLスキーマ621は、配列でデータ型が定義されるXMLによる記述例である。XMLスキーマ621は、タグcomplexTypeによる記述622によって、「ArrayOfString」という名前を持つ複合型のデータ型であることが定義される。更に、タグrestrictionによる記述624によって、baseで指定される「soapEnc:Array」によってSOAP符号化に従った配列であるように制限される。また、タグsequenceによる記述625によって、記述626によるデータ順を規定する。タグelementによる記述626によって、「item」が文字列であり、省略可能であり、出現回数に上限のないことが定義される。タグattributeによる記述627は、「soapEnc:arrayType」が参照されて、その配列のタイプが「wsdl:arrayType=”xs:string[]”」によって文字列の配列であるように属性を定義する。
【0050】
Cコード721は、配列でデータ型を定義するXMLスキーマ621から生成されたC言語のソースコードである。Cコード721において、記述722は、記述622に基づいて「_ArrayOfString」が構造体であることを定義し、記述626及び記述627に基づいて記述723及び記述724による要素数を示す「int length;」及び記述715による「char*」の配列のポインタである「char **array;」が生成される。そして、記述725は、「ArrayOfString」が「struct_ArrayOfString」と同じデータ型を定義することを示す。
【0051】
types要素のsimpleType及びcomplexTypeの定義に基づいてC言語の関数宣言を生成する例について図8から10で説明する。図8から図10において、C言語コード内のDocument及びElementは、DOM(Document Object Model)によって定義される型をC言語の構造体にマッピングしたものであるとする。また、図8から図10において、シリアライザ及びデシリアライザは、要素木と各型に対応した構造体データの変換を行う際に実行されるプログラムであって、シリアライザは構造体データを要素木に変換し、でシリアライザは要素木に構造体データに変換するプログラムである。また、コンストラクタ及びデストラクタは、構造体データを生成する際に実行されるプログラムであって、デストラクタは構造体データを解放するプログラムである。
【0052】
図8は、ソースコード生成処理における列挙型の関数宣言処理を説明する図である。図8において、「Element *SomeValueEnum_serialize(Document *doc, char *tagName, SomeValueEnum value);」で示されるシリアライザ801は、「SomeValueEnum value」によって列挙値を入力として受け取って、「char *tagname」によってtagnameをタグ名とする要素(Element)を生成して出力する。また、「SomeValueEnum SomeValueEnum_deserialize(Element *element);」で示されるデシリアライザ811は、要素(Element)を入力として受け取って、これを解析して列挙値を出力する。
【0053】
シリアライザ801及びデシリアライザ811は、XMLスキーマ601より生成される。
【0054】
図9は、ソースコード生成処理における構造体の関数宣言処理を説明する図である。図9において、「SomeStruct *SomeStruct_create(char *strParam, int intParam);」で示されるコンストラクタ821は、構造体メンバーの値を入力として受け取って、構造体を生成して出力する。「void SomeStruct_free(SomeStruct *st);」で示されるデストラクタ831は、構造体を入力として受け取って、その使用するメモリ領域を解放する。また、構造体メンバーの使用するメモリ領域も再帰的に解放する。「Element *SomeStruct_serialize(Document *doc, char *tagName, SomeStruct *st);」で示されるシリアライザ841は、「SomeStruct *st」によって構造体を入力として受け取って、「char *tagname」によってtagnameをタグ名とする要素(Element)を生成して出力する。また、「SomeStruct *SomeStruct_deserialize(Element *element);」で示されるデシリアライザ851は、要素(Element)を入力として受け取って、これを解析して構造体を生成して出力する。
【0055】
従って、XMLで記述された入力値を示す要素をデシリアライザ851とコンストラクタ821とを用いることによって、Webサービス機能が処理可能な構造体に入力値を設定することができる。また、Webサービス機能からの戻り値(処理結果としての出力値)を、シリアライザ841を用いることによって、XMLで記述される要素に対応させて処理結果を設定することができる。
【0056】
コンストラクタ821、デストラクタ831、シリアライザ841及びデシリアライザ851は、XMLスキーマ611より生成される
図10は、ソースコード生成処理における配列の関数宣言処理を説明する図である。図10において、「ArrayOfString *ArrayOfString_create(int length, char **array);」で示されるコンストラクタ861は、配列サイズと、配列を入力として受け取って、配列を保持する構造体を生成して出力する。「void ArrayOfString_free(ArrayOfString *st);」で示されるデストラクタ871は、配列を保持する構造体を入力として受け取って、その使用するメモリ領域を解放する。また、配列メンバーの使用するメモリ領域も再帰的に解放する。「Element *ArrayOfString_serialize(Document *doc, char *tagName, ArrayOfString *st);」で示されるシリアライザ881は、「ArrayOfString *st」によって配列を保持する構造体を入力として受け取って、「char *tagname」によってtagnameをタグ名とする要素(Element)を生成して出力する。また、「SomeStruct *SomeStruct_deserialize(Element *element);」で示されるデシリアライザ891は、要素(Element)を入力として受け取って、これを解析して配列を保持する構造体を生成して出力する。
【0057】
従って、XMLで記述された入力値を示す要素をデシリアライザ891とコンストラクタ861とを用いることによって、Webサービス機能が処理可能な配列に入力値を設定することができる。また、Webサービス機能からの戻り値(処理結果としての出力値)をシリアライザ881とを用いることによって、XMLで記述される要素に対応させて処理結果を設定することができる。
【0058】
コンストラクタ861、デストラクタ871、シリアライザ881及びデシリアライザ891は、XMLスキーマ621より生成される
このようにして生成されたC言語の関数宣言は、タイプライブラリ533のヘッダファイルに出力される。また、各関数の処理はプログラムファイルに出力される。
【0059】
次に、ハンドラ自動生成部510によるハンドラ生成処理について図11及び図12で詳述する。図11及び図12は、ハンドラ生成処理を説明するフローチャート図である。図11において、ハンドラ自動生成部510は、service要素のname属性からサービス名を取得する(ステップS521)。そして、service要素、binding要素、porttype要素の順に辿って各要素を探す(ステップS522)。
【0060】
porttype要素の子のoperation要素を探し、name属性から操作名を取得する(ステップS523)。operation要素の子のinput要素を探し、name属性から入力メッセージ名を取得する(ステップS524)。operation要素の子のoutput要素を探し、name属性から出力メッセージ名を取得する(ステップS525)。そして、ハンドラ処理部とWebサービス機能(WSF)の関数宣言を生成する(ステップS526)。
【0061】
入力メッセージのmessage要素を探す(ステップS527)。message要素の子のpart要素を探し、name属性からパラメータ名、及び、types属性から型を取得する(ステップS528)。そして、型をC言語の型にマッピングする(ステップS529)。まだpart要素があるか否かを判断する(ステップS530)。part要素がある場合、ステップS528へ戻り、上記処理を繰り返す。一方、part要素がない場合、入力メッセージのC言語の型へのマッピングを終了し、出力メッセージのC言語の型へのマッピングを行う。
【0062】
出力メッセージのmessage要素を探す(ステップS531)。message要素の子のpart要素を探し、name属性からパラメータ名、及び、types属性から型を取得する(ステップS532)。そして、型をC言語の型にマッピングする(ステップS533)。まだpart要素があるか否かを判断する(ステップS534)。part要素がある場合、ステップS532へ戻り、上記処理を繰り返す。一方、part要素がない場合、出力メッセージのC言語の型へのマッピングを終了する。
【0063】
次に、入力メッセージの構造体定義を生成する(ステップS535)。また、出力メッセージの構造体定義を生成する(ステップS536)。ハンドラ処理部のプログラムを生成する(ステップS537)。入力メッセージの構造体定義及び出力メッセージを構造体定義をヘッダファイルに出力し、ハンドラ処理部のプログラムをプログラムファイルに出力する(ステップS538)。そして、まだoperation要素があるか否かを判断する(ステップS539)。operation要素がある場合、ステップS523へ戻り、上記同様の処理を繰り返す。operation要素がない場合、ハンドラ生成処理を終了する。
【0064】
ハンドラ自動生成部510に入力されるインターフェイス定義ファイル(WSDL)の記述例について図13及び図14で説明する。図13及び図14は、WSDLによるインターフェイス定義の記述例を示す図である。図13及び図14において、本来<type>タグによって記述されるデータ型の定義は、「foo.bar.com/types.xsd」で特定される型定義ファイル523によって定義されているものとする。この記述例において、メッセージを記述するためのデータ型を定義し、スキーマの定義が設定される<type>タグは省略され、その代わりに、記述40によって「foo.bar.com/types.xsd」からインポートされる。
【0065】
メッセージの書式を定義する<message>タグ41(記述<message name="printInput">)によって定義される定義情報42において、記述<part name="fileId" type="xs:unsignedInt"/>及び記述<part name="count" type="xs:unsignedInt"/>によって、印刷要求の入力パラメータ(printInput)は、符号なし整数(unsignedInt)のfileId及び符号なし整数(unsignedInt)のcountによって構成されることを定義する。また、メッセージの書式を定義する<message>タグ43(記述<message name="printOutput">)によって定義される定義情報44において、記述<part name="requestId" type="xs:unsignedInt"/>によって、印刷要求の出力パラメータ(printOutput)は、符号なし整数(unsignedInt)のrequestIdによって構成されることを定義する。
【0066】
操作(operation)の集合を定義する<portType>タグ45(記述<portType name="netdocPortType">)によって定義される定義情報46において、操作毎の入力メッセージ及び出力メッセージが定義される。例えば、<operation>タグ47(記述<operation name="print">)によって定義される定義情報48において、記述<input message="tns:printInput"/>によって入力メッセージはprintInputであることが定義され、また、記述<output message="tns:printOutput"/>によって出力メッセージはprintOutputであることが定義される。この場合、印刷(print)のみが定義される。
【0067】
<portType>タグ45によって定義された操作とメッセージを具体的なプロトコルとデータフォーマットにマップする<binding>タグ49(記述<binding name="netdocHttpBinding" type="tns:netdocPortType">)によって定義される定義情報50において、netdocPortTypeで定義されるポートタイプについて、操作とメッセージのプロトコルとデータフォーマットへのマップが定義される。
【0068】
定義情報50において、<sb:binding>タグ51(記述<sb:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>)によって、SOAPHTTPバインディングによるRPC(Remote Procedure Call)の使用が定義される。<operation>タグ52(記述<operation name="print">)によって、以下に印刷(print)に関するSOAPメッセージが定義される。
【0069】
先ず、<sb:operation>タグ53(記述<sb:operation soapAction="http://foo.bar.com/netdoc/print"/>)によって、印刷(print)要求時のSOAPActionヘッダの値が「http://foo.bar.com/netdoc/print」であることを定義する。
【0070】
次に、<input>タグ54によって定義される定義情報55において、記述<sb:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="literal" namespace="http://foo.bar.com/netdoc/"/>によって、入力時のエンコーディング形式を定義し、<output>タグ56によって定義される定義情報57において、記述<sb:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="literal" namespace="http://foo.bar.com/netdoc/"/>によって、出力時のエンコーディング形式を定義する。
【0071】
そして、ネットワークの端点の集まりを定義する<service>タグ58(記述<service name="netdoc">)によって定義される定義情報59において、<port>タグ60(記述<port name="netdocPort" binding="tns:netdocHttpBinding">)によってネットワークの端点の1つとなるnetdocPortが定義され、更に、記述<sb:address location="http://printer.foo.bar.com/netdoc"/>によって、そのネットワークの端点のアドレス位置が定義される。つまり、サービス名「netdoc」のバインディングは「netdocHttpBinding」であり、サービスのURL(Uniform Resource Locator)は「http://printer.foo.bar.com/netdoc」であることが定義される。
【0072】
このようにWSDLで定義されたインターフェイス定義ファイル522及び方定義ファイル523によって、データ型が決定され、操作が決定され、また、URL及びSOAPActionヘッダが決定される。
【0073】
次に、図13及び図14に示すインターフェイス定義が入力された場合のハンドラ処理部及びWebサービス機能の関数宣言と、入力メッセージ及び出力メッセージの構造体定義について説明する。先ず、図11のステップS526にて生成されるハンドラ処理部とWebサービス機能の関数宣言について図15及び図16で説明する。
【0074】
図15は、ハンドラ処理部の関数宣言を説明する図である。図15において、ハンドラ処理部の関数宣言は、例えば、サービス名を示す「netdoc」と操作名を示す「print」と、更にハンドラ処理部を示す「handler」による「netdoc_print_handler」によって関数名とし、これをハンドラ処理部の関数として宣言する。この例では、「netdoc_print_handler」によって、印刷操作を行うサービスに対応するハンドラ処理部を示す。ハンドラ処理部の関数宣言は、ハンドラソースコード532のヘッダファイルに出力される。
【0075】
図16は、Webサービス機能の関数宣言を説明する図である。図16において、Webサービス機能の関数宣言は、例えば、サービス名を示す「netdoc」と操作名を示す「print」とによる「netdoc_print」を関数名とし、これをWebサービス機能の関数として宣言する。また、Webサービス機能の関数の引数は、サービス名を示す「Netdoc」と入力メッセージ名を示す「printInput」とによる「Netdoc_printInput」によって入力メッセージの構造体を指定し、また、サービス名を示す「Netdoc」と出力メッセージ名を示す「printOutput」とによる「Netdoc_printOutput」によって出力メッセージの構造体を指定する。Webサービス機能の関数宣言は、ハンドラソースコード532のヘッダファイルに出力される。
【0076】
図12のステップS535にて生成される入力メッセージの構造体定義について図17で説明する。図17は、入力メッセージの構造体定義を説明する図である。図17において、入力メッセージの構造体は、例えば、サービス名を示す「netdoc」と入力メッセージ名を示す「printInput」とによる「_Netdoc_printInput」を構造体として定義する。また、構造体「_Netdoc_printInput」は、パラメータ型を「unsigned int」によって符号なし整数としてパラメータ名「fileId」と、パラメータ型を「unsigned int」によって符号なし整数としてパラメータ名「count」とで構成される。入力メッセージの構造体は、ハンドラソースコード532のヘッダファイルに出力される。
【0077】
図12のステップS536にて生成される出力メッセージの構造体定義について図18で説明する。図18は、出力メッセージの構造体定義を説明する図である。図18において、出力メッセージの構造体は、例えば、サービス名を示す「netdoc」と出力メッセージ名を示す「printOutput」とによる「_Netdoc_printOutput」を構造体として定義する。また、構造体「_Netdoc_printOutput」は、パラメータ型を「unsigned int」によって符号なし整数としてパラメータ名「requestId」で構成される。出力メッセージの構造体は、ハンドラソースコード532のヘッダファイルに出力される。
【0078】
図13及び図14に示すインターフェイス定義に基づいて自動生成されるハンドラソースコード532のプログラムの例について図19で説明する。図19は、自動生成されたハンドラソースコードの例を示す図である。図19において、実際のソースコードを記載する代わりに、ステップ毎の処理概要を記してある。
【0079】
図19に示すようなハンドラソースコードでは、記述901に示すように、図15に示す宣言されたハンドラ処理部の関数名が最初に記述される。このハンドラ処理部は、Webサービス機能としての印刷機能のためのハンドラである。以下、印刷ハンドラと言う。ステップS120からS131までのコードは、要素木に基づいて処理リクエストを示すSOAPエンベロープを解析するコードである。また、ステップS140からS148までのコードは、処理レスポンスを示すSOAPエンベロープを作成するための要素木を生成するたコードである。
【0080】
印刷ハンドラにてローカルに定義される変数の記述の後、印刷ハンドラがルート要素を取得するためのステップS120が記載される。ステップS120が実行された結果として、ルート要素(Envelope要素)を取得する。子ノードリストを取得するステップS121が記載される。ステップS121が実行された結果として、印刷ハンドラは要素木から「Header」及び「Body」を取得することになる。
【0081】
子ノードリストからタグ名がBodyの要素を検索して取得するステップS122が記述される。Body要素の最初の子ノードを取得するステップS123が記述される。ステップS123が実行された結果として、印刷ハンドラは操作名を示すprint要素を取得する。print要素の子ノードリストを取得するステップS124が記述される。取得した子ノードリストからタグ名を順に取得するステップS125(繰り返しの判断をステップS132とする)が記述される。
【0082】
タグ名がfileIDであるか否かを判断するステップS126が記述される。タグ名がfileIDである場合に、タグ名がfileIDの最初の子ノードを取得するステップS127が記述される。ステップS127が実行された結果として、印刷ハンドラはテキストノードを取得する。取得したテキストノードからテキストデータを抽出して整数に変換するステップS128が記述される。ステップS128が実行された結果として、印刷ハンドラはファイルIDパラメータとして値を所定の構造体に設定する。
【0083】
タグ名がcountであるか否かを判断するステップS129が記述される。タグ名がcountである場合に、タグ名がcountの最初の子ノードを取得するステップS130が記述される。ステップS130が実行された結果として、印刷ハンドラはテキストノードを取得する。取得したテキストノードを抽出して整数に変換するステップS131が記述される。ステップS131が実行された結果として、印刷ハンドラは部数パラメーとして値を所定の構造体に設定する。
【0084】
上記ステップS126からS131までの記述902は、印刷ハンドラでの例であるが、他のハンドラでは、入力メッセージのパラメータ定義によってタグ名毎の判断及びタグ名に対する処理は変化する。
【0085】
記述902を実行した場合に取得した各パラメータの値を入力メッセージの構造体データとして生成し、データ名「in」に設定するステップS133が記述される。
【0086】
入力メッセージの構造体データを引数とした図16に示すような宣言されたWebサービス機能の関数「netdoc_print(in, out)」をコールするステップS134が記述される。
【0087】
ステップS134が実行された場合に、戻り値がエラーであるかを判断し、エラーである場合、SOAPFaultをresponseDocumentに設定するステップS135が記述される。
【0088】
以下ステップS140からS148までは、Webサービス機能の関数「netdoc_print(in, out)」の実行によってエラーでなかった場合に処理レスポンスを生成するための要素木を生成するステップが記述される。
【0089】
Envelope要素を生成するステップS140が記述される。Body要素を生成するステップS141が記述される。Body要素をEnvelope要素に接続するステップS142が記述される。printResponse要素を生成するステップS143が記述される。printResponse要素をBody要素に接続するステップS144が記述される。requestId要素を生成するステップS145が記述される。printResponse要素をBody要素に接続するステップS146が記述される。
【0090】
ステップS134が実行された結果として得られたリクエストIDを用いてテキストノードを生成するステップS147が記述される。テキストノードをrequestId要素に接続するステップS148が記述される。
【0091】
印刷ハンドラでの処理結果を示すresponseDocumentを戻り値とするステップS149が記述される。
【0092】
このようにして記述されたハンドラソースコード532は、印刷ハンドラに限るものではなく、同様のステップを他の操作に対応させて生成することができる。従って、上記ハンドラソースコードにおける操作名「print」は、定義によって変化する。
【0093】
このように、ハンドラソースコード532が自動生成されることによって、単純で同じようなコードを大量に生成することができるため、開発者による単純ミスによるバグが入り込むといった問題を解消することができる。また、短時間でハンドラソースコード532を生成することができるため、開発者の負担を軽減することができる。更に、開発者は、XMLによるメッセージのデータ形式とWebサービス機能におけるプログラム言語にて処理可能なデータ形式との違いを意識することなく、Webサービス機能を開発することができる。
【0094】
このようにハンドラ自動生成部510によって、インターフェイス定義521に基づいて、各Webサービス機能の関数に対応させて自動生成されたハンドラソースコード532及びタイプライブラリ533は、Webサービス機能の関数他、必要な処理部を構成するソースコードと共に、コンパイルされる。
【0095】
以下、上記自動生成されたハンドラ処理部が組み込まれた画像形成装置の実施例について説明する。
【0096】
多種の画像形成機能を融合する画像形成装置(以下、融合機と言う)は、例えば、図20に示すような機能構成を成す。図20は、本発明の一実施例に係る多種の画像形成機能を融合する融合機の機能構成を示すブロック図である。
【0097】
図20において、融合機1200は、プロッタ1201と、スキャナ1202と、その他ハードウェアリソース1203などを有するとともに、プラットフォーム1220とアプリケーション1230とから構成されるソフトウェア群1210と、融合機起動部1240とを備えている。
【0098】
融合機起動部1240は、融合機1200の電源投入時に先ず始めに実行され、プラットフォーム1220やアプリケーション1230を起動する。
【0099】
プラットフォーム1220は、アプリケーション1230からの処理要求を解釈して、ハードウェア資源の獲得要求を発生させる下記に示すコントロールサービス1250と、一または複数のハードウェア資源の管理をおこない、コントロールサービス1250からの獲得要求を調停するシステムリソースマネージャー(SRM(System Resource Manager)1223)と、OS(Operating System)1221とを有する。
【0100】
このコントロールサービス1250は、複数のサービスモジュールにより形成され、具体的には、SCS(System Control Service)1222と、ECS((Engine Control Service)1224と、MCS(Memory Control Service)1225と、OCS(Operation panel Control Service)1226と、FCS(FAX Control Service)1227と、NCS(Network Control Service)1228と、IMH(Imaging Memory Handler)1229とがある。なお、このプラットフォーム1220は、あらかじめ定義された関数により前記アプリケーションからの処理要求を受信可能とするアプリケーションプログラムインターフェースを有する。
【0101】
OS1221は、UNIX(登録商標)などのオペレーティング・システムであり、プラットフォーム1220並びにアプリケーション1230の各ソフトウェアをそれぞれプロセスとして並列実行する。オープンソースのUNIX(登録商標)を用いることにより、プログラムの安全性を確保できるとともに、ネットワーク対応可能となり、ソースコードの入手も容易となる。さらに、OS、TCP/IPのロイヤリティが不要であり、アウトソーシングも容易となる。
【0102】
SRM1223は、SCS1222とともにシステムの制御およびリソースの管理をおこなうものであり、スキャナやプロッタなどのエンジン部、メモリ、HDDファイル、ホストI/O(セントロI/F、ネットワークI/F、IEEE1394I/F、RS232CI/Fなど)のハードウェア資源を利用する上位層からの要求にしたがって調停をおこない、実行制御する。
【0103】
具体的には、このSRM1223は、要求されたハードウェア資源が利用可能であるかどうか(他の要求により利用されていないかどうか)を判断し、利用可能であれば要求されたハードウェア資源が利用可能である旨を上位層に伝える。また、上位層からの要求に対してハードウェア資源の利用スケジューリングをおこない、要求内容(たとえば、プリンタエンジンによる紙搬送と作像動作、メモリ確保、ファイル生成など)を直接実施するようにしてもよい。
【0104】
SCS1222は、アプリ管理(機能1)、操作部制御(機能2)、システム画面表示(ジョブリスト画面、カウンタ表示画面など)(機能3)、LED表示(機能4)、リソース管理(機能5)、割り込みアプリ制御(機能6)等の複数の機能を行う。具体的には、アプリ管理(機能1)では、アプリの登録と、その情報を他のアプリに通知する処理をおこなう。操作部制御(機能2)では、アプリの操作部使用権の排他制御をおこなう。システム画面表示(機能3)では、操作部使用権を持つアプリからの要求内容に応じて、エンジン部の状態に対応する警告画面の表示をおこなう。LED表示(機能4)では、警告LED、アプリキーなどのシステムLEDの表示制御をおこなう。リソース管理(機能5)では、アプリがECSを使ってジョブを実行するにあたって、排他しなければならないエンジンリソース(スキャナ、ステープルなど)の排他制御のためのサービスをおこなう。割り込みアプリ制御(機能6)では、特定のアプリを優先動作させるための制御及びサービスをおこなう。
【0105】
ECS1224は、プロッタ1201、スキャナ1202、その他ハードウェアリソース1203などのエンジン部を制御するものであり、画像読み込みと印刷動作、状態通知、ジャムリカバリなどをおこなう。
【0106】
MCS1225は、メモリ制御をおこなうものであり、具体的には、画像メモリの取得および解放、ハードディスク装置(HDD)の利用、画像データの圧縮および伸張などをおこなう。
【0107】
OCS1226は、オペレータと本体制御間の情報伝達手段となる操作パネルを制御するモジュールであり、オペレータのキー操作イベントを本体制御に通知する処理、各アプリがGUIを構築するためのライブラリ関数を提供する処理、構築されたGUI情報をアプリ別に管理する処理、操作パネル上への表示反映処理などをおこなう。
【0108】
FCS1227は、システムコントローラの各アプリ層からPSTN/ISDN網を使ったファクシミリ送受信、BKM(バックアップSRAM)で管理されている各種ファクシミリデータの登録/引用、ファクシミリ読み取り、ファクシミリ受信印刷、融合送受信をおこなうためのAPI(Application Program Interface)を提供する。
【0109】
NCS1228は、ネットワークI/Oを必要とするアプリケーションに対して共通に利用できるサービスを提供するためのモジュール群であり、ネットワーク側から各プロトコルによって受信したデータを各アプリケーションに振り分けたり、アプリケーションからデータをネットワーク側に送信する際の仲介をおこなう。
【0110】
本実施例において、NCS1228は、複数のプロトコルのうちhttp(Hypertext Transfer Protocol)デーモンによって、インターネットを介して接続されるネットワーク機器とのデータ通信をHTTP(Hypertext Transfer Protocol)で制御し、HTTPリクエストヘッダで指定される処理に必要な複数のWebサービスを関数コールによって起動し、その複数のWebサービスによる処理結果をHTTPレスポンスで該ネットワーク機器へ通知する。Webサービスは、例えば、XMLによって記述されたメッセージに従って処理を行う。
【0111】
IMH1229は、イメージデータを仮想メモリ領域(ユーザー仮想空間)から物理メモリへマップする。プロセスの起動に応じて、システムコールを行ない、プロセス用の仮想メモリ領域をマップしたり、マップした仮想メモリ領域をプロセスの終了時に解放する処理等を行う。
【0112】
アプリケーション1230は、ページ記述言語(PDL)、PCLおよびポストスクリプト(PS)を有するプリンタ用のアプリケーションであるプリンタアプリ1211と、コピー用アプリケーションであるコピーアプリ1212と、ファクシミリ用アプリケーションであるファックスアプリ1213と、スキャナ用アプリケーションであるスキャナアプリ1214と、ネットファイル用アプリケーションであるネットファイルアプリ1215と、工程検査用アプリケーションである工程検査アプリ1216と、配信用アプリケーションである配信アプリ1217と、実行した処理結果をWebサービスとして提供するWebサービスアプリ1218とを有する。各アプリケーション1211〜1218は、プラットフォーム1220上の各プロセスを利用して動作実行し得るため、画面制御、キー操作制御およびジョブ生成などをおこなう画面表示制御プログラムがその主体となる。なお、NCS1228により接続されたネットワークを介して新たなアプリケーションをネットワーク経由で搭載することもできる。また、各アプリケーションはアプリケーションごとに追加または削除することができる。
【0113】
ここで、Webサービスアプリ1218とは、NCS1228によって通知されるHTTPリクエスト対応する処理を実行するアプリケーションであって、その処理結果は、HTTPレスポンスとしてNCS1228によってHTTPリクエストを行ったネットワーク機器へ提供される。
【0114】
このように、融合機1200は、各アプリで共通的に必要となる処理をプラットフォーム1220で一元的に処理する。
【0115】
次に、融合機1200のハードウェア構成について説明する。図21は、図20に示す融合機のハードウェア構成を示すブロック図である。図21に示すように、この融合機1200は、オペレーションパネル1310と、FCU(ファックスコントロールユニット)1320と、プロッタ1201、スキャナ1202及びその他ハードウェアで構成されるエンジン部1350と、コントローラ1300のASIC1301とをPCI(Peripheral Component Interconnect)バス等で接続した構成となる。FCU1320は、受信したファックスデータを格納するための不揮発性メモリ1321と、FCU1320内での時間を計測するためのRTC(Real Time Clock)1322とを有し、通常G3規格に従ってファックスデータの送受信を行う。FCU1320は、オプションとして更にG3規格とG4規格とを搭載しても良い。
【0116】
コントローラ1300は、ASIC1301にMEM−C1302、HDD(Hard Disk Drive)1303などを接続するとともに、このASIC1301とCPU1304とをCPUチップセットのNB1305を介して接続している。このように、NB1305を介して接続する理由は、CPU1304自体のインターフェイスが公開されていないためである。
【0117】
ここで、このASIC1301とNB1305は、単にPCIを介して接続されているのではなく、AGP1308を介して接続されている。このようにAGP1308を介して接続することとした理由は、この融合機1200がプラットフォーム1220やアプリケーション1230を形成する複数のプロセスを実行制御する関係上、これらを低速のPCIで接続したのでは、パフォーマンスが低下するからである。
【0118】
CPU1304は、融合機1200の全体制御をおこなうものであり、具体的には、OS1221上でプラットフォーム1220を形成するSCS1222、SRM1223、ECS1224、MCS1225、OCS1226、FCS1227、NCS1228をそれぞれプロセスとして起動して実行させるとともに、アプリケーション1230を形成するプリンタアプリ1211、コピーアプリ1212、ファックスアプリ1213、スキャナアプリ1214、ネットファイルアプリ1215、工程検査アプリ1216、配信アプリ1217、Webサービスアプリ1218を起動して実行させる。
【0119】
NB1305は、CPU1304とMEM−P1306、SB1307、ASIC1301とを接続するためのブリッジであり、MEM−P1306は、融合機の描画用メモリなどとして用いるシステムメモリであり、MEM−C1302は、コピー用画像バッファ、符号バッファとして用いるローカルメモリであり、ASIC1301は、画像処理用のハードウェア要素を有する画像処理用途向けのICである。
【0120】
NB1305は、PCIバスを介してSB1307と接続する他、ネットワーク通信を制御するNIC(Network Interface Card)1311と、パーソナルコンピュータと接続し大容量の画像データの送受信を可能とするUSB(Universal Serial Bus)1312及びIEEE13941313と、パラレルケーブルによって接続可能なセントロニクス1314と接続する。SB1307は、NB1305とROM、PCIデバイス、周辺デバイスとを接続するためのブリッジである。SB1307は、コントローラ1300での時間を計測するRTC(Real Time Clock)1323を有する。
【0121】
HDD1310は、画像データの蓄積、プログラムの蓄積、フォントデータの蓄積、フォームの蓄積を行うためのストレージであり、オペレーションパネル1310は、操作者からの入力操作の受け付け並びに操作者に向けた表示をおこなう操作部である。
【0122】
したがって、ASIC1301には、MEM−C1302を接続するためのRAMインターフェイスと、HDD1310を接続するためのハードディスクインターフェースが設けられ、これらの記憶部に対して画像データの入出力をおこなう場合には、入出力先がRAMインターフェイスまたはハードディスクインターフェースに切り替えられる。
【0123】
AGP1308は、グラフィック処理を高速化するために提案されたグラフィックスアクセラレーターカード用のバスインターフェイスであり、システムメモリに高スループットで直接アクセスすることにより、グラフィックスアクセラレーターカードを高速にする。
【0124】
次に、上記構成を有する融合機1200において、XML(Extensible Markup Language)によるSOAP(Simple Object Access Protocol)に従ったWebサービスを提供可能とする構成について詳述する。Webサービスファンクションは、例えば、C言語などのプログラム言語で記述されたソフトウェア(アプリケーション)である。SOAPに従って記述されるXMLによる処理内容をメッセージとしてWebサービスファンクションが理解できるように、構文の異なるXMLとプログラム言語との間をハンドリングする処理部(ハンドラ)が必要となる。以下に、印刷する印刷Webサービス、文書リストを取得する文書リスト取得Webサービス、文書情報を取得する文書情報取得Webサービスを例として、図22で説明する。
【0125】
図22は、Webサービスを実現するための構成例を示す図である。図22において、印刷Webサービス、文書リスト取得Webサービス、文書情報取得Webサービスが、Webサービスアプリ1218にて提供される場合を示す。これらWebサービスは、アプリケーション1230の別の機能としてWebサービスアプリ1218から独立した構成としても良い。図22中、図20に示す融合機1200の機能構成のうち主要な機能構成のみが図示され、他の機能構成は省略される。
【0126】
図22において、Webサービスを実現するために、コントロールサービス1250とWebサービスアプリ1218との間に、接続される機器との間のデータの送受信制御する中間層が構成される。
【0127】
コントロールサービス1250は、Webサービスアプリ1218によるWebサービスを実現する構成部分として、ECS1224と、MCS1225と、NCS1228とを有する。NCS1228は、HTTPを制御するHTTPデーモン2と、HTTPデーモン2とWebサービスアプリ1218との接続処理の仲介をする要求仲介デーモン7とを有する。
【0128】
また、中間層1255は、接続される機器との間のデータの送受信制御を吸収する構成部分として、シーケンス制御ライブラリ100と、XMLライブラリ110と、SOAPライブラリ120と、ジョブ管理部310と、ファイル管理部311とを有する。シーケンス制御ライブラリ100は、更に、HTTP接続管理部101と、HTTPサービス実行部102と、POSTメソッド分配処理部105とを有する。XMLライブラリ110は、XML処理部115と、XMLプロセッサ116と、XMLシリアライザ117とを有する。SOAPライブラリ120は、SOAPアクション振分処理部121を有する。
【0129】
更に、Webサービスアプリ1218は、Webサービスを実現するための構成部分として、要素木解析・生成ハンドラ200と、Webサービスファンクション(WSF)300とを有する。要素木解析・生成ハンドラ200は、機器間におけるSOAPに従ったメッセージのデータ形式による構文を解析し、Webサービスファンクション300にて処理可能なデータ形式に変換する処理部であって、複数の要素木解析・生成ハンドラを有し、例えば、印刷ハンドラ201と、文書リスト取得ハンドラ202と、文書情報取得ハンドラ203とを有する。ここで、印刷ハンドラ201、文書リスト取得ハンドラ202、文書情報取得ハンドラ203の夫々は、図1に示すハンドラ自動生成部510によって自動生成されたソースコード531のハンドラソースコード532及びタイプライブラリ533に基づくハンドラ処理部である。
【0130】
Webサービスファンクション300は、複数のWebサービスファンクションを有し、例えば、印刷機能301と、文書リスト取得機能302と、文書情報取得機能303とを有する。この場合、印刷ハンドラ201は、印刷機能301に対する処理の内容を示すSOAPに従ったメッセージのデータ形式を構文解析し、印刷機能301が処理可能なデータ形式に変換して印刷機能301に処理を要求する。また、印刷ハンドラ201は、印刷機能301からの応答をSOAPに従ったデータ形式にてメッセージとして生成する。文書リスト取得ハンドラ202及び文書情報取得ハンドラ203は、夫々、文書リスト取得機能302及び文書情報取得機能303に対して同様の処理を行う。
【0131】
印刷機能301は、入力パラメータとしてファイルIDと部数を受け取り、ジョブ管理部ファイルIDと部数を指定して印刷要求をジョブ管理部310に発行する。ジョブ管理部310から受け取ったリクエストIDを出力パラメータとして返す。文書リスト取得機能302は、ファイル管理部311にファイルリストを要求し、ファイル管理部311から受け取ったIDのリストを出力パラメータとして返す。文書情報取得機能303は、入力パラメータとしてファイルIDを受け取り、ファイル管理部311にファイルIDを指定してファイル情報を要求する。ファイル管理部311から受け取ったファイル情報を出力パラメータとして返す。
【0132】
ジョブ管理部310は、ジョブのキュー及び実行結果を管理する。また、ECS1224及びMCS1125と通信して蓄積文書の印刷処理を実行する。ファイル管理部311は、MCS1225と通信してファイル情報を取得する。
【0133】
以下、HTTPリクエストを受信してからHTTPレスポンスを送信するまでの処理について図23及び図24を参照しつつ説明する。図23及び図24は、SOAPによるWebサービスの提供処理について説明するフローチャート図である。
【0134】
NCS1228のHTTPデーモン2がネットワーク15からの接続要求を受信する(ステップS1100)。その接続要求は要求仲介デーモン7を介してWebサービスアプリ1218のHTTP接続管理部101に通知される。その後、HTTP接続管理部101は、その接続要求をHTTPに従ってサービスを提供するHTTPサービス実行部102に通知する。通知を受けたHTTPサービス実行部102は、HTTPデーモン2に接続を行い、HTTPリクエストを取得する。このような制御をNCS1228で行うことにより、必要時のみHTTPによる通信制御をすることができる。よって、常時HTTP通信制御をする場合に比べて、通信制御に必要な資源を効果的に利用することができる。
【0135】
HTTPサービス実行部102は、ネットワーク15を介して受信したHTTPリクエストからデータ送信方法を示すHTTPメソッドを解析して、GETメソッドであるか否かをチェックする(ステップS1101)。GETメソッドである場合、GETメソッドによるWebサービスの提供を実行する(ステップS1102)。つまり、SOAPによるWebサービス以外のWebサービスの提供を行う。
【0136】
一方、GETメソッドでない場合、POSTメソッドであるか否かをチェックする(ステップS1103)。POSTメソッドでない場合、ステップS1107へ進み、エラー処理を行い、SOAPによるWebサービスの提供処理を終了する。POSTメソッドである場合、POSTメソッド分配処理部105をコールする。POSTメソッド分配処理部105は、HTTPリクエストヘッダ情報を解析し、HTTPボディの記述形式がXMLであることを確認する(ステップS1104)。つまり、HTTPレスポンスヘッダのContent-Typeがtext/xmlを指定しているか否かを判断する。XMLでない場合、ステップS1107へ進み、エラー処理を行う。一方、XMLである場合、XMLコンテンツハンドラ111をコールする。
【0137】
XML処理部115は、POSTメソッドハンドラとして、XMLプロセッサ116によって、HTTPボディのXMLの構文を解析し、XMLで記述されるタグ間の関連を木構造で示すリクエストの要素木を作成する(ステップS1105)。構文解析結果がエラーか否かを判断する(ステップS1106)。構文解析結果がエラーの場合、ステップS1107へ進み、エラー処理を行う。一方、構文解析結果が正常の場合、図24のステップS1109へ進む。
【0138】
SOAPアクション振分処理部121は、HTTPリクエストのSOAPActionヘッダを解析して、URI(Uniform Resource Indicator)により異なる要素木解析・生成ハンドラ200にHTTPリクエストを振り分ける(ステップS1109)。この場合、印刷Webサービスを指定するURIに対して印刷ハンドラ201、文書リスト取得Webサービスを指定するURIに対して文書リスト取得ハンドラ202、及び、文書情報取得Webサービスを指定するURIに対して文書情報取得ハンドラ203に、HTTPリクエスト及び要素木とが振り分けられる。
【0139】
各要素木解析・生成ハンドラ200は、リクエストの要素木を解析してC言語の構造体データに変換する(ステップS1110)。その後、変換した構造体データを引数として、HTTPリクエストで指定されるURIに対応するWebサービスファンクション300をコールする(ステップS1111)。この場合、印刷ハンドラ201は印刷機能301、文書リスト取得ハンドラ202は文書リスト取得機能302、文書情報取得ハンドラ203は文書情報取得機能303をコールする。
【0140】
Webサービスファンクション300は、所定のWebサービスのロジックを実行して、構造体データとして結果を返す(ステップS1112)。この場合、印刷機能301、文書リスト取得機能302、文書情報取得機能303は、各Webサービスのロジックを実行して、その結果を返す。返される結果は、プログラム言語で処理可能なデータ形式(例えば、C言語の構造体)である。
【0141】
各要素木解析・生成ハンドラ200は、受け取った結果の構造体データからレスポンスの要素木を生成する(ステップS1113)。各要素木解析・生成ハンドラ200によって生成された要素木は、例えば、XMLのタグ間の関係をタグからタグへのポインタによるリンクによって、そのデータ構造を示す。以後、SOAPアクション振分処理部121を介して、XMLシリアライザ117によって、レスポンスの要素木からXMLに変換される。XMLシリアライザ117は、要素木をテキストで示すXMLに変換する。変換されたXMLは、SOAPに従ったHTTPボディに構成され、所定のHTTPヘッダが付加された後、HTTPレスポンスとして送信される(ステップS1114)。
【0142】
上述より、要素木解析・生成ハンドラ200が要素木をC言語の構造体に応じたデータ変換を行う。また、C言語の構造体データから要素木への変換を行う。開発者は、SOAP及びXMLの知識が無くても、Webサービスをプログラム言語で開発することができる。
【0143】
Webサービスファンクション300を起動時の初期化処理では、モジュール間の(直線で示される)接続が行われ、図22に示すように構成される。初期化処理では、POSTメソッド分配処理部105がPOSTメソッドハンドラとしてシーケンス制御ライブラリ100に接続することで開始され、XML処理部115のPOSTメソッド分配処理部105への登録、SOAPアクション振分処理部121のXML処理部115への登録、要素木解析・生成ハンドラ200のSOAPアクション振分処理部121への登録が行われる。
【0144】
次に、要素木解析・生成ハンドラ200の印刷ハンドラ201を例にして、印刷ハンドラ201における要素木の解析処理について図25、図26及び図27で説明する。図25は、XMLを使用したSOAPに従ったHTTPリクエストの記述例を示す図である。図26は、XMLプロセッサによって変換された要素木の例を示す図である。図27は、印刷ハンドラによる要素木解析処理を説明するためのフローチャート図である。
【0145】
印刷Webサービスを依頼する図25に示すようなHTTPリクエストの場合、XMLプロセッサ112は、<SOAP-ENV:Envelope>で始まるHTTPボディ20を要素木に変換する。タグ名21「Envelope」をルート要素とし、ルート要素の子ノードとしてタグ名22「Header」及びタグ名23「Body」を関連づける。更に、タグ名23「Body」の子ノードをタグ名24「print」とし、更に、タグ名24「print」の子ノードとしてタグ名25「fileId」及びタグ名26「count」とを関連付ける。そして、タグ名25「fileId」及びタグ名26「count」に、夫々、テキストデータ27「123」及びテキストデータ28「2」を関連付ける。このようにして関連付けられた要素木構造は、例えば、図26に示されるようなデータ構造となる。図26において、タグ名21から26及びテキストデータ27から28を楕円で示し、関連付けが矢印で示される。
【0146】
図26に示すようなデータ構造となった要素木は、印刷ハンドラ201によって、図27に示されるフローチャートに従って、印刷機能301が処理可能なプログラム言語による構造体データが生成される。図27でのステップ番号は、図19でのステップ番号に対応する。図27において、印刷ハンドラ201は、ルート要素を取得する(ステップS120)。この場合、ルート要素は、Envelope要素となる。子ノードリストを取得する(ステップS121)。つまり、タグ名22「Header」及び23「Body」を取得する。子ノードリストからタグ名がBodyの要素を検索して取得する(ステップS122)。Body要素の最初の子ノードを取得する(ステップS123)。この場合、print要素を取得する。print要素の子ノードリストを取得する(ステップS124)。取得した子ノードリストからタグ名を順に取得する(ステップS125)。
【0147】
タグ名がfileIDであるか否かを判断する(ステップS126)。タグ名がfileIDでない場合、ステップS129へ進む。一方、タグ名がfileIDである場合、タグ名がfileIDの最初の子ノードを取得する(ステップS127)。つまり、テキストノードを取得する。取得したテキストノードを抽出して整数に変換する(ステップS128)。つまり、ファイルIDパラメータとして、値「123」が所定の構造体に設定される。更に、タグ名がcountであるか否かを判断する(ステップS129)。タグ名がcountでない場合、ステップS132へ進む。一方、タグ名がcountである場合、タグ名がcountの最初の子ノードを取得する(ステップS130)。つまり、テキストノードを取得する。取得したテキストノードを抽出して整数に変換する(ステップS131)。つまり、部数パラメータとして、値「2」が所定の構造体に設定される。
【0148】
印刷ハンドラ201は、ステップS125で取得した子ノードリストから次の子ノードがあるか否かを判断する(ステップS132)。次の子ノードがある場合、ステップS125に戻り、次の子ノードを取得し、上記同様の処理を行う。次の子ノードがない場合、要素木の解析処理を終了する。
【0149】
このようにして解析された要素木は、印刷ハンドラ201によって図28に示されるようなプログラム言語による構造体29(「struct Netdoc_printInput」)のパラメータに値が設定される。パラメータ「unsigned int fileId」には、ステップS128によって、値「123」が設定される。また、パラメータ「unsigned int count」には、ステップS131によって、値「2」が設定される。
【0150】
Webサービスファンクション300の印刷機能301は、ハンドラ自動生成部510によってWebサービス機能の関数として宣言された「netdoc_print」関数であるため(図16参照)、「struct Netdoc_printInput *in」のようにして、ハンドラ自動生成部510によって入力メッセージの構造体として定義された構造体29の構造体名「struct Netdoc_printInput」とその構造体29へのポインタ「in」が引数30に設定される。印刷機能301(「netdoc_print」関数)をコールすると、印刷機能301での処理結果が、例えば、構造体名「struct Netdoc_printOutput」へのポインタ「out」を示す「struct Netdoc_printOutput *out」のような引数31で戻る。
【0151】
図29は、印刷ハンドラでの処理結果の設定例を示す図である。図29において、印刷ハンドラ201は、引数31のポインタ「out」によって、処理結果を設定すべき構造体39を取得する。構造体39は、ハンドラ自動生成部510によって出力メッセージの構造体として定義された構造体である(図18参照)。例えば、構造体39において、処理結果として、パラメータ「unsigned int requestId」に値「100」を設定する。
【0152】
次に、処理結果を示す構造体39から要素木を生成する要素木の生成処理について図30及び図31で説明する。図30でのステップ番号は、図19でのステップ番号に対応する。図30は、印刷ハンドラによる要素木生成処理を説明するためのフローチャート図である。図31は、生成された要素木の例を示す図である。
【0153】
図31を参照しつつ、印刷ハンドラによる要素木生成処理を説明する。図30において、印刷ハンドラ201は、Envelope要素32を生成する(ステップS140)。Body要素33を生成する(ステップS141)。そして、Body要素33をEnvelope要素32に接続する(ステップS142)。これらステップS140からS142での処理によって、SOAPに従ったHTTPレスポンスのHTTPボディが設定される。
【0154】
そして、印刷ハンドラ201は、printResponse要素34を生成し(ステップS143)、printResponse要素34をBody要素33に接続する(ステップS144)。更に、requestId要素35を生成し(ステップS145)、requestId要素35をprintResponse要素34に接続する(ステップS146)。
【0155】
印刷ハンドラ201は、結果として得られたリクエストIDより、テキストノード36を生成して(ステップS147)、テキストノードをrequestId要素35に接続する(ステップS148)。この場合、テキストノード36には、「100」が設定される。
【0156】
このように生成された要素木は、XML処理部115及びXMLシリアライザ112によって、図32に示されるようなHTTPボディ32を生成する。図32は、要素木から変換されたXMLを使用したSOAPに従ったHTTPレスポンスの記述例を示す図である。図32において、図31に示す各要素32から36は、< >で区切られるタグ内に記述され、所定の情報をSOAPに従った手順でXMLにて記述される。融合機1200は、HTTPデーモン2によってHTTPリクエストを送信した機器へネットワーク15を介してこのHTTPレスポンスを送信する。このようにして、融合機1200は、ネットワーク15を介して接続される機器へWebサービスを提供する。
【0157】
上記実施例より、XMLによる要素間の関連を示す要素木からWebサービス機能が処理可能なプログラム言語による入力データに変換、及び、プログラム言語による出力データを所定記述形式の要素木に変換するソースコード531が自動生成される。従って、単純で同じようなコードを大量に生成することができるため、開発者による単純ミスによるバグが入り込むといった問題を解消することができる。また、短時間でハンドラソースコード532を生成することができるため、開発者の負担を軽減することができる。
【0158】
また、自動生成されたソースコード531による要素木解析・生成ハンドラ200を融合機1200に備えることによって、開発者は、従来と同様の開発方法、例えば、C言語による開発方法によって、Webサービスファンクションとしてのアプリケーションの開発を行うことができる。また、既に実装されているアプリケーションを容易にWebサービスに対応するに改良することができる。
【0159】
また、要素木解析・生成ハンドラ200を有する融合機1200では、SOAPに従うXML記述されたメッセージをプログラム開発されたWebサービスファンクション300が解釈することができるため、Webサービスファンクション300を他システムに提供することが可能となる。よって、融合機1200に接続されるシステム又はコンピュータ端末を限定しないため、融合機1200の利用可能性を大幅に拡大することが可能となる。
【0160】
【発明の効果】
以上、説明してきたように、本願発明によれば、機器間におけるメッセージ交換プロトコルに従ったメッセージのデータ形式の変換を行うためのプログラムが自動的に生成される。従って、開発者による単純ミスによるバグが入り込むといった問題を解消することができる。また、このように自動生成されたプログラムを画像形成装置に実装することによって、従来と同様の方法によって開発されたWebサービスファンクションであっても、該メッセージの処理が可能となる。そのため、画像形成装置におけるWebサービスファンクションの開発を容易に行うことができる。また、画像形成装置に接続可能な他システムとの連携を拡大することができる。
【0161】
【図面の簡単な説明】
【図1】本発明の一実施例に係るハンドラ自動生成装置の機能構成を示すブロック図である。
【図2】本発明の一実施例に係るハンドラ自動生成装置のハードウェア構成を示すブロック図である。
【図3】ハンドラ自動生成処理の全体を説明するフローチャート図である。
【図4】タイプライブラリ生成処理を説明するフローチャート図である。
【図5】ソースコード生成処理における列挙型定義生成処理を説明する図である。
【図6】ソースコード生成処理における構造体の型定義生成処理を説明する図である。
【図7】ソースコード生成処理における配列の型定義生成処理を説明する図である。
【図8】ソースコード生成処理における列挙型の関数宣言処理を説明する図である。
【図9】ソースコード生成処理における構造体の関数宣言処理を説明する図である。
【図10】ソースコード生成処理における配列の関数宣言処理を説明する図である。
【図11】ハンドラ生成処理を説明するフローチャート図である。
【図12】ハンドラ生成処理を説明するフローチャート図である。
【図13】WSDLによるインターフェイス定義の記述例を示す図である。
【図14】WSDLによるインターフェイス定義の記述例を示す図である。
【図15】ハンドラ処理部の関数宣言を説明する図である。
【図16】Webサービス機能の関数宣言を説明する図である。
【図17】入力メッセージの構造体定義を説明する図である。
【図18】出力メッセージの構造体定義を説明する図である。
【図19】自動生成されたハンドラソースコードの例を示す図である。
【図20】本発明の一実施例に係る多種の画像形成機能を融合する融合機の機能構成を示すブロック図である。
【図21】図20に示す融合機のハードウェア構成を示すブロック図である。
【図22】Webサービスを実現するための構成例を示す図である。
【図23】SOAPによるWebサービスの提供処理について説明するフローチャート図である。
【図24】SOAPによるWebサービスの提供処理について説明するフローチャート図である。
【図25】XMLを使用したSOAPに従ったHTTPリクエストの記述例を示す図である。
【図26】XMLプロセッサによって変換された要素木の例を示す図である。
【図27】印刷ハンドラによる要素木解析処理を説明するためのフローチャート図である。
【図28】Webサービス機能の関数の引数の設定例を示す図である。
【図29】印刷ハンドラでの処理結果の設定例を示す図である。
【図30】印刷ハンドラによる要素木生成処理を説明するためのフローチャート図である。
【図31】生成された要素木の例を示す図である。
【図32】要素木から変換されたXMLを使用したSOAPに従ったHTTPレスポンスの記述例を示す図である。
【符号の説明】
2 httpデーモン、 7 要求仲介デーモン、 8 NAI
9 プロトコル制御デーモン、 15 ネットワーク
100 シーケンス制御ライブラリ、 101 HTTP接続管理部
102 HTTPサービス実行部、 105 POSTメソッド分配処理部
110 XMLライブラリ、 115 XML処理部
116 XMLプロセッサ、 117 XMLシリアライザ
120 SOAPライブラリ、 121 SOAPアクション振分処理部
200 要素木解析・生成ハンドラ
300 Webサービスファンクション、 500 ハンドラ自動生成装置
510 ハンドラ自動生成部、 511 XML解析部
512 タイプライブラリ生成部、 513 ハンドラソースコード生成部
514 XMLスキーマ解析部、 515 タイプ要素解析部、
516 メッセージ要素解析部、 517 操作要素解析部
520 ファイル入力部、 521 インターフェイス定義512
522 インターフェイス定義ファイル(WSDL)
523 型定義ファイル(XMLスキーマ)、 530 ファイル出力
531 ソースコード、 532 ハンドラソースコード
533 タイプライブラリ、 1200 融合機、 1201 プロッタ
1202 スキャナ、 1203 その他ハードウェアリソース、
1210 ソフトウェア群、 1230 アプリケーション
1220 プラットフォーム、 1221 OS、 1222 SCS
1223 SRM、 1224 ECS、 1225 MCS
1226 OCS、 1227 FCS、 1228 NCS
1229 IMH、 1240 融合機起動部、 1300 コントローラ
1301 ASIC、 1302 MEM−C、 1303 HDD
1304 CPU、 1305 NB、 1306 MEM−P
1307 SB、 1308 AGP、 1310 オペレーションパネル
1320 ファックスコントロールユニット
1311 NIC、 1312 USB、 1313 IEEE1394
1314 セントロニクス、 1350 エンジン部
Claims (8)
- コンピュータに、
Webサービスのインターフェイスを定義するインターフェイス定義を構成する複数の要素間の関連を示す第一要素木に基づいて、上記Webサービスを実行するWebサービス機能を関数コールするためのC言語プログラムによる入出力データ形式とXMLによって記述される該Webサービスに関する要求及び応答メッセージとの変換処理を行う変換プログラムを生成する変換プログラム生成手順を実行させるコンピュータ読み取り可能なプログラムであって、
上記変換プログラム生成手順は、
上記Webサービス機能のC言語プログラムによる入出力データ形式と上記要求及び応答メッセージに含まれる値のデータ型との変換を行う第一コードを生成する第一コード生成手順と、
上記要求メッセージを構成する複数の要素間の関連を示す第二要素木の末端に設定される値を、上記Webサービス機能のC言語プログラムによる入力データ形式に変換する第二コードを生成する第二コード生成手順と、
上記Webサービス機能のC言語プログラムによる出力データ形式を上記応答メッセージを構成する複数の要素間の関連を示す第三要素木の末端の値に変換する第三コードを生成する第三コード生成手順とを有することを特徴とするコンピュータ読み取り可能なプログラム。 - 上記第一要素木に基づいて、上記インターフェイス定義にて指定されるサービス名と操作名とによって上記変換プログラム生成手順によって生成された上記変換プログラムを実行する第一関数の関数名を生成し、その関数名によって該第一関数を宣言する第一関数宣言手順と、
上記第一要素木に基づいて、上記インターフェイス定義にて指定されるサービス名と操作名とによって上記Webサービス機能を実行する第二関数の関数名を生成し、該インターフェイス定義にて指定される該サービス名と入力メッセージ名及び出力メッセージとによって引数の型と引数名とを決定し、その関数名と引数名とによって該第二関数を宣言する第二関数宣言手順とを有することを特徴とする請求項1記載のプログラム。 - 上記第一要素木に基づいて、上記インターフェイス定義にて指定される上記サービス名と上記入力メッセージ名とによって入力データの構造体名を生成し、該インターフェイス定義にて指定されるパラメータ型と、パラメータ名とによって上記Webサービス機能によって処理可能な入力データ構造体を構成して定義する第一構造体定義手順と、
上記第一要素木に基づいて、上記インターフェイス定義にて指定される上記サービス名と上記出力メッセージ名とによって出力データの構造体名を生成し、該インターフェイス定義にて指定されるパラメータ型と、パラメータ名とによって上記Webサービス機能によって処理可能な出力データ構造体を構成して定義する第二構造体定義手順とを有することを特徴とする請求項2記載のプログラム。 - 上記第一要素木におけるデータ型の定義に基づいて、上記Webサービス機能によって処理可能な型定義を生成する型定義生成手順と、
上記第二要素木における入力データが格納される要素を上記Webサービス機能によって処理可能な定義された型に変換するデータ型変換関数の宣言を生成するデータ型関数宣言生成手順とを有することを特徴とする請求項1記載のプログラム。 - 上記型定義に基づいて、上記Webサービス機能による上記出力データのデータ型を上記第三要素木における出力データが格納される要素に変換するデータ型変換関数の宣言を生成するデータ型関数宣言生成手順とを有することを特徴とする請求項4記載のプログラム。
- 上記第一要素木は、Extensible Markup Languageによって記述された上記インターフェイス定義を解析して生成されていることを特徴とする請求項1乃至5のいずれか一項記載のプログラム。
- コンピュータが、
Webサービスのインターフェイスを定義するインターフェイス定義を構成する複数の要素間の関連を示す第一要素木に基づいて、上記Webサービスを実行するWebサービス機能を関数コールするためのC言語プログラムによる入出力データ形式とXMLによって記述される該Webサービスに関する要求及び応答メッセージとの変換処理を行う変換プログラムを生成する変換プログラム生成手順を実行するプログラム生成方法であって、
上記変換プログラム生成手順は、
上記Webサービス機能のC言語プログラムによる入出力データ形式と上記要求及び応答メッセージに含まれる値のデータ型との変換を行う第一コードを生成する第一コード生成手順と、
上記要求メッセージを構成する複数の要素間の関連を示す第二要素木の末端に設定される値を、上記Webサービス機能のC言語プログラムによる入力データ形式に変換する第二コードを生成する第二コード生成手順と、
上記Webサービス機能のC言語プログラムによる出力データ形式を上記応答メッセージを構成する複数の要素間の関連を示す第三要素木の末端の値に変換する第三コードを生成する第三コード生成手順とを有することを特徴とするプログラム生成方法。 - コンピュータに、
Webサービスのインターフェイスを定義するインターフェイス定義を構成する複数の要素間の関連を示す第一要素木に基づいて、上記Webサービスを実行するWebサービス機能を関数コールするためのC言語プログラムによる入出力データ形式とXMLによって記述される該Webサービスに関する要求及び応答メッセージとの変換処理を行う変換プログラムを生成する変換プログラム生成手順を実行させるコンピュータ読み取り可能なプログラムが記憶された記憶媒体であって、
上記変換プログラム生成手順は、
上記Webサービス機能のC言語プログラムによる入出力データ形式と上記要求及び応答メッセージに含まれる値のデータ型との変換を行う第一コードを生成する第一コード生成手順と、
上記要求メッセージを構成する複数の要素間の関連を示す第二要素木の末端に設定される値を、上記Webサービス機能のC言語プログラムによる入力データ形式に変換する第二コードを生成する第二コード生成手順と、
上記Webサービス機能のC言語プログラムによる出力データ形式を上記応答メッセージを構成する複数の要素間の関連を示す第三要素木の末端の値に変換する第三コードを生成する第三コード生成手順とを有することを特徴とするコンピュータ読み取り可能なプログラムが記憶された記憶媒体。
Priority Applications (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003081246A JP3831352B2 (ja) | 2002-03-25 | 2003-03-24 | プログラム生成処理をコンピュータに行わせるためのコンピュータ読み取り可能なプログラム |
PCT/JP2003/003651 WO2003081443A1 (fr) | 2002-03-25 | 2003-03-25 | Dispositif de formation d'images comportant une fonction de service web |
EP03715406.9A EP1489520B1 (en) | 2002-03-25 | 2003-03-25 | Image formation device having a web service function |
US10/490,978 US7743162B2 (en) | 2002-03-25 | 2003-03-25 | Image forming apparatus, with connection request mediation, having web service functions |
CN200610172730.5A CN1980247B (zh) | 2002-03-25 | 2003-03-25 | 具有万维网服务功能的图像形成装置及方法 |
CNB038015641A CN100351818C (zh) | 2002-03-25 | 2003-03-25 | 具有万维网服务功能的图像形成装置 |
US12/771,330 US8549162B2 (en) | 2002-03-25 | 2010-04-30 | Image forming apparatus having web service functions |
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002084552 | 2002-03-25 | ||
JP2002084554 | 2002-03-25 | ||
JP2002084553 | 2002-03-25 | ||
JP2003081246A JP3831352B2 (ja) | 2002-03-25 | 2003-03-24 | プログラム生成処理をコンピュータに行わせるためのコンピュータ読み取り可能なプログラム |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005128242A Division JP2005310171A (ja) | 2002-03-25 | 2005-04-26 | プログラム生成処理をコンピュータに行わせるためのコンピュータ読み取り可能なプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004005505A JP2004005505A (ja) | 2004-01-08 |
JP3831352B2 true JP3831352B2 (ja) | 2006-10-11 |
Family
ID=30449505
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003081246A Expired - Fee Related JP3831352B2 (ja) | 2002-03-25 | 2003-03-24 | プログラム生成処理をコンピュータに行わせるためのコンピュータ読み取り可能なプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3831352B2 (ja) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4522771B2 (ja) | 2003-09-22 | 2010-08-11 | 株式会社リコー | 通信装置、通信システム、通信装置の制御方法及びプログラム |
JP2005339520A (ja) * | 2004-04-26 | 2005-12-08 | Ricoh Co Ltd | サービス提供装置、サービス提供プログラム、記録媒体及びサービス提供方法 |
JP4208786B2 (ja) | 2004-07-28 | 2009-01-14 | キヤノン株式会社 | 画像処理装置、ネットワークシステム、情報処理方法、ならびにプログラム、記憶媒体 |
US7890659B2 (en) * | 2005-12-15 | 2011-02-15 | Microsoft Corporation | Conforming web services to an updated contract |
JP4760425B2 (ja) * | 2006-02-13 | 2011-08-31 | セイコーエプソン株式会社 | プリンタを用いた印刷におけるスタイルシートの切替 |
JP5222642B2 (ja) * | 2008-07-11 | 2013-06-26 | 京セラドキュメントソリューションズ株式会社 | 画像形成装置 |
JP5551141B2 (ja) * | 2011-11-05 | 2014-07-16 | 京セラドキュメントソリューションズ株式会社 | クライアントサイドWebサービスインターフェイス及びこれを備えたソフトウェア開発キット並びにこの開発キットを用いたソフトウェア開発方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002032263A (ja) * | 2000-07-13 | 2002-01-31 | Atl Systems:Kk | 異なる構造のxmlファイルを使用したシステムどうしの接続方法 |
-
2003
- 2003-03-24 JP JP2003081246A patent/JP3831352B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2004005505A (ja) | 2004-01-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8549162B2 (en) | Image forming apparatus having web service functions | |
JP4444752B2 (ja) | サービス提供装置、サービス提供プログラム、記録媒体及びサービス提供方法 | |
US7809750B2 (en) | Data management apparatus that controls a data storage apparatus by transmitting command of structured document format | |
US8230200B2 (en) | Image forming apparatus capable of creating, managing and using job history and control method for the same | |
US20050053402A1 (en) | Printing processing device and method thereof | |
WO2011080994A1 (en) | Server apparatus, terminal apparatus, and printing system and data conversion method thereof | |
US7860954B2 (en) | Device management system and control method therefor | |
US20090063612A1 (en) | Image forming apparatus and image forming system | |
JP2005310171A (ja) | プログラム生成処理をコンピュータに行わせるためのコンピュータ読み取り可能なプログラム | |
JP3831352B2 (ja) | プログラム生成処理をコンピュータに行わせるためのコンピュータ読み取り可能なプログラム | |
JP4291856B2 (ja) | Webサービス機能を有する画像形成装置 | |
JP4141209B2 (ja) | Webサービス機能を有する画像形成装置 | |
JP2005050018A (ja) | 文書ファイル管理装置及びデータ構造 | |
US20050108649A1 (en) | Control apparatus, control instruction apparatus, control program product and control instruction program product for transmitting/receiving data described in extensible markup language | |
JP4373692B2 (ja) | Webサービス機能を有する画像形成装置 | |
JP4130108B2 (ja) | Webサービス機能を有する画像形成装置 | |
JP4203287B2 (ja) | 情報処理装置、情報処理方法及び情報処理システム | |
JP4291855B2 (ja) | Webサービス機能を有する画像形成装置 | |
JP2005050017A (ja) | 文書ファイル管理装置、文書ファイル管理方法及びデータ構造 | |
JP4136738B2 (ja) | Webサービス機能を有する画像形成装置 | |
JP2006020341A (ja) | Webサービス機能を有する画像形成装置 | |
JP2004272888A (ja) | サービス提供装置、ユーザ端末装置、サービス提供方法、サービス利用方法、サービス提供プログラム、サービス利用プログラム及び記録媒体 | |
JP2004274736A (ja) | サービス情報提供装置、ユーザ端末装置、サービス情報提供方法、サービス利用方法、サービス情報提供プログラム、サービス利用プログラム及び記録媒体 | |
JP2004086354A (ja) | 画像処理装置 | |
JP2007128544A (ja) | 電子データ送信装置、電子メール送信方法、及び記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050301 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050426 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20051206 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060203 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20060215 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060711 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060713 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090721 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100721 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110721 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120721 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120721 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130721 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |