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.第95章 言語
言語 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.5 で利用可能
言語コンポーネントを使用すると、Camel でサポートされる言語によってスクリプトを実行するエンドポイントに エクスチェンジ を送信できます。http://camel.apache.org/language.html言語スクリプトを実行するコンポーネントを使用すると、より動的なルーティング機能が可能になります。たとえば、Routing SlipRouting Slip または Dynamic RouterDynamic Router EIP を使用すると、スクリプトが動的に定義される
言語
エンドポイントにメッセージを送信することができます。
このコンポーネントは
camel-core
の追加設定なしで提供されるため、追加の JAR は必要ありません。Groovy や JavaScript 言語の使用など、選択の言語が義務付けられている場合にのみ、追加の Camel コンポーネントを含める必要があります。
Camel 2.11 以降では、Camel の他の 言語 でサポートされるのと同じ表記を使用するスクリプトの外部リソースを参照できます。
language://languageName:resource:scheme:location][?options]
language://languageName:resource:scheme:location][?options]
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
language://languageName[:script][?options]
language://languageName[:script][?options]
URI オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
コンポーネントは以下のオプションをサポートします。
名前 | デフォルト値 | 型 | 説明 |
---|---|---|---|
languageName
|
null
|
文字列
|
単純な 、groovy 、javascript など、使用する 言語 の名前。このオプションは必須です。
|
script
|
null
|
文字列
|
実行するスクリプト。 |
変換
|
true
|
boolean
|
スクリプトの結果を新しいメッセージボディーとして使用するかどうか。false に設定するとスクリプトが実行されますが、スクリプトの結果は破棄されます。
|
contentCache
|
true
|
boolean
|
Camel 2.9: リソースからロードされた場合にスクリプトをキャッシュするかどうか。注記: Camel 2.10.3 から、キャッシュされたスクリプトは clearContentCache 操作を使用して JMX 経由でランタイム時にリロードを強制できます。
|
cacheScript
|
false
|
boolean
|
Camel 2.13/2.12.2/2.11.3: コンパイルされたスクリプトをキャッシュするかどうか。このオプションを有効にすると、スクリプトはコンパイル/作成が 1 回のみ行われ、Camel メッセージの処理時に再利用されるため、パフォーマンスが向上します。ただし、これにより、以前の評価で残ったデータに対する副次的な影響が引き起こされ、同時実行の問題にも影響が及ぶ可能性があります。評価中のスクリプトがべき等である場合、このオプションはオンにすることができます。
|
binary
|
false
|
boolean
|
Camel 2.14.1: スクリプトがバイナリーコンテンツであるかどうか。これは、バイナリーファイルの読み込みなど、Constant 言語を使用してリソースを読み込むために使用されます。 |
メッセージヘッダー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
以下のメッセージヘッダーを使用して、コンポーネントの動作に影響を与えることができます。
ヘッダー | 説明 |
---|---|
CamelLanguageScript
|
ヘッダーで提供される実行するスクリプト。エンドポイントに設定されたスクリプトよりも優先されます。 |
例 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
たとえば、Simple 言語を Message TranslatorMessage Translator a メッセージに使用できます。
String script = URLEncoder.encode("Hello ${body}", "UTF-8"); from("direct:start").to("language:simple:" + script).to("mock:result");
String script = URLEncoder.encode("Hello ${body}", "UTF-8");
from("direct:start").to("language:simple:" + script).to("mock:result");
メッセージボディーの型を変換する場合は、これも実行できます。
String script = URLEncoder.encode("${mandatoryBodyAs(String)}", "UTF-8"); from("direct:start").to("language:simple:" + script).to("mock:result");
String script = URLEncoder.encode("${mandatoryBodyAs(String)}", "UTF-8");
from("direct:start").to("language:simple:" + script).to("mock:result");
また、この例では、入力メッセージを 2 を乗算して、Groovy 言語を使用することもできます。
from("direct:start").to("language:groovy:request.body * 2").to("mock:result");
from("direct:start").to("language:groovy:request.body * 2").to("mock:result");
以下に示すように、スクリプトをヘッダーとして提供することもできます。ここでは、XPath 言語を使用して <
foo
> タグからテキストを抽出します。
Object out = producer.requestBodyAndHeader("language:xpath", "<foo>Hello World</foo>", Exchange.LANGUAGE_SCRIPT, "/foo/text()"); assertEquals("Hello World", out);
Object out = producer.requestBodyAndHeader("language:xpath", "<foo>Hello World</foo>", Exchange.LANGUAGE_SCRIPT, "/foo/text()");
assertEquals("Hello World", out);
リソースからのスクリプトの読み込み リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.9 以降で利用可能
エンドポイント URI または
Exchange.LANGUAGE_SCRIPT
ヘッダーのいずれかでロードするスクリプトのリソース URI を指定できます。uri は、file:、classpath:、または http のいずれかのスキームで開始する必要があります。
たとえば、クラスパスからスクリプトを読み込むには、次のコマンドを実行します。
from("direct:start") // load the script from the classpath .to("language:simple:classpath:org/apache/camel/component/language/mysimplescript.txt") .to("mock:result");
from("direct:start")
// load the script from the classpath
.to("language:simple:classpath:org/apache/camel/component/language/mysimplescript.txt")
.to("mock:result");
デフォルトでは、スクリプトは一度ロードされてキャッシュされます。ただし、
contentCache
オプションを無効にして、評価ごとにスクリプトを読み込むことができます。たとえば、ディスク上のファイル myscript.txt が変更された場合は、更新されたスクリプトが使用されます。
from("direct:start") // the script will be loaded on each message, as we disabled cache .to("language:simple:file:target/script/myscript.txt?contentCache=false") .to("mock:result");
from("direct:start")
// the script will be loaded on each message, as we disabled cache
.to("language:simple:file:target/script/myscript.txt?contentCache=false")
.to("mock:result");
Camel 2.11 以降では、以下のように resource
: と接頭辞を付けると、Camel の他の 言語 と同様のリソース
を参照できます。
from("direct:start") // load the script from the classpath .to("language:simple:resource:classpath:org/apache/camel/component/language/mysimplescript.txt") .to("mock:result");
from("direct:start")
// load the script from the classpath
.to("language:simple:resource:classpath:org/apache/camel/component/language/mysimplescript.txt")
.to("mock:result");
- Routing SlipRouting Slip
- Dynamic RouterDynamic Router