|
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();
|
