Uploaded image for project: 'Cocoon (Retired)'
NullPointerException from SQLTransformer
Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.1.7
-
None
-
Operating System: Windows NT
Platform: PC
-
35643
Description
I have a pipeline which consists of a file generator, the SQL transformer, and
an XML serializer. Unfortunately, I forgot to add the database driver to the
load-classes init param, so the DriverManager was unable to find anything to
handle my serverURL and hence the SQL transformer was unable to get a connection.
I expected to get an error, however, I didn't expect it to be a
NullPointerException (stack trace below). Looks like the transformer needs to
be more careful about what it passes into Xalan? At least in the Xalan 2.6.0
sources, ensurePrefixIsDeclared method has a check for null namespaces, but not
for a null rawName...?
java.lang.NullPointerException
at org.apache.xml.serializer.ToStream.ensurePrefixIsDeclared(ToStream.java:2634)
at org.apache.xml.serializer.ToStream.startElement(ToStream.java:1736)
at
org.apache.xalan.transformer.TransformerIdentityImpl.startElement(TransformerIdentityImpl.java:1020)
at org.apache.cocoon.xml.AbstractXMLPipe.startElement(AbstractXMLPipe.java:94)
at org.apache.cocoon.xml.AbstractXMLPipe.startElement(AbstractXMLPipe.java:94)
at
org.apache.cocoon.transformation.AbstractSAXTransformer.startTransformingElement(AbstractSAXTransformer.java:658)
at org.apache.cocoon.transformation.SQLTransformer.start(SQLTransformer.java:765)
at
org.apache.cocoon.transformation.SQLTransformer.executeQuery(SQLTransformer.java:323)
at
org.apache.cocoon.transformation.SQLTransformer.endExecuteQueryElement(SQLTransformer.java:476)
at
org.apache.cocoon.transformation.SQLTransformer.endTransformingElement(SQLTransformer.java:738)
at
org.apache.cocoon.transformation.AbstractSAXTransformer.endElement(AbstractSAXTransformer.java:336)
at org.apache.cocoon.components.sax.XMLTeePipe.endElement(XMLTeePipe.java:89)
at
org.apache.cocoon.components.sax.XMLByteStreamInterpreter.parse(XMLByteStreamInterpreter.java:100)
at
org.apache.cocoon.components.sax.XMLByteStreamInterpreter.deserialize(XMLByteStreamInterpreter.java:73)
at
org.apache.cocoon.components.pipeline.impl.AbstractCachingProcessingPipeline.processXMLPipeline(AbstractCachingProcessingPipeline.java:267)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.process(AbstractProcessingPipeline.java:483)
at
org.apache.cocoon.components.treeprocessor.sitemap.SerializeNode.invoke(SerializeNode.java:120)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:46)
at
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke(PreparableMatchNode.java(Compiled
Code))
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java(Compiled
Code))
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:138)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java(Compiled
Code))
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:92)
at
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:234)
at
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:176)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:243)
at
org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke(MountNode.java:117)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:46)
at
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNod
an XML serializer. Unfortunately, I forgot to add the database driver to the
load-classes init param, so the DriverManager was unable to find anything to
handle my serverURL and hence the SQL transformer was unable to get a connection.
I expected to get an error, however, I didn't expect it to be a
NullPointerException (stack trace below). Looks like the transformer needs to
be more careful about what it passes into Xalan? At least in the Xalan 2.6.0
sources, ensurePrefixIsDeclared method has a check for null namespaces, but not
for a null rawName...?
java.lang.NullPointerException
at org.apache.xml.serializer.ToStream.ensurePrefixIsDeclared(ToStream.java:2634)
at org.apache.xml.serializer.ToStream.startElement(ToStream.java:1736)
at
org.apache.xalan.transformer.TransformerIdentityImpl.startElement(TransformerIdentityImpl.java:1020)
at org.apache.cocoon.xml.AbstractXMLPipe.startElement(AbstractXMLPipe.java:94)
at org.apache.cocoon.xml.AbstractXMLPipe.startElement(AbstractXMLPipe.java:94)
at
org.apache.cocoon.transformation.AbstractSAXTransformer.startTransformingElement(AbstractSAXTransformer.java:658)
at org.apache.cocoon.transformation.SQLTransformer.start(SQLTransformer.java:765)
at
org.apache.cocoon.transformation.SQLTransformer.executeQuery(SQLTransformer.java:323)
at
org.apache.cocoon.transformation.SQLTransformer.endExecuteQueryElement(SQLTransformer.java:476)
at
org.apache.cocoon.transformation.SQLTransformer.endTransformingElement(SQLTransformer.java:738)
at
org.apache.cocoon.transformation.AbstractSAXTransformer.endElement(AbstractSAXTransformer.java:336)
at org.apache.cocoon.components.sax.XMLTeePipe.endElement(XMLTeePipe.java:89)
at
org.apache.cocoon.components.sax.XMLByteStreamInterpreter.parse(XMLByteStreamInterpreter.java:100)
at
org.apache.cocoon.components.sax.XMLByteStreamInterpreter.deserialize(XMLByteStreamInterpreter.java:73)
at
org.apache.cocoon.components.pipeline.impl.AbstractCachingProcessingPipeline.processXMLPipeline(AbstractCachingProcessingPipeline.java:267)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.process(AbstractProcessingPipeline.java:483)
at
org.apache.cocoon.components.treeprocessor.sitemap.SerializeNode.invoke(SerializeNode.java:120)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:46)
at
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke(PreparableMatchNode.java(Compiled
Code))
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java(Compiled
Code))
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:138)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java(Compiled
Code))
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:92)
at
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:234)
at
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:176)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:243)
at
org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke(MountNode.java:117)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:46)
at
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNod