次のエラーが表示されます。
javax.servlet.ServletException: Cannot find a matching 1-argument function named {http://exslt.org/dynamic}evaluate()
at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:841)
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:774)
私のxsltファイルの先頭は
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns:dyn="http://exslt.org/dynamic"
extension-element-prefixes="dyn">
このエラーが発生する理由を知っていますか?
アップデート
XML ファイルの先頭が読み取れるようになりました。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns:xalan="http://xml.apache.org/xalan"
exclude-result-prefixes="xalan">
失敗しているXMLは
<xsl:template name="test">
<xsl:param name="param" />
<xsl:value-of select="$param"/>
<xsl:value-of select="xalan:evaluate($param)"/>
</xsl:template>
このコードは、Tomcat 5.0 を実行しているサーバーでは機能しますが、Tomcat 5.5 を実行しているサーバーでは機能しません。コードが 1 つのサーバーで動作していて、環境の問題ではないためだと思います。
XSLT は、JSP ページを介して XML に適用されています。xalan.jar ファイルが使用されていないように見えます。JSP のトップは次のとおりです。
<%@page import="javax.xml.transform.*"%>
<%@page import="javax.xml.transform.stream.*"%>
<%@page import=" java.security.Principal,
java.net.URL,
java.net.URLConnection,
java.io.InputStream,
java.io.InputStreamReader,
java.io.Reader,
java.io.BufferedReader,
java.io.File,
javax.xml.transform.*,
javax.xml.transform.stream.*,
javax.xml.transform.*,
javax.xml.transform.stream.*"%>
更新 問題は、Saxon が XML パーサーとして選択されていることです。Saxon はこの機能をサポートしていません。Saxon.jar を削除すると、問題が修正されます。