2017-08-11 39 views
0

我想在ColdFusion里面的cfscript中的java.security.Keystore对象上使用方法load() 。没有找到匹配的方法/函数用于java.security.KeyStore.load(java.io.FileInputStream,字符串)找到

这里是我的代码(不是全部的代码,但足以看出元素的层次):

<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> 

我收到一个错误,指出:

没有匹配的方法/函数对于 java.security.KeyStore.load(java.io.FileInputStream中,字符串)发现

就行 ks.load(的inputStream

” 1221" );

我确保inputStream不为null,并且inputStream是java.security.Keystore类型的对象。我还确保加载了库java.security.Keystore。这样的证明是代码在该行之前不会中断。该代码位于.cfm文件中。

记录InputStream和ksfile,我得到这个:

  • 的inputStream:密钥库的实际内容
  • ksfile:/用户/卡尔/ keystore_test

还有什么问题可能是?

+0

转储您的ksfile和inputStream对象以查找线索。 –

+0

我已经做了,他们看起来很好。我在问题中添加了详细信息。 – Carl

回答

2

查看java.security.KeyStore的文档,看起来像使用InputStream调用时的load()方法实际上需要字符数组(char[]),而不是字符串。我想这就是为什么你看到“没有匹配方法”的错误。你可以尝试将字符串转换为字符数组吗?例如:

password = "1221"; 
ks.load(inputStream, password.toCharArray()); 
+0

它工作!这就是任何理智的开发者首先应该做的:看功能签名!非常感谢jcberquist。 – Carl

相关问题