[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] using SAX events in URIResolver
Hi,
I am working on a cache for XML resolved through an URIResolver. I have been storing byte arrays and providing them as a ByteArrayInputStream to a StreamSource. 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? I have tried using Saxon653, Xalan and Resin to process the stylesheets (none work, but Saxon gets the closest). I have the following XML Parser system properties set: org.xml.sax.driver=org.apache.xerces.parsers.XIncludeParserConfiguration javax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl org.apache.xerces.xni.parser.XMLParserConfiguration=org.apache.xerces.parsers.XIncludeParserConfiguration I am extending InputSource to be able to use an XMLFilter that stores an ArrayList of SAX events. The SAX events are output using the TransformerHandler from the transformation. // handler is the current TransformerHandler // file is the key/source for the cache entry InputSource in = new SaxEventsInputSource(handler, file); // entry is the XMLFilter that has the ArrayList of SAXEvents // in is the extended InputSource SAXSource source = new SAXSource(entry, in); 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 at com.icl.saxon.output.GeneralOutputter.makeEmitter(GeneralOutputter.java:272) at com.icl.saxon.output.GeneralOutputter.setOutputDestination(GeneralOutputter.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(TransformerHandlerImpl.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(NodeSetExpression.java:39) at com.icl.saxon.style.XSLGeneralVariable.getSelectValue(XSLGeneralVariable.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(FilterChainServlet.java:96) at com.livestoryboard.actions.EntryFilter.doFilter(Unknown Source) at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88) at com.livestoryboard.actions.PermissionsFilter.doFilter(Unknown Source) at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88) at com.livestoryboard.actions.CheckUserFilter.doFilter(Unknown Source) at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.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(RunnerRequest.java:346) at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|