安全功能处理设置为 true 时无法使用扩展功能

Extension Functions cannot be used when Secure feature proccesing is set to true

您好,我正在尝试以安全的方式使用 XSLT(v1) 实施 XML 转换。我正在 Java EE 7 环境中工作,使用 Wildfly 10 和 Oracle JDK 8(1.8.0_151)。为了根据我的需要自定义 xml 的显示,我使用了一个引用我创建的方法的 xsl 样式表。问题是,当我将安全功能设置为 TRUE 时,出现以下异常: javax.xml.transform.TransformerException 消息: 当安全处理功能设置为 true 时,不允许使用扩展功能 'xalan://com.mycompany.mypkg.easyprint.helpers.MyClass:myMethod' 从我读到的其他帖子中,有一个功能需要在 TransformerFactory 上配置,所以我设置了它。

TransformerFactory tf = TransformerFactory.newInstance(); tf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); tf.setFeature("http://www.oracle.com/xml/jaxp/properties/enableExtensionFunctions", true);

但是,当我 运行 我的应用程序出现以下异常时: javax.xml.transform.TransformerConfigurationException: 无法在此 TransformerFactory 上设置功能“http://www.oracle.com/xml/jaxp/properties/enableExtensionFunctions”。

有什么建议吗?

如果您足够信任样式表以允许调用外部 Java 函数,那么您就足够信任它而无需设置 SECURE_PROCESSING 功能。

但是,如果您别无选择,只能设置 SECURE_PROCESSING 功能,您可以使用允许样式表调用 Java 已通过处理器预注册的扩展的 Saxon 选项API。这允许样式表仅调用应用程序明确授权的那些扩展。这是使用 s9api API 调用 Processor.registerExtensionFunction() 完成的,并且必须将 Java 扩展写入此 Saxon 接口。