Vadim Gritsenko writes:
>It's not concern of the resolver's user to fiddle with request / 
>response. If change to be made, it should be done in cocoon source 
>implementation.

This sounds right.

>I think reader has a right to make this call unconditionally.

If the resolver shouldn't fiddle with the response, why do they have
the right to set the content length of the response?

>PS Are you using reader to deliver xsl:import parts? Have you tried 
>generate/serialize pair, which does work?

I'm not making the reader, just trying to import a stylesheet using
a "cocoon:/path" source. The reader is created in the callback
resolver passed down to xalan. Here's a (very long) stacktrace:

   Thread-25[1] where
     [1] org.apache.coyote.Response.checkSpecialHeader (Response.java:386)
     [2] org.apache.coyote.Response.setHeader (Response.java:361)
     [3] org.apache.coyote.tomcat4.CoyoteResponse.setHeader (CoyoteResponse.java:1162)
     [4] org.apache.coyote.tomcat4.CoyoteResponseFacade.setHeader 
(CoyoteResponseFacade.java:375)
     [5] org.apache.cocoon.environment.http.HttpResponse.setHeader 
(HttpResponse.java:143)
     [6] org.apache.cocoon.reading.ResourceReader.processStream 
(ResourceReader.java:254)
     [7] org.apache.cocoon.reading.ResourceReader.generate (ResourceReader.java:292)
     [8] 
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.processReader 
(AbstractProcessingPipeline.java:615)
     [9] org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.process 
(AbstractProcessingPipeline.java:486)
     [10] org.apache.cocoon.components.source.impl.SitemapSource.getInputStream 
(SitemapSource.java:276)
     [11] org.apache.excalibur.xml.xslt.XSLTProcessorImpl.getInputSource 
(XSLTProcessorImpl.java:777)
     [12] org.apache.excalibur.xml.xslt.XSLTProcessorImpl.resolve 
(XSLTProcessorImpl.java:704)
     [13] org.apache.xalan.xsltc.trax.TemplatesHandlerImpl.loadSource 
(TemplatesHandlerImpl.java:252)
     [14] org.apache.xalan.xsltc.compiler.Import.parseContents (Import.java:108)
     [15] org.apache.xalan.xsltc.compiler.Stylesheet.parseOwnChildren 
(Stylesheet.java:435)
     [16] org.apache.xalan.xsltc.compiler.Stylesheet.parseContents 
(Stylesheet.java:407)
     [17] org.apache.xalan.xsltc.compiler.Import.parseContents (Import.java:150)
     [18] org.apache.xalan.xsltc.compiler.Stylesheet.parseOwnChildren 
(Stylesheet.java:435)
     [19] org.apache.xalan.xsltc.compiler.Stylesheet.parseContents 
(Stylesheet.java:407)
     [20] org.apache.xalan.xsltc.compiler.Parser.createAST (Parser.java:420)
     [21] org.apache.xalan.xsltc.trax.TemplatesHandlerImpl.getTemplates 
(TemplatesHandlerImpl.java:204)
     [22] 
org.apache.excalibur.xml.xslt.XSLTProcessorImpl.getTransformerHandlerAndValidity 
(XSLTProcessorImpl.java:316)
     [23] org.apache.cocoon.transformation.TraxTransformer.setup 
(TraxTransformer.java:302)
     [24] 
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.setupPipeline 
(AbstractProcessingPipeline.java:391)
     [25] 
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.preparePipeline 
(AbstractProcessingPipeline.java:505)
     [26] org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.process 
(AbstractProcessingPipeline.java:467)
     [27] org.apache.cocoon.components.treeprocessor.sitemap.SerializeNode.invoke 
(SerializeNode.java:150)
     [28] 
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes 
(AbstractParentProcessingNode.java:84)
     [29] org.apache.cocoon.components.treeprocessor.sitemap.ActTypeNode.invoke 
(ActTypeNode.java:158)
     [30] 
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes 
(AbstractParentProcessingNode.java:84)
     [31] 
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke 
(PreparableMatchNode.java:164)
     [32] 
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes 
(AbstractParentProcessingNode.java:108)
     [33] org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke 
(PipelineNode.java:162)
     [34] 
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes 
(AbstractParentProcessingNode.java:108)
     [35] org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke 
(PipelinesNode.java:162)
     [36] org.apache.cocoon.components.treeprocessor.TreeProcessor.process 
(TreeProcessor.java:325)
     [37] org.apache.cocoon.components.treeprocessor.TreeProcessor.process 
(TreeProcessor.java:307)
     [38] org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke 
(MountNode.java:133)
     [39] 
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes 
(AbstractParentProcessingNode.java:84)
     [40] 
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke 
(PreparableMatchNode.java:164)
     [41] 
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes 
(AbstractParentProcessingNode.java:84)
     [42] 
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke 
(PreparableMatchNode.java:164)
     [43] 
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes 
(AbstractParentProcessingNode.java:84)
     [44] org.apache.cocoon.components.treeprocessor.sitemap.ActTypeNode.invoke 
(ActTypeNode.java:158)
     [45] 
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes 
(AbstractParentProcessingNode.java:84)
     [46] 
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke 
(PreparableMatchNode.java:164)
     [47] 
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes 
(AbstractParentProcessingNode.java:108)
     [48] org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke 
(PipelineNode.java:162)
     [49] 
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes 
(AbstractParentProcessingNode.java:108)
     [50] org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke 
(PipelinesNode.java:162)
     [51] org.apache.cocoon.components.treeprocessor.TreeProcessor.process 
(TreeProcessor.java:325)
     [52] org.apache.cocoon.components.treeprocessor.TreeProcessor.process 
(TreeProcessor.java:307)
     [53] org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke 
(MountNode.java:133)
     [54] 
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes 
(AbstractParentProcessingNode.java:84)
     [55] 
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke 
(PreparableMatchNode.java:164)
     [56] 
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes 
(AbstractParentProcessingNode.java:108)
     [57] org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke 
(PipelineNode.java:162)
     [58] 
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes 
(AbstractParentProcessingNode.java:108)
     [59] org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke 
(PipelinesNode.java:162)
     [60] org.apache.cocoon.components.treeprocessor.TreeProcessor.process 
(TreeProcessor.java:325)
     [61] org.apache.cocoon.components.treeprocessor.TreeProcessor.process 
(TreeProcessor.java:307)
     [62] org.apache.cocoon.Cocoon.process (Cocoon.java:626)
     [63] org.apache.cocoon.servlet.CocoonServlet.service (CocoonServlet.java:1083)
     [64] javax.servlet.http.HttpServlet.service (HttpServlet.java:853)
     [65] org.apache.catalina.core.ApplicationFilterChain.internalDoFilter 
(ApplicationFilterChain.java:247)
     [66] org.apache.catalina.core.ApplicationFilterChain.doFilter 
(ApplicationFilterChain.java:193)
     [67] org.apache.catalina.core.StandardWrapperValve.invoke 
(StandardWrapperValve.java:256)
     [68] 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext 
(StandardPipeline.java:643)
     [69] org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:480)
     [70] org.apache.catalina.core.ContainerBase.invoke (ContainerBase.java:995)
     [71] org.apache.catalina.core.StandardContextValve.invoke 
(StandardContextValve.java:191)
     [72] 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext 
(StandardPipeline.java:643)
     [73] org.apache.catalina.valves.CertificatesValve.invoke 
(CertificatesValve.java:246)
     [74] 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext 
(StandardPipeline.java:641)
     [75] org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:480)
     [76] org.apache.catalina.core.ContainerBase.invoke (ContainerBase.java:995)
     [77] org.apache.catalina.core.StandardContext.invoke (StandardContext.java:2415)
     [78] org.apache.catalina.core.StandardHostValve.invoke 
(StandardHostValve.java:180)
     [79] 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext 
(StandardPipeline.java:643)
     [80] org.apache.catalina.valves.ErrorDispatcherValve.invoke 
(ErrorDispatcherValve.java:171)
     [81] 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext 
(StandardPipeline.java:641)
     [82] org.apache.catalina.valves.ErrorReportValve.invoke 
(ErrorReportValve.java:172)
     [83] 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext 
(StandardPipeline.java:641)
     [84] org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:480)
     [85] org.apache.catalina.core.ContainerBase.invoke (ContainerBase.java:995)
     [86] org.apache.catalina.core.StandardEngineValve.invoke 
(StandardEngineValve.java:174)
     [87] 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext 
(StandardPipeline.java:643)
     [88] org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:480)
     [89] org.apache.catalina.core.ContainerBase.invoke (ContainerBase.java:995)
     [90] org.apache.coyote.tomcat4.CoyoteAdapter.service (CoyoteAdapter.java:223)
     [91] org.apache.coyote.http11.Http11Processor.process (Http11Processor.java:594)
     [92] 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection 
(Http11Protocol.java:392)
     [93] org.apache.tomcat.util.net.TcpWorkerThread.runIt (PoolTcpEndpoint.java:565)
     [94] org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run 
(ThreadPool.java:619)
     [95] java.lang.Thread.run (Thread.java:512)
   Thread-25[1] print name
    name = "Content-Length"
   Thread-25[1] print contentLength
    contentLength = 23004


So in frame 13 xalan is loading a source using the the loader passed
into it by excalibur, which calls back into cocoon proper. Cocoon
makes this source using ResourceReader, but the reader code thinks it
needs to set the content length. Unfortunately the response upon which
is sets the content length is the original response passed in by
catalina, so setting the content length causes catalina to truncate
any final response from cocoon to the length of the imported
stylesheet.

So should the ResourceReader not touch the response? Or should
cocoon or excalibur be building a new internal-use response that
ResourceReader can freely change since it will be discarded? Or
is the problem somewhere else I'm not seeing?

Thanks,
 Phil

Reply via email to