(57)【要約】【課題】Ｊａｖａの技術によるアプリケーション開発において、値設定対象クラスおよびそのフィールドの数や型に依存することなくオブジェクトへの値を一括して設定することができオブジェクト値設定方法及びプログラムを提供すること。【解決手段】属性値設定対象オブジェクトの各フィールドに設定する属性値を作成して記憶手段に格納する第１のステップと、ＪａｖａＡＰＩで提供されるリフレクション機能を用いて各オブジェクトに設定されたパブリックなアクセサメソッドを実行し、前記記憶手段に格納された当該オブジェクトの属性値を設定する第２のステップとを備えることを特徴とする。【選択図】        図２
2004252708.tif 000002
【特許請求の範囲】
【請求項１】
Ｊａｖａアプリケーションプログラムにおけるオブジェクト値設定方法であって、属性値設定対象オブジェクトの各フィールドに設定する属性値を作成して記憶手段に格納する第１のステップと、
ＪａｖａＡＰＩで提供されるリフレクション機能を用いて各オブジェクトに設定されたパブリックなアクセサメソッドを実行し、前記記憶手段に格納された当該オブジェクトの属性値を設定する第２のステップとを備えることを特徴とするオブジェクト値設定方法。
【請求項２】
前記第２のステップにおいて、型変換を行う変換メソッドが設定された属性フィールドに対し当該変換メソッドを実行し、前記記憶手段に記憶された属性値の型を変換して当該属性フィールドに設定するステップをさらに備えることを特徴とする請求項１に記載のオブジェクト値設定方法。
【請求項３】
前記第２のステップにおいて、属性値のチェックを行うチェックメソッドが設定された属性フィールドに対し当該チェックを実行し、当該チェックメソッドで指定されている属性値のチェックを行うステップをさらに備えることを特徴とする請求項１または２に記載のオブジェクト値設定方法。
【請求項４】
前記第２のステップにおいて、配列識別子が設定された属性値に対し、前記記憶手段に記憶された同一配列の属性値を取得し、各配列の属性値として設定するステップをさらに備えることを特徴とする請求項１〜３のいずれか一項に記載のオブジェクト値設定方法。
【請求項５】
Ｊａｖａアプリケーションプログラムにおけるオブジェクト値を設定するプログラムであって、
属性値設定対象オブジェクトの各フィールドに設定する属性値を作成して記憶手段に格納する第１の処理ステップと、
ＪａｖａＡＰＩで提供されるリフレクション機能を用いて各オブジェクトに設定されたパブリックなアクセサメソッドを実行し、前記記憶手段に格納された当該オブジェクトの属性値を設定する第２の処理ステップとを備えることを特徴とするオブジェクト値設定プログラム。
【請求項６】
前記第２の処理ステップにおいて、型変換を行う変換メソッドが設定された属性フィールドに対し当該変換メソッドを実行し、前記記憶手段に記憶された属性値の型を変換して当該属性フィールドに設定する処理ステップをさらに備えることを特徴とする請求項５に記載のオブジェクト値設定プログラム。
【請求項７】
前記第２の処理ステップにおいて、属性値のチェックを行うチェックメソッドが設定された属性フィールドに対し当該チェックを実行し、当該チェックメソッドで指定されている属性値のチェックを行う処理ステップをさらに備えることを特徴とする請求項５または６に記載のオブジェクト値設定プログラム。
【請求項８】
前記第２の処理ステップにおいて、配列識別子が設定された属性値に対し、前記記憶手段に記憶された同一配列の属性値を取得し、各配列の属性値として設定する処理ステップをさらに備えることを特徴とする請求項５〜７のいずれか一項に記載のオブジェクト値設定プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、オブジェクト指向のプログラム言語であるＪａｖａ（Ｊａｖａ及びＪａｖａ関連の商標及びロゴは、米国ＳＵＮ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，ｉｎｃ．の商標または登録商標）の技術を使用してアプリケーションプログラムを開発する方法及び開発用のプログラムに係り、特に、Ｗｅｂ画面の入力データやＤＢレコード等の情報（属性値）をオブジェクトへ設定する際の処理方法及び処理プログラムに関するものである。
【０００２】
【従来の技術】
従来、Ｊａｖａの技術によるアプリケーションプログラムの開発作業では、当該アプリケーションプログラムの構成要素である各オブジェクト（具体的にはオブジェクトのインスタンスであるクラス）への値の設定を行うために、値設定対象クオブジェクトの各フィールド（属性）にそれぞれ対応して同オブジェクト内に組み込んだｓｅｔメソッドを使用してフィールド値（属性値）を設定する方法が採られている。例えば、ｎａｍｅ、ａｇｅというフィールドを持つクラスに対してはｓｅｔＮａｍｅ（）、ｓｅｔＡｇｅ（）というメソッドを同クラス内に組み込み、これらのメソッドを使用することにより名前、年令といった値の設定を行うようにしている。
また、ＪＳＰ（Ｊａｖａ  Ｓｅｒｖｅｒ  Ｐａｇｅｓ）によるＷｅｂアプリケーションシステム開発では、拡張構文＜ｊｓｐ：ｓｅｔＰｒｏｐｅｒｔｙ＞を用いることにより、ＨＴＭＬフォームのパラメータ名と値設定対象オブジェクトのフィールド名が一致したフィールドへ値を一括して設定することが可能である。具体的には、ＨＴＭＬのフォーム部品の名前に値設定対象オブジェクトのフィールド名を設定し、＜ｊｓｐ：ｕｓｅＢｅａｎ＞タグによる値設定対象オブジェクトの指定を行った後、＜ｊｓｐ：ｓｅｔＰｒｏｐｅｒｔｙ＞タグのｐｒｏｐｅｒｔｙ属性に”＊”を設定することでオブジェクトへの値設定を行うようにしている。
ここで、オブジェクトの属性値を設定する方法として次の特許文献１に開示されたものがある。
【０００３】
【特許文献１】
特開２００１−２８２５３７号公報
また、ＪＳＰ（Ｊａｖａ  Ｓｅｒｖｅｒ  Ｐａｇｅｓ）の拡張構文については、次の非特許文献１で紹介されている。
【０００４】
【非特許文献１】
ＪａｖａＳｅｖｅｒＰａｇｅｓＴＭｖ１．２Ｓｙｎｔａｘ  Ｒｅｆｅｒｅｎｃｅ・Ｊｕｎｅ  ２００２
【０００５】
【発明が解決しようとする課題】
しかしながら、各オブジェクトに対し上記ｓｅｔメソッドを用いて属性値を設定する場合、属性値を設定する各フィールドに対しｓｅｔメソッドを個々に実行させる手続が必要になるため、クラス数あるいはフィールド数（属性項目数）の多いアプリケーションプログラムを開発する場合には、ｓｅｔメソッドを個々に実行させるためのコーディング量が多くなり、開発およびテスト作業において開発者に対する負担が大きいという問題があった。
また、ＪＳＰ拡張構文＜ｊｓｐ：ｓｅｔＰｒｏｐｅｒｔｙ＞を使用し、各オブジェクトの属性値を設定する場合、Ｊａｖａ基本型以外のフィールドに対する属性値が設定できないという問題がある。Ｊａｖａ基本型のフィールドとは、上記の非特許文献１の「ＴＡＢＬＥ１」に示されているものである。
また、配列フィールドに対する属性値を自動で設定することができないという問題があった。例えば「趣味」という属性があった場合に、「映画鑑賞」、「釣り」などの複数の属性値を自動で設定することができず、手動で設定しなければならないという問題があった。
さらに、設定した属性値に矛盾がないかなどのチェック機能について考慮していないため、設定した属性値の矛盾等を発見できないという問題があった。
さらに、属性値の型を例えば文字型から数値型に変換する機能について考慮していないため、フィールドの型に合わせて型変換を行う事ができないという問題があった。
要約すれば、従来の技術にあっては、オブジェクトへの属性値を設定するためのコーディング量が多くなり、また型変換や属性値のチェックを行う必要が生じた場合に柔軟に対応できないといった問題があった。
【０００６】
本発明の目的は、オブジェクトに対する属性値を少ないコーディング量で設定することができるオブジェクト値設定方法及びプログラムを提供することにある。
また、上記目的に加え、Ｊａｖａ基本型以外のフィールドに対する属性値、配列フィールドに対する属性値についても自動で設定することができるオブジェクト値設定方法及びプログラムを提供することにある。
さらに、型変換や属性値の矛盾チェックも行うことができるオブジェクト値設定方法及びプログラムを提供することにある。
【０００７】
【課題を解決するための手段】
上記目的を達成するために、本発明に係るオブジェクト値設定方法は、属性値設定対象オブジェクトの各フィールドに設定する属性値を作成して記憶手段に格納する第１のステップと、ＪａｖａＡＰＩで提供されるリフレクション機能を用いて各オブジェクトに設定されたパブリックなアクセサメソッドを実行し、前記記憶手段に格納された当該オブジェクトの属性値を設定する第２のステップとを備えることを特徴とする。
また、前記第２のステップにおいて、型変換を行う変換メソッドが設定された属性フィールドに対し当該変換メソッドを実行し、前記記憶手段に記憶された属性値の型を変換して当該属性フィールドに設定するステップをさらに備えることを特徴とする。
また、前記第２のステップにおいて、属性値のチェックを行うチェックメソッドが設定された属性フィールドに対し当該チェックを実行し、当該チェックメソッドで指定されている属性値のチェックを行うステップをさらに備えることを特徴とする。
さらに、前記第２のステップにおいて、配列識別子が設定された属性値に対し、前記記憶手段に記憶された同一配列の属性値を取得し、各配列の属性値として設定するステップをさらに備えることを特徴とする。
【０００８】
本発明に係るＪａｖａアプリケーションプログラムにおけるオブジェクト値を設定するプログラムは、属性値設定対象オブジェクトの各フィールドに設定する属性値を作成して記憶手段に格納する第１の処理ステップと、ＪａｖａＡＰＩで提供されるリフレクション機能を用いて各オブジェクトに設定されたパブリックなアクセサメソッドを実行し、前記記憶手段に格納された当該オブジェクトの属性値を設定する第２の処理ステップとを備えることを特徴とする。
また、前記第２の処理ステップにおいて、型変換を行う変換メソッドが設定された属性フィールドに対し当該変換メソッドを実行し、前記記憶手段に記憶された属性値の型を変換して当該属性フィールドに設定する処理ステップをさらに備えることを特徴とする。
また、前記第２の処理ステップにおいて、属性値のチェックを行うチェックメソッドが設定された属性フィールドに対し当該チェックを実行し、当該チェックメソッドで指定されている属性値のチェックを行う処理ステップをさらに備えることを特徴とする。
また、前記第２の処理ステップにおいて、配列識別子が設定された属性値に対し、前記記憶手段に記憶された同一配列の属性値を取得し、各配列の属性値として設定する処理ステップをさらに備えることを特徴とする。
【０００９】
【発明の実施の形態】
以下、本発明を実施する場合の一形態を図面を参照して具体的に説明する。
図１は、本発明の実施の一形態を示す図である。本実施形態におけるシステムは、図１に示すように、設定情報データ１０１と値設定対象オブジェクト１０２を入力として受け取り、値設定対象オブジェクト１０２への属性値（フィールド値）の設定を行うオブジェクト値設定プログラム１０３と、値設定対象オブジェクト１０２のインスタンスである値設定対象クラス１０４からなっている。
設定情報データ１０１、値設定対象オブジェクト１０２、オブジェクト値設定プログラム１０３、値設定対象クラス１０４は、コンピュータの記憶装置（図示せず）に格納されている。
【００１０】
値設定対象クラス１０４はｇｅｔメソッド１０５、ｓｅｔメソッド１０６、変換メソッド１０７、チェックメソッド１０８を有している。
オブジェクト値設定プログラム１０３は、Ｊａｖａ言語によるプログラムが実行可能なコンピュータによって実行されるものであり、詳細設定情報作成処理１０９、フィールド値設定処理１１０、フィールド値チェック処理１１１、詳細設定情報１１２、リフレクション機能１１３を有している。
【００１１】
詳細設定情報作成処理１０９は、後述の図４に示すような設定情報データ１０１を基に、後述の図６に示すような詳細設定情報１１２を作成するものであり、オブジェクト値設定プログラム１０３の前処理として使用する。
フィールド値設定処理１１０、フィールド値チェック処理１１１は、オブジェクト値設定プログラム１０３のサブルーチンとして機能する。
リフレクション機能１１３はＪａｖａＡＰＩにより提供されるもので、値設定対象クラス１０４の各メソッドを実行するために使用する。リフレクション機能１１３とは、Ｊａｖａのオブジェクトやクラスが公開するフィールドにアクセスし、そのＪａｖａオブジェクトの属性を変更したり、メソッドを呼び出して実行する機能である。
【００１２】
図２は、Ｗｅｂ画面の入力内容２０１を値設定対象オブジェクト１０２に格納する例を示したものである。
オブジェクト値設定プログラム１０３は、設定情報データ１０１から値設定対象オブジェクト１０２に設定可能な設定値および設定フィールドを検索し設定する。この際、ｐｒｅｆＣｏｄｅフィールド２０２のように設定値の型またはデータ変換が必要な場合には、値設定対象クラスの変換メソッドを使用して設定値を変換する。入力内容に誤りがある場合にはチェック例外２０３を検出する。
【００１３】
図２の例における値設定対象オブジェクトはオブジェクト名がＵｓｅｒＩｎｆｏのＵｓｅｒＯｂｊであり、その属性値としては氏名（漢字）＝ｎａｍｅ、氏名（カナ）＝ｎａｍｅ＿ｋａｎａ、メールアドレス＝ｅｍａｉｌ、性別＝ｓｅｘ、生年月日＝ｂｉｒｔｈｄａｔｅ、自宅情報＝ａｄｄｒｅｓｓ、趣味＝ｈｏｂｂｙが設定対象となっている。
本発明は、このＵｓｅｒＯｂｊオブジェクトのインスタンスである値設定対象クラスに対して属性値を設定するものである。なお、生年月日と自宅情報については独立したクラスｂｉｒｔｈｄａｔｅＯｂｊとａｄｄｒｅｓｓＯｂｊが作成され、これらのクラスに属性値が設定されるようになっている。なお、独立したクラスを作成するのは属性の内容を識別し易くするために便宜的に分けただけのものであり、特別な意味はない。
図２の例では、ＵｓｅｒＯｂｊクラス（２０４）とｂｉｒｔｈｄａｔｅＯｂｊクラス（２０５）およびａｄｄｒｅｓｓＯｂｊクラス（２０６）が属性値設定対象オブジェクト、すなわち図１の値設定対象クラス１０４となる。
【００１４】
ＵｓｅｒＯｂｊクラス（２０４）は、氏名（漢字）＝ｎａｍｅ、氏名（カナ）＝ｎａｍｅ＿ｋａｎａ、メールアドレス＝ｅｍａｉｌ、性別＝ｓｅｘ、趣味＝ｈｏｂｂｙが設定対象となっている。このうち趣味＝ｈｏｂｂｙが配列フィールドになっており、例えば競馬、麻雀といった趣味の内容が設定される。
ｂｉｒｔｈｄａｔｅＯｂｊクラス（２０５）は年（ｙｅａｒ）、月（ｍｏｎｔｈ）、日（ｄａｙ）の属性値が設定対象となり、ａｄｄｒｅｓｓＯｂｊクラス（２０６）は郵便番号（ｚｉｐｃｏｄｅ）、都道府県（ｐｒｅｆＣｏｄｅ）、市区町村（ｃｉｔｙ）、番地（ｈｏｕｓｅＮｏ）、アパート・ビル（ｂｕｉｌｄｉｎｇ）、電話番号（ｔｅｌｅｐｈｏｎｅ）、ＦＡＸ番号（ｆａｘ）が設定対象となっている。
【００１５】
設定情報データ１０１は、図４に示すようなフィールド識別子４０１をキーとしフィールド設定値４０２を値としたハッシュテーブルであり、値設定対象オブジェクト１０２への値設定情報を格納している。
例えば、図２のＵｓｅｒＯｂｊクラス（２０４）とｂｉｒｔｈｄａｔｅＯｂｊクラス（２０５）およびａｄｄｒｅｓｓＯｂｊクラス（２０６）については、フィールド識別子４０１としてｎａｍｅ，ｎａｍｅ＿ｋａｎａ，…、ｈｏｂｂｙ＿１，ｈｏｂｂｙ＿２，ｈｏｂｂｙ＿３といった識別子と、その設定値である「山田太郎」、「ヤマダタロウ」、…、「ｎｕｌｌ」といった情報が予め格納されている。
【００１６】
ＪＳＰまたはＳｅｒｖｌｅｔを使用するＷｅｂアプリケーションシステムの場合、図１１１で後述するように、Ｗｅｂ画面ＨＴＭＬのフォーム部品の名前にフィールド識別子４０１（図１１の１１０２，１１０４，１１０６，１１０８）を設定する事でＷｅｂ画面の入力データを設定情報データ１０１と同じ形式のハッシュテーブルとして取得する事が容易である。
【００１７】
フィールド識別子４０１は、図５に示すように、値設定対象クラス１０４のフィールド名、またはフィールド名５０１と配列識別子５０５、またはフィールド識別子４０１とフィールド結合子５０２から構成されるものであり、値設定対象クラス１０４の値設定対象フィールドを一意に特定するために使用する。
フィールド名５０１は、クラスのフィールド名の文字列で表現される。フィールド結合子５０２は、フィールド名を繋ぐドット記号「．」で表現される。配列結合子５０３は、アンダースコア「＿」で表現される。配列識別子５０５は、配列結合子５０３と配列番号５０４で構成され、配列番号５０４は「１」以上の整数値で表現される。
例えばｂｉｒｔｈｄａｔｅＯｂｊクラス（２０５）における属性ｙｅａｒについては、「ｂｉｒｔｈｄａｔｅ」と「ｙｅａｒ」とを「．」で結合した「ｂｉｒｔｈｄａｔｅ．ｙｅａｒ」で表現される。
同様に、ｈｏｂｂｙについては「ｈｏｂｂｙ＿１」、ｚｉｐｉｃｏｄｅについては「ａｄｄｏｒｅｓｓ．ｚｉｐＣｏｄｅ」で表現される。
【００１８】
値設定対象クラス１０４を構成するＵｓｅｒＯｂｊクラス（２０４）とｂｉｒｔｈｄａｔｅＯｂｊクラス（２０５）およびａｄｄｒｅｓｓＯｂｊクラス（２０６）は、図３に示すように、ｐｒｉｖａｔｅなフィールドとフィールドに対するｐｕｂｌｉｃなアクセサメソッドおよび変換メソッド、チェックメソッドからなる。ｐｒｉｖａｔｅなフィールドとは、先頭に「−」記号が付いたフィールドである。例えば「−ｎａｍｅ」、「ｎａｍｅ＿ｋａｎａ」、「−ｚｉｐｃｏｄｅ」といったフィールドである。
ｐｕｂｌｉｃなアクセサメソッドはｓｅｔメソッド、ｇｅｔメソッドおよび変換メソッド、チェックメソッドからなる。ｐｕｂｌｉｃなアクセサメソッドについては、先頭に「＋」記号を付けて示している。
【００１９】
それぞれの値設定対象クラスのｇｅｔメソッド１０５は、各フィールドの値を取得するために使用するもので、全てのフィールドに対して用意する。リフレクション機能１１３によるメソッドの検出を可能とするため、メソッド名を「ｇｅｔ  ＋  先頭大文字のフィールド名」としている。例えばｎａｍｅについては「＋ｇｅｔＮａｍｅ（）」という具合にしている。
ｓｅｔメソッド１０６は、各フィールドへの値の設定を行うために使用するもので、全てのフィールドに対して用意する。リフレクション機能１１３によるメソッドの検出を可能とするため、メソッド名を「ｓｅｔ  ＋  先頭大文字のフィールド名」としている。
【００２０】
変換メソッド１０７はフィールドへの値の設定を行う際、設定情報データ１０１のフィールド設定値を変換して設定するために使用するもので、変換を行う任意のフィールドに対して用意するものである。リフレクション機能１１３による変換メソッド１０７の検出および汎用的な使用を可能とするため、メソッド名を「ｃｏｎｖｅｒｔ  ＋  先頭大文字のフィールド名」とし、引数の型をＯｂｊｅｃｔ型としている。
チェックメソッド１０８は、各クラスに設定した値のチェックを行うために使用するもので、任意のフィールドのチェックを行うチェックメソッド３０１と、フィールド間のチェックを行うためのチェックメソッド３０２を任意に用意する。リフレクション機能１１３によるチェックメソッド３０１，３０２の検出および汎用的な使用を可能とするため、メソッド名を「ｃｈｅｃｋ（＋  先頭大文字のフィールド名）」とし、戻り値をｖｏｉｄ型としている。チェックエラーはメソッド内で例外を発生することにより検出する。
【００２１】
詳細設定情報１１２は、図６に示すように、ｓｅｔメソッド１０６を実行する対象のクラスである親フィールド６０１と、親フィールド６０１に対するフィールド名６０２と、これら親フィールドとフィールド名で特定されるフィールドに対する設定値６０３を１レコードとした配列データであり、リフレクション機能１１３を使用することにより値設定対象オブジェクト１０２への値設定を容易に行うことが可能な形で必要な情報を全て格納している。
例えば、フィールド名６０２の「ｎａｍｅ」については親フィールド６０１として「ｕｓｅｒＯｂｊ」、その設定値６２３として「山田太郎」を設定している。
次に、オブジェクト値設定プログラム１０３について説明する。
【００２２】
図７はオブジェクト値設定プログラム１０３における制御の処理の流れを示すフローチャートである。
まず、詳細設定情報作成処理１０９を実行し（ステップ７０１）、以降の処理で必要となる詳細設定情報１１２を作成する。
次に、詳細設定情報１１２の１つのレコードを読み込み（ステップ７０２）、フィールド値設定処理１１０を実行し（ステップ７０３）、値設定対象オブジェクト１０２のフィールド識別子４０１によって特定されるフィールドに値を設定する。
次に、全レコードに対する処理が完了したかどうかを判定し（ステップ７０４）、完了していたならばフィールド値チェック処理１１１を実行し（ステップ７０５）、値設定対象オブジェクト１０２の設定値のチェックを行う。全レコードに対する処理が完了していない場合は、次のレコードを読み込む。
チェックエラーがある場合は（ステップ７０６）エラー内容を含む例外を発生し（ステップ７０７）終了する。チェックエラーがなければそのまま終了する。
【００２３】
次に、詳細設定情報作成処理（図７のステップ７０１）、フィールド値設定処理（図７のステップ７０３）、フィールド値チェック処理（図７のステップ７０５）について、図８〜図１０を用いて説明する。各処理では、値設定対象オブジェクトおよびそのフィールドのｇｅｔメソッド、ｎｅｗＩｎｓｔａｎｃｅメソッド、ｓｅｔメソッド、変換メソッド、チェックメソッドの取得および実行と、フィールドの型の取得を行うためにリフレクション機能１１３を使用している。
なお、ｎｅｗＩｎｓｔａｎｃｅメソッドは、図面には示していないが、Ｊａｖａのクラスが全て持っているものである。
図８は、詳細設定情報作成処理１０９における制御の流れを示すフローチャートである。
まず、変数ｎに「０」を設定する（ステップ８０１）。次に、設定情報データ１０１の全レコードについて処理を行ったかどうかチェックし（ステップ８０２）、全レコードについて処理を行った場合はプログラムを終了する。
全レコードについて処理を行っていない場合は、設定情報データ１０１のフィールド識別子４０１に結合子（フィールド結合子または配列結合子）がｎ個のレコードがあるかどうかのチェックを行う（ステップ８０３）。該当レコードがない場合には、ｎを「＋１」だけ更新して（ステップ８０４）、フローの初めに戻る。
【００２４】
該当レコードがある場合、結合子がｎ個のレコードを１レコード読み込み（ステップ８０５）、フィールド識別子４０１から結合子より後でかつ配列識別子より前の文字列を取得することによりフィールド名を取得する（ステップ８０６）。
次に、レコードのフィールド識別子に配列識別子があるかどうかのチェックを行う（ステップ８０７）。配列識別子がない場合はレコードからフィールド設定値を設定値として読み込む（ステップ８０８）。
【００２５】
「ｈｏｂｂｙ＿１」のように配列識別子がある場合は、設定情報データ１０１から同一フィールドを表す設定値を全て合わせた配列オブジェクトを作成し、設定値として読み込む（ステップ８０９）。この処理により、Ｊａｖａ基本型以外の配列型のフィールドに対する値が設定可能になる。
次に、値設定対象オブジェクトもしくはそのフィールドのｇｅｔメソッドを実行する事により、設定値に対する親フィールドを取得する（ステップ８１０）。ここで、取得した親フィールドのチェックを行い（ステップ８１１）、親フィールドがｎｕｌｌの場合、親フィールドクラスのｎｅｗＩｎｓｔａｎｃｅメソッドを実行する事により親フィールドを生成し、その親フィールドのｓｅｔメソッドを実行する事により生成した親フィールドを設定する（ステップ８１２）。
これにより、同じ親フィールドを取得しようとした場合にはここで生成した親フィールドを参照することになる。
【００２６】
次に、ここまでの処理で取得した親フィールド、フィールド名、設定値を１レコードとして、詳細設定情報１１２に追加する（ステップ８１３）。更に、ここまで使用した設定情報データ１０１のレコードを処理済みとし、設定情報データ１０１のフィールド識別子に結合子がｎ個あるかどうかのチェック処理（ステップ８０３）に戻り、処理を継続する。
【００２７】
図９はフィールド値設定処理１１０における制御の流れを示すフローチャートである。
まず、詳細設定情報１１２のレコードを読み込み（ステップ９０１）、親フィールドのフィールド名に対する変換メソッドを取得する（ステップ９０２）。ここで、変換メソッドを取得できたかどうかのチェックを行い（ステップ９０３）、取得できた場合はレコードの設定値６０３を引数として変換メソッドの実行を行い（ステップ９０４）、変換後の値を設定値として読み込む（ステップ９０５）。
【００２８】
変換メソッドを取得できなかった場合は値設定対象フィールドの型を取得し（ステップ９０６）、フィールドの型とレコードの設定値の型が同じかどうかのチェックを行う（ステップ９０７）。ここで、型が異なる場合には、設定値の型をフィールドの型に変換し、設定値として読み込む（ステップ９０８）。
型が同じ場合には、レコードの設定値６０３をそのまま設定値として読み込む（ステップ９０９）。
これにより、フィールドの型に依存する事なく値設定を行うことが可能となる。
【００２９】
次に、親フィールドのフィールド名に対するｓｅｔメソッドを取得し（ステップ９１０）、実行する（ステップ９１１）。これで、詳細設定情報１１２における１レコード分の値設定対象オブジェクトへの値設定処理が完了する。
図１０はフィールド値チェック処理１１１における制御の流れを示すフローチャートである。
まず、全ての詳細設定情報レコード１１２に対する処理を実行したかどうかの判定を行い（ステップ１００１）、全ての詳細設定情報レコード１１２の処理が終わっていればプログラムを終了する。全ての詳細設定情報レコードの処理が終わっていなければ、詳細設定情報１１２を１レコード読み込み（ステップ１００２）、親フィールドのフィールド名に対するチェックメソッド３０１を取得する（ステップ１００３）。ここで、チェックメソッドを取得できたかどうかのチェックを行い（ステップ１００４）、取得できた場合はチェックメソッドの実行を行う（ステップ１００５）。
これにより、フィールドに設定された値に対するチェック処理を行うことができる。チェックメソッド内で例外が発生した場合（ステップ１００６）、チェックエラーとしてプログラムを終了する。例外が発生しなかった場合は処理を継続する。
チェックメソッドを取得できなかった場合はフィールドのチェック処理を行わない。
【００３０】
次に、親フィールドのチェックメソッドを実行したかどうかを判定する（ステップ１００７）。既に親フィールドのチェックメソッドを実行している場合、フローの初めに戻り次のレコード処理を開始する。まだ親フィールドのチェックメソッドの実行を行っていない場合は、親フィールドのチェックメソッド３０２（図３）を取得する（ステップ１００８）。ここで、チェックメソッドを取得できたかどうかのチェックを行い（ステップ１００９）、取得できた場合はチェックメソッドの実行を行う（ステップ１０１０）。
これにより、親フィールドのフィールド間のチェックを行うことができる。チェックメソッド内で例外が発生した場合（ステップ１０１１）、チェックエラーとしてプログラムを終了する。例外が発生しなかった場合、または親フィールドのチェックメソッドを取得できなかった場合には、フローの初めに戻り次のレコード処理を開始する。
【００３１】
次に図１１〜図１４を通じて、Ｗｅｂ画面の入力内容をオブジェクト値設定プログラム１０３を使用して値設定対象オブジェクト（図３のＵｓｅｒＩｎｆｏクラスのインスタンス）に設定する例を説明する。
図１１はＷｅｂ画面のＨＴＭＬ記述例を示すものである。
テキストボックス氏名（漢字）１１０１の値を値設定対象オブジェクトのｎａｍｅフィールドに設定するため、ＩＮＰＵＴタグのｎａｍｅ属性１１０２に”ｎａｍｅ”を設定している。次に、テキストボックス西暦１１０３の値を値設定対象オブジェクトのｂｉｒｔｈｄａｔｅフィールドのｙｅａｒフィールドに設定するため、ＩＮＰＵＴタグのｎａｍｅ属性１１０４に”ｂｉｒｔｈｄａｔｅ．ｙｅａｒ”を設定している。また、テキストボックス郵便番号１１０５の値を値設定対象オブジェクトのａｄｄｒｅｓｓフィールドのｚｉｐＣｏｄｅフィールドに設定するため、ＩＮＰＵＴタグのｎａｍｅ属性１１０６に”ａｄｄｒｅｓｓ．ｚｉｐＣｏｄｅ”を設定している。最後に、テキストボックス趣味１１０７の趣味１〜趣味３の値を値設定対象オブジェクトのｈｏｂｂｙフィールドに配列として設定するため、ＩＮＰＵＴタグのｎａｍｅ属性１１０８に”ｈｏｂｂｙ＿１”〜”ｈｏｂｂｙ＿３”を設定している。
【００３２】
図１２はオブジェクト値設定プログラム１０３をＪａｖａクラスのメソッドとして実装した例を示すクラス図である。オブジェクト値設定プログラム１０３は、ＶａｌｕｅＳｅｔｔｅｒクラス１２０１のｓｔａｔｉｃメソッドｌｏａｄ１２０２として実装されており、設定情報データであるＭａｐと値設定対象オブジェクトであるＯｂｊｅｃｔを引数として受け取り、値を設定したオブジェクトを戻り値として返すインタフェースとなっている。
【００３３】
図１３は変換メソッドの作成例を示している。
Ａｄｄｒｅｓｓクラス１３０１（図３のクラス２０６に相当）のｐｒｅｆＣｏｄｅフィールドに対する変換メソッドとしてｃｏｎｖｅｒｔＰｒｅｆＣｏｄｅメソッド１３０２を作成しており、設定情報データ１０１の文字列型設定値が”東京都”の場合は数値「１３」、”北海道”の場合は数値「１」に変換するような処理となっている。
【００３４】
図１４はチェックメソッドの作成例を示している。
ＢｉｒｔｈＤａｔｅクラス１４０１（図３のクラス２０５に相当）のｙｅａｒフィールドに対するチェックメソッドとしてｃｈｅｃｋＹｅａｒメソッド１４０２を作成しており、ｙｅａｒフィールドの値が「０」以下の場合には「ｙｅａｒに０以下の数値が設定されました」というチェック例外１４０３を発生させるような処理となっている。
またフィールド間のチェックを行うチェックメソッドとしてｃｈｅｃｋメソッド１４０４を作成しており、｛ｍｏｎｔｈ＝２、ｄａｙ＝３０｝などの不正な値が設定された場合には「年月日が不正です」といったチェック例外１４０５を発生させるような処理となっている。
【００３５】
図１５はオブジェクト値設定プログラム１０３を実行するＳｅｒｖｌｅｔの作成例を示している。図１１の画面から送信された内容で設定情報データであるＨａｓｈＭａｐ１５０１を作成し、値設定対象オブジェクト１５０２を作成し、これらを引数としてオブジェクト値設定プログラム１５０３を実行している。チェックエラーが発生した場合には例外１５０４を発生するような処理となっている。
【００３６】
【発明の効果】
以上説明したように、本発明によれば、属性値設定対象オブジェクトの各フィールドに設定する属性値を作成して記憶手段に格納しておき、その属性値をＪａｖａＡＰＩで提供されるリフレクション機能を用いて各オブジェクトのパブリックなアクセサメソッドを呼び出して実行し、各属性値を一括して設定するようにしたため、各オブジェクトのｓｅｔメソッドを個々に呼び出して実行させるためのコーディングを行う必要がなくなり、Ｊａｖａの技術によるアプリケーション開発において、画面の入力データ、データベースのレコード値、ファイルデータのレコード値等のオブジェクトへの設定、オブジェクトへの値設定に係るコーディング量を減少することができ、開発効率が向上する。
また、属性値設定対象オブジェクトにチェックメソッドを組み込み、このチェックメソッドを使用して属性値のチェックを行うようにしたため、設定した属性値の矛盾を容易に発見することができる。
また、型変換メソッドを組み込んでおくことにより、例えば数値型の属性値を文字型の属性値に変換して設定することができる。
また、配列型などのＪａｖａ基本型以外のフィールドを含むオブジェクトへも属性値を設定することが可能となる。
【図面の簡単な説明】
【図１】本発明の一実施の形態であるオブジェクト値設定プログラムの概略構成を示す図である。
【図２】オブジェクト値設定プログラムの動作例を示す図である。
【図３】値設定対象クラスの構成を示すクラス図である。
【図４】設定情報データの構成を示す図である。
【図５】フィールド識別子の構成を示す図である。
【図６】詳細設定情報の構成を示す図である。
【図７】オブジェクト値設定プログラムの処理の概要を示すフロ−チャ−トである。
【図８】詳細設定情報作成処理を示すフローチャートである。
【図９】フィールド値設定処理を示すフローチャートである。
【図１０】フィールド値チェック処理を示すフローチャートである。
【図１１】画面ＨＴＭＬの作成例を示す図である。
【図１２】オブジェクト値設定プログラムの実装例を示すクラス図である。
【図１３】変換メソッド実装クラスの例を示す図である。
【図１４】チェックメソッド実装クラスの例を示す図である。
【図１５】オブジェクト値設定プログラムを使用するＳｅｒｖｌｅｔの例を示す図である。
【符号の説明】
１０１…設定情報データ、１０２…値設定対象オブジェクト、１０３…オブジェクト値設定プログラム、１０４…値設定対象クラス、１０５…ｇｅｔメソッド、１０６…ｓｅｔメソッド、１０７…変換メソッド、１０８…チェックメソッド、１０９…詳細設定情報作成処理、１１０…フィールド値設定処理、１１１…フィールド値チェック処理、１１２…詳細設定情報、１１３…リフレクション機能。
【図１】
2004252708.tif 000003
【図２】
2004252708.tif 000004
【図３】
2004252708.tif 000005
【図４】
2004252708.tif 000006
【図５】
2004252708.tif 000007
【図６】
2004252708.tif 000008
【図７】
2004252708.tif 000009
【図８】
2004252708.tif 000010
【図９】
2004252708.tif 000011
【図１０】
2004252708.tif 000012
【図１１】
2004252708.tif 000013
【図１２】
2004252708.tif 000014
【図１３】
2004252708.tif 000015
【図１４】
2004252708.tif 000016
【図１５】
2004252708.tif 000017