【发布时间】:2016-11-02 10:46:10
【问题描述】:
我正在尝试将使用 camel/cxf(提供一些包含转换的 Web 服务)的旧版应用程序迁移到 Websphere Liberty 16.0.0.03 (IBM JRE 1.8)。测试失败,因为该应用程序使用了扩展功能。我尝试按照here 的描述禁用安全处理。
此更改无效。这就是为什么我尝试通过在 jvm.options 配置文件中设置系统属性“javax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl”来全局切换到撒克逊实现。再次 - 这不起作用。
在调试时,我可以看到 com.ibm.ws.webcontainer.osgi.mbeans.PluginGenerator$2 在服务器启动期间使用 com.ibm.xtq.xslt.jaxp.compiler.TransformerFactoryImpl 覆盖属性。我可以在堆栈中看到一个似乎触发更改的方法“PluginGenerator.revertTransformerFactoryIfNeccessary”。之后所有 FactoryFinder.find() 将返回非撒克逊实现。
谁能建议如何成功禁用安全处理
或
一种成功设置自定义 TransformerFactory 的方法?
顺便说一句:在我看来这 2 个是错误 - 我是否将这些作为常规 PMR 报告?
EDIT: possible workaround
作为有用建议的结果,我添加了一个“@WebListener”,它将在构造函数中设置系统属性(在 contextInitialized 中设置它为时已晚,因为样式表似乎是在应用程序启动期间编译的,因此处理测试失败)。我将这个“patch-jar”与旧版应用程序捆绑在一起。
【问题讨论】:
标签: xslt websphere-liberty jaxp