You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cocoon.apache.org by Corey Keith <ck...@loc.gov> on 2003/11/19 23:23:41 UTC
ESQL Problem in 2.1.3
The recent changes in xsp.xsl in 2.1.3 seem to be breaking the esql logicsheet or they are uncovering a bug in the esql logic-sheet. ESQL is pretty much broken in 2.1.3 for me. Can someone forward to the dev list?
Thanks,
Corey
1.3 xsp.xsl
<xsl:template match="text()">
<xsl:choose>
<xsl:when test="namespace-uri(..) = $xsp-uri and (local-name(..) = 'logic' or local-name(..) = 'expr')">
<xsl:value-of select="."/> <!--- This change ―>
</xsl:when>
<xsl:otherwise>
this.characters("<xsl:value-of select="XSLTExtension:escape($extension, .)"/>");
</xsl:otherwise>
</xsl:choose>
</xsl:template>
1.4 xsp.xsl
<xsl:template match="text()">
<xsl:choose>
<xsl:when test="namespace-uri(..) = $xsp-uri and (local-name(..) = 'logic' or local-name(..) = 'expr')">
<xsl:value-of select="XSLTExtension:escape($extension, .)"/> <!--- This change ―>
</xsl:when>
<xsl:otherwise>
this.characters("<xsl:value-of select="XSLTExtension:escapeJava($extension, .)"/>");
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Causes the following xsp:
<xsp:page language="java" xmlns:xsp="http://apache.org/xsp" xmlns:esql="http://apache.org/cocoon/SQL/v2">
<database>
<esql:connection>
<esql:pool>natlib</esql:pool>
<esql:execute-query>
<esql:query>SELECT * FROM Core WHERE DigitalID=100006111</esql:query>
<esql:results>
<esql:row-results>
<row>
<esql:get-columns/>
</row>
</esql:row-results>
</esql:results>
<esql:no-results>No results</esql:no-results>
<esql:error-results>Error in query</esql:error-results>
</esql:execute-query>
</esql:connection>
</database>
</xsp:page>
Which produces: (note the nested xsp:logic elements)
...
<xsp:logic>
<xsp:logic>private Stack _esql_connections = new Stack();
private Cocoon2EsqlConnection _esql_connection = null;
private Stack _esql_queries = new Stack();
private AbstractEsqlQuery _esql_query = null;
private SQLException _esql_exception = null;
private StringWriter _esql_exception_writer = null;
</xsp:logic>
private static ComponentSelector _esql_selector = null;
protected ComponentSelector _esql_get_selector() throws org.apache.avalon.framework.component.ComponentException {
if (_esql_selector == null) {
try {
_esql_selector = (ComponentSelector) manager.lookup(DataSourceComponent.ROLE + "Selector");
} catch (ComponentException cme) {
getLogger().error("Could not look up the datasource component", cme);
}
}
return _esql_selector;
}
protected void _esql_printObject ( Object obj, AttributesImpl xspAttr) throws SAXException
{
if ( obj instanceof List) {
ListIterator j=((List)obj).listIterator();
<xsp:element name="sql-list">
<xsp:logic>
while (j.hasNext()){
<xsp:element name="sql-list-item">
<xsp:attribute name="pos">
<xsp:expr>j.nextIndex()</xsp:expr>
</xsp:attribute>
<xsp:logic>this._esql_printObject(j.next(),xspAttr);</xsp:logic>
</xsp:element>
};
..
Which results in java all messed up:
/**
* Generated by XSP. Edit at your own risk, :-)
*/
public class query_xsp extends XSPGenerator {
// Files this XSP depends on
private static File[] _dependentFiles = new File[] {
};
// Initialize attributes used by modifiedSince() (see AbstractServerPage)
{
this.dateCreated = 1069271463674L;
this.dependencies = _dependentFiles;
}
/* Built-in parameters available for use */
// context - org.apache.cocoon.environment.Context
// request - org.apache.cocoon.environment.Request
// response - org.apache.cocoon.environment.Response
// parameters - parameters defined in the sitemap
// objectModel- java.util.Map
// resolver - org.apache.cocoon.environment.SourceResolver
/* User Class Declarations */
private Stack _esql_connections = new Stack();
private Cocoon2EsqlConnection _esql_connection = null;
private Stack _esql_queries = new Stack();
private AbstractEsqlQuery _esql_query = null;
private SQLException _esql_exception = null;
private StringWriter _esql_exception_writer = null;
/ Something is missing !!!!
this.contentHandler.startElement(
"",
"sql-list",
"sql-list",
xspAttr
);
xspAttr.clear();
xspAttr.addAttribute(
"",
"pos",
"pos",
"CDATA",
String.valueOf(j.nextIndex())
);
this.contentHandler.startElement(
"",
"sql-list-item",
"sql-list-item",
xspAttr
);
xspAttr.clear();