第113章 MVEL コンポーネント
MVEL コンポーネント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.12 以降で利用可能
Maven ユーザーは、このコンポーネントの
pom.xml に以下の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-mvel</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
Camel on EAP デプロイメント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
このコンポーネントは、Red Hat JBoss Enterprise Application Platform (JBoss EAP) コンテナー上で簡素化されたデプロイメントモデルを提供する Camel on EAP (Wildfly Camel) フレームワークによってサポートされます。このモデルの詳細は、Deploying into a Web Server の Apache Camel on JBoss EAP の章を参照してください。
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
mvel:templateName[?options]
templateName は、呼び出すテンプレートのクラスパスローカル URI、またはリモートテンプレートの完全な URL (例:file://folder/myfile.mvel)です。
URI にクエリーオプションは
?option=value&option=value&.. の形式で追加できます。
オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
| オプション | デフォルト | 説明 |
|---|---|---|
allowContextMapAll (producer)
|
false
|
コンテキストマップが前詳細へのアクセスを許可するかどうかを設定します。デフォルトでは、メッセージの本文とヘッダーにのみアクセスできます。このオプションは、現在の Exchange および CamelContext へのフルアクセスに対して有効にできます。これを行うと、CamelContext API の全機能へのアクセスが開かれるため、潜在的なセキュリティーリスクが発生します。
|
allowTemplateFromHeader (producer)
|
false
|
ヘッダーのリソーステンプレートの使用を許可するかどうか (デフォルトは false)。このオプションを有効にすると、セキュリティーの問題があります。たとえば、ヘッダーに信頼されていないコンテンツやユーザー派生コンテンツが含まれている場合、これは最終的にエンドアプリケーションの信頼性および完全性に影響を与える可能性があるため、このオプションは注意して使用してください。
|
contentCache
|
true
|
ロード時のリソースコンテンツのキャッシュ。キャッシュされたリソースコンテンツは、エンドポイントの clearContentCache 操作を使用して JMX 経由でクリアできます。
|
encoding
|
null
|
リソースコンテンツの文字エンコーディング。 |
メッセージヘッダー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
mvel コンポーネントはメッセージに 2 つのヘッダーを設定します。
| ヘッダー | 説明 |
|---|---|
CamelMvelResourceUri
|
templateName ( String オブジェクトとして)
|
MVEL コンテキスト リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel は MVEL コンテキストで交換情報を提供します(マップのみ
)。Exchange は以下のように転送されます。
| key | value |
|---|---|
exchange
|
Exchange 自体。
|
exchange.properties
|
Exchange プロパティー。
|
ヘッダー
|
In メッセージのヘッダー。 |
camelContext
|
Camel コンテキストの意図。 |
request
|
In メッセージ。 |
in
|
In メッセージ。 |
ボディー
|
In メッセージのボディー。 |
out
|
Out メッセージ(InOut メッセージ交換パターンにのみ有効)。 |
response
|
Out メッセージ(InOut メッセージ交換パターンにのみ有効)。 |
ホットリロード リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
mvel テンプレートリソースは、デフォルトではファイルとクラスパスリソース(展開形式の jar)の両方に対してホットリロードが可能です。
contentCache=true を設定すると、Camel はリソースを 1 度だけロードするため、ホットリロードはできません。このシナリオは、リソースが変更されない場合に実稼働環境で使用することができます。
動的テンプレート リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel は 2 つのヘッダーを提供し、テンプレートまたはテンプレートコンテンツ自体に異なるリソースの場所を定義できます。これらのヘッダーのいずれかが設定されている場合、Camel は設定されたエンドポイントでこれを使用します。これにより、ランタイム時に動的テンプレートを指定できます。
| ヘッダー | タイプ | 説明 |
|---|---|---|
CamelMvelResourceUri
|
文字列 | 設定されたエンドポイントの代わりに使用するテンプレートリソースの URI。 |
CamelMvelTemplate
|
文字列 | 設定されたエンドポイントの代わりに使用するテンプレート。 |
サンプル リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
たとえば、以下のようなものを使用できます。
from("activemq:My.Queue").
to("mvel:com/acme/MyResponse.mvel");
MVEL テンプレートを使用して InOut メッセージエクスチェンジ(
JMSReplyTo ヘッダーがある)のメッセージへの応答を形成するには、以下を実行します。
以下のように、ヘッダーを使用してコンポーネントを動的に使用するテンプレートを指定するには、以下を実行します。
from("direct:in").
setHeader("CamelMvelResourceUri").constant("path/to/my/template.mvel").
to("mvel:dummy");
ヘッダーとしてテンプレートを直接指定するには、以下のように、コンポーネントはヘッダーを介して動的に使用する必要があります。
from("direct:in").
setHeader("CamelMvelTemplate").constant("@{\"The result is \" + request.body * 3}\" }").
to("velocity:dummy?allowTemplateFromHeader=true");
警告
allowTemplateFromHeader オプションを有効にすると、セキュリティーの問題があります。たとえば、ヘッダーに信頼できないコンテンツまたはユーザー派生コンテンツが含まれる場合、これは最終的に、エンドアプリケーションの確実性と整合性に及ぼす可能性があるため、このオプションを使用してください。