Ошибка при попытке вызвать функцию javascript в xslt (Java JDK 8) - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь вызвать функцию javascript в моем XSL-файле.

Мой XSL:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:jscript="http://www.url.com" exclude-result-prefixes="msxsl jscript">
.
.
.
<html>
    <head>
    .
    .
    .
        <msxsl:script language="JScript" implements-prefix="jscript">
            <![CDATA[
            function testFnc(){
                return "test";
                }
            }]]>
        </msxsl:script>
    </head>
    .
    .
    .
</html>
.
.
.
<xsl:value-of select="jscript:testFnc()"/>

В файле Java при попытке создать Transformer:

Transformer transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(xslUrl));

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

ОШИБКА: 'Не удается найти класс' www.url.com '.'>

ФАТАЛЬНАЯ ОШИБКА: 'Не удается найти внешний метод' www. url.com.testFnc '(должен быть общедоступным).'

javax.xml.transform.TransformerConfigurationException: Не удается найти внешний метод 'www.url.com.testFnc' (должен быть общедоступным).

Без этого кода

<xsl:value-of select="jscript:testFnc()"/>

все работало нормально.

В Java 7 была похожая проблема со встроенным Xalan: Расширения Xalan Java 'Не удается найти класс'ошибка на JRE 7

Мне было интересно, эта проблема все еще присутствует в Java 8.

Я также пытался что-то вроде этого: http://xml.apache.org/xalan-j/extensions.html#basic-pattern Каквключить вызов JavaScript в XSLT?

, но результаты остались прежними.

Заранее спасибо

1 Ответ

0 голосов
/ 14 ноября 2019

Благодаря помощи Мартина Хоннена я смог использовать свой собственный класс Java в коде xslt. Вы можете найти больше информации в документации: http://xml.apache.org/xalan-j/extensions_xsltc.html#java_ext

xslt:

<xmlns:java_util="http://xml.apache.org/xalan/java/com.example.java.util" exclude-result-prefixes="java_util">
<!-- Java function call -->
<xsl:value-of select="java_util:DateUtil.formatDateTime(.)"/>

Класс Java:

package com.example.java.util;

public class DateUtil {
    public static String formatDateTime(String date){
    //implementation
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...