我正在尝试在 cfscript 内的 Coldfusion 中的 java.security.Keystore 对象上使用方法 load()。
这是我的代码(不是完整的代码,但足以查看元素的层次结构):
<cfoutput>
<cfsavecontent variable="responseOpen">
<?xml version="1.0" encoding="UTF-8"?>
...
</cfsavecontent>
<cfxml variable="samlAssertionXML">
...
</cfxml>
<cfsavecontent variable="responseClose">
</samlp:Response>
</cfsavecontent>
<cfscript>
// 1) Injest the XML
...
// 5) Keystore
ksfile = CreateObject("Java", "java.io.File").init("Users/carl/keystore_test");
inputStream = CreateObject("Java", "java.io.FileInputStream").init(ksfile);
KeyStoreClass = CreateObject("Java" , "java.security.KeyStore");
ks = KeyStoreClass.getInstance("JKS");
ks.load(inputStream,"1221");
...
</cfscript>
...
</cfoutput>
我收到一条错误消息:
No matching Method/Function for java.security.KeyStore.load(java.io.FileInputStream, string) found
在线ks.load(inputStream,"1221");。
我确保 inputStream 不为 null,并且 inputStream 是 java.security.Keystore 类型的对象。我还确保加载了 java.security.Keystore 库。证明这一点的是代码在该行之前不会中断。代码位于 .cfm 文件中。
记录 inputStream 和 ksfile,我得到了这个:
- inputStream: keystore 的实际内容
- ks文件:/Users/carl/keystore_test
问题可能是什么?
最佳答案
查看 java.security.KeyStore 的文档,看起来使用 InputStream 调用时的 load()
方法实际上需要一个字符数组 (char[]
),而不是字符串。我猜这就是您看到“无匹配方法”错误的原因。您可以尝试将字符串转换为字符数组吗?例如:
password = "1221";
ks.load(inputStream, password.toCharArray());
关于java - 找不到 java.security.KeyStore.load(java.io.FileInputStream, string) 的匹配方法/函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45639790/