>我需要在java文件中运行这个命令行arugment
。java -jar output.docbook -o:output.fo -xsl:third_partydocbook_xsl1_78_1fodocbook_FCRR.xsl axf.extensions=1 use.extensions=1
但我正在尝试的不起作用。这是我到目前为止所拥有的
TransformerFactory tfactory = TransformerFactory.newInstance();
try {
// Create a transformer for the stylesheet.
Transformer transformer =
tfactory.newTransformer(new StreamSource(xslPath));
transformer.setParameter("axf.extensions","1");
transformer.setParameter("use.extensions","1");
// Transform the source XML to System.out.
transformer.transform(new StreamSource("output.docbook"),
new StreamResult(new File("output.fo")));
}catch(TransformerException e){
e.printStackTrace();
}
命令行代码工作正常,但 java 代码不能。
错误:"非静态 Java 函数 'insertCallouts' 的第一个参数不是有效的对象引用。
致命错误:"非静态 Java 函数 'insertCallouts' 的第一个参数不是有效的对象引用。
javax.xml.transform.TransformerConfigurationException:非静态 Java 函数 'insertCallouts' 的第一个参数不是有效的对象引用。
你看到的错误来自Xalan,而不是来自撒克逊。
使用 JAXP 方法TransformerFactory.newInstance()
是非常危险的,因为您获得的 XSLT 处理器完全取决于类路径上的内容。显式加载所需的处理器要安全得多:例如,如果您想要 Saxon 专业版,请使用 new com.saxonica.ProfessionalTransformerFactory()
.
更好的是,与其使用 JAXP,不如使用 Saxon 的 s9api 接口,该接口使您可以更好地控制如何将参数传递给转换。
另请注意,该错误与从样式表到外部 Java 方法的调用有关。它与您的问题主题无关,即将参数从 Java 应用程序传递到 XSLT 代码中。