Hello,
package sql.extConnection;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.TransformerException
;
import javax.xml.transform.TransformerConfigurationException;
import org.apache.xalan.lib.sql.DefaultConnectionPool;
import org.apache.xalan.lib.sql.ConnectionPoolManager;
// Imported java classes
import java.io.StringReader;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* Use the TraX interface to perform a transformation in the simplest manner possible
* (3 statements).
*/
public class ExternalConnection
{
public static void main(String[] args)
throws TransformerException, TransformerConfigurationException,
FileNotFoundException, IOException
{
// Create a connection to the database server
// Up the connection pool count for testing
DefaultConnectionPool cp = new DefaultConnectionPool();
cp.setDriver("oracle.jdbc.OracleDriver");
cp.setURL("jdbc:oracle:thin:@<ip>:<port>:<oracle_sid>");
cp.setUser("user");
cp.setPassword("password");
cp.setMinConnections(10);
cp.setPoolEnabled(true);
// Now let's register our connection pool so we can use
// in a stylesheet
ConnectionPoolManager pm = new ConnectionPoolManager();
pm.registerPool("extpool", cp);
// Use the static TransformerFactory.newInstance() method to instantiate
// a TransformerFactory. The javax.xml.transform.TransformerFactory
// system property setting determines the actual class to instantiate --
// org.apache.xalan.transformer.TransformerImpl.
TransformerFactory tFactory = TransformerFactory.newInstance();
// Grab the Name of the Stylesheet from the commad line
/*if (args.length == 0)
{
System.out.println("You must provide the path and name to a stylesheet to process");
System.exit(0);
}*/
String stylesheet = "dbtest.xsl";
System.out.println("Transforming Stylesheet " + stylesheet);
// Use the TransformerFactory to instantiate a Transformer that will work with
// the stylesheet you specify. This method call also processes the stylesheet
// into a compiled Templates object.
Transformer transformer = tFactory.newTransformer(
new StreamSource(stylesheet));
// For this transformation, all the required information is in the stylesheet, so generate
// a minimal XML source document for the input.
// Note: the command-line processor (org.apache.xalan.xslt.Process
) uses this strategy when
// the user does not provide an -IN parameter.
StringReader reader =
new StringReader("<?xml version=\"1.0\"?> <doc/>");
// Use the Transformer to apply the associated Templates object to an XML document
// and write the output to a file.
transformer.transform(
new StreamSource(reader),
new StreamResult(new FileOutputStream("
dbtest-out.html")));
System.out.println("************* The result is in dbtest-out.html *************");
cp.setPoolEnabled(false);
}
}
The XSL file is the following one:
<?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="query" select="'SELECT * FROM TABLE"/>
<xsl:template match="/">
<xsl:variable name="db" select="sql:new()"/>
<!-- Connect to the database with minimal error detection -->
<xsl:if test="not(sql:connect($db, 'extpool'))" >
<xsl:message>Error Connecting to the Database</xsl:message>
<xsl:copy-of select="sql:getError($db)/ext-error" />
</xsl:if>
<HTML>
<HEAD>
<TITLE>List of products</TITLE>
</HEAD>
<BODY>
<TABLE border="1">
<xsl:variable name="table" select='sql:query($db, $query)'/>
<!--
Let's include Error Checking, the error is actually stored
in the connection since $table will be either data or null
-->
<xsl:if test="not($table)" >
<!--<xsl:message>Error in Query</xsl:message>
<xsl:copy-of select="sql:getError($db)/ext-error" />-->
</xsl:if>
<TR>
<xsl:for-each select="$table/sql/metadata/column-header">
<TH><xsl:value-of select="@column-label"/></TH>
</xsl:for-each>
</TR>
<xsl:apply-templates select="$table/sql/row-set"/>
</TABLE>
</BODY>
</HTML>
<xsl:value-of select="sql:close($db)"/>
</xsl:template>
<xsl:template match="row">
<TR><xsl:apply-templates select="col"/></TR>
</xsl:template>
<xsl:template match="col">
<TD><xsl:value-of select="text()"/></TD>
</xsl:template>
</xsl:stylesheet>
When I try to execute my source, it seems that the database conneciton works correctly, but the query don't work and I obtain the next exception:
Transforming Stylesheet dbtest.xsl
javax.xml.transform.TransformerException: java.lang.NullPointerException
at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1226)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:638)
at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1088)
at org.apache.xalan.transformer.TransformerImpl.transform
(TransformerImpl.java:1066)
at sql.extConnection.ExternalConnection.main(ExternalConnection.java:97)
Caused by: java.lang.NullPointerException
at org.apache.xpath.axes.FilterExprWalker.getAxis(FilterExprWalker.java
:301)
at org.apache.xpath.axes.WalkingIteratorSorted.canBeWalkedInNaturalDocOrder(WalkingIteratorSorted.java:128)
at org.apache.xpath.axes.WalkingIteratorSorted.setRoot(WalkingIteratorSorted.java:172)
at org.apache.xpath.axes.LocPathIterator.asIterator(LocPathIterator.java:267)
at org.apache.xalan.templates.ElemForEach.transformSelectedNodes(ElemForEach.java:357)
at org.apache.xalan.templates.ElemForEach.execute
(ElemForEach.java:287)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2182)
at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java
:678)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2182)
at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:678)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates (TransformerImpl.java:2182)
at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:678)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates
(TransformerImpl.java :2182)
at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:678)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java
:2182)
at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2008)
at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1171)
... 4 more
---------
java.lang.NullPointerException
at org.apache.xpath.axes.FilterExprWalker.getAxis(FilterExprWalker.java:301)
at org.apache.xpath.axes.WalkingIteratorSorted.canBeWalkedInNaturalDocOrder
(WalkingIteratorSorted.java :128)
at org.apache.xpath.axes.WalkingIteratorSorted.setRoot(WalkingIteratorSorted.java:172)
at org.apache.xpath.axes.LocPathIterator.asIterator(LocPathIterator.java:267)
at org.apache.xalan.templates.ElemForEach.transformSelectedNodes (ElemForEach.java:357)
at org.apache.xalan.templates.ElemForEach.execute(ElemForEach.java:287)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates
(TransformerImpl.java:2182)
at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:678)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java
:2182)
at org.apache.xalan.templates.ElemLiteralResult.execute (ElemLiteralResult.java:678)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2182)
at
org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java :678)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2182)
at org.apache.xalan.templates.ElemLiteralResult.execute
(ElemLiteralResult.java:678)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2182)
at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java
:2008)
at org.apache.xalan.transformer.TransformerImpl.transformNode (TransformerImpl.java:1171)
at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:638)
at org.apache.xalan.transformer.TransformerImpl.transform
(TransformerImpl.java:1088)
at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1066)
at sql.extConnection.ExternalConnection.main(ExternalConnection.java:97)
Exception in thread "main"
Can anyone help me? Thanks
