Subject: RE: [xsl] using SAX events in URIResolver From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Sat, 15 Jan 2005 17:07:46 -0000 |
> It is very expensive to convert a file to a > byte array > and it still has to be parsed every time, so I am trying to provide > cached SAX events. Is it possible? Saxon 6.5.3 in fact maintains a result tree fragment in the form of a list of SAX events. See the source code of com.icl.saxon.expr.FragmentValue. In the end, however, I discovered that the TinyTree is a more efficient representation of a document (especially, of course, as 2.0 allows full XPath access into the document). You would be better off building the tree and caching it in that form, especially as it involves writing less code. A minor point: if you're transforming the same document multiple times, it's best not to use xsl:strip-space in the stylesheet. > > The events are stored correctly and when the parse of the XMLFilter > occurs the events are output correctly (I believe). The parse calls a > method (sendEvents) that iterates over the list of SAX events. See my > trace of what is going on below the exception. I get the following > exception when running the code: > > > java.lang.NullPointerException This sort of question really belongs on the saxon-help list, not here. The relevant line of GeneralOutputter reads: throw new IllegalArgumentException("Unknown type of Result: " + result.getClass()); so the NullPointerException occurs during an unsuccessful attempt to report a fatal error, which looks to me simply like a failure to call setResult() on the TransformerHandler. Michael Kay http://www.saxonica.com/ > > at > com.icl.saxon.output.GeneralOutputter.makeEmitter(GeneralOutpu > tter.java:272) > > at > com.icl.saxon.output.GeneralOutputter.setOutputDestination(Gen > eralOutputter.java:66) > > at > com.icl.saxon.Controller.changeOutputDestination(Controller.java:405) > > at > com.icl.saxon.Controller.transformDocument(Controller.java:1076) > > at > com.icl.saxon.TransformerHandlerImpl.endDocument(TransformerHa > ndlerImpl.java:101) > > at > com.livestoryboard.SaxEventsCacheEntry.sendEvents(Unknown Source) > > at com.livestoryboard.SaxEventsCacheEntry.parse(Unknown Source) > > at com.icl.saxon.om.Builder.build(Builder.java:265) > > at com.icl.saxon.functions.Document.makeDoc(Document.java:228) > > at > com.icl.saxon.functions.Document.getDocuments(Document.java:134) > > at com.icl.saxon.functions.Document.evaluate(Document.java:70) > > at com.icl.saxon.functions.Document.reduce(Document.java:299) > > at > com.icl.saxon.expr.PathExpression.reduce(PathExpression.java:160) > > at > com.icl.saxon.expr.NodeSetExpression.evaluate(NodeSetExpressio > n.java:39) > > at > com.icl.saxon.style.XSLGeneralVariable.getSelectValue(XSLGener > alVariable.java:251) > > at com.icl.saxon.style.XSLVariable.process(XSLVariable.java:89) > > at > com.icl.saxon.style.XSLStyleSheet.process(XSLStyleSheet.java:626) > > at > com.icl.saxon.Controller.transformDocument(Controller.java:1082) > > at com.icl.saxon.Controller.transform(Controller.java:953) > > at com.livestoryboard.actions.Preview.service(Unknown Source) > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:103) > > at > com.caucho.server.http.FilterChainServlet.doFilter(FilterChain > Servlet.java:96) > > at > com.livestoryboard.actions.EntryFilter.doFilter(Unknown Source) > > at > com.caucho.server.http.FilterChainFilter.doFilter(FilterChainF > ilter.java:88) > > at > com.livestoryboard.actions.PermissionsFilter.doFilter(Unknown Source) > > at > com.caucho.server.http.FilterChainFilter.doFilter(FilterChainF > ilter.java:88) > > at > com.livestoryboard.actions.CheckUserFilter.doFilter(Unknown Source) > > at > com.caucho.server.http.FilterChainFilter.doFilter(FilterChainF > ilter.java:88) > > at > com.caucho.server.http.Invocation.service(Invocation.java:315) > > at > com.caucho.server.http.CacheInvocation.service(CacheInvocation > .java:135) > > at > com.caucho.server.http.RunnerRequest.handleRequest(RunnerReque > st.java:346) > > at > com.caucho.server.http.RunnerRequest.handleConnection(RunnerRe > quest.java:274) > > at com.caucho.server.TcpConnection.run(TcpConnection.java:139) > > at java.lang.Thread.run(Thread.java:595) > > > > > > > > [Trace] > > SaxEventsCache.getSaxSource file: > projects\rob-test\lsb\metadata\site\site_root.xml > > SaxEventsCache.getSaxSource entry: null > > SaxEventsCacheEntry.parse source: org.xml.sax.InputSource@33b121 > > SaxEventsCacheEntry.startElement namespaceURI: > http://livestoryboard.com/schemas/lsb > > SaxEventsCacheEntry.startElement localName: md-folder > > SaxEventsCacheEntry.startElement qualifiedName: md-folder > > SaxEventsCache.getSaxSource entry NEW: > com.livestoryboard.SaxEventsCacheEntry@1aa2c23 > > SaxEventsCacheEntry.parse source (instanceof SaxEventsInputSource): > com.livestoryboard.SaxEventsInputSource@7d4a4 > > SaxEventsCacheEntry.sendEvents saxEvent: START_DOCUMENT > > SaxEventsCacheEntry.sendEvents saxEvent: START_PREFIX_MAPPING > > SaxEventsCacheEntry.sendEvents saxEvent: START_ELEMENT > > SaxEventsCacheEntry.sendEvents saxEvent.getParm(0): > http://livestoryboard.com/schemas/lsb > > SaxEventsCacheEntry.sendEvents saxEvent.getParm(1): md-folder > > SaxEventsCacheEntry.sendEvents saxEvent.getParm(2): md-folder > > SaxEventsCacheEntry.sendEvents attParms[0]: > > SaxEventsCacheEntry.sendEvents attParms[1]: > > SaxEventsCacheEntry.sendEvents attParms[2]: xmlns > > SaxEventsCacheEntry.sendEvents attParms[3]: CDATA > > SaxEventsCacheEntry.sendEvents attParms[4]: > http://livestoryboard.com/schemas/lsb > > SaxEventsCacheEntry.sendEvents attParms[0]: > > SaxEventsCacheEntry.sendEvents attParms[1]: created > > SaxEventsCacheEntry.sendEvents attParms[2]: created > > SaxEventsCacheEntry.sendEvents attParms[3]: CDATA > > SaxEventsCacheEntry.sendEvents attParms[4]: 2004-03-08T11:25:05 > > SaxEventsCacheEntry.sendEvents attParms[0]: > > SaxEventsCacheEntry.sendEvents attParms[1]: creator > > SaxEventsCacheEntry.sendEvents attParms[2]: creator > > SaxEventsCacheEntry.sendEvents attParms[3]: CDATA > > SaxEventsCacheEntry.sendEvents attParms[4]: Robert Koberg > > SaxEventsCacheEntry.sendEvents attParms[0]: > > SaxEventsCacheEntry.sendEvents attParms[1]: last_mod_by > > SaxEventsCacheEntry.sendEvents attParms[2]: last_mod_by > > SaxEventsCacheEntry.sendEvents attParms[3]: CDATA > > SaxEventsCacheEntry.sendEvents attParms[4]: Robert Koberg > > SaxEventsCacheEntry.sendEvents attParms[0]: > > SaxEventsCacheEntry.sendEvents attParms[1]: modified > > SaxEventsCacheEntry.sendEvents attParms[2]: modified > > SaxEventsCacheEntry.sendEvents attParms[3]: CDATA > > SaxEventsCacheEntry.sendEvents attParms[4]: 2004-08-02T17:00:02 > > SaxEventsCacheEntry.sendEvents saxEvent: END_ELEMENT > > SaxEventsCacheEntry.sendEvents saxEvent: END_PREFIX_MAPPING > > SaxEventsCacheEntry.sendEvents saxEvent: END_DOCUMENT
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] using SAX events in URIResolv, Robert Koberg | Thread | [xsl] Re: using SAX events in URIRe, Robert Koberg |
RE: [xsl] Complex XPath Expression, Michael Kay | Date | Re: [xsl] Complex XPath Expression, Colin Paul Adams |
Month |