2017-08-11 79 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

相關問題