Hi again!
I'm afraid i spoke too soon... after i removed the xsl:output the error
changed but its still there.
This time around i dug a bit more and found that xalan's
TransformerImpl.setContentHandler(handler) never gets called.
setContentHandler also sets m_serializationHandler, which is used for
synchronization during the xsl transformation in transformNode():1234
I dont know which component has the responsability to call this
setContentHandler. At first i thought about cocoon's
XSLTTransformer.setSAXConsumer() but i might be off since i dont have
the big picture in mind...
At a glance i would say someone expected xalan to do something it can't
do :)
Here are some stacks:
Found this when i dug into xalan's try-catches.
This is where m_serializationHandler is used.
java.lang.NullPointerException
at
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1234)
at
org.apache.xalan.transformer.TransformerImpl.run(TransformerImpl.java:3383)
at
org.apache.xalan.transformer.TransformerHandlerImpl.endDocument(TransformerHandlerImpl.java:389)
at
org.apache.cocoon.xml.sax.AbstractSAXPipe.endDocument(AbstractSAXPipe.java:58)
at
org.apache.cocoon.sax.AbstractSAXTransformer.endDocument(AbstractSAXTransformer.java:47)
at
org.apache.cocoon.sax.AbstractSAXTransformer.endDocument(AbstractSAXTransformer.java:47)
at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endDocument(AbstractSAXParser.java:737)
at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:515)
at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at org.apache.cocoon.sax.util.XMLUtils.toSax(XMLUtils.java:87)
at org.apache.cocoon.sax.util.XMLUtils.toSax(XMLUtils.java:113)
Cocoon's side:
Caused by: org.apache.cocoon.pipeline.ProcessingException: Can't parse
url connection blockcontext:/Core/html/ReferenceNodeEdit.html
at org.apache.cocoon.sax.util.XMLUtils.toSax(XMLUtils.java:117)
at
org.apache.cocoon.sax.component.FileGenerator.execute(FileGenerator.java:81)
at
org.apache.cocoon.pipeline.AbstractPipeline.invokeStarter(AbstractPipeline.java:147)
at
org.apache.cocoon.pipeline.CachingPipeline.execute(CachingPipeline.java:124)
at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
Caused by: java.lang.RuntimeException
at
org.apache.xalan.transformer.TransformerImpl.run(TransformerImpl.java:3418)
at
org.apache.xalan.transformer.TransformerHandlerImpl.endDocument(TransformerHandlerImpl.java:389)
at
org.apache.cocoon.xml.sax.AbstractSAXPipe.endDocument(AbstractSAXPipe.java:58)
at
org.apache.cocoon.sax.AbstractSAXTransformer.endDocument(AbstractSAXTransformer.java:47)
at
org.apache.cocoon.sax.AbstractSAXTransformer.endDocument(AbstractSAXTransformer.java:47)
at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endDocument(AbstractSAXParser.java:737)
at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:515)
at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at org.apache.cocoon.sax.util.XMLUtils.toSax(XMLUtils.java:87)
at org.apache.cocoon.sax.util.XMLUtils.toSax(XMLUtils.java:113)
... 82 more
and here the is master pipeline in this context
<map:match pattern="html/**.html">
<map:match pattern="html/inc/**.html">
<map:generate src="html/{map:1}.html" />
<map:transform type="include" />
<map:transform src="xslt/views/referenceNodeCRUD.xslt" />
<map:serialize type="pretty-xhtml"/>
</map:match>
</map:match>
As i understand, here is what happens sequentially (didnt plan on sharing this
so bear with me)
GET /html/inc/ReferenceNodeEdit.html
setup serializer
setup transformer node
setup include node
setup generator node
generator reads file
includer parses and calls:
GET servlet:/data/ReferenceTreeNode/root
controller gathers data and returns
GET servlet:/data/done
GET servlet:/gen/UserInfos
INVOKE /gen/UserInfos
GET /gen/SimpleOperation
INVOKE /gen/SimpleOperation
GET /gen/BetwixtControllerModel
INVOKE /gen/BetwixtControllerModel
INVOKE /data/done
INVOKE /data/ReferenceTreeNode/root
transformer starts running and here comes the NPE
500.xml returned
Hope it helps.
Ask if you need anything
Yoann
On Mon, 2009-03-23 at 14:44 +0100, Steven Dolg wrote:
> Yoann Archambault schrieb:
> > Glad to know i was wrong!
> > It works fine without the xsl:output el.
> >
> Great!
> Glad things are working for you now...
>
> Steven
> > Thanks again!
> > Yoann
> >
> > On Sun, 2009-03-22 at 12:36 -0400, Yoann Archambault wrote:
> >
> >> I do not believe i have an xsl:output elemenet in my stylesheet.
> >> I`ll confirm that when i get home later.
> >> Thanks
> >> Yoann
> >>
> >> On Sun, 22 Mar 2009 14:49 +0100, "Steven Dolg" <[email protected]>
> >> wrote:
> >>
> >>> Okay, here's what I did.
> >>>
> >>> Sitemap
> >>>
> >>> <map:pipeline>
> >>> <map:match pattern="data/done">
> >>> <map:generate src="bug-fixing/BasicOperationResponse.xml" />
> >>> <map:transform type="include" />
> >>> <map:transform src="bug-fixing/referenceNodeCRUD.xslt" />
> >>> <map:serialize type="xml" />
> >>> </map:match>
> >>> </map:pipeline>
> >>>
> >>> BasicOperationResponse.xml
> >>>
> >>> <?xml version="1.0" encoding="UTF-8"?>
> >>> <response xmlns:i="http://apache.org/cocoon/3.0/include">
> >>> <i:include src="servlet:/aggregation/sub-request"/>
> >>> <i:include src="servlet:/aggregation/sub-request"/>
> >>> <i:include src="servlet:/aggregation/sub-request"/>
> >>> </response>
> >>>
> >>> (I adjusted the URLs of the includes to something that already existed
> >>> in the sample-app; shouldn't make a difference though)
> >>>
> >>> referenceNodeCRUD.xslt
> >>>
> >>> <?xml version="1.0" encoding="UTF-8"?>
> >>> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> >>> version="1.0">
> >>> <xsl:output method="html"/>
> >>>
> >>> <xsl:template match="/">
> >>> <div>
> >>> <xsl:copy-of select="/response"/>
> >>> </div>
> >>> </xsl:template>
> >>> </xsl:stylesheet>
> >>>
> >>> (just something very primitive)
> >>>
> >>> When I call this pipeline (http:/localhost:8890/data/done) I get just
> >>> the same exception:
> >>>
> >>> <exception-report class="org.apache.cocoon.pipeline.ProcessingException"
> >>> timestamp="Sun, 22 Mar 2009 14:33:39 +0100">
> >>> <message>
> >>> Can't parse url connection
> >>> file:/C:/work/cocoon-3/trunk/cocoon-sample/src/main/resources/COB-INF/bug-fixing/BasicOperationResponse.xml
> >>> </message>
> >>> <stacktrace>
> >>> org.apache.cocoon.pipeline.ProcessingException: Can't parse url
> >>> connection
> >>> file:/C:/work/cocoon-3/trunk/cocoon-sample/src/main/resources/COB-INF/bug-fixing/BasicOperationResponse.xml
> >>> at org.apache.cocoon.sax.util.XMLUtils.toSax(XMLUtils.java:117)
> >>> at
> >>>
> >>> org.apache.cocoon.sax.component.FileGenerator.execute(FileGenerator.java:81)
> >>> at
> >>>
> >>> org.apache.cocoon.pipeline.AbstractPipeline.invokeStarter(AbstractPipeline.java:147)
> >>> at
> >>>
> >>> org.apache.cocoon.pipeline.CachingPipeline.execute(CachingPipeline.java:124)
> >>> at sun.reflect.GeneratedMethodAccessor18.invoke(Unknown Source)
> >>> ...
> >>>
> >>>
> >>> However if I remove the "<xsl:output method="html"/>" from the XLST
> >>> everything works fine.
> >>>
> >>> Hope this helps...
> >>>
> >>> Cheers,
> >>> Steven
> >>>
> >>>
> >>> Sorry for all this text.
> >>> I wanted to send the files as attachments but last time I did this there
> >>> was a turmoil because some people were afraid their hard disks might
> >>> fill up or something...
> >>>
> >
> >
>