2009-01-16 10 views
7

me sale el siguiente error:Java/XSLT: No se puede encontrar una función 1-argumento a juego

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) 

La parte superior de mi archivo XSLT es

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

¿Sabes por qué me puede conseguir ¿este error?

ACTUALIZACIÓN

La parte superior de mi archivo XML lee ahora.

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

y el XML donde estamos fallando es

<xsl:template name="test"> 
    <xsl:param name="param" /> 
    <xsl:value-of select="$param"/> 
    <xsl:value-of select="xalan:evaluate($param)"/> 
</xsl:template> 

Este código funciona en un servidor que ejecuta Tomcat 5.0, pero no funciona en un servidor con Tomcat 5.5. Me imagino porque el código está funcionando en un servidor y no es un problema ambiental.

El XSLT se está aplicando al XML a través de una página JSP. Para mí, parece que el archivo xalan.jar no se está utilizando. La parte superior de la página JSP es:

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

actualización El problema es que Saxon está siendo elegido como el analizador XML. Saxon no es compatible con esta funcionalidad. La eliminación de Saxon.jar corrige el problema.

+0

Guau, oscuro :) bueno saberlo. Gracias por publicar la revisión +1 –

Respuesta

1

En algún lugar de su XSLT se está refiriendo a una función llamada "{http://exslt.org/dynamic} evaluar()" y no le está dando la cantidad de argumentos que espera.

O ... no puede encontrar las extensiones que está agregando.

+0

O ... no puede encontrar las extensiones que está agregando. Parece ser el caso. ¿Alguna idea de cómo encontraría la extensión? –

+0

No coincide la extensión es correcta. –

1

Es posible que esté utilizando una versión anterior de Xalan.

Pruebe en cambio usar la extensión xalan:evaluate().

Lea más sobre esto en this thread.

+0

Modificado para usar xalan: evaluate() pero sigue dando el mismo error. –

Cuestiones relacionadas