JP6591458B2 - Restサービスソースコード生成 - Google Patents

Restサービスソースコード生成 Download PDF

Info

Publication number
JP6591458B2
JP6591458B2 JP2016572289A JP2016572289A JP6591458B2 JP 6591458 B2 JP6591458 B2 JP 6591458B2 JP 2016572289 A JP2016572289 A JP 2016572289A JP 2016572289 A JP2016572289 A JP 2016572289A JP 6591458 B2 JP6591458 B2 JP 6591458B2
Authority
JP
Japan
Prior art keywords
service
rest
computer
class
code
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.)
Active
Application number
JP2016572289A
Other languages
English (en)
Other versions
JP2017523506A (ja
Inventor
ニルドーシュ,チョウハン
Original Assignee
オラクル・インターナショナル・コーポレイション
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by オラクル・インターナショナル・コーポレイション filed Critical オラクル・インターナショナル・コーポレイション
Publication of JP2017523506A publication Critical patent/JP2017523506A/ja
Application granted granted Critical
Publication of JP6591458B2 publication Critical patent/JP6591458B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Description

関連出願の相互参照
本願は、以下の出願、すなわち、2012年5月17日に提出され、「プロキシ化されたハイパーテキストマークアップ言語コンテンツにおいて動的に生成されたユニフォームリソースロケータを書換えるための方法(METHOD FOR REWRITNG DYNAMICALLY GENERATED UNIFORM RESOURCE LOCATORS IN PROXIED HYPER TEXT MARKUP LANGUAGE CONTENT)」と題され、この明細書において十分に記載されるように引用によりここに援用されている米国特許出願連続番号第13/474,709号(弁理士事件番号 ORACP0062)に関する。
背景
本願は、ソフトウェアに関し、より特定的には、ウェブサービスなどの遠隔アクセス可能なソフトウェアの開発および実装を容易にするためのシステムおよび方法に関する。
遠隔アクセス可能なソフトウェアは、モバイルデバイスなどの分散型クライアントにアクセス可能なエンタープライズクラウドベースのソフトウェアを含む、要求の厳しいさまざまなアプリケーションにおいて用いられている。多くのエンタープライズコンピューティング環境においては、さまざまなソフトウェアシステムが、インターネットを介してソフトウェアシステム間でデータをやり取りするために、たとえばウェブサービスを介して、または他のメカニズムを介して、データを交換しなければならなくなる。データを要求するソフトウェアシステムはサービスリクエスタと称され、要求を処理してデータを提供するソフトウェアシステムはサービスプロバイダと称される。
このような遠隔アクセス可能なソフトウェアを実現するために用いられる、ウェブサービス、アプリケーションプログラミングインターフェイス(API:Application Programming Interface)などの開発を容易にするためのソフトウェア開発方法およびツールは、コンピュータコードの迅速な開発およびインストールを可能にする効率的なメカニズムを必要とすることが多い。
従来より、レプレゼンテーショナル・ステート・トランスファ(Representational State Transfer:REST)サービスなどのウェブサービスを開発するのに、サービスインターフェイスの詳細、すなわち、クライアントデバイスとリモートコンテンツサーバとの間における通信インターフェイスの詳細、を解析することが必要となる。このような解析はしばしば手動で実行される、すなわちソフトウェア開発ツールによってハンドコードされる。しかしながら、手動でのアプローチは、インターフェイスオブジェクトおよびファイルを開くこと;必要に応じてサービスコンポーネントを視覚的にチェックおよび編集すること;ならびに、これに応じてサービスコードを編集すること;を必要とする可能性があり、過剰に時間を費やしてしまい、かつエラーが発生し易くなる可能性がある。
一般に、既存のツールを用いてAPIインターフェイスによってRESTサービスを開発する場合、過度に労働集約的となり、費用がかかり、かつエラーが発生し易くなる可能性がある。
概要
一例としての方法は、レプレゼンテーショナル・ステート・トランスファ(REST)ウェブサービスなどのウェブサービスの開発を容易にする。一例としての当該方法は、RESTサービスのためのユニフォームサービスインターフェイスなどのサービスインターフェイスの1つ以上の特徴を決定するステップと、上記決定に関連付けられた情報を含むファイルを受信するステップと、ファイルに基づいてRESTサービスを実現するようにコンピュータコードを自動的に生成するステップとを含む。
より具体的な実施形態においては、サービスインターフェイスの特徴記述は、XMLファイルにおいて維持される情報を含む。XMLファイルは、サービスインターフェイスに適用されたREST解析ツールの出力を表わし得る。ウェブサービスは、当該自動的に生成するステップによってRESTサービスにマッピングされていた1つ以上のリソースを利用し得るかまたは含み得る。
コードジェネレータが、RESTサービスを含むコンピュータコードを自動的に生成するために用いられてもよい。コードジェネレータは、生成されたコンピュータコードを含む1つ以上のプログラミング言語クラスを含んでいるダンプファイルを作成するように適合される。名前アノテーション変更子は、コードジェネレータによって受信されたパッケージにおいて指定されているクラスの処理を容易にする。パッケージのうちの各々のクラスの各メソッドは、これに応じて、サービスインターフェイス詳細(すなわち情報)に従って更新された1つ以上の更新済みメソッドを生成するように処理される。
特定の実施形態においては、1つ以上のプログラミング言語クラスは、Jersey RESTコンテナなどのRESTコンテナによってJava(登録商標)プラットフォーム上に展開されるように適合されている。出力ダンプファイルは、生成されたすべてのJava RESTリソースファイルについてのコンピュータコードを含む。コードジェネレータは、Javaアーカイブによって維持されているコンピュータコードを用いている。
一例としての当該方法は、コンピュータコードの実行をトリガする(すなわちコードジェネレータ)ためのコマンドを受信するステップをさらに含み得る。コマンドは、GETハイパーテキスト・トランスファ・プロトコル(HyperText Transfer Protocol:HTTP)法、POST HTTP法または他の方法であってもよい。コードジェネレータは、ダンプファイルに組込めるようにすべてのサービス依存性を自動的にインポートするように適合される。
したがって、この明細書中に記載されるいくつかの実施形態は、RESTサービスの書込みを容易にするための系統的なガイダンスをデベロッパに提供し、さらに、RESTサービスを迅速に生成するかまたは他のタイプのウェブサービスをRESTサービスに変換するためのコード生成ツールを提供する。いくつかの特定の実施形態は、特に、Jersey RESTサービスを生成するために適合されており、同様の方法を、Apache CXFまたはRestEasyを採用しているプラットフォームなどの他のプラットフォームに拡張することができる。
既存のウェブサービスをRESTサービスに変換するためのオーバーヘッドコードの生成を含むRESTサービスのための自動コード生成を可能にすることにより、開発費およびヒューマンエラーが低減される可能性がある。
この明細書中に開示される特定の実施形態の特徴および利点が、明細書の残りの部分および添付の図面を参照することによってさらに理解され得る。
レプレゼンテーショナル・ステート・トランスファ(REST)サービスの自動生成を可能にするシステムの第1の例を示す図である。 図1のコードジェネレータを特徴付けるクラスの一例を示すブロック図である。 図1のコードジェネレータによって実現されるプロセスの一例であって、拡張可能マークアップ言語(eXtensible Markup Language:XML)によって提供されるとともにサービスインターフェイスを特徴付けるパッケージを処理するように適合されたプロセスの一例を示すフロー図である。 図1〜図3の実施形態とともに使用されるように適合された方法の一例を示すフロー図である。
実施形態の詳細な説明
説明の便宜上、エンタープライズはビジネス、大学、政府、軍事などの、人で構成される如何なる組織であってもよい。「組織」および「エンタープライズ」という語はこの明細書中では同義で用いられている。組織の人員(すなわち企業人員)は、従業員、契約者、取締役員、顧客窓口などの組織に関係のある如何なる個人をも含み得る。
エンタープライズコンピューティング環境はビジネスまたは組織のために用いられる如何なるコンピューティング環境であってもよい。コンピューティング環境は、コンピュータ処理を含む1つ以上のタスクを実行するために用いられるコンピューティングリソースの如何なる集合であってもよい。一例としてのエンタープライズコンピューティング環境は、ネットワークにわたって分散されたさまざまなコンピューティングリソースを含み、さらに、イントラネットウェブサーバ、データベース、ローカルのハードディスクまたはファイルサーバ上のファイル、電子メールシステム、ドキュメント管理システム、ポータルなどの上にある私用の共有コンテンツを含み得る。
説明の便宜上、ウェブリソースは、コンピューティング言語クラス(たとえばJavaクラス)、オブジェクト、ウェブサービスなどを含め、コンピュータネットワークを介して命名可能でありかつアドレス指定可能であれば如何なるものであってもよい。一般に、URLなどのユニフォームリソース識別子(Uniform Resource Identifier:URI)またはウェブアドレスにより参照されるものはいずれもウェブリソースと見なすことができる。URIは、ネットワークアドレスを指定する如何なる文字列であってもよい。
エンタープライズソフトウェアは、エンタープライズリソースの管理、顧客関係の管理などの、如何なるエンタープライズ関連のプロセスまたは動作の実現をも容易にするように適合された任意のセットのコンピュータコードであり得る。「エンタープライズソフトウェア」および「エンタープライズアプリケーション」という語は、この明細書中においては同義で用いられ得る。しかしながら、エンタープライズアプリケーションは、ユーザインターフェイス(user interface:UI)ソフトウェアモジュールまたはコンポーネントなどの1つ以上のエンタープライズソフトウェアモジュールまたはコンポーネントを含み得る。
エンタープライズデータは、組織またはビジネスに関する如何なる情報であってもよく、顧客、アポイントメント、会議、機会、顧客対話、プロジェクト、タスク、リソース、注文、企業人員などについての情報を含み得る。エンタープライズデータの例として、業務関連の記録、アポイントメントデータ、顧客連絡先情報、作業指示書、資産目録、写真、連絡先情報、カレンダー情報、企業階層情報(たとえば企業の組織図情報)などが挙げられる。
明瞭にするために、いくつかの周知のコンポーネント、たとえばハードドライブ、プロセッサ、オペレーティングシステム、電源、インターネットサービスプロバイダ(Internet Service Provider:ISP)、クラスローダ、バイトコードコンパイラなどは、図から省かれている。しかしながら、本教示にアクセスできる当業者であれば、いずれのコンポーネントを実装するべきかと、所与の実装についてのニーズを満たすようにそれらコンポーネントを如何に実装するべきかとについて認識するだろう。
図1は、レプレゼンテーショナル・ステート・トランスファ(REST)サービスの自動生成を可能にするシステム10の第1の例を示す図である。本例の実施形態においては、システム10は、サービスインターフェイス22に関して、(単にコードジェネレータとも称される)コードジェネレータユーティリティアプリケーションプログラミングインターフェイス(Application Programming Interface:API)16によってサービスプロジェクト28のウェブサービスをRESTサービス30に変換するのを容易にするように適合されている。
なお、システム10のさまざまなモジュールが、本教示の範囲から逸脱することなく、図示されるのとは異なる態様でグループ化され、配置され、連結されおよび/または分散され得ることに留意されたい。たとえば、代替的なグループ化の際に、コードジェネレータ16はデベロッパシステム20の一部と見なされてもよく、Jersey RESTコンテナ18および付随のサービス30は、Javaランタイムシステムまたはプラットフォーム24の一部と見なされてもよい。同様に、いくつかの実現例においては、モジュール間の相互接続は図示されるものとは異なっていてもよい。
システム10の第1の例は、RESTサービス30などの1つ以上のサービスによって1つ以上のエンタープライズデータベース32と通信するRESTクライアント14を含む。RESTサービス30はデプロイメント対応コードを含む。このデプロイメント対応コードは、Javaランタイムシステム24によって実行されてもよく、サービスインターフェイス22に従ってエンタープライズデータベース32によって維持されるデータへのアクセスを容易にするように適合されている。
説明の便宜上、RESTクライアントは、RESTサービスをサポートするシステムにおいて動作するかまたは当該システムと通信する如何なるクライアントであってもよい。同様に、RESTサーバは、RESTアーキテクチャスタイルで使用されるように適合されるかまたはRESTサービスで使用されるように適合された如何なるサーバであってもよい。クライアントは、サーバと称される別のコンピュータまたはシステムからコンテンツを受信するように適合された如何なるコンピュータ、システムまたはネットワークリソースであってもよい。サーバシステムは1つ以上のサーバの如何なる集合体であってもよい。
一例としてのデベロッパシステムおよびグラフィカルユーザインタフェイス(Graphical User Interface:GUI)20(単にデベロッパシステムとも称される)は、コードジェネレータユーティリティAPI16およびサービスインターフェイス22と通信する。デベロッパシステム20はREST解析ツール26を含む。REST解析ツール26は、サービスインターフェイス22の解析を容易にして、解析の結果を含む拡張可能マークアップ言語(XML)ファイルを生成するように適合されたコンピュータコードを含む。
REST解析ツール26はさらに、サービスプロジェクト28およびコードジェネレータ16と通信する。コードジェネレータ16は、サービスインターフェイス22の解析結果とともにXMLファイルを受信し、さらに、サービスプロジェクト28に関するサービスプロジェクト情報を受信し得る。サービスプロジェクト情報は、RESTサービス30に変換されるべきウェブサービスを特徴付けるクラスファイルを含んでいる。コードジェネレータ16は、デベロッパシステム20からXMLファイルを受信し、次いで、デベロッパシステム20から受信した入力に基づいてRESTサービス30を自動的に生成するためのプロセスを実行する。
サービスプロジェクト28は、まだRESTサービスとして動作するように構成されていないサービスについてのコンピュータコードを含み得る。このコンピュータコードは、サービスインターフェイス22の解析に従ってRESTサービス30を生成する際に使用されるように、コードジェネレータAPI16に送達されるかまたは当該コードジェネレータAPI16にアクセス可能であるパッケージの一部を表わし得る。
コードジェネレータ16は、RESTサービス30が、サービスインターフェイス22を介して利用可能なすべての必須のRESTマッピング済みサービスにアクセス可能となるように(すなわち、当該サービスをコールし得るように)、当該RESTサービス30を生成するように適合されている。コードジェネレータ16はJavaアーカイブとして実現されてもよい。
RESTサービス30はJersey RESTコンテナ18を介して記憶され、これは、RESTサービス30を含むプログラミング言語クラスについてのダンプ位置を表わしている。説明の便宜上、プログラミング言語クラスは、ソフトウェアコードの一部として用いられる如何なる計算オブジェクトであってもよく、データおよび/または機能(たとえば属性および/または方法)をカプセル化し得るものである。
本実施形態の例においては、RESTサービス30は、Jersey RESTful Webサービスフレームワークに従って実現されるRESTfulウェブサービスを表わす。Jersey RESTful Webサービスフレームワークは、Java仕様要求(Java Specification Request:JSR)311および339に準拠して、JAX−RS(RESTful WebサービスのためのJava API)APIに従ってJavaでのウェブサービスの実現を容易にするオープンソースフレームワークである。相互に通信するウェブリソースのJersey実装により、コンテナ18などのJavaサーブレットコンテナにおいてRESTfulウェブサービスを実現することを容易にするライブラリが提供される。
Javaランタイムシステム24は、Java仮想マシン(Java Virtual Machine:JVM)と、Java API、クラスローダ、プロファイラなどを含む関連するプラットフォームとを含み得るものであって、RESTサービス30のコンピュータコードを(たとえばジャストインタイム(Just-In-Time:JIT)コンパイラによって)選択的に実行するかもしくは解釈するかまたは実行および解釈の両方を行なうように適合されている。RESTクライアント14は、ブラウザと、APIと、他のクライアント側ソフトウェアとを含み得る。他のクライアント側ソフトウェアは、RESTサービス30を用いるアプリケーションをコールするために、RESTサービス30をコールするか呼出すかまたは使用するように適合されている。
たとえば、RESTクライアント14は、RESTサービス30および付随するJavaランタイムシステム24によってエンタープライズデータベース32を介して提供されるデータおよび/または機能を要求してもよい。RESTクライアント14(すなわちリクエスタ)は、サービスインターフェイス22を介してサーバシステム12(すなわちプロバイダ)に要求メッセージを送信してもよい。要求メッセージは、Javaランタイムシステム24によって実行されるRESTサービス30にアドレス指定されてもよい。次いで、RESTサービス30を実行させることにより、要求に従ってエンタープライズデータベース32からデータが検索され、さらに、サービスインターフェイス22を用いてデータ検索の結果をRESTクライアント14に送信することが容易になる。
要約すると、コードジェネレータユーティリティAPI16は、RESTサービスの自動生成を容易にする。各々のサービスインターフェイス22はその特徴について解析され、次いで、結果として得られた解析データがコードジェネレータ16に供給されて、RESTサービス30の自動生成が容易になる。サービスインターフェイス詳細に基づいてRESTサービスコンピュータコードを自動生成することにより、この明細書中に記載されるように、RESTサービス30を開発してデプロイするのに必要な開発時間およびエラーが実質的に削減され得る。
デベロッパシステム20を採用しているデベロッパは、サービスインターフェイス22を特徴付けるXMLファイルを手動で作成してもよく、および/または、REST解析ツール26を用いてもよい。XMLファイルの一例を以下にさらに十分に説明する。
ウェブサービスの展開中、サービスプロジェクト28は、コードジェネレータAPI16および付随するJavaランタイムシステム24によって使用されるように、XMLファイルにおいて指定されるクラス経路において維持されている。デベロッパは、GETおよび/またはPOSTハイパーテキスト・トランスファ・プロトコル(HTTP)法などによってコードジェネレータ16をコールするかまたは起動させるためにデベロッパシステム20を用いてもよい。
(RESTサービス30の位置に対応する)メソッドコールで指定されるダンプ位置では、すべてのjava RESTリソースファイルが生成されており使用できるよう準備が整っていることとなる。すべてのサービス依存性(たとえば他のサービスに対するRESTサービス30の依存性)は、RESTサービス30に自動的にインポートされるか、または、他の場合には、RESTサービス30が適切に機能することを可能にするための役割を果たす。
なお、一般に、RESTサービス30などのウェブサービスが、サーバ側アプリケーションおよびクライアント側アプリケーションを含むさまざまなウェブアプリケーションによってコールされ得るかまたは使用され得ることに留意されたい。たとえば、RESTクライアント14のAPIは、サーバシステム12に対してサービスを要求するためにRESTクライアント14によって用いられてもよい。サーバシステム12は、本教示の範囲から逸脱することなく、RESTクライアント14とインターフェイスをとり得る他のウェブアプリケーションを含み得る。
説明の便宜上、ウェブアプリケーションは、如何なるコンピュータコードであってもよく、たとえば、インターネットまたはイントラネットなどのネットワークを介して1つ以上のクライアントデバイスによってアクセスされるように適合されたソフトウェアアプリケーションであってもよい。ウェブアプリケーションは、1つ以上のウェブサービスのコールおよび/または実装を行い得る。
ウェブサービスは、ワールドワイドウェブなどのネットワークを介してクライアントからサーバに送信される信号(たとえば要求メッセージ)に応答してサーバ上で実行されるソフトウェアによって起動または実現される如何なるソフトウェア機能または動作であってもよい。ウェブサービス動作を実現するソフトウェアは、この明細書中においてウェブサービス、ソフトウェアサービスまたは単にサービスと称されてもよい。
一般に、ウェブアプリケーションは、Java、JavaScript(登録商標)、Flash、Silverlightなどのさまざまな方法および付随するメカニズムによって実現され得る。さらに、いくつかのウェブアプリケーションは、いくつかのプロセスを実行するプロセステンプレートによって規定されてもよい。この場合、各々のプロセスは、別個のウェブサービスによって実現されている。
一般に、ソフトウェアサービスは、たとえばミドルウェアを介して指定されるとおりに、予め定められたインターフェイスを介してアクセスする(ネットワークを介して分散され得る)さまざまなアプリケーションまたはプロセスによって再使用され得る機能(たとえば能力)であり、サービス記述と一致している機能を提供する。
RESTアーキテクチャスタイルに付随するWebサービスはRESTfulウェブサービスと称される。RESTアーキテクチャスタイルは、スケーラビリティ、変更可能性、再使用可能性などを容易にするように適合され得るユニフォームインターフェイスとの互換性を備えたウェブサービスについての制約を規定する。
RESTアーキテクチャスタイルは、データおよび機能がリソースと見なされているクライアントサーバアーキテクチャを必要とする。これらのリソースは、ウェブページにおけるリンクに対応し得るユニフォームリソース識別子(URI)を用いてアクセスされる。リソースは、十分に定義された動作(たとえばGET、POSTなど)と、HTTPなどの通信プロトコルとを用いることで機能させられる。したがって、クライアントおよびサーバは、標準化されたインターフェイスおよびプロトコルを用いてリソースの表現を交換する。
サービスインターフェイス22は、RESTクライアント14を含むネットワークリソースとサーバシステム12との間のREST通信のためのユニフォームインターフェイスを表わしている。説明の便宜上、サービスインターフェイスは、ウェブサービスを含むネットワークリソース間の相互通信を容易にする如何なるメカニズムであってもよい。サービスインターフェイスは、公開されたサービスと、当該サービスと通信するソフトウェアアプリケーションおよび/または他のサービスとの間で契約を実現して実施するように適合されていることが多い。
RESTシステム(たとえばシステム10)においては、クライアント(すなわちサービスのためのリクエスタ)からの要求は、当該要求を処理するために用いられる情報を含んでいる。リクエスタとプロバイダ(たとえばクライアントとサーバ)との間の通信対話を特徴付けるセッション状態がクライアントにおいて記憶されてもよい。しかしながら、セッション状態はサーバ(たとえばサーバシステム12)によって別のサービスに転送することができる。
クライアント(たとえばRESTクライアント14)は、サーバシステム12に対して新しい状態に移行するようにとの要求を発行する。各々のアプリケーション状態の表現は、後続のクライアント状態遷移についてのリンク(URI)を含んでもよい。サービスインターフェイス22により、アプリケーション、サービスなどが分離し易くなり、これにより、潜在的に異種のアプリケーションおよびシステムが相互に通信および動作することが可能となる。
図2は、図1のコードジェネレータを特徴付けるクラス構造40の一例を示すブロック図である。図1のコードジェネレータ16によってRESTウェブサービスのために構築されたクラスは概してクラス40と一致することとなる。しかしながら、当業者であれば、特定のクラスの詳細が異なり得ること、および、メソッド属性を含むさまざまな数およびタイプの属性を有し得ることを認識するだろう。
クラス40は、クラス属性データ42と、(さまざまなライブラリ、プロトコル仕様などを含み得る)コンピューティング環境によってサポートされるメソッドセクション44のメソッド属性またはコンポーネント54とを含む。
クラスデータ42(すなわち属性)は、経路(@path)46の識別、変更子48、サービス名50、およびパッケージ52の参照を含む。メソッドセクション44のメソッドコンポーネントは、経路メソッド56(@path)、受領メソッド58(@accepts)、GETメソッド60(@GET)、クエリパラメータメソッド62(@QueryParam)、入力変数メソッド64、出力変数メソッド66、初期化メソッド68および呼出しメソッド70を特徴付ける属性を含む。
図1および図2を参照すると、コードジェネレータクラス40のメソッド属性64および一般クラス属性42は、RESTサービス30の生成を容易にするために、(RESTサービス30に変換されることになっておりサービスプロジェクト28の一部であるウェブサービスのクラスを含む)デベロッパシステム20から受取ったパッケージを処理するために図1のコードジェネレータ16によって用いられるように適合されている。
図3は、図1のコードジェネレータを介して実現され、図1のサービスインターフェイス22を特徴付けるXMLファイルを介して提供されるパッケージを処理するように適合されたプロセス80の一例を示すフロー図である。
メソッド80の一例は初期解析ステップ82を含む。初期解析ステップ82は、パッケージにおいて示されるリソース名に対して必須の変更を実現するための情報を取得するために、(図1のデベロッパシステム20を介してコードジェネレータ16によって受信されるXMLファイルを含む)パッケージを解析するステップを含む。
次に、パッケージにおけるクラスが名前処理ステップ84に渡される。名前処理ステップ84は、図2のコードジェネレータクラス40に含まれるように示されているクラス属性42に関して、名前アノテーション変更子を用いて各々のクラスを処理するステップを含む。
次に、メソッド処理ステップ86は、パッケージにおける各々のクラスごとに、図2のコードジェネレータクラス40に含まれるように示されているメソッド54を選択的に処理する。クラス属性42および付随するメソッド属性54の処理は、以下により十分に説明されるように、マッピング論理に従ったマッピングを含み得る。
チェックステップ88は、次いで、パッケージにおけるすべてのクラスに対して名前処理84およびメソッド処理86が実行されたか否かを確認するようにチェックする。実行されていれば、ダンプファイル作成ステップ90が実行される。実行されていなければ、パッケージにおけるすべてのクラスが完全に処理されるまで、制御が名前処理ステップ84およびメソッド処理ステップ86に戻される。
ダンプファイル作成ステップ90は、図1のRESTサービス30を実現するために必要とされるサービスクラスがすべて処理されているダンプファイルを自動的に作成するステップを含む。
図1〜図3を参照すると、サービスインターフェイス22を解析することによって作成される情報には、名前、変更子タイプ、アノテーションなどのクラス属性が含まれるとともに、メソッド名、入力引数およびリターンタイプなどのメソッドデータがさらに含まれている。
サービスインターフェイス仕様の一例は、コードジェネレータ16に供給されるべきXMLファイルを作成するために図1のデベロッパシステム20によって解析され得るものであって、以下の擬似コードによって示される:
Figure 0006591458
サービスインターフェイス22の解析に起因して得られるXMLファイルの一部の例は以下のとおりである:
Figure 0006591458
サービスインターフェイス22の属性をRESTサービス30の属性にマッピングするためにコードジェネレータ16によって用いられるマッピングメトリクスの一例が以下の表において提供される。
Figure 0006591458
コードジェネレータ16の出力の一部についての擬似コードの一例は以下のとおりである:
Figure 0006591458
図4は、図1〜図3の実施形態で用いられるように適合された方法100の一例を示すフロー図である。方法102の一例は、図1のサービスインターフェイス22などのサービスインターフェイスの1つ以上の特徴を決定するステップを含む第1のステップ102を備える。
図1〜図4を参照すると、第2のステップ104は、上記決定に関連付けられた情報を含むファイル(たとえばXMLファイル)を受信するステップを含む。XMLファイルは図1のデベロッパシステム20によって提供されてもよい。
第3のステップ106は、ファイルに基づいてレプレゼンテーショナル・ステート・トランスファ(REST)サービスを実現するようにコンピュータコードを自動的に生成するステップを含む。コンピュータコードは、図4のプロセス80に従って図1のコードジェネレータ16によって自動的に生成されてもよい。
なお、当該方法100が本教示の範囲から逸脱することなく拡張または変更され得ることに留意されたい。たとえば、方法100は、コードジェネレータを用いるステップをさらに含んでもよい。当該コードジェネレータは、図1のREST解析ツール26からの出力としてXMLファイルを受信して、RESTサービス30をともに含むコンピュータコード(すなわちクラス)を自動的に生成する。
いくつかの実現例においては、サービスプロジェクト28の一部であるウェブサービスは、コードジェネレータ16によってRESTサービス30にマッピングされる1つ以上のリソースを含む。
一例としての方法100はさらに、コードジェネレータ16を用いてダンプファイルを作成するステップを含む。当該ダンプファイルは、生成されたコンピュータコードを含む1つ以上のプログラミング言語クラスを含んでいる。コードジェネレータ16は、名前アノテーション変更子を用いることで、当該コードジェネレータ16が受信したパッケージにおいて指定されているクラスを処理することを容易にし得る。
当該方法はさらに、コードジェネレータ16を用いてパッケージのクラスのうちの各々のメソッドを処理することにより、1つ以上の更新済みメソッドをこれに応じて作成するステップを含み得る。更新済みメソッドは、サービスインターフェイス22の特徴にとって必要とされる制限または制約に準拠するように更新される。
一例としての方法100はさらに、Jersey RESTコンテナ(たとえば図1のコンテナ18)によってJavaプラットフォーム上で(たとえば図1のJavaランタイムシステム24によって表わされるように)1つ以上のプログラミング言語クラス(たとえばJavaクラス)をデプロイするステップを含み得る。Javaクラスは、コードジェネレータ16によって出力されるとともにRESTサービス30によって表わされるダンプファイルの一部であってもよい。当該ダンプファイルは、生成されたすべてのJava RESTリソースファイルについてのコンピュータコードを含む。すべてのサービス依存性はジャンプファイルに組込まれている。
方法100はさらに、デベロッパシステム20からGET HTTPメソッドおよび/またはPOSTメソッドを受領したことに応じてJava(登録商標)アーカイブによって実現されるコンピュータコード(たとえばコードジェネレータ16)を用いて、コードジェネレータ16の実行をトリガするステップを含み得る。
特定の実施形態に関して説明がなされてきたが、これらの特定の実施形態は単に例示的なものに過ぎず、限定的なものではない。たとえば、いくつかの実施形態ではJersey RESTサービスの自動生成を説明しているが、実施形態はこれらに限定されない。たとえば、Apache CXF(TM)、RestEasyまたはWildFlyの実現が可能である。
如何なる好適なプログラミング言語を用いても、C、C++、Java、アセンブリ言語などを含む特定の実施形態のルーチンを実現することができる。手続き指向型またはオブジェクト指向型などのさまざまなプログラミング技術を用いることができる。ルーチンは単一の処理装置または複数のプロセッサ上で実行することができる。ステップ、動作または演算は特定の順序で表わされ得るが、この順序はさまざまな特定の実施形態において変更されてもよい。いくつかの特定の実施形態においては、この明細書中で連続的なものとして示されている複数のステップは同時に実行することができる。
特定の実施形態は、命令実行システム、装置、システムもしくはデバイスによって、またはそれらに関連付けて用いられるようにコンピュータ読取可能記憶媒体において実現されてもよい。特定の実施形態は、ソフトウェアもしくはハードウェアまたはそれらの組合せで制御論理の形態で実現することができる。制御論理は、1つ以上のプロセッサによって実行されると、特定の実施形態において記載されているものを実行するように動作可能であり得る。
特定の実施形態は、特定用途向け集積回路、プログラマブルロジックデバイス、フィールドプログラマブルゲートアレイ、光学、化学的、生物学的、量子的またはナノ設計型のシステム、コンポーネントおよびメカニズムを用いることによる、プログラムド汎用デジタルコンピュータを用いることによって実現されてもよい。一般に、特定の実施形態の機能は当該技術において公知である如何なる手段によっても達成することができる。分散型のネットワーク化システム、コンポーネントおよび/または回路を用いることができる。データの通信または転送は有線、無線または他のいずれかの手段によってなされてもよい。
添付の図面/図に示される要素のうちの1つ以上が、特定用途に応じて有用となるように、さらに分離された態様もしくは一体化された態様で、または場合によっては削除されるかもしくは動作不能にされた態様で実現可能であることも認識されるだろう。コンピュータが上述の方法のうちのいずれかを実行することを可能にするために機械読取り可能媒体に記憶することができるプログラムまたはコードを実現することも精神および範囲内にある。
この明細書中で、かつ添付の特許請求の範囲全体にわたって用いられる「a」、「an」および「the」という語は、文脈に別段明確な指示がない限り、複数の指示対象を含んでいる。また、この明細書中で、かつ添付の特許請求の範囲全体にわたって用いられる「in」の意味は、文脈に別段明確な指示がない限り、「において(in)」および「の上に(on)」の意味を含んでいる。
このように、特定の実施形態をこの明細書中に記載してきたが、変更の許容範囲、さまざまな変更および置換えが上述の開示において意図されており、場合によっては、特定の実施形態のいくつかの特徴が、上述の範囲および精神から逸脱することなく他の特徴を対応させて使用することなく採用され得ることが認識されるだろう。したがって、特定の状況または材料を本質的な範囲および精神に適合させるために多くの変更がなされてもよい。

Claims (16)

  1. ウェブサービスの開発を容易にするためにコンピュータで実行される方法であって、
    サービスインターフェイスを解析するステップを備え、前記解析の結果は、XMLファイルと、クラス属性と、メソッドデータとを含み、
    前記ウェブサービスを特徴づけるクラスファイルを含むサービスプロジェクト情報をサービスプロジェクトから受信するステップと、
    前記解析の結果と、前記サービスプロジェクト情報とに基づいてレプレゼンテーショナル・ステート・トランスファ(REST)サービスを実現するようにコンピュータコードを生成するステップとを備え、
    前記サービスプロジェクトは、前記RESTサービスとして動作するように構成されていないサービスについてのコンピュータコードを含み、前記コンピュータコードは、前記RESTサービスを生成する際に使用されるパッケージを表し、
    前記方法は、
    前記パッケージで示されるリソース名に対して必須の変更を実現するための情報を取得するステップと、
    前記パッケージにおけるクラスおよびメソッドを処理するステップとを備え、
    前記クラスおよびメソッドを処理するステップは、前記サービスインターフェイスの属性を前記RESTサービスの属性にマッピングすることを含む、方法。
  2. ウェブサービスの開発を容易にするためにコンピュータで実行される方法であって、
    パッケージで示される名前に対する必須の変更を実施するための情報を取得するステップを含み、前記名前はウェブ・リソースに関連付けられており、前記名前はクラスに関連付けられており、
    名前アノテーション変更子を使用して各名前を処理するステップと、
    サービスインターフェイスの1つ以上のサービスインターフェイス特徴を決定するステップとを含み、前記1つ以上のサービスインターフェイス特徴は、1つ以上のサービスインターフェイスクラス属性およびサービスインターフェイスメソッドデータを含み、前記1つ以上のサービスインターフェイスクラス属性の各々は、1つ以上の名前および変更子のタイプを含み、
    マッピングを含むファイルを生成するステップを含み、前記マッピングは、前記1つ以上のサービスインターフェイスクラス属性およびサービスインターフェイスメソッドデータを1つまたは複数のレプレゼンテーショナル・ステート・トランスファ(REST)サービスクラスとマッピングすることによって、前記ウェブ・リソースの1つまたは複数をREST属性およびRESTサービスメソッドデータにマッピングすることを含み、前記1つまたは複数のRESTサービスクラス属性のそれぞれは、1つまたは複数の名前および変更子タイプを含み、
    前記マッピングに基づいて前記RESTサービスを実装するコンピュータコードを生成するステップを含み、前記コンピュータコードを生成するステップは、
    コードジェネレータを用いて、生成されるJavaRESTリソースファイルのために生成されるコンピュータコードを含む1つ以上のプログラミング言語クラスを含むダンプファイルを作成するステップと、
    前記コードジェネレータによって受信されるパッケージにおいて特定されるクラスの処理を容易にするために前記名前アノテーション変更子を使用するステップと、
    前記サービスインターフェイスにしたがって更新されるデータに応答して、1つ以上の更新されたメソッドを生成するために、前記パッケージにおいて特定されるクラスの各メソッドを処理するステップとを含む、コンピュータで実行される方法。
  3. サービスインターフェイスの特徴記述は、XMLファイルを含む前記ファイルにおいて維持される情報を含む、請求項1に記載のコンピュータで実行される方法。
  4. 前記XMLファイルは、前記サービスインターフェイスに適用されるREST解析ツールの出力を表わす、請求項3に記載のコンピュータで実行される方法。
  5. 前記ウェブサービスは、前記生成するステップによってRESTサービスにマッピングされていた1つ以上のリソースを含む、請求項1,3または4のいずれかに記載のコンピュータで実行される方法。
  6. 前記生成するステップは、コードジェネレータを用いて、コンピュータコードを生成して、前記RESTサービスを実現することを容易にするステップを含む、請求項1,3,4および5のいずれかに記載のコンピュータで実行される方法。
  7. 前記コードジェネレータを用いて、前記生成されたコンピュータコードを含む1つ以上のプログラミング言語クラスを含んでいるダンプファイルを作成するステップをさらに含む、請求項6に記載のコンピュータで実行される方法。
  8. 名前アノテーション変更子を用いて、前記コードジェネレータに受信されたパッケージにおいて指定されているクラスを処理することを容易にするステップをさらに含む、請求項7に記載のコンピュータで実行される方法。
  9. 前記パッケージの前記クラスのうちの各々のメソッドを処理して、これに応じて1つ以上の更新済みメソッドを作成するステップをさらに含む、請求項8に記載のコンピュータで実行される方法。
  10. 1つ以上のプログラミング言語クラスはJersey RESTコンテナによってJava(登録商標)プラットフォーム上にデプロイされるように適合される、請求項7から9のいずれかに記載のコンピュータで実行される方法。
  11. 前記ダンプファイルは、前記生成するステップによって生成されたすべての生成済みJava RESTリソースファイルについてのコンピュータコードを含む、請求項7から9のいずれかに記載のコンピュータで実行される方法。
  12. 前記生成するステップはさらに、Java(登録商標)アーカイブによって実現されるコンピュータコードを用いるステップを含み、前記コンピュータコードは、前記生成するステップを実現するための命令を提供するように適合される、請求項1,および3から11のいずれかに記載のコンピュータで実行される方法。
  13. 前記コンピュータコードはアプリケーションプログラミングインターフェイス(API)に含まれている、請求項12に記載のコンピュータで実行される方法。
  14. 前記コンピュータコードは、実現されるべきウェブサービスに関するパッケージのうちの各々のクラスを処理するためのプロセスに情報を提供するように適合されたプログラミング言語クラスを含む、請求項12または13に記載のコンピュータで実行される方法。
  15. 請求項1〜14のいずれかに記載の方法をコンピュータに実行させる、プログラム。
  16. 請求項15に記載のプログラムを格納したメモリと、
    前記プログラムを実行するためのプロセッサとを備える、装置。
JP2016572289A 2014-06-25 2014-11-13 Restサービスソースコード生成 Active JP6591458B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/315,248 US9916137B2 (en) 2014-06-25 2014-06-25 Rest service source code generation
US14/315,248 2014-06-25
PCT/US2014/065488 WO2015199748A1 (en) 2014-06-25 2014-11-13 Rest service source code generation

Publications (2)

Publication Number Publication Date
JP2017523506A JP2017523506A (ja) 2017-08-17
JP6591458B2 true JP6591458B2 (ja) 2019-10-16

Family

ID=52146667

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016572289A Active JP6591458B2 (ja) 2014-06-25 2014-11-13 Restサービスソースコード生成

Country Status (5)

Country Link
US (1) US9916137B2 (ja)
EP (1) EP3161617A1 (ja)
JP (1) JP6591458B2 (ja)
CN (1) CN106663002B (ja)
WO (1) WO2015199748A1 (ja)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10116512B2 (en) * 2014-07-10 2018-10-30 Oracle International Corporation Service discovery and/or effort estimation in networked computing environments
US11194572B2 (en) 2016-02-22 2021-12-07 International Business Machines Corporation Managing external feeds in an event-based computing system
US10848410B2 (en) * 2017-03-29 2020-11-24 Oracle International Corporation Ranking service implementations for a service interface
CN109426493A (zh) * 2017-08-21 2019-03-05 西门子公司 处理应用程序编程接口的描述信息的方法、装置和设备
CN108052374B (zh) * 2017-12-29 2021-08-31 郑州云海信息技术有限公司 一种部署容器微服务的方法及装置
US11288079B2 (en) * 2018-01-25 2022-03-29 Red Hat, Inc. Reducing classloading of hierarchically configured applications via provisioning
JP7073813B2 (ja) 2018-03-16 2022-05-24 富士通株式会社 制御プログラム、制御方法および情報処理装置
US10545730B2 (en) 2018-05-07 2020-01-28 Red Hat, Inc. Automatically generating code for application programming interfaces
CN109032569A (zh) * 2018-08-02 2018-12-18 山东浪潮通软信息科技有限公司 一种基于属性标签的RESTful服务自动发布方法
US11068259B2 (en) * 2019-01-04 2021-07-20 T-Mobile Usa, Inc. Microservice-based dynamic content rendering
US10983767B2 (en) 2019-01-04 2021-04-20 T-Mobile Usa, Inc. Microservice-based software development
US11372704B2 (en) * 2019-01-07 2022-06-28 International Business Machines Corporation Advanced java dump analysis
CN110727438B (zh) * 2019-09-11 2023-11-14 宝付网络科技(上海)有限公司 基于SpringBoot的web系统自动生成工具
CN110716715B (zh) * 2019-10-18 2024-01-19 恒生电子股份有限公司 一种应用程序开发方法、装置、设备及介质
CN111367932B (zh) * 2020-03-06 2023-05-12 深圳市今天国际物流技术股份有限公司 数据库表单变更通知方法、装置、计算机设备及存储介质
CN113535151B (zh) * 2020-04-14 2024-05-17 北京京东振世信息技术有限公司 代码生成方法和装置
CN112631569A (zh) * 2020-12-30 2021-04-09 上海中通吉网络技术有限公司 基于gRPC的自动生成与补全前后端代码的方法、装置及设备
US11567738B2 (en) * 2021-04-15 2023-01-31 Red Hat, Inc. Code generator for creating a unified data model for multiple language specifications

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2001057663A2 (en) * 2000-02-04 2001-08-09 America Online Incorporated Optimized delivery of web application code
US8473595B2 (en) * 2009-12-30 2013-06-25 Bmc Software, Inc. Method and system to automatically adapt web services from one protocol/idiom to another protocol/idiom
CN102368217A (zh) * 2011-10-20 2012-03-07 镇江睿泰信息科技有限公司 一种元数据驱动的rest风格应用开发方法与系统
US9298770B2 (en) * 2011-12-16 2016-03-29 Sap Se Generating remotely accessible repositories from language meta-models
US8856735B2 (en) * 2012-07-25 2014-10-07 Oracle International Corporation System and method of generating REST2REST services from WADL
US9231819B2 (en) * 2012-11-30 2016-01-05 Red Hat Israel, Ltd. Abstracting restful web service HTTP between a client and a server
US20140372970A1 (en) * 2013-06-13 2014-12-18 International Business Machines Corporation Method to auto generate jax-rs rest service implementation classes from existing interfaces
CN103399734B (zh) * 2013-07-10 2017-02-08 北京慧点科技有限公司 生成rest服务和rest实现的方法及对应的设备

Also Published As

Publication number Publication date
CN106663002B (zh) 2020-11-10
WO2015199748A1 (en) 2015-12-30
US20150378691A1 (en) 2015-12-31
EP3161617A1 (en) 2017-05-03
JP2017523506A (ja) 2017-08-17
US9916137B2 (en) 2018-03-13
CN106663002A (zh) 2017-05-10

Similar Documents

Publication Publication Date Title
JP6591458B2 (ja) Restサービスソースコード生成
Jendrock et al. Java EE 7 Tutorial, The, Volume 1
US8209672B2 (en) Systems and methods for transforming modeled business processes into executable processes
RU2250490C2 (ru) Предоставление расширений программного обеспечения на основе использования сети
US9898263B2 (en) System and method for resource-definition-oriented software generation and development
US9990595B2 (en) Modeled service endpoints in business process model and notation tools
US8762933B2 (en) Converting business process models to component models in a service oriented architecture domain
US7797400B2 (en) Computer-implemented methods and systems for testing the interoperability of web services
US20070055972A1 (en) Model-driven software deployment in an application server
US20070244650A1 (en) Service-oriented architecture for deploying, sharing, and using analytics
US20070288508A1 (en) Computer software development methods and systems
US7814458B2 (en) Dynamic editing support and validation of application specific information on business objects
US20150089408A1 (en) Method and framework for content viewer integrations
US10089084B2 (en) System and method for reusing JavaScript code available in a SOA middleware environment from a process defined by a process execution language
US9934029B2 (en) Annotation driven representational state transfer (REST) web services
US8667083B2 (en) Simplifying provisioning of asynchronous interaction with enterprise suites having synchronous integration points
EP4235403A1 (en) Automatic generation of a cloud integration adapter from a standard, programming language-agnostic interface specification
US20110060790A1 (en) Facilitating a service application to operate with different service frameworks in application servers
US10223143B2 (en) System and method for supporting javascript as an expression language in a process defined by a process execution language for execution in a SOA middleware environment
US9244706B2 (en) Command line shell command generation based on schema
US7721279B1 (en) Packaging information integration applications
US10116512B2 (en) Service discovery and/or effort estimation in networked computing environments
US20160292003A1 (en) System and method for supporting object notation variables in a process defined by a process execution language for execution in a soa middleware environment
JP2004046895A (ja) ワークフロー変換方法
Kapitsaki et al. Model-driven development of context-aware web applications based on a web service context management architecture

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170609

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170609

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180607

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180717

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20181017

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181217

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190521

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190806

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: 20190827

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190918

R150 Certificate of patent or registration of utility model

Ref document number: 6591458

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250