2013-06-24 85 views
2

我正在使用twitter4j庫,並且遇到其中一個類的問題。在我的代碼中,我得到了一個從函數返回的RequestToken的實例。我可以將變量轉儲到屏幕上,並且看到實際上是正確的類。它有2個公共方法,我可以使用它沒有問題,但它有6個公共方法繼承我不能使用的OAuthToken無法從Coldfusion調用Java對象的繼承方法

Either there are no methods with the specified method name and argument types, or 
the getTokenSecret method is overloaded with argument types that ColdFusion cannot 
decipher reliably. ColdFusion found 0 methods that matched the provided arguments. 
If this is a Java object and you verified that the method exists, you may need to 
use the javacast function to reduce ambiguity. 

一些相關代碼:

<cfset twitterFactory = createObject("java", "twitter4j.TwitterFactory").init(config)> 
<cfset twitter = twitterFactory.getInstance()> 
<cfset RequestToken = twitter.getOAuthRequestToken()> 
<cfset TokenSecret = RequestToken.getTokenSecret()> 

轉儲RequestToken我可以看到垃圾堆裏的Java類的名字,當我嘗試訪問它們的任意ColdFusion拋出一個錯誤,並展示了這些方法。

enter image description here

這兩種方法我需要使用是爲gettoken()和getTokenSecret()。既不採取任何論據,所以沒有什麼javacast。

使用coldfusion8,以及最新的twitter4j發佈3.0.3

回答

1

一切看起來正確的對我說:這兩個類和方法public。它可能是一個錯誤。 CF使用reflection來識別和調用這些方法。它通常是正確的,但並非總是如此。我已經看到在舊版本中會發生一次或兩次。通常使用繼承的方法。

如果是這樣的問題,你可以自己使用反射作爲一個變通:

<cfscript> 
    emptyArray = []; 
    method = RequestToken.getClass().getMethod("getTokenSecret", emptyArray); 
    result = method.invoke(RequestToken, emptyArray); 
</cfscript> 
+0

謝謝你這麼多的工作,身邊!仍然感到困惑/煩躁,它並不起作用,但至少我現在可以繼續前進。 – jhinkley

+0

從我所看到的,原來的代碼應該工作得很好。這就是爲什麼我懷疑一個錯誤。您可能需要檢查錯誤數據庫,以查看是否有類似的報告和/或在更高版本中修復。無論如何,高興的解決方法幫助。 – Leigh