Parse Template リファレンス

Mule 4.1 の標準サポートは 2020 年 11 月 2 日に終了しました。このバージョンの Mule は、拡張サポートが終了する 2022 年 11 月 2 日にその すべてのサポート​が終了しました。

このバージョンの Mule を使用する CloudHub には新しいアプリケーションをデプロイできなくなります。許可されるのはアプリケーションへのインプレース更新のみになります。

標準サポートが適用されている最新バージョンの Mule 4 にアップグレード​することをお勧めします。これにより、最新の修正とセキュリティ機能強化を備えたアプリケーションが実行されます。

Parse Template はテンプレートを処理して結果を得るために使用する Mule コンポーネントです。テンプレートはテキストとして定義され、埋め込まれた Mule 式は評価され、結果に置き換えられます。

外部ファイル参照を使用してテンプレートを設定することも、コンポーネント定義自体に埋め込むこともできます。

Parse Template の設定

  1. Studio で、Parse Template メッセージプロセッサをパレットからキャンバスまでドラッグします。

  2. この表で説明している項目を設定します。

    parse
    項目 説明

    Content (コンテンツ)

    テンプレート文字列

    テンプレートとして使用する文字列。外部ファイルでテンプレートを定義する代わりに、この項目を使用してインラインで記述できます。評価され、結果に置き換えられる式を埋め込むことができます。

    Display Name (表示名)

    Parse Template

    アプリケーションのトランスフォーマの一意な名前を表示するためにカスタマイズします。

    Location (場所)

    ファイルパス

    メッセージプロパティまたは変数から抽出された値を挿入するテンプレートとして Mule が使用するファイルの場所を定義します。

    Target Variable (対象変数)

    変数名

    [Target Value (対象値)] で定義された式を評価した結果を保存する変数の名前。

    Target Value (対象値)

    Parse Template の実行後に評価される Mule 式。この式の結果は、[Target Variable (対象変数)] 項目で定義された名前の変数に保存されます。

Studio または Standalone Mule インスタンスで XML エディタを使用している場合:

  • parse-template​ 要素をフローに追加してから、下の表に従って設定します。

    <parse-template location="users/administrator/desktop/hrweb/confirmation.html" doc:name="Parse Template"/>

parse-template​ 要素の属性:

要素属性

content

使用するテンプレートを表す文字列であり、このテンプレートでは埋め込まれた式が評価され、その結果に置き換えられます。

location

メッセージプロパティまたは変数から抽出された値を挿入するテンプレートとして Mule が使用するファイルの場所を定義するファイルパス。

doc:name

アプリケーションのトランスフォーマの一意な名前を表示するためにカスタマイズします。(注意: Mule スタンドアロンでは不要)。

target

Parse Template が実行された後に ​targetValue​ で定義された式の結果が保存される変数の名前。

targetValue

Parse Template が実行された後に評価され、結果が ​target​ 属性で定義された名前の変数に保存される Mule 式。

コード例

次の例では、​employeeID​ によるクエリを受け入れて従業員に関するデータを取得するアプリケーション における Parse Template の使用を示しています。

この場合、Parse Template はメッセージペイロードから抽出した項目 (​name​、​department​、​job title​、​start date​、​employee type​) の値を挿入するテンプレートとして、フロー外部のファイルをテンプレートとして使用します。続いて、フローが template-built (テンプレート構築) ペイロードをコール元に返します。

parse template flow
<html>
	<body>
		<table>
		<tr>
			<th>First Name</th>
			<th>Last Name</th>
			<th>Department</th>
			<th>Job Title</th>
			<th>Start Date</th>
			<th>Employee Type</th>
		</tr>

		<tr>
			<td>#[payload[0]['first_name']]</td>
			<td>#[payload[0]['last_name']]</td>
			<td>#[payload[0]['department']]</td>
			<td>#[payload[0]['job_title']]</td>
			<td>#[payload[0]['start_date']]</td>
			<td>#[payload[0]['employee_type']]</td>
		</tr>
		</table>

	</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" xmlns:http="http://www.mulesoft.org/schema/mule/http"
      xmlns:db="http://www.mulesoft.org/schema/mule/db"
      xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/db http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
    <db:config name="Database_Config" doc:name="Database Config" doc:id="e4df87d8-ec1e-49ec-a528-43e93baa5bda" >
        <db:my-sql-connection host="localhost" port="3306" user="user" password="pw" database="MySQL_Data_Source" />
    </db:config>
    <http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" doc:id="724690b1-cc2f-451a-86eb-66f7750feba1">
        <http:listener-connection host="localhost" port="8081" />
    </http:listener-config>
    <flow name="exampleTemplateFlow1" doc:id="b8cc9464-5991-4977-978f-9f51eb252ec8" >
        <http:listener doc:name="Listener" doc:id="f334ba27-ae1f-4da5-a194-26e57a1aa637" config-ref="HTTP_Listener_config" path="/getEmployee"/>
        <db:select doc:name="Select" doc:id="c3ab7830-9920-4637-9329-954a8a94e54c" config-ref="Database_Config">
            <ee:repeatable-file-store-iterable />
            <db:sql >SELECT * FROM Employees WHERE id=#[attributes.queryParams['id']]</db:sql>
        </db:select>
        <parse-template doc:name="Parse Template" doc:id="53211517-f943-40b2-86e3-20a0e1ca4eb6" location="src/main/resources/responseHtml.template"/>
    </flow>
</mule>

この例でアプリケーションを使用するには、URL に ​http://localhost:8081/getEmployee?id=12345​ などの ID クエリパラメータが含まれる HTTP 要求を送信する必要があります。

特殊文字

Parse Template は、テンプレート内での式の使用や、これらの式でのリテラルの使用をサポートします。テンプレートは、​\#[​ といったシーケンスや引用符など、一部の特殊文字を認識します。これらの文字をエスケープすることで通常の文字として扱うことができます。

  • #[an-expression]​:

    テンプレート内では ​#[]​ を使用して式を指定します。たとえば、テンプレートの HTML 要素内で ​<td>#[upper("mulesoft")]</td>​ という式を指定すると ​<td>MULESOFT</td>​ に解決されます。空白の式 (​#[]​) はエラーとなりますが、​#['']​ や ​#[""]​ などの空白文字列は有効な式です。

  • サブ式:

    引用符で囲まれたサブ式を解決するには、サブ式を別の ​#[]​ で囲みます。たとえば、次のテンプレートスニペットでは、4 つの要素で同じサブ式 (​upper("world")​) が引用符の内部または外部に指定されています。最初の 2 つは同じ結果を返します。最後の 2 つは、サブ式が引用符内に指定されていますが、別の ​#[]​ で囲まれていないため、​upper("world")​ を処理せずにそのまま返します。

    Parse Template スニペット:
    <td>#['hello #[upper("world")]']</td>
    <td>#['hello ' ++ upper("world")]</td>
    <td>#['hello upper("world")']</td>
    <td>#['hello ++ upper("world")']</td>
    出力される値:
    <td>hello WORLD</td>
    <td>hello WORLD</td>
    <td>hello upper("world")</td>
    <td>hello ++ upper("world")</td>
  • エスケープ文字 (​\​):

    Parse Template は、文字シーケンスの ​#[​ で式の開始を示します。この文字シーケンスを式として解釈せずにリテラル文字として扱うには、​\​ でエスケープします。たとえば、​<td>#[</td>​ は ​<td>#[</td>​ を返します。

    また、式の文字列に含まれる特殊文字を通常の文字として扱いたい場合があります。式に含まれる文字列内の特殊文字をエスケープするには、特殊文字の前に ​\​ を付けます。特殊文字の例としては、​#[​ のシーケンス、引用符 (​'​ または ​"​)、アポストロフィ (​'​)、​$​ などがあります。​\#​ や ​[​ は、文字列内でこれらの 2 文字が (​\#​ が ​[​ の前に来て) 連続していない限り、エスケープする必要はありません。

    Parse Template スニペット:
    <td>\#[</td>
    <td>#['abcd\#[-1234' ++ now() as String ++ '.log']</td>
    <td>'abc'def'</td>
    <td>#['abc\'def']</td>
    <td>"xyz"xyz"</td>
    <td>#["xyz\"xyz"]</td>
    <td>#["abc\$DEF\#ghi\[JKL]"]</td>
    出力される値:
    <td>#[</td>
    <td>abcd#[-12342020-07-06T17:20:10.683-07:00.log</td>
    <td>'abc'def'</td>
    <td>abc'def</td>
    <td>"xyz"xyz"</td>
    <td>xyz"xyz</td>
    <td>abc$DEF#ghi[JKL]</td>