2016-08-22 9 views
0

Я запускаю приложение Java, которое должно выполнить некоторую обработку XSLT на основе javax.xml.transform.Transformer. Я разработал его на более старом ноутбуке, используя java-7-openjdk-amd64. Когда я запускаю его на другой машине с java-8-openjdk-amd64 установлен трансформатор выдает следующее исключение:Обработка Java XSLT throws TransformerConfigurationException при запуске на другом компьютере

javax.xml.transform.TransformerConfigurationException: Не удалось компиляции таблицы стилей. 1 обнаружена ошибка.

XPST0017: XPath синтаксис ошибка [...] не удается найти соответствующие функции 1-аргумента с именем {} http://xml.apache.org/xslt/java java.text.SimpleDateFormat.new() в net.sf.saxon.PreparedStylesheet.prepare (PreparedStylesheet. Java: 176) на net.sf.saxon.TransformerFactoryImpl.newTemplates (TransformerFactoryImpl.java:139) в net.sf.saxon.TransformerFactoryImpl.newTransformer (TransformerFactoryImpl.java:91)

в XSL файл выглядит как это (оставляя неважные детали):

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xslt/java" exclude-result-prefixes="java"> 

    <xsl:template match="/"> 
    <html> 

     <body> 
     <h1>Test Report</h1> 
     <h2>Test run</a> at   
      [<xsl:value-of 
      select="java:format(java:java.text.SimpleDateFormat.new('dd.MM.yyyy HH:mm:ss'), java:java.util.Date.new())" />] 
     </h2> 

У Transformer, очевидно, есть проблема с вызовом SimpleDateFormat, но почему? Я не мог найти никакой информации об этом в отношении Java7 и Java8. Я даже скопировал файл Jar, скомпилированный с Jdk7 an, и запустил его на другой машине. Такая же проблема, так что это проблема времени выполнения. Есть несколько Q + A на SO о java и XSLT, но ничего не оказалось полезным для меня.

ответ

0

Оказалось, что это заявление <xsl:stylesheet version="2.0" не гарантирует, что XSLT v2.0 фактически используется. javax.xml.transform.Transformer «тайно» использовал XSLT v1.0 на старой машине (с java-7-openjdk-amd64) и XSLT v2.0 с Saxon v9.1.0 на другом компьютере (с java-8-openjdk-amd64).

Зависимость была установлена ​​maven pom.xml во время компиляции. Но, видимо, это не повлияло на запуск Jre7. Я мог заметить это, посмотрев на трассировку стека (net.sf.saxon.TransformerFactoryImpl), но так как раньше не было ошибок, я не знал о какой-либо конкретной реализации TransformerFactory.