我如何在 WebSphere 上使用 com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl 而不是 com.ibm.xtq.xslt.jaxp.TransformerImpl?

问题描述 投票:0回答:1

我在 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的工作不顺利。

java xslt xalan jaxp
1个回答
0
投票

这可能会破坏很多。 计划这需要一段时间来修复。我没有一个websphere服务器8.5.5了。 所以我不能测试这些说明,所以我希望用这个答案做的最好的是给你一个开始的地方。

  1. 将你的Websphere应用类加载器策略设置为 parent last希望这一变化不会造成更多的问题,而不是解决问题。 必须这样做才能覆盖Websphere自带的较新的Xalan版本。 这里是一个 链接到IBM的说明

  2. 测试您的应用程序。我希望你不必遵循下面的任何指示。

如果你认为它不工作,那么你必须确保你的Websphere服务器是为你的应用程序设置的。Multiple Class loaders

admin screen picture of the settings drop down

警告,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的类加载器文档。

  1. 与服务提供者同名的系统属性。
  2. 属性文件中指定的服务提供者。
    • 仅适用于XMLEventFactory、XMLInputFactory和XMLOutputFactory。optibmjava--70jrelibstax.properties文件中的服务提供者的值。
    • 对于其他工厂。optibmmjava--70jrelibjaxp.properties文件中服务提供者的值。
  3. 文件optibmjava--70jrelibjaxp.properties中服务提供者的值。your-war-fileMETA-INFservices/<service.provider> 文件。
  4. 默认的服务提供者。

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名称。

测试一下你的应用程序,希望对你有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.