John --
I must confess that I have not really been "into" the SQL Extension
code. However, I took your stylesheet with the latest CVS build. I
changed to using the JDBC-ODBC with my desktop Access setup and for the
<xsl:copy-of select="$table/row-set/" />
my response was
<row-set>
<column-header column-label="Field1"
column-name="Field1"></column-header>
<column-header column-label="Field2"
column-name="Field2"></column-header>
<column-header column-label="Field3"
column-name="Field3"></column-header>
<row>
<col column-label="Field1" column-name="Field1">
<col column-label="Field2" column-name="Field2">
<col column-label="Field3" column-name="Field3">
</row>
<row>
<col column-label="Field1" column-name="Field1">
<col column-label="Field2" column-name="Field2">
<col column-label="Field3" column-name="Field3">
</row>
</row-set>
which sort of looked okay to me except the field values are not shown
and there is no closing tag for the col element.
When I changed the select to $table/row-set/row/*, I get
javax.xml.transform.TransformerException:
at
org.apache.xalan.transformer.TransformerImpl.transformNode(Compiled C
ode)
at
org.apache.xalan.transformer.TransformerImpl.transform(Compiled Code)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImp
l.java:1079)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImp
l.java:1057)
at org.apache.xalan.xslt.Process.main(Compiled Code)
---------
java.lang.NullPointerException:
at
org.apache.xalan.transformer.ResultTreeHandler.isDefinedNSDecl(Result
TreeHandler.java:1424)
at
org.apache.xalan.transformer.ResultTreeHandler.addAttribute(ResultTre
eHandler.java:1452)
at
org.apache.xalan.transformer.TreeWalker2Result.startNode(Compiled Cod
e)
at org.apache.xml.dtm.ref.DTMTreeWalker.traverse(Compiled Code)
at
org.apache.xalan.transformer.TreeWalker2Result.traverse(TreeWalker2Re
sult.java:115)
at org.apache.xalan.templates.ElemCopyOf.execute(Compiled Code)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Co
mpiled Code)
at
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(Tran
sformerImpl.java:1969)
at
org.apache.xalan.transformer.TransformerImpl.transformNode(Compiled C
ode)
at
org.apache.xalan.transformer.TransformerImpl.transform(Compiled Code)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImp
l.java:1079)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImp
l.java:1057)
at org.apache.xalan.xslt.Process.main(Compiled Code)
so there must be something wrong with the result tree building, I
guess. I'll have a look DTMDump.txt and see if I see anything there.
Anyway, as I said, I'm new to all of this but I'm willing to work with
you so that you can wrap this up! Sometimes, having someone to bounce
ideas off of is just what's needed.
Gary
John Gentilin wrote:
>
> Gary,
>
> The easiest way is to change XConnection#query() method
> in the SQL Extension code to return null. For me this usually
> happens when an exception is thrown. As I said, the transformation
> works correctly it is just Process that refuses to terminate. So I
> get all my information including data added to the result tree
> after query() returns null.
>
> Attached is a sample Stylesheet I have been using, although it
> does not really matter.
>
> If you have the time to look at this, I am also having another
> problem that is really hanging me up. If I execute an XPath
> statement and the select specifies the extent on a tree, it
> will result in an exception. So if I have the code
>
> <xsl:copy-of select="$table/row-set/row/column" />
>
> An exception will occur where as if I execute the following.
>
> <xsl:copy-of select="$table/row-set/row" />
> Not only will the exception NOT occur, the data is transferred
> to the result tree just fine.
>
> The same occurs for the following code pair
> <xsl:copy-of select="$table/row-set/column-header" />
> and
> <xsl:copy-of select="$table/row-set" />
>
> The only difference I can see is that the XPath statement
> specifies all the elements in the selected branch.
>
> Regards
> John G
>
> Gary L Peskin wrote:
>
> > John --
> >
> > I can't think of anything in the extension mechanism that would make
> > this happen. If null is returned from an extension element, nothing
> > happens. If returned from an extension function, it just turns into an
> > XNull. If you can't figure it out, please post what I would need to
> > recreate the situation.
> >
> > Thanks,
> > Gary
> >
> > John Gentilin wrote:
> > >
> > > If my extension returns null, the transformation seems to
> > > complete as expected but Process never seems to terminate,
> > > like some background thread is just keeping the program
> > > hung up.
>
> ------------------------------------------------------------------------
> <?xml version="1.0"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> version="1.0"
> xmlns:sql="org.apache.xalan.lib.sql.XConnection"
> extension-element-prefixes="sql">
>
> <xsl:output method="html" indent="yes"/>
>
> <xsl:param name="driver" select="'org.enhydra.instantdb.jdbc.idbDriver'"/>
> <xsl:param name="datasource" select="'jdbc:idb:./instantdb/sample.prp'"/>
> <xsl:param name="query" select="'SELECT * FROM import1'"/>
>
> <xsl:template match="/">
> <xsl:variable name="db" select="sql:new($driver, $datasource)"/>
> <!-- xsl:if test="sql:connect($db, $driver, $datasource)" -->
> <xsl:text> Connection make OK</xsl:text>
> <!-- /xsl:if -->
> <xsl:variable name="table" select='sql:query($db, $query)'/>
> <!--
> <xsl:for-each select="$table/row-set/column-header">
> <xsl:value-of select="@column-label"/></TH>
> </xsl:for-each>
> -->
> <xsl:variable name="table" select='sql:query($db, $query)'/>
> <xsl:copy-of select="$table/row-set/" />
> <xsl:value-of select="sql:close($db)"/>
>
> </xsl:template>
>
> </xsl:stylesheet>