我们正在为 Oracle 的 Oracle Unified Directory (OUD) 产品开发一个插件,在这种情况下,我们需要在 Java 中添加对 XSLT 的支持。所以我尝试添加 SAXON-HE 11_5 作为 Maven 依赖项,并且插件在 Eclipse 中构建正常。
但是,当我尝试将更新后的插件 JAR 部署到 OUD(OUD 代理)实例时,该实例无法启动。
我已经解决这个问题(OUD 没有启动)几天了,然后才注意到 JAR 的大小在某个点几乎翻倍,然后我意识到那就是我添加的时候(注意:刚刚添加 - 我实际上还没有使用 XSLT)Saxon-HE 11_5 作为 pom.xml 中的依赖项。
所以今天早上,我从 pom.xml 中删除了 Saxon-HE 11_5 并重新构建了插件并部署了 JAR,现在 OUD 实例启动了!!
当 Saxon-HE 在 OUD 启动期间成为依赖项时,我看到的错误似乎与任何事情都无关。这些错误似乎与缺少 PIN 相关(我认为 OUD 使用 PIN 来保护某些 JKS 文件)。我没有(Oracle 支持也没有)在日志中看到任何其他错误),所以这真的有点令人费解,为什么仅仅添加 SAXON-HE 作为 Maven 依赖项会导致插件导致 OUD 无法启动?
我们真的希望能够获得 XSLT 功能,所以我希望这里有人对此有一个想法?
提前致谢, 吉姆
问题通常是应用程序调用
TransformerFactory.newInstance()
来获取 XSLT 转换器。它被定义为返回在类路径上首先找到的任何 XSLT 转换引擎。当应用程序使用此机制时,它应该确保它可以与任何符合标准的 XSLT 处理器一起工作,但不幸的是情况并非总是如此,并且应用程序有时依赖于特定处理器,通常是 Xalan(尽管可以,例如例如,依赖于 Oracle 的旧 XDK 处理器)。
您可以通过将 Java 系统属性
jaxp.debug
设置为 1 来进行诊断以揭示这是否是问题所在。
您可以通过设置系统属性
javax.xml.transform.TransformerFactory=org.apache.xalan.processor.TransformerFactoryImpl
强制将 Xalan 用作默认 XSLT 处理器。这是 Xalan 的 Apache 版本,我不确定这些天你会使用什么来强制使用 JDK 版本的 Xalan。