282.6. サンプル
282.6.1. 認証付き Restlet エンドポイント
次のルートは、http://localhost:8080 で POST
リクエストをリッスンする restlet
コンシューマーエンドポイントを開始します。プロセッサーは、リクエストの本文と id
ヘッダーの値をエコーするレスポンスを作成します。
URI クエリーの restletRealm
設定は、レジストリーでレルムマップを検索するために使用されます。このオプションが指定されている場合、restlet コンシューマーはこの情報を使用してユーザーのログインを認証します。認証された リクエストのみがリソースにアクセスできます。このサンプルでは、レジストリーとして機能する Spring アプリケーションコンテキストを作成します。Realm Map の Bean ID は restletRealmRef と一致する必要があります。
次のサンプルでは、http://localhost:8080 上のサーバーにリクエストを送信する direct
エンドポイント (つまり、restlet コンシューマーエンドポイント) を開始します。
必要なのはそれだけです。リクエストを送信して、restlet コンポーネントを試す準備ができました。
サンプルクライアントは、次のヘッダーを含むリクエストを direct:start-auth
エンドポイントに送信します。
-
CamelRestletLogin
(Camel によって内部的に使用されます) -
CamelRestletPassword
(Camel によって内部的に使用されます) -
id
(アプリケーションヘッダー)
org.apache.camel.restlet.auth.login
および org.apache.camel.restlet.auth.password
は、Restlet ヘッダーとして伝播されません。
サンプルクライアントは、次のようなレスポンスを受け取ります。
received [<order foo='1'/>] as an order id = 89531
282.6.2. 複数のメソッドと URI テンプレートを提供する単一の restlet エンドポイント (非推奨)
この機能は 推奨されていない ため、使用しないでください。
restletMethods
オプションを使用して、複数の HTTP メソッドにサービスを提供する単一のルートを作成することができます。このスニペットは、ヘッダーからリクエストメソッドを取得する方法も示しています。
複数のメソッドを提供することに加えて、次のスニペットは、restletUriPatterns
オプションを使用して複数の URI テンプレートをサポートするエンドポイントを作成する方法を示しています。リクエスト URI は、IN メッセージのヘッダーでも使用できます。URI パターンがエンドポイント URI で定義されている場合 (このサンプルではそうではありません)、エンドポイントで定義された URI パターンと restletUriPatterns
オプションの両方が受け入れられます。
restletUriPatterns=#uriTemplates
オプションは、Spring XML 設定で定義された List<String>
Bean を参照します。
<util:list id="uriTemplates"> <value>/users/{username}</value> <value>/atom/collection/{id}/component/{cid}</value> </util:list>
282.6.3. Restlet API を使用して応答を設定する
Camel 2.8 から利用可能
org.restlet.Response
API を使用して応答を入力することを推奨します。これにより、Restlet API に完全にアクセスし、応答をきめ細かく制御できます。インライン Camel プロセッサーからの応答を生成する以下のルートスニペットを参照してください。
Restlet Response API を使用したレスポンスの生成
282.6.4. コンポーネントの最大スレッドの設定
最大スレッドオプションを設定するには、次のようにコンポーネントでこれを行う必要があります。
<bean id="restlet" class="org.apache.camel.component.restlet.RestletComponent"> <property name="maxThreads" value="100"/> </bean>
282.6.5. webapp 内で Restlet サーブレットを使用する
Camel 2.8 以降で利用可能
サーブレットコンテナー内で Restlet アプリケーションを設定するには 3 つの方法 があり、サブクラス化された SpringServerServlet を使用すると、Restlet コンポーネントを注入することで Camel 内で設定できます。
サーブレットコンテナ内で Restlet サーブレットを使用すると、URI の相対パスでルートを構成し (ハードコードされた絶対 URI の制約を取り除く)、ホストするサーブレットコンテナが (新しいポートで別のサーバープロセスを生成する必要がなく) 入力リクエストを処理することができます。
前提条件
Maven pom.xml ファイルの restlet に Spring 拡張機能への依存関係を追加する必要があります。
<dependency> <groupId>org.restlet.jee</groupId> <artifactId>org.restlet.ext.spring</artifactId> <version>${restlet-version}</version> </dependency>
手順
Restlet アプリケーションを設定するには、camel-context.xml に以下を追加します。
<camelContext> <route id="RS_RestletDemo"> <from uri="restlet:/demo/{id}" /> <transform> <simple>Request type : ${header.CamelHttpMethod} and ID : ${header.id}</simple> </transform> </route> </camelContext> <bean id="RestletComponent" class="org.restlet.Component" /> <bean id="RestletComponentService" class="org.apache.camel.component.restlet.RestletComponent"> <constructor-arg index="0"> <ref bean="RestletComponent" /> </constructor-arg> </bean>
以下を web.xml に追加します。
<!-- Restlet Servlet --> <servlet> <servlet-name>RestletServlet</servlet-name> <servlet-class>org.restlet.ext.spring.SpringServerServlet</servlet-class> <init-param> <param-name>org.restlet.component</param-name> <param-value>RestletComponent</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>RestletServlet</servlet-name> <url-pattern>/rs/*</url-pattern> </servlet-mapping>
結果
デプロイされたルートには http://localhost:8080/mywebapp/rs/demo/1234
でアクセスできます。ここで、localhost:8080
はサーバーとサーブレットコンテナーのポート、mywebapp
はデプロイされた Web アプリケーションの名前です。
ブラウザーには次のコンテンツが表示されます。
"Request type : GET and ID : 1234"