Рефлексивные вызовы методов Java недоступны в Saxon-HE - PullRequest
0 голосов
/ 19 декабря 2018

Я новичок в xslt и springboot.Я разработал микросервис с использованием пружинной загрузки.У меня есть файл xslt, как показано ниже.

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xslt/java">
    <xsl:template match="//ProcessInput">
        <xsl:variable name="dateTimeFmt" select="java:format(java:java.text.SimpleDateFormat.new ('yyyy-MM-ddHH:mm:ss'), java:java.util.Date.new())"/>
        <xsl:variable name="date" select="concat(substring($dateTimeFmt,1,10),'T',substring($dateTimeFmt,11))"/>
        <RMessage>
            <header>
                <RMessageId>
                    <xsl:value-of select="IMD/@id"/>
                </RMessageId>
                <RMessageSchemaVersion/>
                <RSource>ABC</RSource>
                <RDestination>XYZ</RDestination>
                <RDateTimeSent>
                    <xsl:value-of select="$date"/>
                </RDateTimeSent>
            </header>
            <body>
                <xsl:copy-of select="IMD/node()"/>
            </body>
        </RMessage>
    </xsl:template>
</xsl:stylesheet>

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

Error at char 98 in xsl:variable/@select on line 4 column 145 
  XTDE1425: Cannot find a 2-argument function named
  Q{http://xml.apache.org/xslt/java}format(). Reflexive calls to Java methods are not
  available under Saxon-HE
  in built-in template rule for /ProcessInput in the unnamed mode

И я использовал следующие зависимости в моем pom.xml

<dependency>
    <groupId>net.sf.saxon</groupId>
    <artifactId>Saxon-HE</artifactId>
    <version>9.9.0-2</version>
</dependency>

1 Ответ

0 голосов
/ 19 декабря 2018

Ну, сообщение означает, что оно говорит.Вы пытаетесь использовать функцию под названием «функции рефлексивного расширения».Эта функция пытается сопоставить вызов функции XPath с классами и методами Java, доступными в пути к классам (в данном случае java.text.SimpleDateFormat).Эта функция недоступна в продукте Saxon-HE.Вы можете решить проблему несколькими способами:

  • Обновление до Saxon-PE (которое стоит небольшой суммы денег)

  • Заменитьиспользование вами этого метода Java со стандартной функцией XPath format-date()

  • Используйте механизм вызова Java, который доступен в Saxon-HE, а именно «интегрированные функции расширения» (см.в разделе «Расширяемость» в саксонской документации).

...