我们正在使用一些 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 函数来减少歧义”。如果这是问题所在,我将如何应用此解决方案?