Java / XSLT: не удается найти подходящую функцию с 1 аргументом - PullRequest
7 голосов
/ 16 января 2009

Я получаю следующую ошибку:

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"> 

Знаете ли вы, почему я могу получить эту ошибку?

UPDATE

Верхняя часть моего 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. Я представляю, потому что код работает на одном сервере, а не это экологическая проблема.

XSLT применяется к XML через страницу JSP. Мне кажется, файл 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.jar устраняет проблему.

Ответы [ 2 ]

1 голос
/ 16 января 2009

Скорее всего, вы используете более старую версию Xalan .

Попробуйте вместо этого использовать расширение xalan:evaluate().

Подробнее об этом в этой теме .

1 голос
/ 16 января 2009

Где-то в вашем XSLT вы ссылаетесь на функцию с именем «{http://exslt.org/dynamic}evaluate()"» и не даете ей того количества аргументов, которое он ожидает.

Или ... невозможно найти добавляемые вами расширения.

...