Red Hat Training

A Red Hat training course is available for Red Hat Fuse

263.5. サンプル

263.5.1. 認証付き Restlet エンドポイント

次のルートは、http://localhost:8080POST リクエストをリッスンする 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

263.5.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>

263.5.3. Restlet API を使用して応答を設定する

Camel 2.8 から利用可能

org.restlet.Response API を使用して応答を入力することをお勧めします。これにより、Restlet API に完全にアクセスし、応答をきめ細かく制御できます。インライン Camel プロセッサーからの応答を生成する以下のルートスニペットを参照してください。

Restlet Response API を使用したレスポンスの生成

263.5.4. コンポーネントの最大スレッドの設定

最大スレッドオプションを設定するには、次のようにコンポーネントでこれを行う必要があります。

<bean id="restlet" class="org.apache.camel.component.restlet.RestletComponent">
  <property name="maxThreads" value="100"/>
</bean>

263.5.5. webapp 内で Restlet サーブレットを使用する

Camel 2.8 以降で利用可能
サーブレットコンテナー内で Restlet アプリケーションを設定するには 3 つの方法 があり、サブクラス化された SpringServerServlet を使用すると、Restlet コンポーネントを注入することで Camel 内で設定できます。

サーブレットコンテナ内で Restlet サーブレットを使用すると、URI の相対パスでルートを構成し (ハードコードされた絶対 URI の制約を取り除く)、ホストするサーブレットコンテナが (新しいポートで別のサーバープロセスを生成する必要がなく) 入力リクエストを処理することができます。

設定するには、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 は、デプロイされた webapp の名前です
ブラウザーには次のコンテンツが表示されます。

"Request type : GET and ID : 1234"

Maven pom.xml ファイルで行うことができる restlet への Spring 拡張機能への依存関係を追加する必要があります。

<dependency>
  <groupId>org.restlet.jee</groupId>
  <artifactId>org.restlet.ext.spring</artifactId>
  <version>${restlet-version}</version>
</dependency>

また、restlet maven リポジトリーにも依存関係を追加する必要があります。

<repository>
   <id>maven-restlet</id>
   <name>Public online Restlet repository</name>
   <url>http://maven.restlet.org</url>
</repository>