我有一个应用程序,我使用 Xalan 作为 XSLT 处理器。我现在想使用撒克逊人。我想确保所有现有的转换仍然有效。因此我想对所有现有的 XML 文件使用 Xalan。对于新的 XML 文件,我想使用 Saxon。总而言之,我想同时使用两个处理器。因此,我像这样实例化处理器:TransformerFactory.newInstance("com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl", null);orTransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null);在我现有的所有单元测试中,我都使用 Xalan。但是当我将 Saxon 添加到我的类路径时,其中一些失败了。失败的测试都使用 Apache FOP 来创建 PDF 文件。不同的是,现在生成的 PDF 中插入了一些制表符(缩进键)(不在可见内容中,我只是在比较字节码时看到它们)。我认为这种行为很奇怪,因为我仍然使用 Xalan 并期望与我的类路径中没有 Saxon 时的结果相同。那么当 Saxon 在类路径中时还有什么变化呢?当我添加System.setProperty("javax.xml.transform.TransformerFactory", "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");在我的测试中,它再次与类路径中的 Saxon 一起使用。但这不是我的生产环境的解决方案,因为我想在两个处理器之间动态切换。那么有人知道当我将 Saxon 添加到我的类路径时还有什么变化吗?非常感谢!更新: 我设置了 jaxp.debug 标志并获得以下输出(在类路径中使用 Xalan 和 Saxon) JAXP: created new instance of class org.apache.xalan.xsltc.trax.TransformerFactoryImpl using ClassLoader: nullJAXP: created new instance of class org.apache.xalan.xsltc.trax.TransformerFactoryImpl using ClassLoader: nullJAXP: created new instance of class org.apache.xalan.xsltc.trax.TransformerFactoryImpl using ClassLoader: nullCalling com.saxonica.SchemaFactoryImpl.isSchemaLanguageSupported("http://www.w3.org/2001/XMLSchema"); returning trueJAXP: created new instance of class org.apache.xalan.xsltc.trax.TransformerFactoryImpl using ClassLoader: nullJAXP: find factoryId =javax.xml.transform.TransformerFactoryJAXP: find factoryId =javax.xml.transform.TransformerFactoryJAXP: find factoryId =javax.xml.transform.TransformerFactoryJAXP: find factoryId =javax.xml.transform.TransformerFactoryJAXP: find factoryId =javax.xml.transform.TransformerFactoryJAXP: created new instance of class org.apache.xalan.xsltc.trax.TransformerFactoryImpl using ClassLoader: null
添加回答
举报
0/150
提交
取消