无法从coldfusion调用Java对象上的继承方法

时间:2013-06-24 16:00:06

标签: coldfusion twitter4j

我正在使用twitter4j库并且遇到其中一个类的问题。在我的代码中,我得到一个函数返回的RequestToken实例。我可以将变量转储到屏幕上,看看它实际上是正确的类。它有2个自己的公共方法,我可以毫无问题地使用它,但它有6个公共方法继承自OAuthToken我无法使用。当我尝试访问其中任何一个时,Coldfusion会抛出错误:

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类名,并显示方法。

enter image description here

我需要使用的两个方法是getToken()和getTokenSecret()。既不采取任何论据,所以没有什么可以javacast。

使用coldfusion8,以及最新的twitter4j版本3.0.3

1 个答案:

答案 0 :(得分:1)

一切看起来都对我来说:类和方法都是public可能是一个错误。 CF使用reflection来识别和调用方法。它通常是正确的,但并非总是如此。我已经看到在旧版本中发生过一次或两次。通常使用继承方法。

如果这是问题所在,您可以自己使用反射作为解决方法:

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