第189章 XSLT


XSLT

xslt: コンポーネントを使用すると、XSLT テンプレートを使用してメッセージを処理できます。これは、Templating を使用してリクエストの応答を生成する場合に理想的です。

URI 形式

xslt:templateName[?options]
Copy to Clipboard Toggle word wrap
templateName は、呼び出すテンプレートのクラスパスローカル URI、またはリモートテンプレートの完全な URL です。URI 構文の詳細は、Spring ドキュメント を参照してください。
URI にクエリーオプションは ?option=value&option=value&.. の形式で追加できます。
以下は URI の例です。
Expand
URI 説明
xslt:com/acme/mytransform.xsl クラスパスのファイル com/acme/mytransform.xsl を参照します。
xslt:file:///foo/bar.xsl ファイル( /foo/bar.xsl )を参照します。
xslt:http://acme.com/cheese/foo.xsl リモート HTTP リソースを参照します。
Camel 2.9 以降では、XSLT コンポーネントは camel-core に直接提供されます。

オプション

Expand
名前 デフォルト値 説明
converter null デフォルトの XmlConverter を上書きするオプション。レジストリーでコンバーターを検索します。提供される変換のタイプは org.apache.camel.converter.jaxp.XmlConverter である必要があります。
transformerFactory null デフォルトの TransformerFactory を上書きするオプション。レジストリーで transformerFactory を検索します。提供されるトランスフォーマーファクトリーのタイプは javax.xml.transform.TransformerFactory である必要があります。
transformerFactoryClass null デフォルトの TransformerFactory を上書きするオプション。TransformerFactoryClass インスタンスを作成し、コンバーターに設定します。
uriResolverFactory DefaultXsltUriResolverFactory Camel 2.17: エンドポイントごとに URI リゾルバーを作成する org.apache.camel.component.xslt.XsltUriResolverFactory を参照します。デフォルトの実装は org.apache.camel.component.xslt.DefaultXsltUriResolverFactory のインスタンスを返します。これにより、エンドポイントごとにデフォルトの URI リゾルバー org.apache.camel.builder.xml.XsltUriResolver が作成されます。デフォルトの URI リゾルバーは、クラスパスとファイルシステムから XSLT ドキュメントを読み取ります。URI リゾルバーがエンドポイントで指定されたルート XSLT ドキュメントのリソース URI に依存する場合、このオプション uriResolver ではなくこのオプションが使用されます。たとえば、デフォルトの URI リゾルバーを拡張する場合などです。このオプションは XSLT コンポーネントでも利用できるため、リソースリゾルバーファクトリーはすべてのエンドポイントに 1 回のみ設定できます。
uriResolver null Camel 2.3: カスタムの javax.xml.transformation.URIResolver を使用できます。Camel はデフォルトで、クラスパスからロードできる独自の実装 org.apache.camel.builder.xml.XsltUriResolver を使用します。
resultHandlerFactory null Camel 2.3: カスタムの org.apache.camel.builder.xml.ResultHandler タイプを使用できるカスタム org.apache.camel.builder.xml.ResultHandlerFactory を使用できます。
failOnNullBody true Camel 2.3: 入力ボディーが null の場合に例外を出力するかどうか。
deleteOutputFile false Camel 2.6: output=file がある場合、このオプションは エクスチェンジ の処理が完了したときに出力ファイルを削除するかどうかを決定します。たとえば、出力ファイルが一時ファイルである場合は、使用後に削除することが推奨されます。
output string Camel 2.3: 使用する出力タイプを指定するオプション。使用できる値は 、string、byte、DOM、file です。最初の 3 つのオプションは、すべてメモリーベースで、ファイル は直接 java.io.File にストリーミングされます。ファイル の場合、キー Exchange.XSLT_FILE_NAME で IN ヘッダーのファイル名を指定する 必要 があります。これは CamelXsltFileName です。また、ファイル名につながるパスも事前に作成する必要があります。作成しない場合は、実行時に例外が発生します。
contentCache true Camel 2.6: 読み込み時のリソースコンテンツ(スタイルシートファイル)のキャッシュ。false に設定すると、Camel は各メッセージ処理のスタイルシートファイルを再読み込みします。これは開発に適しています。
allowStAX true Camel 2.8.3/2.9: StAX を javax.xml.transform.Source として使用することを許可するかどうか。
transformerCacheSize 0 Camel 2.9.3/2.10.1: Template.newTransformer ()への呼び出しを回避するために再利用するためにキャッシュされる javax.xml.transform.Transformer オブジェクトの数。
saxon false Camel 2.11: Saxon を transformerFactoryClass として使用するかどうか。有効にすると、クラス net.sf.saxon.TransformerFactoryImpl が使用されます。Saxon をクラスパスに追加する必要があります。
saxonExtensionFunctions null Camel 2.17: 1 つ以上のカスタム net.sf.saxon.lib.ExtensionFunctionDefinition を設定できます。Saxon をクラスパスに追加する必要があります。このオプションを設定すると、saxon オプションが自動的に有効になります。
errorListener Camel 2.14: カスタム javax.xml.transform.ErrorListener を使用するように設定できます。これを行う場合は、プロパティーが使用されていないため、エラーや致命的なエラーを取得し、エクスチェンジに関する情報を保存するデフォルトのエラーリスナーに注意してください。そのため、このオプションは特別なユースケースにのみ使用してください。

XSLT エンドポイントの使用

たとえば、以下のようなものを使用できます。
from("activemq:My.Queue").
  to("xslt:com/acme/mytransform.xsl");
Copy to Clipboard Toggle word wrap
XSLT テンプレートを使用して InOut メッセージエクスチェンジ( JMSReplyTo ヘッダーがある)のメッセージの応答を形成するには、以下を行います。
InOnly を使用してメッセージを消費し、別の宛先に送信する場合は、以下のルートを使用できます。
from("activemq:My.Queue").
  to("xslt:com/acme/mytransform.xsl").
  to("activemq:Another.Queue");
Copy to Clipboard Toggle word wrap

連携する XSLT へのパラメーターの取得

デフォルトでは、すべてのヘッダーが XSLT で利用可能なパラメーターとして追加されます。これを実行するには、パラメーターを宣言して を使用できるようにする必要があり ます
<setHeader headerName="myParam"><constant>42</constant></setHeader>
<to uri="xslt:MyTransform.xsl"/>
Copy to Clipboard Toggle word wrap
また、XSLT を使用できるようにするには、最上位レベルで宣言する必要があります。
<xsl: ...... >

   <xsl:param name="myParam"/>
  
    <xsl:template ...>
Copy to Clipboard Toggle word wrap

Spring XML バージョン

Spring XML で上記の例を使用するには、たとえば を使用します。
  <camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
    <route>
      <from uri="activemq:My.Queue"/>
      <to uri="xslt:org/apache/camel/spring/processor/example.xsl"/>
      <to uri="activemq:Another.Queue"/>
    </route>
  </camelContext>
Copy to Clipboard Toggle word wrap
具体的な例が必要な場合は、テストケースその Spring XML があります。

xsl:include の使用

Camel は独自の URIResolver の実装を提供します。これにより、Camel は含まれるファイルをクラスパスからロードでき、以前よりもインテリジェントなファイルを読み込むことができます。
たとえば、以下のようになります。
<xsl:include href="staff_template.xsl"/>
Copy to Clipboard Toggle word wrap
これで開始エンドポイントからの相対的な位置が置かれます。以下に例を示します。
.to("xslt:org/apache/camel/component/xslt/staff_include_relative.xsl")
Copy to Clipboard Toggle word wrap
つまり、Camel は クラス パス内のファイルを org/apache/camel/component/xslt/staff_template.xsl として特定します。これにより、org/apache/camel/component/xslt の例と同じフォルダーに xsl include を使用し、xsl ファイルを配置できます。
以下の 2 つの接頭辞 classpath: または file: を使用して、クラスパスまたはファイルシステムのいずれかを検索するよう Camel に指示することができます。接頭辞を省略すると、Camel はエンドポイント設定から接頭辞を使用します。の両方に がない場合、クラスパスが想定されます。
などのパスで再参照することもできます。
<xsl:include href="../staff_other_template.xsl"/>
Copy to Clipboard Toggle word wrap
次に、org/apache/camel/component の下にある xsl ファイルを解決します。

xsl:include およびデフォルト接頭辞の使用

xsl:include を使用する場合:
<xsl:include href="staff_template.xsl"/>
Copy to Clipboard Toggle word wrap
その後、Camel 2.10.3 以前は、Camel は classpath: をデフォルトの接頭辞として使用し、クラスパスからリソースをロードします。これはほとんどの場合機能しますが、開始リソースをファイルからロードするように設定すると、
.to("xslt:file:etc/xslt/staff_include_relative.xsl")
Copy to Clipboard Toggle word wrap
.. 次に、すべてのインクルードの前に "file:" も指定する必要があります。
<xsl:include href="file:staff_template.xsl"/>
Copy to Clipboard Toggle word wrap
Camel 2.10.4 以降では、Camel はエンドポイント設定の接頭辞をデフォルトの接頭辞として使用するため、これはより簡単になりました。そのため、Camel 2.10.4 以降では以下を実行できます。
<xsl:include href="staff_template.xsl"/>
Copy to Clipboard Toggle word wrap
エンドポイントが接頭辞として file: で設定されているため、ファイルシステムから staff_template.xsl リソースをロードします。接頭辞を明示的に設定し、一致させることもできます。と には、ファイルとクラスパスの両方の読み込みがあります。ただし、ほとんどのユーザーはファイルまたはクラスパスベースのリソースを使用するため、これは一般的ではありません。
注記
XSLT は、ref: を接頭辞として使用して、レジストリーからリソースファイルを読み込むことができます。

Saxon 拡張機能の使用

Saxon 9.2 では、拡張関数の記述が 統合エクステンション関数 と呼ばれる新しいメカニズムで補完されているため、camel を簡単に使用できるようになりました。
Java の例:
SimpleRegistry registry = new SimpleRegistry();
registry.put("function1", new MyExtensionFunction1());
registry.put("function2", new MyExtensionFunction2());

CamelContext context = new DefaultCamelContext(registry);
context.addRoutes(new RouteBuilder() {
    @Override
    public void configure() throws Exception {
        from("direct:start")
            .to("xslt:org/apache/camel/component/xslt/extensions/extensions.xslt?saxonExtensionFunctions=#function1,#function2");
    }
});
Copy to Clipboard Toggle word wrap
Spring XML の例:
<camelContext xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="direct:extensions"/>
    <to uri="xslt:org/apache/camel/component/xslt/extensions/extensions.xslt?saxonExtensionFunctions=#function1,#function2"/>
  </route>
</camelContext>


<bean id="function1" class="org.apache.camel.component.xslt.extensions.MyExtensionFunction1"/>
<bean id="function2" class="org.apache.camel.component.xslt.extensions.MyExtensionFunction2"/>
Copy to Clipboard Toggle word wrap

動的スタイルシート

ランタイム時に動的スタイルシートを指定するには、動的 URI を定義します。たとえば、Java DSL の .recipientList コマンドを使用して呼び出される Recipient List Enterprise Integration Pattern (EIP)を使用してこれを実行できます。

XSLT ErrorListener からの警告、エラー、および致命的なエラーへのアクセス

Camel 2.14 から利用可能
Camel 2.14 以降では、警告/エラーまたは fatalError は、キー Exchange.XSLT_ERRORExchange.XSLT_FATAL_ERROR、または Exchange.XSLT_WARNING を持つプロパティーとして現在のエクスチェンジに保存されます。これにより、エンドユーザーは変換中に発生するエラーを保持できます。
たとえば、以下のスタイルシートでは、スタッフに空の dob フィールドがある場合は終了します。xsl:message を使用したカスタムエラーメッセージを含めるには、以下を行います。
  <xsl:template match="/">
    <html>
      <body>
        <xsl:for-each select="staff/programmer">
          <p>Name: <xsl:value-of select="name"/><br />
            <xsl:if test="dob=''">
              <xsl:message terminate="yes">Error: DOB is an empty string!</xsl:message>
            </xsl:if>
          </p>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
Copy to Clipboard Toggle word wrap
この情報は、例外の getMessage() メソッドにメッセージが含まれる例外として保存されたエクスチェンジでは使用できません。例外が鍵の警告としてエクスチェンジに保存されます。 Exchange.XSLT_WARNING.
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat