gpt4 book ai didi

java - 无法使用 ColdFusion 10.0 正确初始化 xml 安全库

转载 作者:行者123 更新时间:2023-12-02 04:48:22 24 4
gpt4 key购买 nike

我使用以下内容在 CF 10 中进行初始化,并将 xmlsec-1.5.8.jar 文件放置在 Coldfusion10/cfusion/lib 下

<cfset Init = CreateObject("Java", "org.apache.xml.security.Init.Init()")> 

我还尝试将上述代码放入 cfscript 中

Init = CreateObject("Java", "org.apache.xml.security.Init.Init()");

我收到以下错误。

在使用 xml-security 库之前,您必须正确初始化它。调用静态方法“org.apache.xml.security.Init.init();”在使用该库中的任何功能之前执行此操作。

谢谢。

最佳答案

除了语法错误之外,还有一个问题。错误消息表明您必须首先调用该类的静态方法。字面意思是 init() 。问题是 init() 在 CF 中有特殊含义。 CF 不允许对 java 对象使用 new 关键字。相反,它使用名称 init() 作为伪构造函数,它允许您创建类的新实例。所以当你这样做时:

obj = createObject("java", "org.apache.xml.security.Init").init();

CF 将创建该类的一个新实例,而不是调用名为 init() 的方法。 AFAIK,唯一的解决方法是使用 reflection 。大致如下:

  // get a reference to the class
ref = createObject("java", "org.apache.xml.security.Init");
// initialize if needed
if (!ref.isInitialized()) {
// find static method named "init" with no parameters
method = ref.getClass().getDeclaredMethod("init", []);
// invoke it via reflection
method.invoke(ref, javacast("null", ""));
}

placed the xmlsec-1.5.8.jar file under Coldfusion10/cfusion/lib

虽然这样做没有什么问题,但从 CF10 开始,您还可以通过应用程序设置动态加载 jar,即 this.javaSettings 。如果这个功能看起来很熟悉,那么它基本上就是 Mark Mandel's 的一个片段。 awesome JavaLoader.cfc ,仅烘焙到 CF 中;-)

关于java - 无法使用 ColdFusion 10.0 正确初始化 xml 安全库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29480784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com