13.2. 式言語の呼び出し方法
前提条件 リンクのコピーリンクがクリップボードにコピーされました!
特定の式言語を使用する前に、必要な JAR ファイルがクラスパス上にあることを確認してください。使用する言語が Apache Camel Core に含まれていない場合、関連する JAR をクラスパスに追加する必要があります。
Maven ビルドシステムを使用している場合は、関連する依存関係を POM ファイルに追加するだけで、JAR をビルド時のクラスパスに含むことができます。たとえば、Ruby 言語を使いたい場合は、以下の依存関係を POM ファイルに追加します。
アプリケーションを Red Hat Fuse OSGi コンテナーにデプロイする場合は、関連する言語機能がインストールされていることを確認する必要があります (機能の名前は該当する Maven アーティファクトの名前になります)。たとえば、OSGi コンテナーで Groovy 言語を使用するには、以下の OSGi コンソールコマンドを入力して camel-groovy
機能をインストールしておく必要があります。
karaf@root> features:install camel-groovy
karaf@root> features:install camel-groovy
ルートで式や述語を使用している場合は、resource:classpath:path
または resource:file:path
を使用して、外部リソースとして値を参照します。たとえば、resource:classpath:com/foo/myscript.groovy
です。
Camel on EAP デプロイメント リンクのコピーリンクがクリップボードにコピーされました!
camel-groovy
コンポーネントは、Camel on EAP (Wildfly Camel) フレームワークによってサポートされており、Red Hat JBoss Enterprise Application Platform (JBoss EAP) コンテナー上でシンプルなデプロイモデルを提供します。
呼び出す方法 リンクのコピーリンクがクリップボードにコピーされました!
表13.1「式および述語」 で示されているように、式言語を呼び出すための構文は、それが使用されるコンテキストによって異なります。以下の方法で式言語を呼び出すことができます。
Static メソッド リンクのコピーリンクがクリップボードにコピーされました!
ほとんどの言語は、org.apache.camel.Expression
型や org.apache.camel.Predicate
型が想定される あらゆる コンテキストで使用できる Static メソッドを定義します。Static メソッドは、文字列式 (または述語) を引数とし、Expression
オブジェクト (Predicate
オブジェクトでもある) を返します。
たとえば、XML 形式のメッセージを処理するコンテンツベースルーターを実装するには、以下のように /order/address/countryCode
要素の値に基づいてメッセージをルーティングできます。
Fluent DSL メソッド リンクのコピーリンクがクリップボードにコピーされました!
Java Fluent DSL は、式言語を呼び出す別のスタイルとなります。式をエンタープライズ統合パターン (EIP) の引数として指定する代わりに、DSL コマンドのサブ句で式を指定できます。たとえば、XPath 式を filter(xpath("Expression"))
として呼び出す代わりに、式を filter().xpath("Expression")
として呼び出すことができます。
たとえば、前述のコンテンツベースのルーターは、以下のように、この形式の呼び出しで再実装できます。
XML 要素 リンクのコピーリンクがクリップボードにコピーされました!
関連する XML 要素の中に文字列の式を入れることで、XML 内で式言語を呼び出すこともできます。
たとえば、XML 内で XPath を呼び出すための XML 要素は xpath
(標準の Apache Camel 名前空間に属している) です。XML DSL でコンテンツベース ルーターの実装では、以下のように XPath 式を使用することができます。
あるいは、language
要素を使用して言語式を指定することもできます。この場合、language
属性で言語名を指定します。たとえば、以下のように language
要素を使用して、XPath 式を定義できます。
<language language="xpath">/order/address/countryCode = 'us'</language>
<language language="xpath">/order/address/countryCode = 'us'</language>
アノテーション リンクのコピーリンクがクリップボードにコピーされました!
アノテーションは、Bean インテグレーションのコンテキストで使用されます。アノテーションは、メッセージまたはヘッダーから情報を抽出して、抽出したデータを Bean のメソッドパラメーターに注入するという便利な方法でもあります。
たとえば、filter()
EIP の述語として呼び出される Bean myBeanProc
について考えてみます。Bean の checkCredentials
メソッドが true
を返す場合、メッセージの処理が続行されますが、メソッドが false
を返す場合は、メッセージがフィルターによってブロックされます。この Filter パターンは以下のように実装されます。
MyBeanProcessor
クラスの実装は @XPath
アノテーションを利用して、以下のように、元の XML メッセージから username
と password
を抽出します。
@XPath
アノテーションは、注入先となるパラメーターの直前に置かれます。パスに /text()
を追加し、終了タグではなく要素の内容のみが選択されるようにすることで、XPath 式がテキストノードを 明示的に 選択することに注意してください。
Camel エンドポイント URI リンクのコピーリンクがクリップボードにコピーされました!
Camel Language コンポーネントを使用すると、エンドポイント URI でサポートされる言語を呼び出すことができます。使用可能な構文は 2 つあります。
ファイル (または Scheme
で定義される他のリソースタイプ) に保存されている言語スクリプトを呼び出すには、以下の URI 構文を使用します。
language://LanguageName:resource:Scheme:Location[?Options]
language://LanguageName:resource:Scheme:Location[?Options]
スキームは、file:
、classpath:
、または http:
にすることができます。
たとえば、以下のルートでは、クラスパスから mysimplescript.txt
を実行します。
from("direct:start") .to("language:simple:classpath:org/apache/camel/component/language/mysimplescript.txt") .to("mock:result");
from("direct:start")
.to("language:simple:classpath:org/apache/camel/component/language/mysimplescript.txt")
.to("mock:result");
2. 埋め込み言語スクリプトを実行するには、以下の URI 構文を使用します。
language://LanguageName[:Script][?Options]
language://LanguageName[:Script][?Options]
たとえば、script
文字列に格納されている Simple 言語のスクリプトを実行するには、次のようにします。
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");
Language コンポーネントの詳細は、Apache Camel コンポーネントリファレンスガイド の 言語 を参照してください。