gpt4 book ai didi

java - Saxon:只为我们验证模式

转载 作者:行者123 更新时间:2023-11-30 06:01:24 25 4
gpt4 key购买 nike

我们将撒克逊语与我们的图书馆一起运送。我们以代码形式向其传递许可证,因此不发送 saxon-library.lic 文件。我们的系统一切都运行良好。

但是,我们的一位客户遇到了一个问题,当 hazelcast(他们使用的库)想要验证模式时,由于 Saxon 已将自己注册为 javax.xml.validation.SchemaFactory 提供程序,因此它使用 Saxon。由于没有许可证而失败。

所以我们需要它在我们调用时执行此操作,而不是在其他应用程序调用时执行此操作。或者,如果可以的话,我们需要将 .lic 文件与我们的应用程序一起发送。或者还有其他解决方案吗?

谢谢 - 戴夫

最佳答案

对此有两种可能的转发路线。一是让其他应用程序成功使用 Saxon 模式验证,二是尝试阻止其加载 Saxon 作为模式 validator 。

要实现第一个目标,它确实需要访问许可证文件,我们可以讨论如何最好地实现这一目标。由于这可能涉及商业/法律问题而不是纯粹的技术问题,我认为最好在线下讨论。

为了实现第二个目标,可以通过多种方式影响用于加载 SchemaFactory 的 JAXP 算法。一种是使用 SchemaFactory.newInstance() 方法,显式标识所需的工厂类;另一种方法是设置 javax.xml.validation.SchemaFactory:schemaLanguage 系统属性。如果所有其他方法都失败,您可以考虑从 Saxon JAR 文件(在 META-INF 中)中删除将 Saxon 标识为 JAXP SchemaValidator 服务提供者的条目。

(这就是我们最终对等效 XPath 工厂注册所做的事情:JAXP 搜索机制造成了如此多的麻烦,以至于我们最终说,如果您希望 Saxon 作为您的 XPath 提供程序,请直接从您的应用程序加载它,而不是'不要仅仅依赖它是类路径上找到的第一个东西)。

JAXP 机制实际上不允许应用程序的两个部分具有不同的依赖关系,这有点灾难,我确实想知道我们是否可以采取任何措施来减少这种情况,除了只是完全远离它。看起来确实可行的一件事(有待确认)是,如果没有可用许可证,方法 isSchemaValidationSupported() 可能会返回 false,而不是崩溃。我们还可以考虑其他一些外部/全局方式来表达“不要使用 Saxon 作为 JAXP 模式 validator ”,例如静态变量或系统属性。

此处添加了问题:https://saxonica.plan.io/issues/3898

关于java - Saxon:只为我们验证模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52226236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com