Apache-cxf-quick-guide
Apache CXF-はじめに
今日の環境では、いくつかのオプションを使用してWebサービスアプリケーションを作成できます。 通信には、いくつかの標準プロトコルおよび広く受け入れられているプロトコルの1つ以上を使用できます。 たとえば、https://www.w3.org/TR/soap/[SOAP]、XML/HTTP、https://en.wikipedia.org/wiki/Representational_state_transfer [RESTful HTTP]、およびhttps://www.corba .org/[CORBA](Common Object Request Broker Architecture。昔は非常に人気がありましたが、現在はそれほど頻繁に使用されていません。
HTTP、https://en.wikipedia.org/wiki/Apache%20CXF_Message_Service [JMS]、https://en.wikipedia.org/wiki/Apache%20CXF_Business_Integration [JBI]などのさまざまなトランスポートを選択することもできます。 JAX-RSやhttps://en.wikipedia.org/wiki/Apache%20CXF_API_for_XML_Web_Services[JAXなどのフロントエンドAPIの選択-WS]。 Webサービス開発には非常に多くのオプションがあるため、上記のすべてのオプションを結合するオープンソースサービスフレームワークが必要であり、それがhttps://cxf.apache.org/[Apache CXF]の役割です。
このチュートリアルでは、上記の1つ以上のオプションを使用して、CXFを使用してWebサービスとサービスを使用するクライアントの両方を作成する方法を学習します。 このチュートリアルでは、サーバーとクライアントの両方のコード開発全体を説明します。 各アプリケーションは、各カテゴリのオプションの1つ(フロントエンド、トランスポート、プロトコル)のみを使用できるため、これら3つのすべての順列と組み合わせを考慮すると、アプリケーションの数は非常に多くなります。
このチュートリアルでは、次のプロジェクトの開発について詳しく説明します-
- プレーンオールドApache CXFオブジェクト(POJO)を使用したCXF
- JAX-WSを使用したCXF
- WSDLを使用したCXF
- JAX-RSを使用したCXF
- JMSを使用したCXF
シンプルにするために、コマンドラインインターフェイスでmavenを使用しました。 Mavenプロジェクトの作成には、好みのIDEを使用できます。
次の章では、最初の章から始めましょう。
POJOを使用したApache CXF
この章では、ユーザーに挨拶メッセージを送信する単純なWebアプリケーションを開発する方法を学習します。 Webサービスプロジェクトは、https://www.w3.org/TR/2001/NOTE-wsdl-20010315 [WSDL]モデルを使用します。 CXFでは、Apache CXF APIを基盤となるWSDLにマッピングするためのシンプルなフロントエンドを提供することにより、このWSDLモデルを隠すことができます。
この最も単純なプロジェクトでは、Webサービスのインターフェイスがクライアントに直接公開され、クライアントはネイティブのApache CXF APIを使用してWebサービスを呼び出します。
最初に、Webサービスを作成します。 すべてのサービスには、クライアントに公開されるインターフェイスがあります。 このインターフェイスは、単純なApache CXFインターフェイスまたはWSDLドキュメントとして記述できます。 このApache CXF-Firstアプローチでは、Apache CXFインターフェイスを介してサービスを公開します。
Webサービスの開発
Web上で作成するサービスには、 greetings と呼ばれる単一のWebメソッドがあります。 このメソッドは、ユーザーの名前を送信する string 型の引数を取ります。 サービスは、受信したユーザー名をメッセージに含めて、グリーティングメッセージを発信者に送り返します。
Webサービスインタフェース
私たちのWebサービスのインターフェイスを公開するには、次のようにApache CXFインターフェイスを作成します-
インターフェースには greetings というメソッドが1つだけあります。 サーバーはこのインターフェースを実装します。 簡単なアプリケーションでは、このインターフェイスはクライアントに直接公開されます。 通常、Webサービスアプリケーションでは、WSDLを使用してWebサービスインターフェイスを記述します。 この単純なアプリケーションでは、この直接インターフェースをクライアント開発者に提供します。 クライアントは、サーバーオブジェクトで greetings メッセージを呼び出します。 それでは、まずWebサービスを作成しましょう。
Webサービスの実装
次に、 HelloWorld サービスをホストするサーバーアプリケーションを作成します。
サーバーの作成
サーバーアプリケーションは2つの部分で構成されています-
- 最初の部分は、Webサービスのファクトリーを作成します。
- 2番目の部分は、インスタンス化するための main メソッドを記述します。
サーバーは、CXFライブラリが提供する ServerFactoryBean クラスを使用して、 HelloWorld インターフェイスをリモートクライアントに公開します。 したがって、最初に ServerFactoryBean クラスをインスタンス化し、次にそのさまざまなプロパティを設定します-
ファクトリの setAddress メソッドを呼び出すことにより、サービスを呼び出すためのURLを設定します。 サービスはこのURLで公開されることに注意してください。
この場合、サービスは組み込みサーバーにデプロイされ、ポート5000をリッスンします。 任意のポート番号を選択できます。
ファクトリーを作成する前に、サービス実装クラスについてファクトリーに伝える必要があります。 これは、以下に示すように factory オブジェクトで setServiceBean メソッドを呼び出すことで実行されます-
サービスBeanは、サービス実装クラスのインスタンスに設定されます。 最後に、その create メソッドを呼び出してファクトリを作成します-
ここで、Webサービスを実行するファクトリを開発したので、次に main メソッドを記述して、それをインスタンス化し、しばらく実行し続けます。
今、次のように HelloServer クラスをインスタンス化する*メイン*メソッドを記述します-
インスタンス化されると、 HelloServer クラスは無期限に実行され続けます。 実稼働展開の場合、サーバーを永久に稼働させ続けることは間違いありません。 現在の状況では、次のように所定の時間後にサーバーを終了します-
作成したサーバーアプリケーションは、CXFライブラリの ServerFactoryBean クラスを使用します。 HelloServer クラスを正常にコンパイルするには、これらのライブラリをプロジェクトに含める必要があります。 プロジェクトの依存関係を設定するには、 Maven を使用します。
Mavenプロジェクトのセットアップ
Mavenプロジェクトを作成するには、コマンドラインウィンドウに次のコマンドを入力します。 これはMacマシンでテスト済みです。 WindowsおよびLinuxインストールの場合、いくつかの場所で手順が異なる場合があります。
プロパティを求められたら、次の値を入力します-
mavenコマンドが完了すると、pom.xmlファイルとともに現在のフォルダーに適切なフォルダー構造が作成されます。
生成されたディレクトリ構造はここに示されています-
上記のpom.xmlには、このプロジェクトに関係のない追加の依存関係が含まれている場合がありますが、このチュートリアルの次のプロジェクトには必要です。 とにかく、追加の依存関係を含めること自体に害はありません。
プロジェクトフォルダー構造
サーバーとクライアントのApache CXFファイルを配置した後の私のマシン上のプロジェクトフォルダ構造は、クイックリファレンスのために以下に示されています-
実行中のサーバー
プロジェクトをビルドするには、コマンドラインウィンドウで次のコマンドを使用します-
次のコマンドを使用してサーバーを起動できます-
これによりサーバーが起動し、コンソールに次のプロンプトが表示されます-
ブラウザウィンドウで、公開されたサービスのURLを指定します。 次の出力が表示されます-
これにより、ローカルホストの指定されたポートでサービスが実行されていることが確認されます。 呼び出しで greetings メッセージを指定しなかったため、SOAPエラーメッセージがブラウザーに返されます。
選択したSOAPクライアントを使用して、Webサービスをさらにテストできます。 ここでは、https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop//%40 [Postman]を使用してサーバーをテストしました。
出力はここに示されているようです-
このことから、CXFは要求と応答の両方でSOAPプロトコルの使用を維持しながら、今日の世界に存在するさまざまなWebテクノロジーに対する統一されたビューを提供することを理解できます。 これにより、Webアプリケーションの開発が大幅に簡素化されます。
次のタスクは、作成したWebサービスを使用するクライアントを作成することです。
クライアントを作成する
サーバーアプリケーションでは、 HelloWorld はWebサービスを公開するインターフェイスです。 Webサービス自体は、単純な挨拶メッセージをクライアントに提供するだけです。 通常、Webサービスインターフェイスは、WSDL(Webサービス記述言語)を使用して外部に公開されます。 この簡単なアプリケーションでは、サービスインターフェイスを直接公開することでWebサービスをクライアントに公開します。これが HelloWorld.class です。
この目的のために、CXFは ClientProxyFactoryBean と呼ばれるファクトリクラスを提供します。これにより、作成したファクトリインスタンスへの目的のインターフェイスにアタッチできます。
まず、次のようにファクトリBeanインスタンスを作成します-
ファクトリBeanインスタンスで setAddress メソッドを呼び出して、Webサービスを呼び出すURLを設定します。 私たちの場合、前のステップでサーバーを作成するときに使用したURLを使用します-
次に、 factory インスタンスで create メソッドを呼び出して、サービスインターフェイス HelloWorld.class をアタッチします。
最後に、 greetings メソッドを呼び出して、リモートWebサービスを呼び出します。
これにより、コンソールに挨拶メッセージが出力されます。
クライアントアプリケーションのソース全体を以下に示します-
実行中のクライアント
サーバーがまだマシン上で実行されていることを確認してください。 場合には、タイムアウトした場合は、次のコマンドでサーバーを再起動します-
コンソールに次のメッセージが表示されます-
今、5分に設定したサーバーがタイムアウトする前に、別のコマンドラインウィンドウを開き、次のコマンドでクライアントを起動します-
コマンドラインで次のようなメッセージが表示されます-
次の章では、JAX-WS(XML Webサービス用のApache CXF API)プロジェクトでCXFを使用する方法を学習します。
JAX-WSを使用したApache CXF
このJAX-WSアプリケーションでは、以前のPOJOアプリケーションのようなApache CXFファーストのアプローチを使用します。 そのため、最初にWebサービスのインターフェイスを作成します。
サービスインターフェイスの宣言
前のケースと同様に、グリーティングと呼ばれるインターフェースメソッドを1つだけ持つ簡単なサービスを作成します。 サービスインターフェイスのコードは以下に示されています-
インターフェイスに @ WebService タグで注釈を付けます。 次に、このインターフェイスを実装します。
Webインターフェイスの実装
Webインターフェイスの実装はここに示されています-
greetingsメソッドには @ Override タグで注釈が付けられています。 このメソッドは、呼び出し元に「hi」メッセージを返します。
次に、サーバーを開発するためのコードを記述します。
開発サーバー
POJOアプリケーションとは異なり、CXFが提供するEndpointクラスを使用してサービスを公開することにより、インターフェイスを分離します。 これは、次の2行のコードで行われます-
publishメソッドの最初のパラメーターは、クライアントがサービスを利用できるURLを指定します。 2番目のパラメーターは、サービスの実装クラスを指定します。 サーバーのコード全体が以下に示されています-
サーバーをデプロイするには、以下にリストされているように、プロジェクトにいくつかの変更を加える必要があります。
サーバーの展開
最後に、サーバーアプリケーションをデプロイするには、pom.xmlをもう1つ変更して、アプリケーションをWebアプリケーションとして設定する必要があります。 あなたが pom.xml に追加する必要があるコードは以下のとおりです-
アプリケーションをデプロイする前に、プロジェクトにさらに2つのファイルを追加する必要があります。 これらは、以下のスクリーンショットに示されています-
これらのファイルは、 CXFServlet のマッピングを定義するCXF標準ファイルです。 web.xml ファイル内のコードは、クイックリファレンスのためにここに示されています-
- cxf-servlet.xml、*で、サービスのエンドポイントのプロパティを宣言します。 これは以下のコードスニペットに示されています-
ここで、サービスエンドポイントのID、サービスを利用できるアドレス、サービス名、エンドポイント名を定義します。 これで、CXFサーブレットによってサービスがどのようにルーティングおよび処理されるかを学習しました。
最終的なpom.xml
このチュートリアルの後半のセクションで学習するクライアントを構築するためのプロファイルも含まれていることに注意してください。
HelloWorldサービスの実行
これで、Webアプリを実行する準備が整いました。 コマンドウィンドウで、次のコマンドを使用してビルドスクリプトを実行します。
コンソールに次のメッセージが表示されます-
前と同じように、ブラウザでサーバーURLを開いてサーバーをテストできます。
操作を指定しなかったため、アプリケーションからエラーメッセージのみがブラウザに返されます。
ここで、*?wsdl *をURLに追加してみてください。次の出力が表示されます-
したがって、サーバーアプリケーションは期待どおりに実行されています。 前述の Postman などのSOAPクライアントを使用して、サービスをさらにテストできます。
次のセクションでは、サービスを使用するクライアントの作成方法を学習します。
クライアントの開発
CXFアプリケーションでクライアントを作成するのは、サーバーを作成するのと同じくらい簡単です。 クライアントの完全なコードは次のとおりです-
ここでは、CXF提供の Service クラスを使用して、既知のサービスにバインドします。 Service クラスで create メソッドを呼び出して、サービスのインスタンスを取得します。 service インスタンスで addPort メソッドを呼び出して、既知のポートを設定します。
これで、サービスを使用する準備ができました。まず、 service インスタンスで getPort メソッドを呼び出してサービスインターフェイスを取得します。 最後に、 greetings メソッドを呼び出して、コンソールに挨拶メッセージを印刷します。
Apache CXF-Firstアプローチを使用してCXFの基本を学習したので、次の章でWSDL-FirstアプローチでCXFを使用する方法を学習します。
WSDLを使用したApache CXF
開発したCXF-POJOアプリケーションにより、クライアントとサーバーが非常に緊密に結合されます。 また、サービスインターフェイスへの直接アクセスを許可すると、深刻なセキュリティ上の脅威になります。 そのため、通常、クライアントとサーバー間の分離が望まれます。これは、WSDL(Webサービス記述言語)を使用して実現されます。
XMLベースのWSDLドキュメントでWebサービスインターフェイスを記述します。 ツールを使用して、このWSDLをApache CXFインターフェースにマップし、クライアントおよびサーバーアプリケーションで実装および使用します。 デカップリングを提供するには、WSDLから開始することが好ましい方法です。 このためには、最初に新しい言語であるWSDLを学ぶ必要があります。 WSDLの作成には慎重なアプローチが必要であり、作業を開始する前にこれについてある程度理解しておくとよいでしょう。
このレッスンでは、WSDLドキュメントでWebサービスインターフェイスを定義することから始めます。 CXFを使用して、WSDLで始まるサーバーアプリケーションとクライアントアプリケーションの両方を作成する方法を学習します。 CXFの使用に重点を置いて、アプリケーションをシンプルに保ちます。 サーバーアプリケーションが作成されたら、組み込みのCXFクラスを使用して目的のURLに公開します。
最初に、使用するWSDLについて説明しましょう。
HelloWorldのWSDL
実装するWebサービスには、 greetings という1つのWebメソッドがあります。このメソッドは、ユーザー名を保持する string パラメーターを受け入れ、ユーザー名に挨拶メッセージを追加した後、呼び出し元に文字列メッセージを返します。 完全なWSDLは以下に示されています-
構文的に正しいwsdlを記述することは、開発者にとって常に課題でした。多くのツールがあり、wsdlを作成するためのオンラインエディターが利用できます。 これらのエディターは、実装するメッセージの名前と、メッセージで渡すパラメーター、およびクライアントアプリケーションで受信する戻りメッセージのタイプを要求します。 wsdl構文を知っている場合は、ドキュメント全体を手作業でコーディングするか、エディターの1つを使用して独自のエディターを作成できます。
上記のwsdlでは、 greetings という単一のメッセージを定義しています。 メッセージは、* http://localhost:9090/HelloServerPort。で実行されている *HelloWorldService というサービスに配信されます。
これにより、サーバー開発に進みます。 サーバーを開発する前に、WebサービスへのApache CXFインターフェイスを生成する必要があります。 これは、指定されたwsdlから実行されます。 これを行うには、 wsdl2java というツールを使用します。
wsdl2javaプラグイン
mavenを使用してプロジェクトをビルドするため、 pom.xml ファイルに次のプラグインを追加する必要があります。
これで、 wsdl2java 生成クラスを使用してサーバーを作成する準備ができました。 wsdl2javaが作成したクラスを以下の図に示します-
生成されたサービスインターフェイス
生成されたクラスのリストで、そのうちの1つがApache CXFインターフェースであることに注意してください。これは HelloWorldPortType.java です。 コードエディターでこのファイルを調べます。 ファイルの内容は、すぐに参照できるようにここに表示されます-
インターフェイスには greetings というメソッドが含まれていることに注意してください。 これは、wsdlのメッセージタイプでした。 wsdl2java ツールは、生成されたインターフェースにこのメソッドを追加しました。 これで、wsdlに書き込むメッセージが何であれ、対応するメソッドがインターフェースで生成されることを理解できます。
ここで、タスクは、wsdlで定義したさまざまなメッセージに対応するこれらすべてのメソッドを実装することです。 Apache CXF-Firstの以前の例では、Webサービス用のApache CXFインターフェースから始めたことに注意してください。 この場合、Apache CXFインターフェースはwsdlから作成されます。
サービスインターフェイスの実装
サービスインターフェイスの実装は簡単です。 完全な実装は、以下のリストに示されています-
このコードは、 greetings と呼ばれる唯一のインターフェイスメソッドを実装します。 このメソッドは string タイプのパラメーターを1つ受け取り、それに「hi」メッセージを付加して、結果のストリングを呼び出し元に返します。
次に、サーバーアプリケーションを作成します。
開発サーバー
サーバーアプリケーションの開発は簡単です。 ここでは、CXFが提供する Endpoint クラスを使用してサービスを公開します。 これは、次の2行のコードで行われます-
まず、サービス実装クラスのオブジェクト- HelloWorldImpl を作成します。 次に、この参照を publish メソッドの2番目のパラメーターとして渡します。 最初のパラメーターはサービスが公開されるアドレスです-クライアントはこのURLを使用してサービスにアクセスします。 サーバーアプリケーションのソース全体がここに与えられています-
このサーバークラスをビルドするには、 pom.xml にビルドプロファイルを追加する必要があります。 これは以下に示されています-
サーバーの展開
最後に、サーバーアプリケーションをデプロイするには、pom.xmlをもう1つ変更して、アプリケーションをWebアプリケーションとして設定する必要があります。 あなたが pom.xml に追加する必要があるコードは以下のとおりです-
アプリケーションをデプロイする前に、プロジェクトにさらに2つのファイルを追加する必要があります。 これらは、以下のスクリーンショットに示されています-
これらのファイルは、 CXFServlet のマッピングを定義するCXF標準ファイルです。 web.xml ファイル内のコードは、クイックリファレンスのためにここに示されています-
ここで、サービスエンドポイントのID、サービスを利用できるアドレス、サービス名、エンドポイント名を定義します。 これで、サービスがCXFサーブレットによってどのようにルーティングおよび処理されるかを理解できました。
最終的なpom.xml
クライアントを構築するためのプロファイルも含まれていることに注意してください。これについては、後のセクションで間もなく学習します。
HelloWorldサービスの実行
これで、Webアプリを実行する準備が整いました。 コマンドウィンドウで、次のコマンドを使用してビルドスクリプトを実行します。
これにより、wsdlから適切なApache CXFクラスが生成され、Apache CXFクラスがコンパイルされ、組み込みJettyサーバーにサーバーがデプロイされ、アプリケーションが実行されます。
コンソールに次のメッセージが表示されます-
前と同様に、ブラウザでサーバーURLを開いてサーバーをテストできます。
操作を指定しなかったため、アプリケーションからエラーメッセージのみがブラウザに返されます。 ここで、*?wsdl *をURLに追加してみてください。次の出力が表示されます-
したがって、サーバーアプリケーションは期待どおりに実行されています。 前述の Postman などのSOAPクライアントを使用して、サービスをさらにテストできます。
このチュートリアルの次の部分は、サービスを使用するクライアントを作成することです。
クライアントの開発
CXFアプリケーションでクライアントを作成することは、サーバーを作成することと同じくらい重要です。 基本的に3行のみで構成されるクライアントの完全なコードを次に示します。残りの行は、サービス情報をユーザーに出力するだけです。
ここでは、サービス HelloWorldService のインスタンスを作成し、 getHelloWorldPort メソッドを呼び出してポートを取得してから、 greetings メッセージを渡します。 クライアントを実行すると、次の出力が表示されます-
これまで、Apache CXF-FirstおよびWSDL-FirstアーキテクチャーでCXFを使用する方法を学びました。 Apache CXF-Firstアプローチでは、CXFライブラリの ServerFactoryBean クラスでPOJOを使用してサーバーを作成しました。 クライアントを作成するには、CXFライブラリの ClientProxyFactoryBean クラスを使用しました。 WSDL-Firstアプローチでは、 Endpoint クラスを使用して、目的のURLおよび指定された実装者でサービスを公開しました。 これらの手法を拡張して、さまざまなプロトコルとトランスポートを統合できるようになりました。
JAX-RSを使用したApache CXF
この章に進む前に、JavaでRESTful Webサービスを作成する方法を知っていることを前提としています。 このJAX-RS(RESTful WebサービスのJava API)上でCXFを使用する方法を紹介します。 最新の映画のリストを保持するWebサービスを作成します。 ユーザーが映画をリクエストするとき、ユーザーはリクエストで映画IDを指定し、サーバーは映画を見つけてクライアントに返します。 些細なケースでは、実際のバイナリMP4ファイルではなく、映画の名前をクライアントに返すだけです。 JAX-RSアプリケーションの作成を始めましょう。
ムービー要素の宣言
特定の映画のIDと名前を保存するために、MovieというXMLルート要素を宣言します。 この要素は、Movie.javaというファイルで宣言されています。 ファイルの内容はここに示されています-
ムービーサービスデータベースの作成
映画のリストを保存するには、キーと値のペアを保存するJava提供の Map を使用します。 リストが大きい場合は、管理しやすい外部データベースストレージを使用します。 些細なケースでは、データベースには5つの映画だけを保存します。 MovieServiceクラスのコードは以下のとおりです-
次の2つの注釈を使用して、ムービーサービスのURLパスとその戻り値の型を指定することに注意してください-
私たちは@GETと@Pathアノテーションを使用して、GETリクエストのURLを次のように指定します-
ムービーデータベース自体はinitメソッドで初期化され、データベースに5つのムービーアイテムを追加します。
次のタスクは、サーバーアプリケーションを作成することです。
開発サーバー
サーバーを作成するには、CXF提供の JAXRSServerFactoryBean クラスを使用します。
最後に、 factory インスタンスでcreateメソッドを呼び出してサーバーを公開します。
サーバーアプリケーションのコード全体は以下のとおりです-
最終的なpom.xml
ここで、pom.xmlの最終バージョンを以下に含めました-
クライアントの開発
RSクライアントの作成は簡単です。 URLオブジェクトを作成して、そのストリームを開きます。 CXFが提供するIOUtilsクラスを使用して、入力ストリームのコンテンツをローカルストリームにコピーします。
クライアントアプリケーションのコード全体は以下のとおりです-
JAX-RSアプリケーションのテスト
コマンドラインウィンドウで次のコマンドを使用してサーバーを実行します-
今、あなたはコンソールに次のメッセージが表示されます-
今、あなたのブラウザを開き、次のURLを入力します-
ブラウザウィンドウに次のように表示されます。
別のコマンドラインウィンドウで次のコマンドを実行して開発したJavaクライアントアプリケーションを使用して、サービスを呼び出すことができます。
次の出力が表示されます-
CXFサンプルは、JAX-RSでCXFを使用する方法に関するいくつかの例を提供します。 興味のある読者は、これらのサンプルを研究することが奨励されます。
JMSを使用したApache CXF
前述のように、JMSトランスポートでCXFを使用できます。 この場合、クライアントは既知のMessaging ServerにJMSメッセージを送信します。 私たちのサーバーアプリケーションは、受信メッセージを求めてメッセージングサーバーを継続的にリッスンしています。 メッセージが到着すると、メッセージを処理し、クライアント要求を実行し、応答を別のメッセージとしてクライアントに送信します。
前述のように、 sayHi という単一のWebメソッドを提供するサンプルサーバーアプリケーションを最初に作成します。
サービスインターフェイスの作成
サービスの実装
サービスインターフェイスの実装は次のように定義されています-
実装は単純にHelloメッセージをユーザーに返します。 ご覧のとおり、インターフェイスとその実装は、これまで学習したこのチュートリアルの以前のすべてのプロジェクトに似ています。
次に、メッセージキューを設定し、着信メッセージをリッスンし続けるサーバーアプリケーションを作成することが最も重要なポイントになります。
サーバーの作成
サーバーアプリケーションでは、最初に次のように JMS エンドポイントを作成します-
指定された期間存続する指定されたポートにキューを設定することに注意してください。 org.apache.activemq.broker.BrokerService クラスをインスタンス化して、メッセージングサービスを作成します。 これは、 ActiveMQ メッセージングサーバーのサーバークラスです。
私たちは、着信メッセージのデータストレージ用のディレクトリを設定します-
最後に、startメソッドを使用してサーバーを起動します-
次に、以前のPOJOアプリケーションで使用されているサーバーファクトリBeanクラスを使用して、サービスBean HelloWorld のインスタンスを作成します-
次に、ファクトリが受信メッセージをリッスンし続けるように、ファクトリにJMSエンドポイントを設定します-
最後に、ファクトリで実装クラスを設定し、実行を開始します-
この時点で、サーバーは稼働しています。 POJOアプリケーションのようにファクトリBeanクラスを使用しているため、CXFServletとweb.xmlファイルは不要であることに注意してください。
完全なサーバーアプリケーションコードはここに示されています-
依存関係の追加
作成したサーバーアプリケーションは、ActiveMQメッセージングサーバーを使用します。 したがって、プロジェクトにいくつかの依存関係を追加する必要があります。 追加の必要な依存関係を理解するために、完全なpom.xmlファイルがここに表示されます。
実行中のサーバー
以前の場合のように、サーバーの実行を開始するには、コマンドウィンドウに次のコマンドを入力します-
これにより、ActiveMQメッセージサーバーが起動し、メッセージングキューが設定され、このキューをリッスンし続けるファクトリBeanが作成されます。
次のタスクは、クライアントアプリケーションを作成することです。
クライアントを作成する
クライアントアプリケーションでは、最初にサーバーアプリケーションで使用されるものと同じJMSエンドポイントを設定します-
POJOアプリケーションのようにファクトリーを作成します。
次のようにエンドポイントURIと実装クラスを設定します-
最後に、サービスメソッドを呼び出して、その結果の出力を印刷します-
完全なクライアントコードは以下のとおりです-
Apache CXF-結論
CXFは、今日の世界に存在するいくつかのWebプロトコルとトランスポートを組み合わせてWebアプリケーションを作成するための統合アプローチを提供します。 従来のJavaインターフェースから始めて、CXFを使用するWebアプリケーションを作成する方法を学びました。 次に、WSDLからWebアプリケーションとそのクライアントを作成する方法を学びました。
WSDLは、サービスインターフェイスのXML表現を提供します。 wsdl2javaツールを使用してWSDLからJavaインターフェースを作成し、最終的に作成されたインターフェースを使用してサーバーとクライアントの両方を作成しました。 このチュートリアルでは、RESTful WebサービスアプリケーションでCXFを使用する方法についても簡単に紹介しました。 最後に、CXFをJMSで使用する方法についても説明しました。 今後の調査については、https://cxf.apache.org/docs/sample-projectsl [CXF-samples]を参照してください。
注-プロジェクトのソースコード全体は、ここからダウンロードできます。