xsl-list
[Top] [All Lists]

RE: [xsl] TransformerHandler Chaining with Java and Saxon

2009-06-02 19:14:28
Could be this bug

https://sourceforge.net/tracker/index.php?func=detail&aid=1558231&group_id=2
9872&atid=397617

though that's documented as applying to 8.8 rather than 8.9.

Another candidate is this one, in 9.0

https://sourceforge.net/tracker/?func=detail&aid=1986836&group_id=29872&atid
=397617

I suggest you try it on a more recent release. The current release is
9.1.0.6.

Also, I suggest you raise Saxon-specific problems on the saxon-help list at
SourceForge.

Regards,

Michael Kay
http://www.saxonica.com/
http://twitter.com/michaelhkay  

-----Original Message-----
From: Scott Lynch [mailto:slynch(_at_)nortel(_dot_)com] 
Sent: 02 June 2009 23:50
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] TransformerHandler Chaining with Java and Saxon

All,

This is not quite an xsl question, but hopefully someone here 
has seen this before and can help me, because I've been 
banging my head on my keyboard for hours now. I'm trying to 
chain together several transforms using the 
TransformerHandler chaining design pattern in Java with the 
Saxon (8.9) engine. The code below invariable throws an 
exception complaining about "The TransformerHandler is not 
serially reusable. The
startDocument() method must be called once only." when the
reader.parse(source) method is invoked. 

Does anyone know why this would be happening and how to 
prevent it? I am able to individually transform my file with 
the transforms by using a set of rotating temporary files, 
but I would like to increase the speed of the transformation 
(I'm transforming about 17 files comprising 50meg of data 
through about 10 transforms and this is taking several 
minutes) using chaining if possible.

thanks,
Scott


    private String multiTransform(String sourceFileName, 
List<String> transformFiles, String startKey)
    {
        String outFileName = "transformOutput.xml";
        try
        {
            TransformerFactory factory = 
TransformerFactory.newInstance();
            SAXTransformerFactory saxTFactory = 
((SAXTransformerFactory) factory);
            List<TransformerHandler> handlers = new 
ArrayList<TransformerHandler>();
            TransformerHandler previousHandler = null;
            for (String transformFile : transformFiles)
            {
                StreamSource source = new 
StreamSource(Resources.getResource(transformFile).openStream());
                TransformerHandler handler = 
saxTFactory.newTransformerHandler(source);
                handlers.add(handler);
                if (previousHandler != null)
                {
                    previousHandler.setResult(new SAXResult(handler));
                    break;
                }
                previousHandler = handler;
            }

            XMLReader reader = XMLReaderFactory.createXMLReader();
            reader.setContentHandler(handlers.get(0));

            TransformerHandler lastHandler =
handlers.get(handlers.size() - 1);
            OutputStream resultOutStream = new 
FileOutputStream(outFileName);
            StreamResult xformOutResult = new 
StreamResult(resultOutStream);
            lastHandler.setResult(xformOutResult);
            FileInputStream fileInStrm = new 
FileInputStream(sourceFileName);
            InputSource source = new InputSource(fileInStrm);
            reader.parse(source);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return outFileName;
    }



The exception...

java.lang.UnsupportedOperationException: The 
TransformerHandler is not serially reusable. The 
startDocument() method must be called once only.
      at
net.sf.saxon.TransformerHandlerImpl.startDocument(TransformerH
andlerImpl
.java:69)
      at
net.sf.saxon.event.ContentHandlerProxy.open(ContentHandlerProx
y.java:242
)
      at net.sf.saxon.event.ProxyReceiver.open(ProxyReceiver.java:76)
      at
net.sf.saxon.event.ImplicitResultChecker.open(ImplicitResultCh
ecker.java
:24)
      at
net.sf.saxon.event.ImplicitResultChecker.firstContent(Implicit
ResultChec
ker.java:59)
      at
net.sf.saxon.event.ImplicitResultChecker.startElement(Implicit
ResultChec
ker.java:30)
      at
net.sf.saxon.event.NamespaceReducer.startElement(NamespaceRedu
cer.java:5
4)
      at
net.sf.saxon.event.ComplexContentOutputter.startContent(Comple
xContentOu
tputter.java:481)
      at
net.sf.saxon.event.ComplexContentOutputter.characters(ComplexC
ontentOutp
utter.java:136)
      at net.sf.saxon.instruct.Copy.processLeavingTail(Copy.java:164)
      at
net.sf.saxon.instruct.Choose.processLeavingTail(Choose.java:338)
      at
net.sf.saxon.instruct.Template.applyLeavingTail(Template.java:99)
      at
net.sf.saxon.instruct.ApplyTemplates.applyTemplates(ApplyTempl
ates.java:
319)
      at
net.sf.saxon.instruct.ApplyTemplates.apply(ApplyTemplates.java:189)
      at
net.sf.saxon.instruct.ApplyTemplates.process(ApplyTemplates.java:149)
      at
net.sf.saxon.instruct.ElementCreator.processLeavingTail(Elemen
tCreator.j
ava:250)
      at net.sf.saxon.instruct.Copy.processLeavingTail(Copy.java:152)
      at
net.sf.saxon.instruct.Choose.processLeavingTail(Choose.java:338)
      at
net.sf.saxon.instruct.Template.applyLeavingTail(Template.java:99)
      at
net.sf.saxon.instruct.ApplyTemplates.applyTemplates(ApplyTempl
ates.java:
319)
      at
net.sf.saxon.instruct.ApplyTemplates.defaultAction(ApplyTempla
tes.java:3
51)
      at
net.sf.saxon.instruct.ApplyTemplates.applyTemplates(ApplyTempl
ates.java:
312)
      at
net.sf.saxon.Controller.transformDocument(Controller.java:1602)
      at
net.sf.saxon.TransformerHandlerImpl.endDocument(TransformerHan
dlerImpl.j
ava:133)
      at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.e
ndDocument
(AbstractSAXParser.java:737)
      at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentSca
nnerImpl.s
canDocument(XMLDocumentFragmentScannerImpl.java:515)
      at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.
parse(XML1
1Configuration.java:807)
      at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.
parse(XML1
1Configuration.java:737)
      at
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XML
Parser.jav
a:107)
      at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.p
arse(Abstr
actSAXParser.java:1205)

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>