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

标签 java xml coldfusion

我使用以下内容在 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/

相关文章:

java - 无法将图片从Android上传到java服务器

Android Eclipse > 图形布局 : How to Set Default Layout = Nexus 7 or Not 2 for every XML layout I open to look same in IDE and Device

放在 ColdFusion CFC 中时 SQL 语句不起作用

java - 同步方法重写 - 线程获取哪个对象的锁?

java - 运行 Maven 时为 "Invalid maximum heap size"

java - Hibernate - 在实体集合中设置 null 会在事务提交时自动保留

python - Python xml ElementTree 可以解析一个非常大的 xml 文件吗?

java - XSLT:应用模板时不包含多个子元素

coldfusion - 没有表达式或条件的 cfif 语句

coldfusion - 如何获取给定页面重写后的 CFWheels URL?