Hello,

I'm trying to recover contents of an oracle database table and transform it to HTML. I'm using Xalan-J 2.7.0, exactly the ext-connection example in the sql package, but I'm trying with a remote database.
 
The java source is:
 

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

Reply via email to