Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.第135章 Restlet
Restlet コンポーネント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Transport Layer Security (TLS)を使用するように Restlet コンポーネントを設定するには、Security Guide の Configuring Transport Security for Camel Components の章を参照してください。
重要
Restlet コンポーネントはデフォルトで非同期モードを有効にしますが、この設定はパフォーマンスに影響が出るように見えます。これが問題である場合は、エンドポイント URI にオプション
synchronous=true
を設定してパフォーマンスを向上できます。
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
restlet:restletUrl[?options]
restlet:restletUrl[?options]
restletUrl の形式:
protocol://hostname[:port][/resourcePattern]
protocol://hostname[:port][/resourcePattern]
Restlet はプロトコルとアプリケーションの懸念の切り離されます。Restlet Engine の参照実装は、多くのプロトコルをサポートしています。ただし、HTTP プロトコルのみをテストしました。デフォルトのポートはポート 80 です。まだプロトコルに基づいてデフォルトのポートを自動的に切り替えません。
URI にクエリーオプションは
?option=value&option=value&.. の形式で追加できます。
注記
Restlet はヘッダーを理解する際に大文字と小文字が区別されるようです。たとえば、
content-type
を使用するには、Content-Type
を使用します。location
には Location
などを使用します。
オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
名前 | デフォルト値 | 説明 |
---|---|---|
headerFilterStrategy=#refName
|
RestletHeaderFilterStrategy のインスタンス
|
Camel Registry のヘッダーフィルターストラテジーを参照するには、# 表記(headerFilterStrategy=#refName )を使用します。ストラテジーは、HeaderFilterStrategyAware の場合、restlet バインディングにプラグインされます。
|
restletBinding=# refName
|
DefaultRestletBinding のインスタンス
|
Camel Registry の RestletBinding オブジェクトの Bean ID。
|
restletMethod
|
GET
|
プロデューサーエンドポイントでは、使用するリクエストメソッドを指定します。コンシューマーエンドポイントで、エンドポイントが restletMethod 要求のみを消費することを指定します。文字列値は Method.valueOf (String) メソッドによって org.restlet.data.Method に変換されます。
|
restletMethods
|
なし |
コンシューマーは、restlet コンシューマーエンドポイントによって提供されるコンマ( restletMethods=post,put )で区切られた 1 つ以上のメソッドのみ を指定します。restletMethod および restletMethods オプションの両方を指定すると、restletMethod 設定は無視されます。
|
restletRealm
|
null
|
# 表記(restletRealm=# refName)を使用して、Camel レジストリーでレルムマップの Bean ID を指定します。
|
restletUriPatterns=#refName
|
なし |
コンシューマーは restlet コンシューマーエンドポイントによって処理される 1 つ以上の URI テンプレートのみ を指定し、# 表記を使用して Camel レジストリーの List<String > を参照します。URI パターンがエンドポイント URI に定義されている場合、エンドポイントに定義された URI パターンと restletUriPatterns オプションの両方が受け入れられます。
|
throwExceptionOnFailure (2.6 以降)
|
true
|
プロデューサーは、プロデューサーの失敗時に例外 のみ を出力します。 |
connectionTimeout
|
300000
|
Camel 2.12.3 Producer のみ 以降、接続がタイムアウトした場合、クライアントは接続をタイムアウトし、無制限の待機時間は 0 になります。
|
socketTimeout
|
300000
|
Camel 2.12.3 Producer はクライアントソケット受信タイムアウトのみ であるため、無制限の待機時間は 0 になります。
|
disableStreamCache
|
false
|
Camel 2.14: Jetty からの raw 入力ストリームがキャッシュされているかどうかを判断します(Camel はストリームをファイル、ストリームキャッシュ)キャッシュにストリームします。http://camel.apache.org/stream-caching.htmlデフォルトでは、Camel は Jetty 入力ストリームをキャッシュして複数回読み取りし、Camel がストリームからすべてのデータを取得できるようにします。ただし、このオプションを
true に設定することができます。たとえば、ファイルや他の永続ストアに直接ストリーミングするなど、raw ストリームにアクセスする必要がある場合などです。DefaultRestletBinding は、リクエスト入力ストリームをストリームキャッシュにコピーし、このオプションが false の場合、ストリームを複数回読み取るようにメッセージボディーに配置します。
|
コンポーネントオプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Restlet コンポーネントは以下のオプションで設定できます。これらは コンポーネント オプションであり、エンドポイントでは設定できないことに注意してください。詳細は、以下を参照してください。
名前 | デフォルト値 | 説明 |
---|---|---|
controllerDaemon
|
true
|
Camel 2.10: コントローラースレッドがデーモンであるべきかどうかを示します (JVM の終了をブロックしません)。 |
controllerSleepTimeMs
|
100
|
Camel 2.10: コントローラースレッドが各制御間でスリープ状態になる時間。 |
inboundBufferSize
|
8192
|
Camel 2.10: メッセージの読み取り時のバッファーのサイズ。 |
minThreads
|
1
|
Camel 2.10: サービス要求を待機する最小スレッド。 |
maxThreads
|
10
|
Camel 2.10: リクエストを処理するスレッドの最大数。 |
lowThreads
|
8
|
Camel 2.13: コネクターがオーバーロードされているとみなされるタイミングを決定するワーカースレッドの数。
|
maxQueued
|
0
|
Camel 2.13: サービスに利用可能なワーカースレッドがなかった場合にキューに入れることができる最大呼び出し数。値が 0 の場合、キューは使用されず、ワーカースレッドが即座に利用できない場合は呼び出しは拒否されます。値が -1 の場合、バインドされていないキューが使用され、呼び出しは拒否されます。
|
maxConnectionsPerHost
|
-1
|
Camel 2.10: ホストごとの同時接続の最大数(IP アドレス)。 |
maxTotalConnections
|
-1
|
Camel 2.10: 合計同時接続の最大数。 |
outboundBufferSize
|
8192
|
Camel 2.10: メッセージの書き込み時のバッファーのサイズ。 |
persistingConnections
|
true
|
Camel 2.10: 呼び出しの後に接続を維持する必要があるかどうかを示します。 |
pipeliningConnections
|
false
|
Camel 2.10: パイプライン接続をサポートされるかどうかを示します。 |
threadMaxIdleTimeMs
|
60000
|
Camel 2.10: 収集される前にアイドル状態のスレッドが操作を待機する時間。 |
useForwardedForHeader
|
false
|
Camel 2.10: 一般的なプロキシーおよびキャッシュでサポートされる X-Forwarded-For ヘッダーを検索し、それを使用して Request.getClientAddresses ()メソッドの結果を設定します。この情報は、ローカルネットワーク内の中間コンポーネントに対してのみ安全です。他のアドレスは偽のヘッダーを設定することで簡単に変更でき、深刻なセキュリティーチェックでは信頼できません。 |
reuseAddress
|
true
|
Camel 2.10.5/2.11.1: SO_REUSEADDR ソケットオプションを有効/無効にします。詳細は、java.io.ServerSocket#reuseAddress プロパティーを参照してください。 |
disableStreamCache
|
false
|
Camel 2. 14: Jetty からの raw 入力ストリームがキャッシュされているかどうかを判断します(Camel はストリームをファイル、ストリームキャッシュ)キャッシュにストリームを読み取ります。デフォルトでは、Camel は Jetty 入力ストリームをキャッシュして複数回読み取りし、Camel がストリームからすべてのデータを取得できるようにします。ただし、このオプションをファイルや他の永続ストアに直接ストリーミングするなど、raw ストリームにアクセスする必要がある場合などに設定することができます。
true DefaultRestletBinding は、要求入力ストリームをストリームキャッシュにコピーし、このオプションが 複数回ストリームの読み取りをサポートする場合はメッセージボディーに配置します。 false
|
メッセージヘッダー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
名前 | タイプ | 説明 |
---|---|---|
CamelContentType
|
文字列
|
アプリケーション/プロセッサーによって OUT メッセージに設定できるコンテンツタイプを指定します。値は、応答メッセージの content-type です。このヘッダーが設定されていない場合、content-type は OUT メッセージボディーのオブジェクトタイプに基づきます。Camel 2.3 以降では、Camel IN メッセージに Content-Type ヘッダーが指定されている場合、ヘッダーの値は Restlet リクエストメッセージのコンテンツタイプを決定します。nbsp;それ以外の場合は、デフォルトで application/x-www-form-urlencoded' になります。リリース 2.3 よりも前のバージョンでは、要求コンテンツタイプのデフォルトを変更することはできません。
|
CamelAcceptContentType
|
文字列
|
Camel 2.9.3 以降: 2.10.0: HTTP Accept リクエストヘッダー。 |
CamelHttpMethod
|
文字列
|
HTTP リクエストメソッド。これは IN メッセージヘッダーで設定されます。 |
CamelHttpQuery
|
文字列
|
リクエスト URI のクエリー文字列。restlet コンポーネントがリクエストを受信すると、DefaultRestletBinding によって IN メッセージに設定されます。
|
CamelHttpResponseCode
|
文字列 または 整数
|
応答コードは、アプリケーション/プロセッサーによって OUT メッセージに設定できます。値は、応答メッセージの応答コードです。このヘッダーが設定されていない場合、応答コードは restlet ランタイムエンジンによって設定されます。 |
CamelHttpUri
|
文字列
|
HTTP 要求 URI。これは IN メッセージヘッダーで設定されます。 |
CamelRestletLogin
|
文字列
|
Basic 認証のログイン名。これは、アプリケーションによって IN メッセージで設定され、Apache Camel による restlet リクエストヘッダーの前にフィルターリングされます。 |
CamelRestletPassword
|
文字列
|
Basic 認証のパスワード名。これは、アプリケーションによって IN メッセージで設定され、Apache Camel による restlet リクエストヘッダーの前にフィルターリングされます。 |
CamelRestletRequest
|
Request
|
Camel 2.8: すべてのリクエスト詳細を保持する org.restlet.Request オブジェクト。
|
CamelRestletResponse
|
応答
|
Camel 2.8: org.restlet.Response オブジェクト。これを使用して、Restlet から API を使用して応答を作成できます。以下の例を参照してください。
|
org.restlet.*
|
Apache Camel IN ヘッダーに伝播される Restlet メッセージの属性。 | |
cache-control
|
文字列 または リスト<CacheDirective>
|
Camel 2.11: ユーザーは、camel メッセージヘッダーから、String 値または List of CacheDirective of Restlet で設定できます。 |
注記
基礎となる Restlet 実装は、ヘッダー名の解析時に大文字と小文字を区別します。たとえば、
content-type
ヘッダーを設定するには、Content-Type
を指定し、location
には Location
を指定します。
メッセージボディー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Apache Camel は、OUT ボディーの外部サーバーからの restlet 応答を保存します。IN メッセージからのヘッダーはすべて OUT メッセージにコピーされ、ルーティング中にヘッダーが保持されます。
認証のある Restlet エンドポイント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
以下のルートは、 http://localhost:8080 で
POST
リクエストをリッスンする restlet
コンシューマーエンドポイントを開始します。プロセッサーは、リクエストボディーと id
ヘッダーの値をエコーする応答を作成します。
URI クエリーの
restletRealm
設定は、レジストリーで Realm Map を検索するために使用されます。このオプションを指定すると、restlet コンシューマーは情報を使用してユーザーログインを認証します。認証された 要求のみがリソースにアクセスできます。この例では、レジストリーとして機能する Spring アプリケーションコンテキストを作成します。レルムマップの Bean ID は restletRealmRef と一致する必要があります。
<util:map id="realm"> <entry key="admin" value="foo" /> <entry key="bar" value="foo" /> </util:map>
<util:map id="realm">
<entry key="admin" value="foo" />
<entry key="bar" value="foo" />
</util:map>
以下の例は、 http://localhost:8080 のサーバーにリクエストを送信する
direct
エンドポイントを開始します(つまり、restlet コンシューマーエンドポイント)。
// Note: restletMethod and restletRealmRef are stripped // from the query before a request is sent as they are // only processed by Camel. from("direct:start-auth").to("restlet:http://localhost:9080/securedOrders?restletMethod=post");
// Note: restletMethod and restletRealmRef are stripped
// from the query before a request is sent as they are
// only processed by Camel.
from("direct:start-auth").to("restlet:http://localhost:9080/securedOrders?restletMethod=post");
必要なのはこれだけです。リクエストを送信し、restlet コンポーネントを試す準備ができました。
サンプルクライアントは、以下のヘッダーを使用して
direct:start-auth
エンドポイントにリクエストを送信します。
CamelRestletLogin
(Apache Camel によって内部で使用される)CamelRestletPassword
(Apache Camel によって内部で使用される)id
(アプリケーションヘッダー)
注記
org.apache.camel.restlet.auth.login
および org.apache.camel.restlet.auth.password
は Restlet ヘッダーとして伝播されません。
サンプルクライアントは以下のような応答を取得します。
received [<order foo='1'/>] as an order id = 89531
received [<order foo='1'/>] as an order id = 89531
単一の restlet エンドポイントから複数のメソッドおよび URI テンプレート(2.0 以降)を提供 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
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>
<util:list id="uriTemplates">
<value>/users/{username}</value>
<value>/atom/collection/{id}/component/{cid}</value>
</util:list>
Restlet API を使用した応答の設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.8 から利用可能
org.restlet.Response
API を使用して応答を設定することができます。これにより、Restlet API に完全にアクセスでき、応答を詳細に制御できます。インライン化された Camel プロセッサー からの応答を生成する以下のルートスニペットを参照してください。
コンポーネントの最大スレッドの設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
最大スレッドオプションを設定するには、以下のようにコンポーネントでこれを実行する必要があります。
<bean id="restlet" class="org.apache.camel.component.restlet.RestletComponent"> <property name="maxThreads" value="100"/> </bean>
<bean id="restlet" class="org.apache.camel.component.restlet.RestletComponent">
<property name="maxThreads" value="100"/>
</bean>
webapp 内の Restlet サーブレットの使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.8 では、サーブレットコンテナー内で Restlet アプリケーションを設定し、サブクラス化された SpringServerServlet を使用すると、Restlet コンポーネントを注入する ことで Camel 内の設定を有効にする 3 つの方法 があります。
サーブレットコンテナー内で Restlet サーブレットを使用すると、URI の相対パス(ハードコーディングされた絶対 URI の制限を変更する)や、(新しいポートで別のサーバープロセスを生成する必要のない)ホスティングサーブレットコンテナーが受信要求を処理するよう設定できます。
を設定するには、以下を camel-context.xml; に追加します。
web.xml に追加します。
これにより、http://localhost:8080/mywebapp/rs/demo/1234 でデプロイされたルートにアクセスできます。
localhost:8080 はサーブレットコンテナー mywebapp のサーバーおよびポートで、デプロイされた webapp Your ブラウザーの名前で、以下の内容が表示されます。
"Request type : GET and ID : 1234"
"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>
<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>
<repository>
<id>maven-restlet</id>
<name>Public online Restlet repository</name>
<url>http://maven.restlet.org</url>
</repository>