当安全功能处理设置为true时,不能使用扩展功能

时间:2018-07-17 10:12:10

标签: java xml xslt java-ee-7 xalan

您好,我正在尝试以安全的方式使用XSLT(v1)实现XML转换。我正在使用Wildfly 10和Oracle JDK 8(1.8.0_151)在Java EE 7环境中工作。为了根据我的需要自定义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'。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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

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