Web サービスの WS セキュリティの実装の一部として、いくつかの org.apache クラスを使用しています。
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関数を使用してください」について語っています。これが問題である場合、この解決策をどのように適用しますか?