我的软件需要两个TransformerFactory实现。我必须处理PDF的xml和xls / fo(格式化对象)。对于我想要使用用户定义的xsl函数的软件的新版本,我使用net.sf.saxon.TransformerFactoryImpl,它直接在源代码中引用。由于数据库中的旧数据需要使用org.apache.xalan.processor.TransformerFactoryImpl处理旧数据,因此saxon会抛出错误而不呈现PDF。
使用Tomcat时,我只需设置" -Djavax.xml.transform.TransformerFactory = org.apache.xalan.processor.TransformerFactoryImpl"作为vm参数,这没问题。
使用Wildfly设置时,vm参数会导致wildfly抛出以下异常: "线程中的异常" main" javax.xml.transform.TransformerFactoryConfigurationError:未找到提供程序org.apache.xalan.processor.TransformerFactoryImpl"
我的war文件中包含xalan.jar。 jalan的特定版本的xalan是Wildlfy发行版的一部分。
为什么没有找到它们?为什么Wildfly甚至会尝试在启动wildfly服务时加载工厂? 如何在启动期间配置Wildfly以找到xalan变压器工厂?将模块条目写入standalone.xml或domain.xml没有帮助。
我知道Wildfly中有一个错误,说变压器工厂的重定向不是指向Wildfly变压器工厂,而是指向java默认值。我认为这不会对我的问题产生任何影响,因为我试图设置另一个默认值。
任何帮助?
答案 0 :(得分:0)
我遇到了与JBoss 7类似的问题,它似乎也与Wildfly的问题相同。 只是一个疯狂的猜测:JBoss在启动时加载其配置文件并在关机时保存它们(不知道为什么,但如果你在JBoss运行时对standalone.xml进行任何修改,你会看到在关机时它们被覆盖)。我想JBoss需要使用变换器来保存其配置文件(standalone.xml),这就是它在启动时加载变换器的原因(甚至在解析模块配置之前,看到有一个xalan库要添加到类路径中,在部署战争文件之前)。但正如我所说,这只是猜测......我可能完全错了。
为了摆脱启动错误,您必须将xalan库放在$ JAVA_HOME / jre / lib / ext中(这样您可以将其提供给所有应用程序),或者您可以停止使用系统属性-Djavax.xml.transform.TransformerFactory并在standalone.xml文件中添加下一个属性。
<system-properties>
<property name="javax.xml.transform.TransformerFactory" value="org.apache.xalan.xsltc.trax.TransformerFactoryImpl"/>
</system-properties>