Does the XsltTransfomer support streaming?

View: New views
1 Messages — Rating Filter:   Alert me  

Does the XsltTransfomer support streaming?

by raulvk.soa :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi everyone,

I was just wondering whether the XsltTransformer supports streaming. I am processing an XML file, picking it up with the ESB, running it through an SXC filtering router and I need to transform it using Xslt before I place it into another directory. Ideally, the whole flow end-to-end must use streaming...

I have found evidence that StAX may be used in the current version of the XsltTransformer:
line 147: Source sourceDoc = XMLUtils.toXmlSource(getXMLInputFactory(), isUseStaxSource(), src);

However, I am not sure whether this has any effect in reality...

I have tried the following config:

                <sxc:filtering-router>
                    <file:outbound-endpoint path="d:/streamingExample/out/A" outputPattern="test_A_[UUID].txt" transformer-refs="XMLTransformStream XmlToOutputHandler"/>
                    <sxc:filter pattern="//data/element[text()='A']"/>
                </sxc:filtering-router>


And I am getting the following error:

DEBUG 2008-07-24 10:35:08,882 [FileInConnector.dispatcher.1] org.mule.module.xml.transformer.XsltTransformer: Applying transformer XMLTransformStream (org.mule.module.xml.transformer.XsltTransformer)
DEBUG 2008-07-24 10:35:08,882 [FileInConnector.dispatcher.1] org.mule.module.xml.transformer.XsltTransformer: Object before transform: org.mule.module.xml.stax.ReversibleXMLStreamReader@15b6aad
ERROR 2008-07-24 10:35:08,882 [FileInConnector.dispatcher.1] org.mule.DefaultExceptionStrategy:
********************************************************************************
Message               : null (java.lang.NullPointerException)
Type                  : org.mule.api.transformer.TransformerException
Code                  : MULE_ERROR-64999
JavaDoc               : http://mule.mulesource.org/docs/apidocs/org/mule/api/transformer/TransformerException.html
Transformer           : XsltTransformer{this=18e899c, name='XMLTransformStream', ignoreBadInput=false, returnClass=class [B, sourceTypes=[class java.lang.Str
ing, class [B, interface javax.xml.transform.Source, class org.xml.sax.InputSource, interface org.dom4j.Document, interface org.w3c.dom.Document, inte
rface org.w3c.dom.Element, class java.io.InputStream, interface org.mule.api.transport.OutputHandler, interface javax.xml.stream.XMLStreamReader, inte
rface org.mule.module.xml.transformer.DelayedResult]}
********************************************************************************
Exception stack is:
1. null (java.lang.NullPointerException)
  org.mule.module.xml.stax.ReversibleXMLStreamReader:713 (null)
2. null (java.lang.NullPointerException) (org.mule.api.transformer.TransformerException)
  org.mule.module.xml.transformer.XsltTransformer:174 (http://mule.mulesource.org/docs/apidocs/org/mule/api/transformer/TransformerException.html)
********************************************************************************
Root Exception stack trace:
java.lang.NullPointerException
        at org.mule.module.xml.stax.ReversibleXMLStreamReader.isStartElement(ReversibleXMLStreamReader.java:713)
        at org.mule.module.xml.util.XMLUtils.toXmlSource(XMLUtils.java:290)
        at org.mule.module.xml.transformer.XsltTransformer.doTransform(XsltTransformer.java:147)
        at org.mule.transformer.AbstractTransformer.transform(AbstractTransformer.java:254)
        at org.mule.DefaultMuleMessage.applyAllTransformers(DefaultMuleMessage.java:598)
        at org.mule.DefaultMuleMessage.applyTransformers(DefaultMuleMessage.java:558)
        at org.mule.DefaultMuleMessage.applyTransformers(DefaultMuleMessage.java:551)
        at org.mule.DefaultMuleEvent.transformMessage(DefaultMuleEvent.java:310)
        at org.mule.DefaultMuleEvent.transformMessage(DefaultMuleEvent.java:305)
        at org.mule.transport.file.FileMessageDispatcher.doDispatch(FileMessageDispatcher.java:55)
        at org.mule.transport.AbstractMessageDispatcher$Worker.run(AbstractMessageDispatcher.java:262)
        at org.mule.work.WorkerContext.run(WorkerContext.java:310)
        at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061)
        at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575)
        at java.lang.Thread.run(Unknown Source)

********************************************************************************

Any ideas as to how to make streaming work with the XSLT Transformer?

Thanks.
LightInTheBox - Buy quality products at wholesale price