0

我们正在使用一些 org.apache 类作为实现 Web 服务的 WS 安全性的一部分。

variables.paths = arrayNew(1);
variables.paths[1] = getDirectoryFromPath(getCurrentTemplatePath()) & "lib\wss4j-1.5.8.jar";
variables.paths[2] = getDirectoryFromPath(getCurrentTemplatePath()) & "lib\xmlsec-1.4.2.jar";
variables.loader = createObject("component","lib.javaloader.JavaLoader").init(loadPaths=variables.paths,loadColdFusionClassPath=true);
variables.WSConstantsObj = loader.create("org.apache.ws.security.WSConstants");
variables.messageClass = loader.create("org.apache.ws.security.message.WSSecUsernameToken");
variables.secHeaderClass = loader.create("org.apache.ws.security.message.WSSecHeader");

以下代码:

<cfset var msg = getMessage()>  

产生:

在此处输入图像描述

以下代码:

<cfset var secHeader = getSecHeader()>

产生:

在此处输入图像描述

以下代码:

<cfset var env = soapEnv.getDocumentElement()>

产生:

在此处输入图像描述

env.getOwnerDocument()

产生一个巨大的结构(太大而不能包括在这里),你可以在这里查看

但是,以下代码:

<cfset e = msg.build(env.GetOwnerDocument(),secHeader)>

抛出错误:

 The build method was not found.
Either there are no methods with the specified method name and argument types or the build method is overloaded with argument types that ColdFusion cannot decipher reliably. ColdFusion found 0 methods that match the provided arguments. If this is a Java object and you verified that the method exists, use the javacast function to reduce ambiguity.

但是 Build() 方法确实存在,根据第一个屏幕截图中的黄色突出显示。

错误消息谈到“...使用 javacast 函数来减少歧义”。如果这是问题所在,我将如何应用此解决方案?

4

1 回答 1

0

不是“build()”不存在,而是你的签名不正确。build 方法的 2 个参数是:

env.GetOwnerDocument(),secHeader

我们知道 secHeader 属于该类

org.apache.ws.security.message.WSSecHeader

因为您的 cfdump 表明了很多。

这可能意味着“env.GetOwnerDocument”没有返回类的对象

org.w3c.dom.Document

它可能会返回错误或原语或其他类。实例化 envGetOwnerDocumet() 并将其转储并检查类。我认为它搞砸了方法签名。无论如何,这是我最好的猜测。

于 2012-08-06T14:14:13.753 回答