我正在使用
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参数
-Djavax.xml.transform.TransformerFactory=<factory class>
您还可以直接在程序中实例化所需的工厂,如
TransformerFactory tf = new SomeTransformerFactoryImpl();
执行程序时,使用
-D
标志从命令行静态设置它:
java -Dorg.apache.xalan.processor.TransformerFactoryImpl=com.xyz.YourFactory YourApp
System.setProperty()
:
System.setProperty("org.apache.xalan.processor.TransformerFactoryImpl",
"com.xyz.YourFactory");
请注意,您需要使用工厂类的完全限定类名,并且工厂需要位于您的类路径上才能使它们中的任何一个正常工作。
这是否意味着我无法更改 Android 上 TransformerFactory.newInstance() 的返回类?
“与其他 Java 实现不同,此方法不查阅系统属性、属性文件或服务 API。”
https://developer.android.com/reference/javax/xml/transform/TransformerFactory