如何设置javax.xml.transform.TransformerFactory系统属性

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

我正在使用

javax.xml.transform.Transform
将 XML 文件转换为 PDF。这本身工作得很好,但项目的某些部分正在使用 Xalan,它实现了自己的
TransformerFactory
,并且其中的某些内容不适用于西里尔语。

我在https://xml.apache.org/xalan-j/usagepatterns.html发现有一个属性用于定义使用的工厂:

TransformerFactory 是一个抽象类,具有静态 newInstance() 方法,该方法实例化由 javax.xml.transform.TransformerFactory 系统属性指定的具体子类。

此系统属性的默认设置是 org.apache.xalan.processor.TransformerFactoryImpl。

我的问题是:如何设置此属性以不使用 Xalan?

java xslt-1.0 xsl-fo xalan
3个回答
2
投票

尝试将其设置为java参数

-Djavax.xml.transform.TransformerFactory=<factory class>

您还可以直接在程序中实例化所需的工厂,如

TransformerFactory tf = new SomeTransformerFactoryImpl();


1
投票

执行程序时,使用

-D
标志从命令行静态设置它:

java -Dorg.apache.xalan.processor.TransformerFactoryImpl=com.xyz.YourFactory YourApp

或者在您的应用程序中动态使用

System.setProperty()
:

System.setProperty("org.apache.xalan.processor.TransformerFactoryImpl",
        "com.xyz.YourFactory");

请注意,您需要使用工厂类的完全限定类名,并且工厂需要位于您的类路径上才能使它们中的任何一个正常工作。


0
投票

这是否意味着我无法更改 Android 上 TransformerFactory.newInstance() 的返回类?

“与其他 Java 实现不同,此方法不查阅系统属性、属性文件或服务 API。”

https://developer.android.com/reference/javax/xml/transform/TransformerFactory

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