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.第189章 XSLT
XSLT リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
xslt:templateName[?options]
xslt:templateName[?options]
templateName は、呼び出すテンプレートのクラスパスローカル URI、またはリモートテンプレートの完全な URL です。URI 構文の詳細は、Spring ドキュメント を参照してください。
URI にクエリーオプションは
?option=value&option=value&.. の形式で追加できます。
以下は URI の例です。
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 に直接提供されます。
オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
名前 | デフォルト値 | 説明 |
---|---|---|
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 ()への呼び出しを回避するために再利用するためにキャッシュされる オブジェクトの数。
|
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");
from("activemq:My.Queue").
to("xslt:com/acme/mytransform.xsl");
XSLT テンプレートを使用して InOut メッセージエクスチェンジ(
JMSReplyTo
ヘッダーがある)のメッセージの応答を形成するには、以下を行います。
InOnly を使用してメッセージを消費し、別の宛先に送信する場合は、以下のルートを使用できます。
from("activemq:My.Queue"). to("xslt:com/acme/mytransform.xsl"). to("activemq:Another.Queue");
from("activemq:My.Queue").
to("xslt:com/acme/mytransform.xsl").
to("activemq:Another.Queue");
連携する XSLT へのパラメーターの取得 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、すべてのヘッダーが XSLT で利用可能なパラメーターとして追加されます。これを実行するには、パラメーターを宣言して を使用できるようにする必要があり ます。
<setHeader headerName="myParam"><constant>42</constant></setHeader> <to uri="xslt:MyTransform.xsl"/>
<setHeader headerName="myParam"><constant>42</constant></setHeader>
<to uri="xslt:MyTransform.xsl"/>
また、XSLT を使用できるようにするには、最上位レベルで宣言する必要があります。
<xsl: ...... > <xsl:param name="myParam"/> <xsl:template ...>
<xsl: ...... >
<xsl:param name="myParam"/>
<xsl:template ...>
Spring XML バージョン リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Spring XML で上記の例を使用するには、たとえば を使用します。
具体的な例が必要な場合は、テストケース と その Spring XML があります。
xsl:include の使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel は独自の
URIResolver
の実装を提供します。これにより、Camel は含まれるファイルをクラスパスからロードでき、以前よりもインテリジェントなファイルを読み込むことができます。
たとえば、以下のようになります。
<xsl:include href="staff_template.xsl"/>
<xsl:include href="staff_template.xsl"/>
これで開始エンドポイントからの相対的な位置が置かれます。以下に例を示します。
.to("xslt:org/apache/camel/component/xslt/staff_include_relative.xsl")
.to("xslt:org/apache/camel/component/xslt/staff_include_relative.xsl")
つまり、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"/>
<xsl:include href="../staff_other_template.xsl"/>
次に、
org/apache/camel/component
の下にある xsl ファイルを解決します。
xsl:include およびデフォルト接頭辞の使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
xsl:include を使用する場合:
<xsl:include href="staff_template.xsl"/>
<xsl:include href="staff_template.xsl"/>
その後、Camel 2.10.3 以前は、Camel は classpath: をデフォルトの接頭辞として使用し、クラスパスからリソースをロードします。これはほとんどの場合機能しますが、開始リソースをファイルからロードするように設定すると、
.to("xslt:file:etc/xslt/staff_include_relative.xsl")
.to("xslt:file:etc/xslt/staff_include_relative.xsl")
.. 次に、すべてのインクルードの前に "file:" も指定する必要があります。
<xsl:include href="file:staff_template.xsl"/>
<xsl:include href="file:staff_template.xsl"/>
Camel 2.10.4 以降では、Camel はエンドポイント設定の接頭辞をデフォルトの接頭辞として使用するため、これはより簡単になりました。そのため、Camel 2.10.4 以降では以下を実行できます。
<xsl:include href="staff_template.xsl"/>
<xsl:include href="staff_template.xsl"/>
エンドポイントが接頭辞として file: で設定されているため、ファイルシステムから staff_template.xsl リソースをロードします。接頭辞を明示的に設定し、一致させることもできます。と には、ファイルとクラスパスの両方の読み込みがあります。ただし、ほとんどのユーザーはファイルまたはクラスパスベースのリソースを使用するため、これは一般的ではありません。
注記
XSLT は、
ref:
を接頭辞として使用して、レジストリーからリソースファイルを読み込むことができます。
Saxon 拡張機能の使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Saxon 9.2 では、拡張関数の記述が 統合エクステンション関数 と呼ばれる新しいメカニズムで補完されているため、camel を簡単に使用できるようになりました。
Java の例:
Spring XML の例:
動的スタイルシート リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ランタイム時に動的スタイルシートを指定するには、動的 URI を定義します。たとえば、Java DSL の
.recipientList
コマンドを使用して呼び出される Recipient List Enterprise Integration Pattern (EIP)を使用してこれを実行できます。
XSLT ErrorListener からの警告、エラー、および致命的なエラーへのアクセス リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.14 から利用可能
Camel 2.14 以降では、警告/エラーまたは fatalError は、キー
Exchange.XSLT_ERROR
、Exchange.XSLT_FATAL_ERROR
、または Exchange.XSLT_WARNING
を持つプロパティーとして現在のエクスチェンジに保存されます。これにより、エンドユーザーは変換中に発生するエラーを保持できます。
たとえば、以下のスタイルシートでは、スタッフに空の dob フィールドがある場合は終了します。xsl:message を使用したカスタムエラーメッセージを含めるには、以下を行います。
この情報は、例外の
getMessage()
メソッドにメッセージが含まれる例外として保存されたエクスチェンジでは使用できません。例外が鍵の警告としてエクスチェンジに保存されます。 Exchange.XSLT_WARNING.