当前位置: 首页 > 知识库问答 >
问题:

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

贾骏喆
2023-03-14

您好,我正在尝试以安全的方式使用XSLT(v1)实现XML转换。我正在使用Wildfly 10和Oracle JDK 8(1.8.0\u 151)开发Java EE 7环境。为了根据需要自定义xml的表示,我使用了一个xsl样式表,它引用了我创建的方法。问题是,当我将安全特性设置为TRUE时,会出现以下异常:javax。xml。使改变TransformerException with message:使用扩展函数'xalan://com.mycompany.mypkg.easyprint.helpers.MyClass:myMethod'在我阅读的其他帖子中将安全处理功能设置为true时不允许,因为TransformerFactory上需要配置一个功能,所以我设置了它。

TransformerFactory tf=TransformerFactory.newInstance();tf.setFeature(http://www.oracle.com/xml/jaxp/properties/enableExtensionFunctions);tf.setFeature(http://www.oracle.com/xml/jaxp/properties/enableExtensionFunctions);

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

有什么建议吗?


共有1个答案

訾俊名
2023-03-14

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

但是,如果您别无选择,只能设置SECURE\u处理特性,那么可以使用Saxon选项,该选项允许样式表调用通过处理器API预先注册的Java扩展。这允许样式表仅调用应用程序明确授权的那些扩展。这是使用s9api API调用处理器完成的。registerExtensionFunction()和Java扩展必须写入这个Saxon接口。

 类似资料:
  • 我有以下Spring Boot类,用自定义注释注释: 注释定义如下: 我想要的是编写一个注释处理器,有效地使我的控制器像下面的代码一样工作。 我已经能够在运行时通过反射实现这一点,但这大大延长了启动时间。有没有办法只使用注释和自定义注释处理器来实现上述功能?换句话说,我想创建一个注释,将带注释的方法添加到类中,并将任意方法调用添加到现有方法中。 我知道注释处理并不真正支持修改源代码。我有兴趣知道任

  • SDK对外开放了一个可自定义的协议NtalkerChatDelegate,如果客户想进行自定义实现接口,必须遵守此协议,初始化小能类的时候设置其delagate为实现代理接口方法的类,然后实现相应的接口。其中提供了以下几个接口: 深度自定义控件接口,详细调用细节,请参照demo。 一、自定义消息发送 二、查询历史咨询列表 三、设置超媒体自定义参数 四、+号功能区的扩展功能 五、商品条自定义 六、设

  • 一、发送文本消息到聊窗内 二、返回按钮的点击监听 三、结束会话按钮的点击监听 四、超媒体点击事件的监听 五、+号功能区的扩展功能 六、商品条自定义 七、导航栏自定义

  • QueyList是完全模块化的设计,拥有强大的可扩展性。 使用bind()方法绑定一个功能函数到QueryList对象,实现轻量级的功能扩展。bind()方法的第一个参数是绑定的函数名,第二个参数是一个匿名的功能函数,这个功能函数的$this对象指向的是当前的QueryList实例对象,所以在这个功能函数中可以直接通过$this来调用QueryList的方法。 例子 注册一个自定义的http网络操

  • 自定义引擎各个阶段 可以在测试脚本中或者基类中重写 ActsTestBase 提供的 API。 重写 prepare,execute,check,clear 等。可以通过在 super.prepare() 之前或者之后进行某些操作。 重写 process 方法,在 super.process() 之前或之后进行操作。可将整个脚本重新编排,例如在现有的清理 -> 准备 -> 执行 -> 校验流程中增

  • 问题内容: 可以扩展Swift函数的功能吗?我想在程序中的每个print()函数上附加一个字符,而不必创建全新的函数并重命名print()的每个实例。是否可以创建将在每个打印实例后附加“ *”的扩展名? 这样做的目的是创建一种清除XCODE添加到调试器中的所有额外信息的方法。我使用打印语句来检查代码不同部分的进度和成功,但是XCODE在几秒钟内填写了数千行多余信息,这些信息很快掩盖了我的特定语句。