saxonica - Soporte de funciones de extensión de Java(limitado) en XSLT
xslt download (0)
Hace tiempo que me las arreglo con las bibliotecas XML predeterminadas proporcionadas por Java (Xerces2-J y Xalan-J), ocasionalmente y directamente usando las últimas versiones de esas bibliotecas cuando es necesario. Parece que me estoy enfrentando a algunos de los límites de estas bibliotecas, especialmente con Xalan-J, que en realidad ya no se mantiene y sin un lanzamiento durante casi 6 años ...
Necesito proporcionar algunas funciones personalizadas para extraer información de servicios externos cuando se llaman, por lo que deben implementarse en Java. (es decir, no puedo implementarlos dentro del XSLT mismo, ya sea como funciones XSLT o JavaScript, etc.) He hecho esto antes de usar Xalan-Java Extensions . Sin embargo, siempre que esto sea permitido, todo o nada:
- http://www.biglist.com/lists/lists.mulberrytech.com/xsl-list/archives/200911/msg00198.html
- http://marc.info/?l=xalan-j-users&m=123750821029013
- https://issues.apache.org/jira/browse/XALANJ-1850
Necesito poder proporcionar acceso a una extensión de Java, pero sin permitir llamadas arbitrarias a Java (por ejemplo, una llamada incorporada a System.exit()
), e idealmente, sin que los autores de XSLT siquiera tengan que saberlo que es una función de Java (mediante el uso de xmlns:java="http://xml.apache.org/xalan/java"
, por ejemplo). Idealmente, también podría mantener TransformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
.
Puedo hacer (casi) exactamente lo que estoy buscando usando XPath.setXPathFunctionResolver
, pero esto solo funciona para llamadas XPath directas, y no he encontrado una forma de configurar un XPath personalizado para usar en XSLT por Xalan. (También requiere que FEATURE_SECURE_PROCESSING
no esté configurado en XPathFactory
, aunque podría permitirme configurarlo solo en TransformerFactory
, ignorando que si se configura en TransformerFactory, TransformerFactory también configura automáticamente el mismo indicador en XPathFactory. eso es usos.)
Así que decidí probar Saxon (Saxon-HE 9.5.1-1) e inmediatamente noté dos problemas:
Cuando solo usas XPath directamente,
XPath.setXPathFunctionResolver
no parece tener ningún efecto bajo Saxon. La llamadaset
completa sin problemas, peroresolveFunction
en elXPathFunctionResolver
nunca se llama bajo Saxon. (Simplemente "simplemente funciona" bajo Xalan.) ¿Hay alguna configuración adicional necesaria para Saxon, o es esta una limitación de la versión HE?He consultado http://www.saxonica.com/documentation/#!extensibility/integratedfunctions/ext-simple-J - que, según el autor , se proporciona incluso en la versión HE.También parece ser exactamente lo que necesito; sin embargo (al igual que con(Esto es respondido por la función de extensión de registro de XALAN como en SAXON en la pregunta misma).XPathFunctionResolver
en Xalan), no veo cómo conectar esto al procesamiento XSLT.