(57)【特許請求の範囲】
【請求項１】
ウェブサービスの開発を容易にするためにコンピュータで実行される方法であって、
サービスインターフェイスを解析するステップを備え、前記解析の結果は、ＸＭＬファイルと、クラス属性と、メソッドデータとを含み、
前記ウェブサービスを特徴づけるクラスファイルを含むサービスプロジェクト情報をサービスプロジェクトから受信するステップと、
前記解析の結果と、前記サービスプロジェクト情報とに基づいてレプレゼンテーショナル・ステート・トランスファ（ＲＥＳＴ）サービスを実現するようにコンピュータコードを生成するステップとを備え、
前記サービスプロジェクトは、前記ＲＥＳＴサービスとして動作するように構成されていないサービスについてのコンピュータコードを含み、前記コンピュータコードは、前記ＲＥＳＴサービスを生成する際に使用されるパッケージを表し、
前記方法は、
前記パッケージで示されるリソース名に対して必須の変更を実現するための情報を取得するステップと、
前記パッケージにおけるクラスおよびメソッドを処理するステップとを備え、
前記クラスおよびメソッドを処理するステップは、前記サービスインターフェイスの属性を前記ＲＥＳＴサービスの属性にマッピングすることを含む、方法。
【請求項２】
ウェブサービスの開発を容易にするためにコンピュータで実行される方法であって、
パッケージで示される名前に対する必須の変更を実施するための情報を取得するステップを含み、前記名前はウェブ・リソースに関連付けられており、前記名前はクラスに関連付けられており、
名前アノテーション変更子を使用して各名前を処理するステップと、
サービスインターフェイスの１つ以上のサービスインターフェイス特徴を決定するステップとを含み、前記１つ以上のサービスインターフェイス特徴は、１つ以上のサービスインターフェイスクラス属性およびサービスインターフェイスメソッドデータを含み、前記１つ以上のサービスインターフェイスクラス属性の各々は、１つ以上の名前および変更子のタイプを含み、
マッピングを含むファイルを生成するステップを含み、前記マッピングは、前記１つ以上のサービスインターフェイスクラス属性およびサービスインターフェイスメソッドデータを１つまたは複数のレプレゼンテーショナル・ステート・トランスファ（ＲＥＳＴ）サービスクラスとマッピングすることによって、前記ウェブ・リソースの１つまたは複数をＲＥＳＴ属性およびＲＥＳＴサービスメソッドデータにマッピングすることを含み、前記１つまたは複数のＲＥＳＴサービスクラス属性のそれぞれは、１つまたは複数の名前および変更子タイプを含み、
前記マッピングに基づいて前記ＲＥＳＴサービスを実装するコンピュータコードを生成するステップを含み、前記コンピュータコードを生成するステップは、
コードジェネレータを用いて、生成されるＪａｖａＲＥＳＴリソースファイルのために生成されるコンピュータコードを含む１つ以上のプログラミング言語クラスを含むダンプファイルを作成するステップと、
前記コードジェネレータによって受信されるパッケージにおいて特定されるクラスの処理を容易にするために前記名前アノテーション変更子を使用するステップと、
前記サービスインターフェイスにしたがって更新されるデータに応答して、１つ以上の更新されたメソッドを生成するために、前記パッケージにおいて特定されるクラスの各メソッドを処理するステップとを含む、コンピュータで実行される方法。
【請求項３】
サービスインターフェイスの特徴記述は、ＸＭＬファイルを含む前記ファイルにおいて維持される情報を含む、請求項１に記載のコンピュータで実行される方法。
【請求項４】
前記ＸＭＬファイルは、前記サービスインターフェイスに適用されるＲＥＳＴ解析ツールの出力を表わす、請求項３に記載のコンピュータで実行される方法。
【請求項５】
前記ウェブサービスは、前記生成するステップによってＲＥＳＴサービスにマッピングされていた１つ以上のリソースを含む、請求項１，３または４のいずれかに記載のコンピュータで実行される方法。
【請求項６】
前記生成するステップは、コードジェネレータを用いて、コンピュータコードを生成して、前記ＲＥＳＴサービスを実現することを容易にするステップを含む、請求項１，３，４および５のいずれかに記載のコンピュータで実行される方法。
【請求項７】
前記コードジェネレータを用いて、前記生成されたコンピュータコードを含む１つ以上のプログラミング言語クラスを含んでいるダンプファイルを作成するステップをさらに含む、請求項６に記載のコンピュータで実行される方法。
【請求項８】
名前アノテーション変更子を用いて、前記コードジェネレータに受信されたパッケージにおいて指定されているクラスを処理することを容易にするステップをさらに含む、請求項７に記載のコンピュータで実行される方法。
【請求項９】
前記パッケージの前記クラスのうちの各々のメソッドを処理して、これに応じて１つ以上の更新済みメソッドを作成するステップをさらに含む、請求項８に記載のコンピュータで実行される方法。
【請求項１０】
１つ以上のプログラミング言語クラスはＪｅｒｓｅｙ  ＲＥＳＴコンテナによってＪａｖａ（登録商標）プラットフォーム上にデプロイされるように適合される、請求項７から９のいずれかに記載のコンピュータで実行される方法。
【請求項１１】
前記ダンプファイルは、前記生成するステップによって生成されたすべての生成済みＪａｖａ  ＲＥＳＴリソースファイルについてのコンピュータコードを含む、請求項７から９のいずれかに記載のコンピュータで実行される方法。
【請求項１２】
前記生成するステップはさらに、Ｊａｖａ（登録商標）アーカイブによって実現されるコンピュータコードを用いるステップを含み、前記コンピュータコードは、前記生成するステップを実現するための命令を提供するように適合される、請求項１，および３から１１のいずれかに記載のコンピュータで実行される方法。
【請求項１３】
前記コンピュータコードはアプリケーションプログラミングインターフェイス（ＡＰＩ）に含まれている、請求項１２に記載のコンピュータで実行される方法。
【請求項１４】
前記コンピュータコードは、実現されるべきウェブサービスに関するパッケージのうちの各々のクラスを処理するためのプロセスに情報を提供するように適合されたプログラミング言語クラスを含む、請求項１２または１３に記載のコンピュータで実行される方法。
【請求項１５】
請求項１〜１４のいずれかに記載の方法をコンピュータに実行させる、プログラム。
【請求項１６】
請求項１５に記載のプログラムを格納したメモリと、
前記プログラムを実行するためのプロセッサとを備える、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本願は、以下の出願、すなわち、２０１２年５月１７日に提出され、「プロキシ化されたハイパーテキストマークアップ言語コンテンツにおいて動的に生成されたユニフォームリソースロケータを書換えるための方法（METHOD FOR REWRITNG DYNAMICALLY GENERATED UNIFORM RESOURCE LOCATORS IN PROXIED HYPER TEXT MARKUP LANGUAGE CONTENT）」と題され、この明細書において十分に記載されるように引用によりここに援用されている米国特許出願連続番号第１３／４７４，７０９号（弁理士事件番号  ＯＲＡＣＰ００６２）に関する。
【背景技術】
【０００２】
背景
本願は、ソフトウェアに関し、より特定的には、ウェブサービスなどの遠隔アクセス可能なソフトウェアの開発および実装を容易にするためのシステムおよび方法に関する。
【０００３】
遠隔アクセス可能なソフトウェアは、モバイルデバイスなどの分散型クライアントにアクセス可能なエンタープライズクラウドベースのソフトウェアを含む、要求の厳しいさまざまなアプリケーションにおいて用いられている。多くのエンタープライズコンピューティング環境においては、さまざまなソフトウェアシステムが、インターネットを介してソフトウェアシステム間でデータをやり取りするために、たとえばウェブサービスを介して、または他のメカニズムを介して、データを交換しなければならなくなる。データを要求するソフトウェアシステムはサービスリクエスタと称され、要求を処理してデータを提供するソフトウェアシステムはサービスプロバイダと称される。
【０００４】
このような遠隔アクセス可能なソフトウェアを実現するために用いられる、ウェブサービス、アプリケーションプログラミングインターフェイス（ＡＰＩ：Application Programming Interface）などの開発を容易にするためのソフトウェア開発方法およびツールは、コンピュータコードの迅速な開発およびインストールを可能にする効率的なメカニズムを必要とすることが多い。
【０００５】
従来より、レプレゼンテーショナル・ステート・トランスファ（Representational State Transfer：ＲＥＳＴ）サービスなどのウェブサービスを開発するのに、サービスインターフェイスの詳細、すなわち、クライアントデバイスとリモートコンテンツサーバとの間における通信インターフェイスの詳細、を解析することが必要となる。このような解析はしばしば手動で実行される、すなわちソフトウェア開発ツールによってハンドコードされる。しかしながら、手動でのアプローチは、インターフェイスオブジェクトおよびファイルを開くこと；必要に応じてサービスコンポーネントを視覚的にチェックおよび編集すること；ならびに、これに応じてサービスコードを編集すること；を必要とする可能性があり、過剰に時間を費やしてしまい、かつエラーが発生し易くなる可能性がある。
【０００６】
一般に、既存のツールを用いてＡＰＩインターフェイスによってＲＥＳＴサービスを開発する場合、過度に労働集約的となり、費用がかかり、かつエラーが発生し易くなる可能性がある。
【発明の概要】
【課題を解決するための手段】
【０００７】
概要
一例としての方法は、レプレゼンテーショナル・ステート・トランスファ（ＲＥＳＴ）ウェブサービスなどのウェブサービスの開発を容易にする。一例としての当該方法は、ＲＥＳＴサービスのためのユニフォームサービスインターフェイスなどのサービスインターフェイスの１つ以上の特徴を決定するステップと、上記決定に関連付けられた情報を含むファイルを受信するステップと、ファイルに基づいてＲＥＳＴサービスを実現するようにコンピュータコードを自動的に生成するステップとを含む。
【０００８】
より具体的な実施形態においては、サービスインターフェイスの特徴記述は、ＸＭＬファイルにおいて維持される情報を含む。ＸＭＬファイルは、サービスインターフェイスに適用されたＲＥＳＴ解析ツールの出力を表わし得る。ウェブサービスは、当該自動的に生成するステップによってＲＥＳＴサービスにマッピングされていた１つ以上のリソースを利用し得るかまたは含み得る。
【０００９】
コードジェネレータが、ＲＥＳＴサービスを含むコンピュータコードを自動的に生成するために用いられてもよい。コードジェネレータは、生成されたコンピュータコードを含む１つ以上のプログラミング言語クラスを含んでいるダンプファイルを作成するように適合される。名前アノテーション変更子は、コードジェネレータによって受信されたパッケージにおいて指定されているクラスの処理を容易にする。パッケージのうちの各々のクラスの各メソッドは、これに応じて、サービスインターフェイス詳細（すなわち情報）に従って更新された１つ以上の更新済みメソッドを生成するように処理される。
【００１０】
特定の実施形態においては、１つ以上のプログラミング言語クラスは、Ｊｅｒｓｅｙ  ＲＥＳＴコンテナなどのＲＥＳＴコンテナによってＪａｖａ（登録商標）プラットフォーム上に展開されるように適合されている。出力ダンプファイルは、生成されたすべてのＪａｖａ  ＲＥＳＴリソースファイルについてのコンピュータコードを含む。コードジェネレータは、Ｊａｖａアーカイブによって維持されているコンピュータコードを用いている。
【００１１】
一例としての当該方法は、コンピュータコードの実行をトリガする（すなわちコードジェネレータ）ためのコマンドを受信するステップをさらに含み得る。コマンドは、ＧＥＴハイパーテキスト・トランスファ・プロトコル（HyperText Transfer Protocol：ＨＴＴＰ）法、ＰＯＳＴ  ＨＴＴＰ法または他の方法であってもよい。コードジェネレータは、ダンプファイルに組込めるようにすべてのサービス依存性を自動的にインポートするように適合される。
【００１２】
したがって、この明細書中に記載されるいくつかの実施形態は、ＲＥＳＴサービスの書込みを容易にするための系統的なガイダンスをデベロッパに提供し、さらに、ＲＥＳＴサービスを迅速に生成するかまたは他のタイプのウェブサービスをＲＥＳＴサービスに変換するためのコード生成ツールを提供する。いくつかの特定の実施形態は、特に、Ｊｅｒｓｅｙ  ＲＥＳＴサービスを生成するために適合されており、同様の方法を、Ａｐａｃｈｅ  ＣＸＦまたはＲｅｓｔＥａｓｙを採用しているプラットフォームなどの他のプラットフォームに拡張することができる。
【００１３】
既存のウェブサービスをＲＥＳＴサービスに変換するためのオーバーヘッドコードの生成を含むＲＥＳＴサービスのための自動コード生成を可能にすることにより、開発費およびヒューマンエラーが低減される可能性がある。
【００１４】
この明細書中に開示される特定の実施形態の特徴および利点が、明細書の残りの部分および添付の図面を参照することによってさらに理解され得る。
【図面の簡単な説明】
【００１５】
【図１】レプレゼンテーショナル・ステート・トランスファ（ＲＥＳＴ）サービスの自動生成を可能にするシステムの第１の例を示す図である。
【図２】図１のコードジェネレータを特徴付けるクラスの一例を示すブロック図である。
【図３】図１のコードジェネレータによって実現されるプロセスの一例であって、拡張可能マークアップ言語（eXtensible Markup Language：ＸＭＬ）によって提供されるとともにサービスインターフェイスを特徴付けるパッケージを処理するように適合されたプロセスの一例を示すフロー図である。
【図４】図１〜図３の実施形態とともに使用されるように適合された方法の一例を示すフロー図である。
【発明を実施するための形態】
【００１６】
実施形態の詳細な説明
説明の便宜上、エンタープライズはビジネス、大学、政府、軍事などの、人で構成される如何なる組織であってもよい。「組織」および「エンタープライズ」という語はこの明細書中では同義で用いられている。組織の人員（すなわち企業人員）は、従業員、契約者、取締役員、顧客窓口などの組織に関係のある如何なる個人をも含み得る。
【００１７】
エンタープライズコンピューティング環境はビジネスまたは組織のために用いられる如何なるコンピューティング環境であってもよい。コンピューティング環境は、コンピュータ処理を含む１つ以上のタスクを実行するために用いられるコンピューティングリソースの如何なる集合であってもよい。一例としてのエンタープライズコンピューティング環境は、ネットワークにわたって分散されたさまざまなコンピューティングリソースを含み、さらに、イントラネットウェブサーバ、データベース、ローカルのハードディスクまたはファイルサーバ上のファイル、電子メールシステム、ドキュメント管理システム、ポータルなどの上にある私用の共有コンテンツを含み得る。
【００１８】
説明の便宜上、ウェブリソースは、コンピューティング言語クラス（たとえばＪａｖａクラス）、オブジェクト、ウェブサービスなどを含め、コンピュータネットワークを介して命名可能でありかつアドレス指定可能であれば如何なるものであってもよい。一般に、ＵＲＬなどのユニフォームリソース識別子（Uniform Resource Identifier：ＵＲＩ）またはウェブアドレスにより参照されるものはいずれもウェブリソースと見なすことができる。ＵＲＩは、ネットワークアドレスを指定する如何なる文字列であってもよい。
【００１９】
エンタープライズソフトウェアは、エンタープライズリソースの管理、顧客関係の管理などの、如何なるエンタープライズ関連のプロセスまたは動作の実現をも容易にするように適合された任意のセットのコンピュータコードであり得る。「エンタープライズソフトウェア」および「エンタープライズアプリケーション」という語は、この明細書中においては同義で用いられ得る。しかしながら、エンタープライズアプリケーションは、ユーザインターフェイス（user interface：ＵＩ）ソフトウェアモジュールまたはコンポーネントなどの１つ以上のエンタープライズソフトウェアモジュールまたはコンポーネントを含み得る。
【００２０】
エンタープライズデータは、組織またはビジネスに関する如何なる情報であってもよく、顧客、アポイントメント、会議、機会、顧客対話、プロジェクト、タスク、リソース、注文、企業人員などについての情報を含み得る。エンタープライズデータの例として、業務関連の記録、アポイントメントデータ、顧客連絡先情報、作業指示書、資産目録、写真、連絡先情報、カレンダー情報、企業階層情報（たとえば企業の組織図情報）などが挙げられる。
【００２１】
明瞭にするために、いくつかの周知のコンポーネント、たとえばハードドライブ、プロセッサ、オペレーティングシステム、電源、インターネットサービスプロバイダ（Internet Service Provider：ＩＳＰ）、クラスローダ、バイトコードコンパイラなどは、図から省かれている。しかしながら、本教示にアクセスできる当業者であれば、いずれのコンポーネントを実装するべきかと、所与の実装についてのニーズを満たすようにそれらコンポーネントを如何に実装するべきかとについて認識するだろう。
【００２２】
図１は、レプレゼンテーショナル・ステート・トランスファ（ＲＥＳＴ）サービスの自動生成を可能にするシステム１０の第１の例を示す図である。本例の実施形態においては、システム１０は、サービスインターフェイス２２に関して、（単にコードジェネレータとも称される）コードジェネレータユーティリティアプリケーションプログラミングインターフェイス（Application Programming Interface：ＡＰＩ）１６によってサービスプロジェクト２８のウェブサービスをＲＥＳＴサービス３０に変換するのを容易にするように適合されている。
【００２３】
なお、システム１０のさまざまなモジュールが、本教示の範囲から逸脱することなく、図示されるのとは異なる態様でグループ化され、配置され、連結されおよび／または分散され得ることに留意されたい。たとえば、代替的なグループ化の際に、コードジェネレータ１６はデベロッパシステム２０の一部と見なされてもよく、Ｊｅｒｓｅｙ  ＲＥＳＴコンテナ１８および付随のサービス３０は、Ｊａｖａランタイムシステムまたはプラットフォーム２４の一部と見なされてもよい。同様に、いくつかの実現例においては、モジュール間の相互接続は図示されるものとは異なっていてもよい。
【００２４】
システム１０の第１の例は、ＲＥＳＴサービス３０などの１つ以上のサービスによって１つ以上のエンタープライズデータベース３２と通信するＲＥＳＴクライアント１４を含む。ＲＥＳＴサービス３０はデプロイメント対応コードを含む。このデプロイメント対応コードは、Ｊａｖａランタイムシステム２４によって実行されてもよく、サービスインターフェイス２２に従ってエンタープライズデータベース３２によって維持されるデータへのアクセスを容易にするように適合されている。
【００２５】
説明の便宜上、ＲＥＳＴクライアントは、ＲＥＳＴサービスをサポートするシステムにおいて動作するかまたは当該システムと通信する如何なるクライアントであってもよい。同様に、ＲＥＳＴサーバは、ＲＥＳＴアーキテクチャスタイルで使用されるように適合されるかまたはＲＥＳＴサービスで使用されるように適合された如何なるサーバであってもよい。クライアントは、サーバと称される別のコンピュータまたはシステムからコンテンツを受信するように適合された如何なるコンピュータ、システムまたはネットワークリソースであってもよい。サーバシステムは１つ以上のサーバの如何なる集合体であってもよい。
【００２６】
一例としてのデベロッパシステムおよびグラフィカルユーザインタフェイス（Graphical User Interface：ＧＵＩ）２０（単にデベロッパシステムとも称される）は、コードジェネレータユーティリティＡＰＩ１６およびサービスインターフェイス２２と通信する。デベロッパシステム２０はＲＥＳＴ解析ツール２６を含む。ＲＥＳＴ解析ツール２６は、サービスインターフェイス２２の解析を容易にして、解析の結果を含む拡張可能マークアップ言語（ＸＭＬ）ファイルを生成するように適合されたコンピュータコードを含む。
【００２７】
ＲＥＳＴ解析ツール２６はさらに、サービスプロジェクト２８およびコードジェネレータ１６と通信する。コードジェネレータ１６は、サービスインターフェイス２２の解析結果とともにＸＭＬファイルを受信し、さらに、サービスプロジェクト２８に関するサービスプロジェクト情報を受信し得る。サービスプロジェクト情報は、ＲＥＳＴサービス３０に変換されるべきウェブサービスを特徴付けるクラスファイルを含んでいる。コードジェネレータ１６は、デベロッパシステム２０からＸＭＬファイルを受信し、次いで、デベロッパシステム２０から受信した入力に基づいてＲＥＳＴサービス３０を自動的に生成するためのプロセスを実行する。
【００２８】
サービスプロジェクト２８は、まだＲＥＳＴサービスとして動作するように構成されていないサービスについてのコンピュータコードを含み得る。このコンピュータコードは、サービスインターフェイス２２の解析に従ってＲＥＳＴサービス３０を生成する際に使用されるように、コードジェネレータＡＰＩ１６に送達されるかまたは当該コードジェネレータＡＰＩ１６にアクセス可能であるパッケージの一部を表わし得る。
【００２９】
コードジェネレータ１６は、ＲＥＳＴサービス３０が、サービスインターフェイス２２を介して利用可能なすべての必須のＲＥＳＴマッピング済みサービスにアクセス可能となるように（すなわち、当該サービスをコールし得るように）、当該ＲＥＳＴサービス３０を生成するように適合されている。コードジェネレータ１６はＪａｖａアーカイブとして実現されてもよい。
【００３０】
ＲＥＳＴサービス３０はＪｅｒｓｅｙ  ＲＥＳＴコンテナ１８を介して記憶され、これは、ＲＥＳＴサービス３０を含むプログラミング言語クラスについてのダンプ位置を表わしている。説明の便宜上、プログラミング言語クラスは、ソフトウェアコードの一部として用いられる如何なる計算オブジェクトであってもよく、データおよび／または機能（たとえば属性および／または方法）をカプセル化し得るものである。
【００３１】
本実施形態の例においては、ＲＥＳＴサービス３０は、Ｊｅｒｓｅｙ  ＲＥＳＴｆｕｌ  Ｗｅｂサービスフレームワークに従って実現されるＲＥＳＴｆｕｌウェブサービスを表わす。Ｊｅｒｓｅｙ  ＲＥＳＴｆｕｌ  Ｗｅｂサービスフレームワークは、Ｊａｖａ仕様要求（Java Specification Request：ＪＳＲ）３１１および３３９に準拠して、ＪＡＸ−ＲＳ（ＲＥＳＴｆｕｌ  ＷｅｂサービスのためのＪａｖａ  ＡＰＩ）ＡＰＩに従ってＪａｖａでのウェブサービスの実現を容易にするオープンソースフレームワークである。相互に通信するウェブリソースのＪｅｒｓｅｙ実装により、コンテナ１８などのＪａｖａサーブレットコンテナにおいてＲＥＳＴｆｕｌウェブサービスを実現することを容易にするライブラリが提供される。
【００３２】
Ｊａｖａランタイムシステム２４は、Ｊａｖａ仮想マシン（Java Virtual Machine：ＪＶＭ）と、Ｊａｖａ  ＡＰＩ、クラスローダ、プロファイラなどを含む関連するプラットフォームとを含み得るものであって、ＲＥＳＴサービス３０のコンピュータコードを（たとえばジャストインタイム（Just-In-Time：ＪＩＴ）コンパイラによって）選択的に実行するかもしくは解釈するかまたは実行および解釈の両方を行なうように適合されている。ＲＥＳＴクライアント１４は、ブラウザと、ＡＰＩと、他のクライアント側ソフトウェアとを含み得る。他のクライアント側ソフトウェアは、ＲＥＳＴサービス３０を用いるアプリケーションをコールするために、ＲＥＳＴサービス３０をコールするか呼出すかまたは使用するように適合されている。
【００３３】
たとえば、ＲＥＳＴクライアント１４は、ＲＥＳＴサービス３０および付随するＪａｖａランタイムシステム２４によってエンタープライズデータベース３２を介して提供されるデータおよび／または機能を要求してもよい。ＲＥＳＴクライアント１４（すなわちリクエスタ）は、サービスインターフェイス２２を介してサーバシステム１２（すなわちプロバイダ）に要求メッセージを送信してもよい。要求メッセージは、Ｊａｖａランタイムシステム２４によって実行されるＲＥＳＴサービス３０にアドレス指定されてもよい。次いで、ＲＥＳＴサービス３０を実行させることにより、要求に従ってエンタープライズデータベース３２からデータが検索され、さらに、サービスインターフェイス２２を用いてデータ検索の結果をＲＥＳＴクライアント１４に送信することが容易になる。
【００３４】
要約すると、コードジェネレータユーティリティＡＰＩ１６は、ＲＥＳＴサービスの自動生成を容易にする。各々のサービスインターフェイス２２はその特徴について解析され、次いで、結果として得られた解析データがコードジェネレータ１６に供給されて、ＲＥＳＴサービス３０の自動生成が容易になる。サービスインターフェイス詳細に基づいてＲＥＳＴサービスコンピュータコードを自動生成することにより、この明細書中に記載されるように、ＲＥＳＴサービス３０を開発してデプロイするのに必要な開発時間およびエラーが実質的に削減され得る。
【００３５】
デベロッパシステム２０を採用しているデベロッパは、サービスインターフェイス２２を特徴付けるＸＭＬファイルを手動で作成してもよく、および／または、ＲＥＳＴ解析ツール２６を用いてもよい。ＸＭＬファイルの一例を以下にさらに十分に説明する。
【００３６】
ウェブサービスの展開中、サービスプロジェクト２８は、コードジェネレータＡＰＩ１６および付随するＪａｖａランタイムシステム２４によって使用されるように、ＸＭＬファイルにおいて指定されるクラス経路において維持されている。デベロッパは、ＧＥＴおよび／またはＰＯＳＴハイパーテキスト・トランスファ・プロトコル（ＨＴＴＰ）法などによってコードジェネレータ１６をコールするかまたは起動させるためにデベロッパシステム２０を用いてもよい。
【００３７】
（ＲＥＳＴサービス３０の位置に対応する）メソッドコールで指定されるダンプ位置では、すべてのｊａｖａ  ＲＥＳＴリソースファイルが生成されており使用できるよう準備が整っていることとなる。すべてのサービス依存性（たとえば他のサービスに対するＲＥＳＴサービス３０の依存性）は、ＲＥＳＴサービス３０に自動的にインポートされるか、または、他の場合には、ＲＥＳＴサービス３０が適切に機能することを可能にするための役割を果たす。
【００３８】
なお、一般に、ＲＥＳＴサービス３０などのウェブサービスが、サーバ側アプリケーションおよびクライアント側アプリケーションを含むさまざまなウェブアプリケーションによってコールされ得るかまたは使用され得ることに留意されたい。たとえば、ＲＥＳＴクライアント１４のＡＰＩは、サーバシステム１２に対してサービスを要求するためにＲＥＳＴクライアント１４によって用いられてもよい。サーバシステム１２は、本教示の範囲から逸脱することなく、ＲＥＳＴクライアント１４とインターフェイスをとり得る他のウェブアプリケーションを含み得る。
【００３９】
説明の便宜上、ウェブアプリケーションは、如何なるコンピュータコードであってもよく、たとえば、インターネットまたはイントラネットなどのネットワークを介して１つ以上のクライアントデバイスによってアクセスされるように適合されたソフトウェアアプリケーションであってもよい。ウェブアプリケーションは、１つ以上のウェブサービスのコールおよび／または実装を行い得る。
【００４０】
ウェブサービスは、ワールドワイドウェブなどのネットワークを介してクライアントからサーバに送信される信号（たとえば要求メッセージ）に応答してサーバ上で実行されるソフトウェアによって起動または実現される如何なるソフトウェア機能または動作であってもよい。ウェブサービス動作を実現するソフトウェアは、この明細書中においてウェブサービス、ソフトウェアサービスまたは単にサービスと称されてもよい。
【００４１】
一般に、ウェブアプリケーションは、Ｊａｖａ、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｆｌａｓｈ、Ｓｉｌｖｅｒｌｉｇｈｔなどのさまざまな方法および付随するメカニズムによって実現され得る。さらに、いくつかのウェブアプリケーションは、いくつかのプロセスを実行するプロセステンプレートによって規定されてもよい。この場合、各々のプロセスは、別個のウェブサービスによって実現されている。
【００４２】
一般に、ソフトウェアサービスは、たとえばミドルウェアを介して指定されるとおりに、予め定められたインターフェイスを介してアクセスする（ネットワークを介して分散され得る）さまざまなアプリケーションまたはプロセスによって再使用され得る機能（たとえば能力）であり、サービス記述と一致している機能を提供する。
【００４３】
ＲＥＳＴアーキテクチャスタイルに付随するＷｅｂサービスはＲＥＳＴｆｕｌウェブサービスと称される。ＲＥＳＴアーキテクチャスタイルは、スケーラビリティ、変更可能性、再使用可能性などを容易にするように適合され得るユニフォームインターフェイスとの互換性を備えたウェブサービスについての制約を規定する。
【００４４】
ＲＥＳＴアーキテクチャスタイルは、データおよび機能がリソースと見なされているクライアントサーバアーキテクチャを必要とする。これらのリソースは、ウェブページにおけるリンクに対応し得るユニフォームリソース識別子（ＵＲＩ）を用いてアクセスされる。リソースは、十分に定義された動作（たとえばＧＥＴ、ＰＯＳＴなど）と、ＨＴＴＰなどの通信プロトコルとを用いることで機能させられる。したがって、クライアントおよびサーバは、標準化されたインターフェイスおよびプロトコルを用いてリソースの表現を交換する。
【００４５】
サービスインターフェイス２２は、ＲＥＳＴクライアント１４を含むネットワークリソースとサーバシステム１２との間のＲＥＳＴ通信のためのユニフォームインターフェイスを表わしている。説明の便宜上、サービスインターフェイスは、ウェブサービスを含むネットワークリソース間の相互通信を容易にする如何なるメカニズムであってもよい。サービスインターフェイスは、公開されたサービスと、当該サービスと通信するソフトウェアアプリケーションおよび／または他のサービスとの間で契約を実現して実施するように適合されていることが多い。
【００４６】
ＲＥＳＴシステム（たとえばシステム１０）においては、クライアント（すなわちサービスのためのリクエスタ）からの要求は、当該要求を処理するために用いられる情報を含んでいる。リクエスタとプロバイダ（たとえばクライアントとサーバ）との間の通信対話を特徴付けるセッション状態がクライアントにおいて記憶されてもよい。しかしながら、セッション状態はサーバ（たとえばサーバシステム１２）によって別のサービスに転送することができる。
【００４７】
クライアント（たとえばＲＥＳＴクライアント１４）は、サーバシステム１２に対して新しい状態に移行するようにとの要求を発行する。各々のアプリケーション状態の表現は、後続のクライアント状態遷移についてのリンク（ＵＲＩ）を含んでもよい。サービスインターフェイス２２により、アプリケーション、サービスなどが分離し易くなり、これにより、潜在的に異種のアプリケーションおよびシステムが相互に通信および動作することが可能となる。
【００４８】
図２は、図１のコードジェネレータを特徴付けるクラス構造４０の一例を示すブロック図である。図１のコードジェネレータ１６によってＲＥＳＴウェブサービスのために構築されたクラスは概してクラス４０と一致することとなる。しかしながら、当業者であれば、特定のクラスの詳細が異なり得ること、および、メソッド属性を含むさまざまな数およびタイプの属性を有し得ることを認識するだろう。
【００４９】
クラス４０は、クラス属性データ４２と、（さまざまなライブラリ、プロトコル仕様などを含み得る）コンピューティング環境によってサポートされるメソッドセクション４４のメソッド属性またはコンポーネント５４とを含む。
【００５０】
クラスデータ４２（すなわち属性）は、経路（＠ｐａｔｈ）４６の識別、変更子４８、サービス名５０、およびパッケージ５２の参照を含む。メソッドセクション４４のメソッドコンポーネントは、経路メソッド５６（＠ｐａｔｈ）、受領メソッド５８（＠ａｃｃｅｐｔｓ）、ＧＥＴメソッド６０（＠ＧＥＴ）、クエリパラメータメソッド６２（＠ＱｕｅｒｙＰａｒａｍ）、入力変数メソッド６４、出力変数メソッド６６、初期化メソッド６８および呼出しメソッド７０を特徴付ける属性を含む。
【００５１】
図１および図２を参照すると、コードジェネレータクラス４０のメソッド属性６４および一般クラス属性４２は、ＲＥＳＴサービス３０の生成を容易にするために、（ＲＥＳＴサービス３０に変換されることになっておりサービスプロジェクト２８の一部であるウェブサービスのクラスを含む）デベロッパシステム２０から受取ったパッケージを処理するために図１のコードジェネレータ１６によって用いられるように適合されている。
【００５２】
図３は、図１のコードジェネレータを介して実現され、図１のサービスインターフェイス２２を特徴付けるＸＭＬファイルを介して提供されるパッケージを処理するように適合されたプロセス８０の一例を示すフロー図である。
【００５３】
メソッド８０の一例は初期解析ステップ８２を含む。初期解析ステップ８２は、パッケージにおいて示されるリソース名に対して必須の変更を実現するための情報を取得するために、（図１のデベロッパシステム２０を介してコードジェネレータ１６によって受信されるＸＭＬファイルを含む）パッケージを解析するステップを含む。
【００５４】
次に、パッケージにおけるクラスが名前処理ステップ８４に渡される。名前処理ステップ８４は、図２のコードジェネレータクラス４０に含まれるように示されているクラス属性４２に関して、名前アノテーション変更子を用いて各々のクラスを処理するステップを含む。
【００５５】
次に、メソッド処理ステップ８６は、パッケージにおける各々のクラスごとに、図２のコードジェネレータクラス４０に含まれるように示されているメソッド５４を選択的に処理する。クラス属性４２および付随するメソッド属性５４の処理は、以下により十分に説明されるように、マッピング論理に従ったマッピングを含み得る。
【００５６】
チェックステップ８８は、次いで、パッケージにおけるすべてのクラスに対して名前処理８４およびメソッド処理８６が実行されたか否かを確認するようにチェックする。実行されていれば、ダンプファイル作成ステップ９０が実行される。実行されていなければ、パッケージにおけるすべてのクラスが完全に処理されるまで、制御が名前処理ステップ８４およびメソッド処理ステップ８６に戻される。
【００５７】
ダンプファイル作成ステップ９０は、図１のＲＥＳＴサービス３０を実現するために必要とされるサービスクラスがすべて処理されているダンプファイルを自動的に作成するステップを含む。
【００５８】
図１〜図３を参照すると、サービスインターフェイス２２を解析することによって作成される情報には、名前、変更子タイプ、アノテーションなどのクラス属性が含まれるとともに、メソッド名、入力引数およびリターンタイプなどのメソッドデータがさらに含まれている。
【００５９】
サービスインターフェイス仕様の一例は、コードジェネレータ１６に供給されるべきＸＭＬファイルを作成するために図１のデベロッパシステム２０によって解析され得るものであって、以下の擬似コードによって示される：
【００６０】
【数１】
0006591458.tif 000002
【００６１】
サービスインターフェイス２２の解析に起因して得られるＸＭＬファイルの一部の例は以下のとおりである：
【００６２】
【数２】
0006591458.tif 000003
【００６３】
サービスインターフェイス２２の属性をＲＥＳＴサービス３０の属性にマッピングするためにコードジェネレータ１６によって用いられるマッピングメトリクスの一例が以下の表において提供される。
【００６４】
【表１】
0006591458.tif 000004
【００６５】
コードジェネレータ１６の出力の一部についての擬似コードの一例は以下のとおりである：
【００６６】
【数３】
0006591458.tif 000005
【００６７】
図４は、図１〜図３の実施形態で用いられるように適合された方法１００の一例を示すフロー図である。方法１０２の一例は、図１のサービスインターフェイス２２などのサービスインターフェイスの１つ以上の特徴を決定するステップを含む第１のステップ１０２を備える。
【００６８】
図１〜図４を参照すると、第２のステップ１０４は、上記決定に関連付けられた情報を含むファイル（たとえばＸＭＬファイル）を受信するステップを含む。ＸＭＬファイルは図１のデベロッパシステム２０によって提供されてもよい。
【００６９】
第３のステップ１０６は、ファイルに基づいてレプレゼンテーショナル・ステート・トランスファ（ＲＥＳＴ）サービスを実現するようにコンピュータコードを自動的に生成するステップを含む。コンピュータコードは、図４のプロセス８０に従って図１のコードジェネレータ１６によって自動的に生成されてもよい。
【００７０】
なお、当該方法１００が本教示の範囲から逸脱することなく拡張または変更され得ることに留意されたい。たとえば、方法１００は、コードジェネレータを用いるステップをさらに含んでもよい。当該コードジェネレータは、図１のＲＥＳＴ解析ツール２６からの出力としてＸＭＬファイルを受信して、ＲＥＳＴサービス３０をともに含むコンピュータコード（すなわちクラス）を自動的に生成する。
【００７１】
いくつかの実現例においては、サービスプロジェクト２８の一部であるウェブサービスは、コードジェネレータ１６によってＲＥＳＴサービス３０にマッピングされる１つ以上のリソースを含む。
【００７２】
一例としての方法１００はさらに、コードジェネレータ１６を用いてダンプファイルを作成するステップを含む。当該ダンプファイルは、生成されたコンピュータコードを含む１つ以上のプログラミング言語クラスを含んでいる。コードジェネレータ１６は、名前アノテーション変更子を用いることで、当該コードジェネレータ１６が受信したパッケージにおいて指定されているクラスを処理することを容易にし得る。
【００７３】
当該方法はさらに、コードジェネレータ１６を用いてパッケージのクラスのうちの各々のメソッドを処理することにより、１つ以上の更新済みメソッドをこれに応じて作成するステップを含み得る。更新済みメソッドは、サービスインターフェイス２２の特徴にとって必要とされる制限または制約に準拠するように更新される。
【００７４】
一例としての方法１００はさらに、Ｊｅｒｓｅｙ  ＲＥＳＴコンテナ（たとえば図１のコンテナ１８）によってＪａｖａプラットフォーム上で（たとえば図１のＪａｖａランタイムシステム２４によって表わされるように）１つ以上のプログラミング言語クラス（たとえばＪａｖａクラス）をデプロイするステップを含み得る。Ｊａｖａクラスは、コードジェネレータ１６によって出力されるとともにＲＥＳＴサービス３０によって表わされるダンプファイルの一部であってもよい。当該ダンプファイルは、生成されたすべてのＪａｖａ  ＲＥＳＴリソースファイルについてのコンピュータコードを含む。すべてのサービス依存性はジャンプファイルに組込まれている。
【００７５】
方法１００はさらに、デベロッパシステム２０からＧＥＴ  ＨＴＴＰメソッドおよび／またはＰＯＳＴメソッドを受領したことに応じてＪａｖａ（登録商標）アーカイブによって実現されるコンピュータコード（たとえばコードジェネレータ１６）を用いて、コードジェネレータ１６の実行をトリガするステップを含み得る。
【００７６】
特定の実施形態に関して説明がなされてきたが、これらの特定の実施形態は単に例示的なものに過ぎず、限定的なものではない。たとえば、いくつかの実施形態ではＪｅｒｓｅｙ  ＲＥＳＴサービスの自動生成を説明しているが、実施形態はこれらに限定されない。たとえば、Ａｐａｃｈｅ  ＣＸＦ（ＴＭ）、ＲｅｓｔＥａｓｙまたはＷｉｌｄＦｌｙの実現が可能である。
【００７７】
如何なる好適なプログラミング言語を用いても、Ｃ、Ｃ＋＋、Ｊａｖａ、アセンブリ言語などを含む特定の実施形態のルーチンを実現することができる。手続き指向型またはオブジェクト指向型などのさまざまなプログラミング技術を用いることができる。ルーチンは単一の処理装置または複数のプロセッサ上で実行することができる。ステップ、動作または演算は特定の順序で表わされ得るが、この順序はさまざまな特定の実施形態において変更されてもよい。いくつかの特定の実施形態においては、この明細書中で連続的なものとして示されている複数のステップは同時に実行することができる。
【００７８】
特定の実施形態は、命令実行システム、装置、システムもしくはデバイスによって、またはそれらに関連付けて用いられるようにコンピュータ読取可能記憶媒体において実現されてもよい。特定の実施形態は、ソフトウェアもしくはハードウェアまたはそれらの組合せで制御論理の形態で実現することができる。制御論理は、１つ以上のプロセッサによって実行されると、特定の実施形態において記載されているものを実行するように動作可能であり得る。
【００７９】
特定の実施形態は、特定用途向け集積回路、プログラマブルロジックデバイス、フィールドプログラマブルゲートアレイ、光学、化学的、生物学的、量子的またはナノ設計型のシステム、コンポーネントおよびメカニズムを用いることによる、プログラムド汎用デジタルコンピュータを用いることによって実現されてもよい。一般に、特定の実施形態の機能は当該技術において公知である如何なる手段によっても達成することができる。分散型のネットワーク化システム、コンポーネントおよび／または回路を用いることができる。データの通信または転送は有線、無線または他のいずれかの手段によってなされてもよい。
【００８０】
添付の図面／図に示される要素のうちの１つ以上が、特定用途に応じて有用となるように、さらに分離された態様もしくは一体化された態様で、または場合によっては削除されるかもしくは動作不能にされた態様で実現可能であることも認識されるだろう。コンピュータが上述の方法のうちのいずれかを実行することを可能にするために機械読取り可能媒体に記憶することができるプログラムまたはコードを実現することも精神および範囲内にある。
【００８１】
この明細書中で、かつ添付の特許請求の範囲全体にわたって用いられる「ａ」、「ａｎ」および「ｔｈｅ」という語は、文脈に別段明確な指示がない限り、複数の指示対象を含んでいる。また、この明細書中で、かつ添付の特許請求の範囲全体にわたって用いられる「ｉｎ」の意味は、文脈に別段明確な指示がない限り、「において（ｉｎ）」および「の上に（ｏｎ）」の意味を含んでいる。
【００８２】
このように、特定の実施形態をこの明細書中に記載してきたが、変更の許容範囲、さまざまな変更および置換えが上述の開示において意図されており、場合によっては、特定の実施形態のいくつかの特徴が、上述の範囲および精神から逸脱することなく他の特徴を対応させて使用することなく採用され得ることが認識されるだろう。したがって、特定の状況または材料を本質的な範囲および精神に適合させるために多くの変更がなされてもよい。
【図１】
0006591458.tif 000006
【図２】
0006591458.tif 000007
【図３】
0006591458.tif 000008
【図４】
0006591458.tif 000009