Java / XSLT: не удается найти подходящую функцию с одним аргументом

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

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. Я полагаю, потому что код работает на одном сервере, и это не проблема окружающей среды.

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.*"%>

Обновлять Проблема в том, что в качестве парсера XML выбирается Saxon. Saxon не поддерживает эту функцию. Удаление Saxon.jar решает проблему.

Ого, непонятно :) Хорошо бы знать. Спасибо за публикацию исправления +1

Allain Lalonde 19.01.2009 17:51
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
7
1
9 522
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

Или ... он не может найти добавляемые расширения. Вроде так. Есть идеи, как мне найти расширение?

Jack 19.01.2009 14:23

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

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

Подробнее об этом читайте в эта ветка.

Изменен на использование xalan: Assessment (), но по-прежнему выдает ту же ошибку.

Jack 19.01.2009 14:23

Другие вопросы по теме