【发布时间】:2016-05-17 07:42:51
【问题描述】:
我正在使用 spring 集成的 xslt-transfomer 进行 xml 转换。 我的代码如下所示,
<int-xml:xslt-transformer id="xmlTransformer" input-channel="inputChannel"
output-channel="outputChannel" xsl-resource="classpath:META-INF/OrderXslt.xsl" />
这里我想在运行时动态传递 xsl-resource="classpath:META-INF/OrderXslt.xsl"。我能够从上下文中获取 xmlTransformer bean,但无法弄清楚如何将 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 )
任何程序化的解释都将受到高度赞赏。 提前致谢。
编辑
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。
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);
}
但是我没有得到正确的输出。另一方面,我有一个简单的 java 程序,它使用 Saxon 实现并显示正确的输出。在这里……
public static void main(String [] arr) {
TransformerFactory tFactory = TransformerFactory.newInstance();
StreamSource xmlInputFile = new StreamSource("D:/input.xml");
StreamSource xslTransformationFile = new StreamSource("D:/sample.xsl");
StreamResult xmlOutputFile = new StreamResult(new File("D:/output.xml"));
Transformer transformer;
try {
transformer = tFactory.newTransformer(xslTransformationFile); //gives instance of net.sf.saxon.jaxp.TransformerImpl
transformer.transform(xmlInputFile, xmlOutputFile);
}
} catch (Exception e) {
}
}
我无法弄清楚我错过了什么。还有什么我需要设置为XsltPayloadTransformer的吗?或者我错过了什么?
我正在使用 XSL v2 和 spring 4.1.7 和 spring integration 4.1.8 版本。
【问题讨论】:
标签: xml spring xslt spring-integration