xml変換にはバネ積分のxslt-transfomerを使用しています。実行時に動的に:私のコードは、以下のようにここにxslt-transformerにXSLリソースを動的に(プログラム的に)追加するには?
<int-xml:xslt-transformer id="xmlTransformer" input-channel="inputChannel"
output-channel="outputChannel" xsl-resource="classpath:META-INF/OrderXslt.xsl" />
ある 私はXSL-リソース= "META-INF/OrderXslt.xslクラスパス" を渡したいです。私は文脈からxmlTransformer豆を得ることができますが、設定方法を理解することができませんxsl-resource私のJavaコードは、任意のプログラムの説明は非常に理解されるであろう
File myFile = new File("D:\OrderXslt.xsl");
EventDrivenConsumer transformerConsumer = (EventDrivenConsumer) ctx.getBean("xmlTransformer");
//I need to pass myFile to transformerConsumer instace.
//However I am unable to find any API of EventDrivenConsumer
which will accept xsl resource form here (i.e. myFile)
、のようなものです。 ありがとうございます。
EDIT
public class TempTransformer<Object, Obejct> extends AbstractTransformer {
private volatile XsltPayloadTransformer xslt;
protected Object doTransform(Message<?> message) throws Exception {
return (Object) findorBuildTransformerForMessage(message).transform(message);
//Its throwing error here as
//org.springframework.integration.transformer.MessageTransformationException: failed to transform message; nested exception is java.lang.NullPointerException
}
private Transformer findorBuildTransformerForMessage(Message<?> message{
xslt = new XsltPayloadTransformer(new ClassPathResource("/META-INF/OrderXslt2.xsl"));
return xslt;
}
私は次のようにXsltPayloadTransformer
実装したEDIT
。
protected Message<?> doTransform(Message<?> message) throws Exception {
xsltTransformer = new XsltPayloadTransformer(new ClassPathResource("D:/sample.xsl"));
this.xsltTransformer.setResultType("StringResult");
this.xsltTransformer.afterPropertiesSet();
return this.xsltTransformer.transform(message);
}
しかし、正しい出力が得られません。一方、私はSaxon実装を使用し、正しい出力を示すシンプルなJavaプログラムを持っています。ここにあります...
私は何が欠けているのか理解できません。私はXsltPayloadTransformer
に設定する必要がある何か他にありますか?または私は何かに欠けている? 私は使用していますXSL v2と春4.1.7とバネ統合4.1.8 vesrions。ハンドラのtransformer
プロパティ -
@GarryRussellのおかげで、それでも私はXsltPayloadTransformerの代表団と混乱していますし、どのように私は新しいものと交換する必要があります。 –
私の編集例を見てくださいが、私はテンプレートアプローチを使うと思います。 –
@Garryスレッドセーフな方法が必要です。どのように使用するのですか Transformerアノテーションはスレッドセーフであり、その実装を使用できます。 (最新の編集をご覧ください) –