You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by Friedrich Schuster <sc...@debitel.net> on 2001/12/28 09:05:06 UTC

C2: Processing exception with logicsheet

Hi Cocoon Developers,

I get a ProcessingException: Language Exception
when passing parameters to a logicsheet (cocoon2.0, Tomcat 4.0.1, Win2k,
JDK1.3).

This happens _only_ when passing the parameter
within the content of a custom tag
via
<xxx.customTag>
<xxx:param name="start">0</xxx:param>
</xxx:customTag>
(not as an attribute).

The generated code does not compile:

    start = Strings.isDigit(this.characters("0");) ?
                                       --------------------^
            Strings.toInt(this.characters("0");) : 0 ;
                                  --------------------^

A transformation of the same xml / xsl with Xalan-J 2.2
(without cocoon) seems to work, but not with Cocoon 2.

Embedding the value with: <xxx:param
name="start"><xsl:expr>0</xsl:expr></xxx:param>
does not solve the problem: then I have different value types for the
same variable (String for an attribute, int for <xxx:param ...>, not
to mention the inconvenience for logicsheet-users.
Does not work either: <xxx:param
name="start"><xsl:expr>"0"</xsl:expr></xxx:param>
then I get "\n0".

Did anybody experience or solve this problem ?
Thanks in advance,

Friedrich Schuster
friedrich@schuster.net
Heidelberg, Germany

-------- xml --------

<vstring:indexOfAnyBut
  s="  hello old world  !!  "
  c=" helod"
  ignoreCase="false"
>
  <vstring:param name="start">0</vstring:param>
</vstring:indexOfAnyBut>


------ xsl-logic ------

<!-- INDEXOFANYBUT TAG -->
<xsl:template match="vstring:indexOfAnyBut">

<xsl:variable name="s">
  <xsl:call-template name="get-parameter">
    <xsl:with-param name="name">s</xsl:with-param>
    <xsl:with-param name="required">true</xsl:with-param>
  </xsl:call-template>
</xsl:variable>

<xsl:variable name="c">
  <xsl:call-template name="get-parameter">
    <xsl:with-param name="name">c</xsl:with-param>
    <xsl:with-param name="required">true</xsl:with-param>
  </xsl:call-template>
</xsl:variable>

<xsl:variable name="start">
  <xsl:call-template name="get-parameter">
    <xsl:with-param name="name">start</xsl:with-param>
    <xsl:with-param name="required">false</xsl:with-param>
  </xsl:call-template>
</xsl:variable>

<xsl:variable name="ignoreCase">
  <xsl:call-template name="get-parameter">
    <xsl:with-param name="name">ignoreCase</xsl:with-param>
    <xsl:with-param name="required">false</xsl:with-param>
  </xsl:call-template>
</xsl:variable>

<xsp:logic>
  s = <xsl:copy-of select="$s" />;
  c = <xsl:copy-of select="$c" />;
  start = Strings.isDigit(<xsl:copy-of select="$start"/>) ?
Strings.toInt(<xsl:copy-of select="$start"/>) : 0 ;
  ignoreCase = Strings.equals(<xsl:copy-of
select="$ignoreCase"/>,"true",true) ;
  indexOfAnyBut=String.valueOf(ViolinStrings.Strings.indexOfAnyBut(s, c,
start, ignoreCase));
</xsp:logic>
<xsp:expr>indexOfAnyBut</xsp:expr>
</xsl:template>


.... deleted ...


<!-- Utility templates -->
<!--                   -->
<!-- DO NOT TOUCH      -->
<!--                   -->

<!-- Keep all unknown tags -->
<xsl:template match="@*|node()" priority="-1">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

<!-- START: util templates from Apache Cocoon Logicsheet Concepts -->

<xsl:template name="get-parameter">
<xsl:param name="name"/>
<xsl:param name="default"/>
<xsl:param name="required">false</xsl:param>
<xsl:variable name="prefix">vstring</xsl:variable>

<xsl:variable name="qname">
  <xsl:value-of select="concat($prefix, ':param')"/>
</xsl:variable>

<xsl:choose>
  <xsl:when test="@*[name(.) = $name]">
    "<xsl:value-of select="@*[name(.) = $name]"/>"
  </xsl:when>
  <xsl:when test="(*[name(.) = $qname])[@name = $name]">
    <xsl:call-template name="get-nested-content">
      <xsl:with-param name="content"
        select="(*[name(.) = $qname])[@name = $name]"/>
    </xsl:call-template>
  </xsl:when>
  <xsl:otherwise>""</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template name="get-nested-content">
<xsl:param name="content"/>
<xsl:choose>
  <xsl:when test="$content/*">
    <xsl:apply-templates select="$content/*"/>
  </xsl:when>
  <xsl:otherwise>"<xsl:value-of select="$content"/>"</xsl:otherwise>
</xsl:choose>
</xsl:template>

<!-- END: util templates from Apache Cocoon Logicsheet Concepts -->


---------------------------------------------------------------------
To unsubscribe, e-mail: cocoon-dev-unsubscribe@xml.apache.org
For additional commands, email: cocoon-dev-help@xml.apache.org