282.6. サンプル

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

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>

手順

  1. 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>
  2. 以下を 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"