0

我们希望将XSpec作为 Maven 构建的一部分来检查我们的 XSL 转换。可以从GitHub获得一个插件。当我们检查调用函数的 XSL 样式表在 Saxon-HE 中不可用时,就会出现问题,如下所示:

Error at xsl:if on line 194 column 75 of dyxml_table_cals.xsl:
XPST0017 XPath syntax error at char 0 on line 194 near {...table-enumeration-condition...}:
Cannot find a matching 2-argument function named {http://saxon.sf.net/}evaluate().
Saxon extension functions are not available under Saxon-HE

我们拥有 PE 的许可证。根据 Saxon 文档,当没有可用的许可证信息时,增强版恢复为开源 HE,这似乎是这种情况。是否可以通过 Maven 激活 PE,例如使用codehaus的插件,那会是什么样子?我们已经通过 Java 使用了一种激活方式,但是如果可能的话,了解另一种可以说更优雅的方式会很有帮助。

4

2 回答 2

0

我对 XSpec 的 Maven 插件不是很熟悉,但我尝试提供一些提示和解决方法。

您提到的 Maven 插件的 pom.xml 包含对使用的 Saxon 版本的依赖项:

<dependency>
    <groupId>net.sf.saxon</groupId>
    <artifactId>Saxon-HE</artifactId>
    <version>9.7.0-1</version>
</dependency>

您应该指定 Saxon 版本才能使用 Saxon-PE 或 Saxon-EE。但是,这些 Saxon 版本似乎在公共 Maven 存储库中不可用,因为与 Saxon-HE 不同,它们是专有软件。我想您可以将 Saxon-PE 的 .jar 文件放在本地存储库中(参见 Maven 文档)。我建议将 .lic 许可证文件与 .jar 文件放在同一目录中。

其他两个提示可以帮助您找到解决方法:

  • XSpec 允许在shell或批处理脚本内的环境变量中指定 Saxon 版本。然后,您可以使用例如 exec-maven-plugin 在 Maven 项目中运行 shell 脚本。这并不理想,但对于您的用例来说可能就足够了。
  • 还有另一个用于运行 XSpec 的 Maven 插件,您可能也想检查一下。

希望能帮助到你...

于 2016-09-23T23:11:11.963 回答
0

经过反复试验,我们发现以下解决方案有效:

  1. 上面链接的 XSpec-Maven-Plugin 的创建者硬编码了未经许可的 Saxon-HE 的使用。特别是,以下行引起了问题:

    private final static Processor processor = new Processor(false);
    

    我们分叉代码并将其更改为:

    private final static Processor processor = new Processor(true);
    
  2. 我们构建了一个自定义类来激活许可证并将其集成到插件源代码中。(不能在这里发布代码。)

这解决了许可问题。现在我们的 XSpec 测试已经启动并运行了。是的我们!

于 2016-09-26T08:56:46.617 回答