我在 WebSphere 8.5.5 上有一个 java 应用程序。我使用了来自 jdk 的 xslt transformer。当我使用控制台版本时,我可以使用jdk版本的Transformer,现在,我切换到WebSphere 8.5.5上的java应用程序。现在,我切换到WebSphere。当我创建一个TransformerImpl时,它是由Ibm创建的。它有很多错误。我需要来自jdk的普通版本.我不能使用Xalan 2.7.2,因为它的工作更慢.我不能使用Saxon,因为我不能重写成千上万的xslt到'2.0'版本。Saxon与xslt 1.0的工作不顺利。
这可能会破坏很多。 计划这需要一段时间来修复。我没有一个websphere服务器8.5.5了。 所以我不能测试这些说明,所以我希望用这个答案做的最好的是给你一个开始的地方。
将你的Websphere应用类加载器策略设置为 parent last
希望这一变化不会造成更多的问题,而不是解决问题。 必须这样做才能覆盖Websphere自带的较新的Xalan版本。 这里是一个 链接到IBM的说明
测试您的应用程序。我希望你不必遵循下面的任何指示。
如果你认为它不工作,那么你必须确保你的Websphere服务器是为你的应用程序设置的。Multiple Class loaders
警告,IBM有自己的JDK。就像Oracle的java jdk,和open-jdk一样。 Websphere 8.5.5将默认运行基于IBM JDK的JVM。 即使服务器操作系统的默认 java -version
是基于Oracle或openjdk的,IBM可能还是会去找其基于IBM JDK的JVM。你的bug可能来自于IBM JDK。 让人仔细检查 此处 当你继续工作的时候,你需要的IBM jdk设置可以在这里找到。
你需要的IBM jdk设置可以在下面找到 此处. 更改下面#1或#2中的一些设置将改变Websphere处理其内部xml的方式。 在最坏的情况下,Websphere将无法启动。最好的情况是,所有 parent first
类加载器策略应用也需要重新测试。
来自IBM jdk的类加载器文档。
- 与服务提供者同名的系统属性。
- 属性文件中指定的服务提供者。
- 仅适用于XMLEventFactory、XMLInputFactory和XMLOutputFactory。optibmjava--70jrelibstax.properties文件中的服务提供者的值。
- 对于其他工厂。optibmmjava--70jrelibjaxp.properties文件中服务提供者的值。
- 文件optibmjava--70jrelibjaxp.properties中服务提供者的值。
your-war-file
META-INFservices/<service.provider>
文件。- 默认的服务提供者。
的 services/<you.must.make.the.service.provider.file.name>
和 services
目录可能不存在。
对于您的问题,请将 /META-INF/services/javax.xml.transform.TransformerFactory
文件,它的内容将是你希望为这些j2EE服务使用的.class文件的名称。选取一行。
your.j2EE.java.xml.transform.TransformerFactoryImpl.goes.here
- 并确保Impl的.class文件在你的classpath中。
或
com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl
- 网络空间的夏兰瓶
或
com.ibm.xtq.xslt.jaxp.compiler.TransformerFactoryImpl
- Websphere的默认值
从你的问题中,我无法确定你需要哪个TransformerFactoryImpl名称。
测试一下你的应用程序,希望对你有所帮助。