[ 
https://issues.apache.org/struts/browse/WW-2234?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=44459#action_44459
 ] 

Stewart Witchalls commented on WW-2234:
---------------------------------------

XSLTResult config is ...

        <action name="ShowDataFormDemo" class="ShowDataFormDemo"> 
            <result type="xslt"> 
             <param name="location">/WEB-INF/xsl/CreateDataForm.xsl</param> 
             <param name="exposedValue">presenterXml</param> 
            </result> 
        </action> 

(I included the above with code and XML fragments in the report's original 
description).

You can configure the result to "obtain the XML to be transformed" from a bean 
property. That property is set to "ShowDataFormDemo.presenterXml ". Queries 
inside the getter work (see code fragment in report description). The same 
query run inside the XSLT fails when CDATA sections are present (see XSLT + XML 
example in report description)





> XSLTResut.exposedValue transform failing on CDATA elements
> ----------------------------------------------------------
>
>                 Key: WW-2234
>                 URL: https://issues.apache.org/struts/browse/WW-2234
>             Project: Struts 2
>          Issue Type: Bug
>    Affects Versions: 2.0.9
>         Environment: Tomcat 6.0.14
> Struts 2.0.9
> JDK 1.5.0_11
> Xalan 2.7.0
>            Reporter: Stewart Witchalls
>            Priority: Minor
>             Fix For: 2.1.3
>
>
> Xalan 2.7.0 (with bundled Xerces) installed into $JDK_HOME/jre/lib/endorsed 
> and $TOMCAT_HOME/common/endorsed
> action config:
>         <action name="ShowDataFormDemo" class="ShowDataFormDemo">
>             <result type="xslt">
>               <param name="location">/WEB-INF/xsl/CreateDataForm.xsl</param>
>               <param name="exposedValue">presenterXml</param>
>             </result>
>         </action>
> ShowDataFormDemo.presenterXml code:
>   public org.w3c.dom.Document getPresenterXml() throws Exception
>   {
>       final byte[] data = this.presenterXml.getBytes("UTF-8");
>       final DocumentBuilderFactory factory = 
> DocumentBuilderFactory.newInstance();
>         final Document doc2 = factory.newDocumentBuilder().parse( new 
> ByteArrayInputStream(data) );
>         // debug to see if XPATH works inside server
>       final XPathFactory fact = XPathFactory.newInstance();
>       final XPath xpath = fact.newXPath();
>       final XPathExpression xexpr = xpath.compile( "count(//items/*)" );
>       System.out.println( xexpr.evaluate( doc2.getDocumentElement(), 
> XPathConstants.NUMBER ) );
>       return doc2;
>   }
> XML:
> <data>
> <items>
> <heading inline="true">
> <text><![CDATA[Data form example]]></text></heading>
> <paragraph inline="true">
> <text><![CDATA[Some explanatory text.]]></text></paragraph>
> <subHeading inline="true">
> <text><![CDATA[Lists]]></text></subHeading>
> </items>
> </data>
> CreateDataForm.xsl fragment:
>     vendor = <xsl:value-of select="system-property('xsl:vendor')"/>
>     vendor-url = <xsl:value-of select="system-property('xsl:vendor-url')"/>
>     xslt-version = <xsl:value-of select="system-property('xsl:version')"/>
>     count(items) = <xsl:value-of select="count(//items/*)"/>
> XPath in code works and returns correct count (aka. 3).
> However, same xpath in CreateDataForm.xsl transform fails and only returns 1. 
> Also, transform not able to obtain CDATA values (ie. displays nothing when 
> "text" element selected).
> I've removed + added rows to the XML. The CreateDataForm.xsl transform always 
> says count = "1". It looks like it cannot see past the first CDATA section.
> If I remove the CDATA sections (ie. encode the element data as XML encoded 
> strings), transform xpath works??!!
> I've checked classpaths and can confirm that the endorsed Xalan libraries are 
> being picked up.
> I've even run the transform inside the action itself. It worked as expected.
> I can work around this by removing the CDATA sections from the XML, but I've 
> spent the last few days going mad. Just cannot see what's going wrong.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to