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>
--~--