vgritsenko 01/12/13 12:34:20 Modified: src/org/apache/cocoon/components/xslt XSLTProcessorImpl.java Log: Applied patch from Eisert, Wolfram [[EMAIL PROTECTED]] to fix "XSP page getting called TWICE! (using pipeline as a transformer)" issue. Complex debug statements surrounded by if(). Make debug output more consistent. Revision Changes Path 1.14 +72 -57 xml-cocoon2/src/org/apache/cocoon/components/xslt/XSLTProcessorImpl.java Index: XSLTProcessorImpl.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/components/xslt/XSLTProcessorImpl.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- XSLTProcessorImpl.java 2001/11/26 19:45:01 1.13 +++ XSLTProcessorImpl.java 2001/12/13 20:34:20 1.14 @@ -30,7 +30,12 @@ import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; -import javax.xml.transform.*; +import javax.xml.transform.URIResolver; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.Templates; +import javax.xml.transform.Result; +import javax.xml.transform.Transformer; import javax.xml.transform.sax.SAXSource; import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.sax.TemplatesHandler; @@ -105,7 +110,6 @@ this.entityResolver = (Resolver)manager.lookup(Resolver.ROLE); } - public void dispose() { if (this.manager != null) { @@ -153,12 +157,15 @@ throws ProcessingException { try { - Templates templates = getTemplates(stylesheet); + final InputSource is = stylesheet.getInputSource(); + final String id = is.getSystemId(); + Templates templates = getTemplates(stylesheet, id); if(templates == null) { - InputSource is = stylesheet.getInputSource(); - getLogger().debug("Creating new Templates in " + this + " for " + is); - if (is.getSystemId() != null) - getLogger().debug(" with system id " + is.getSystemId()); + if (this.getLogger().isDebugEnabled()) { + getLogger().debug("Creating new Templates in " + this + " for " + is); + if (id != null) + getLogger().debug(" with system id " + id); + } //templates = getTransformerFactory().newTemplates(new SAXSource(is)); @@ -175,25 +182,30 @@ if (filter != null) { filter.setParent(reader); filter.setContentHandler(templatesHandler); - } - else + } else { reader.setContentHandler(templatesHandler); - if(this.entityResolver != null) + } + if (this.entityResolver != null) reader.setEntityResolver(this.entityResolver); - getLogger().debug("InputSource = " + is - + ", templatesHandler = " + templatesHandler - + ", reader = " + reader); + if (this.getLogger().isDebugEnabled()) { + getLogger().debug("InputSource = " + is + + ", templatesHandler = " + templatesHandler + + ", reader = " + reader); + } // Parse the stylesheet. reader.parse(is); // Get the Templates object (generated during the parsing of // the stylesheet) from the TemplatesHandler. templates = templatesHandler.getTemplates(); - putTemplates (templates, stylesheet); + putTemplates (templates, stylesheet, id); } else { - getLogger().debug("Reusing Templates in " + this + " for " - + stylesheet.getInputSource().getSystemId()); + if (this.getLogger().isDebugEnabled()) { + getLogger().debug("Reusing Templates in " + this + " for " + is); + if (id != null) + getLogger().debug(" with system id " + id); + } } TransformerHandler handler @@ -201,19 +213,20 @@ if (handler == null) { /* If there is a problem in getting the handler, try using a * brand new Templates object */ - getLogger().debug("Re-creating new Templates in " + this + " for" - + stylesheet.getInputSource().getSystemId()); - InputSource is = stylesheet.getInputSource(); + if (this.getLogger().isDebugEnabled()) { + getLogger().debug("Re-creating new Templates in " + this + " for" + is); + if (id != null) + getLogger().debug(" with system id " + id); + } templates = getTransformerFactory().newTemplates(new SAXSource(is)); - putTemplates (templates, stylesheet); + putTemplates (templates, stylesheet, id); handler = getTransformerFactory().newTransformerHandler(templates); } handler.getTransformer() .setErrorListener(new TraxErrorHandler(getLogger())); return handler; - } - catch (Exception e) { + } catch (Exception e) { throw new ProcessingException("Error in creating Transform Handler", e); } } @@ -223,10 +236,12 @@ throws ProcessingException { try { - getLogger().debug("XSLTProcessorImpl: transform source = " + source - + ", stylesheet = " + stylesheet - + ", parameters = " + params - + ", result = " + result); + if (this.getLogger().isDebugEnabled()) { + getLogger().debug("XSLTProcessorImpl: transform source = " + source + + ", stylesheet = " + stylesheet + + ", parameters = " + params + + ", result = " + result); + } TransformerHandler handler = getTransformerHandler(stylesheet); Transformer transformer = handler.getTransformer(); @@ -242,19 +257,20 @@ transformer.transform(new StreamSource(is.getByteStream(), is.getSystemId()), result); - getLogger().debug("XSLTProcessorImpl: transform done"); - if (result instanceof StreamResult) { - Writer writer = ((StreamResult)result).getWriter(); - getLogger().debug("XSLTProcessorImpl: transform result = " - + writer); - if (writer instanceof StringWriter) { - StringBuffer stringBuffer = ((StringWriter)writer).getBuffer(); + if (this.getLogger().isDebugEnabled()) { + getLogger().debug("XSLTProcessorImpl: transform done"); + if (result instanceof StreamResult) { + Writer writer = ((StreamResult)result).getWriter(); getLogger().debug("XSLTProcessorImpl: transform result = " - + stringBuffer); + + writer); + if (writer instanceof StringWriter) { + StringBuffer stringBuffer = ((StringWriter)writer).getBuffer(); + getLogger().debug("XSLTProcessorImpl: transform result = " + + stringBuffer); + } } } - } - catch (Exception e) { + } catch (Exception e) { throw new ProcessingException("Error in running Transformation", e); } } @@ -283,7 +299,7 @@ return tfactory; } - private Templates getTemplates(Source stylesheet) + private Templates getTemplates(Source stylesheet, String id) throws IOException, ProcessingException { Templates templates = null; @@ -291,40 +307,35 @@ if (useStore == false) return null; - InputSource is = stylesheet.getInputSource(); - getLogger().debug("XSLTProcessorImpl getTemplates: stylesheet " - + is.getSystemId()); + getLogger().debug("XSLTProcessorImpl getTemplates: stylesheet " + id); // only stylesheets with a last modification date are stored if (stylesheet.getLastModified() != 0) { // Stored is an array of the template and the caching time - if (store.containsKey(is.getSystemId())) { - Object[] templateAndTime - = (Object[])store.get(is.getSystemId()); + if (store.containsKey(id)) { + Object[] templateAndTime = (Object[])store.get(id); if(templateAndTime != null && templateAndTime[1] != null) { long storedTime = ((Long)templateAndTime[1]).longValue(); if (storedTime < stylesheet.getLastModified()) { - store.remove(is.getSystemId()); - } - else { + store.remove(id); + } else { templates = (Templates)templateAndTime[0]; } } } - } - else { + } else { // remove an old template if it exists - if (store.containsKey(is.getSystemId())) { - store.remove(is.getSystemId()); + if (store.containsKey(id)) { + store.remove(id); } } - return templates; + return templates; } - private void putTemplates (Templates templates, Source stylesheet) + private void putTemplates (Templates templates, Source stylesheet, String id) throws IOException, ProcessingException { if (useStore == false) @@ -337,7 +348,7 @@ Object[] templateAndTime = new Object[2]; templateAndTime[0] = templates; templateAndTime[1] = new Long(stylesheet.getLastModified()); - store.hold(stylesheet.getInputSource().getSystemId(), templateAndTime); + store.hold(id, templateAndTime); } } @@ -358,8 +369,10 @@ public javax.xml.transform.Source resolve(String href, String base) throws TransformerException { - getLogger().debug("XSLTProcessorImpl: resolve(href = " + href - + ", base = " + base + "); resolver = " + resolver); + if (this.getLogger().isDebugEnabled()) { + getLogger().debug("XSLTProcessorImpl: resolve(href = " + href + + ", base = " + base + "); resolver = " + resolver); + } try { Source xslSource; @@ -391,8 +404,10 @@ } } InputSource is = xslSource.getInputSource(); - getLogger().debug("xslSource = " + xslSource - + ", system id = " + is.getSystemId()); + if (this.getLogger().isDebugEnabled()) { + getLogger().debug("xslSource = " + xslSource + + ", system id = " + is.getSystemId()); + } return new StreamSource(is.getByteStream(), is.getSystemId()); } catch (ResourceNotFoundException rnfe) {
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]