第171章 StringTemplate


string Template

string-template: コンポーネントを使用すると、String Template を使用してメッセージを処理できます。これは、Templating を使用してリクエストの応答を生成する場合に理想的です。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-stringtemplate</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
Copy to Clipboard Toggle word wrap

URI 形式

string-template:templateName[?options]
Copy to Clipboard Toggle word wrap
templateName は、呼び出すテンプレートのクラスパスローカル URI、またはリモートテンプレートの完全な URL です。
URI にクエリーオプションは ?option=value&option=value&.. の形式で追加できます。

オプション

Expand
オプション デフォルト 説明
allowContextMapAll (producer)
false
コンテキストマップが前詳細へのアクセスを許可するかどうかを設定します。デフォルトでは、メッセージの本文とヘッダーにのみアクセスできます。このオプションは、現在の Exchange および CamelContext へのフルアクセスに対して有効にできます。これを行うと、CamelContext API の全機能へのアクセスが開かれるため、潜在的なセキュリティーリスクが発生します。
allowTemplateFromHeader (producer)
false
ヘッダーのリソーステンプレートの使用を許可するかどうか (デフォルトは false)。このオプションを有効にすると、セキュリティーの問題があります。たとえば、ヘッダーに信頼されていないコンテンツやユーザー派生コンテンツが含まれている場合、これは最終的にエンドアプリケーションの信頼性および完全性に影響を与える可能性があるため、このオプションは注意して使用してください。
contentCache false 読み込み時のリソースコンテンツのキャッシュ。注記: Camel 2.9 でキャッシュされたリソースコンテンツは、エンドポイントの clearContentCache 操作を使用して JMX 経由でクリアできます。
delimiterStart null Camel 2.11.1 以降、変数開始区切り文字の設定
delimiterStop null Camel 2.11.1 以降、変数終了区切り文字の設定

Headers

Apache Camel は、キー org.apache.camel.stringtemplate.resource を持つメッセージヘッダーのリソースへの参照を保存します。リソースは org.springframework.core.io.Resource オブジェクトです。

ホットリロード

文字列テンプレートリソースは、デフォルトではファイルとクラスパスリソース(展開形式の jar)の両方に対してホットリロードが可能です。contentCache=true を設定すると、Apache Camel はリソースを 1 度だけ読み込み、ホットリロードができません。このシナリオは、リソースが変更されない場合に実稼働で使用できます。

stringtemplate 属性

Apache Camel は、エクスチェンジ情報を属性( java.util.Mapのみ)として文字列テンプレートに提供します。Exchange は以下のように転送されます。
Expand
key value
exchange エクスチェンジ自体。
ヘッダー In メッセージのヘッダー。
camelContext Camel コンテキスト。
request In メッセージ。
in In メッセージ。
ボディー In メッセージのボディー。
out Out メッセージ(InOut メッセージ交換パターンにのみ有効)。
response Out メッセージ(InOut メッセージ交換パターンにのみ有効)。
Camel 2.14 以降、以下のコードと同様に、メッセージヘッダーCamelStringTemplateVariableMapを設定してカスタムコンテキストマップを定義できます。
Map<String, Object> variableMap = new HashMap<String, Object>();
Map<String, Object> headersMap = new HashMap<String, Object>();
headersMap.put("name", "Willem");
variableMap.put("headers", headersMap);
variableMap.put("body", "Monday");
variableMap.put("exchange", exchange);
exchange.getIn().setHeader("CamelStringTemplateVariableMap", variableMap);
Copy to Clipboard Toggle word wrap

サンプル

たとえば、メッセージへの応答を形成するために、以下のように文字列テンプレートを使用できます。
from("activemq:My.Queue").
  to("string-template:com/acme/MyResponse.tm");
Copy to Clipboard Toggle word wrap

電子メールのサンプル

この例では、文字列テンプレートを使用して注文確認メールを送信します。メールテンプレートは StringTemplate にそのまま配置されます。この例では camel 2.11.0 で機能します。Camel バージョンが 2.11.0 未満の場合は、変数を起動して $ で終了する必要があります。
Dear <headers.lastName>, <headers.firstName>

Thanks for the order of <headers.item>.

Regards Camel Riders Bookstore
<body>
Copy to Clipboard Toggle word wrap
Java コードは以下のようになります。
private Exchange createLetter() {
    Exchange exchange = context.getEndpoint("direct:a").createExchange();
    Message msg = exchange.getIn();
    msg.setHeader("firstName", "Claus");
    msg.setHeader("lastName", "Ibsen");
    msg.setHeader("item", "Camel in Action");
    msg.setBody("PS: Next beer is on me, James");
    return exchange;
}

@Test
public void testVelocityLetter() throws Exception {
    MockEndpoint mock = getMockEndpoint("mock:result");
    mock.expectedMessageCount(1);
    mock.expectedBodiesReceived("Dear Ibsen, Claus! Thanks for the order of Camel in Action. Regards Camel Riders Bookstore PS: Next beer is on me, James");

    template.send("direct:a", createLetter());

    mock.assertIsSatisfied();
}

protected RouteBuilder createRouteBuilder() throws Exception {
    return new RouteBuilder() {
        public void configure() throws Exception {
            from("direct:a").to("string-template:org/apache/camel/component/stringtemplate/letter.tm").to("mock:result");
        }
    };
}
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat