2

twitter4j ライブラリを使用していますが、クラスの 1 つに問題があります。私のコードでは、関数から返されたRequestTokenのインスタンスを取得します。変数を画面にダンプして、それが実際に正しいクラスであることを確認できます。問題なく使用できる独自の2つのパブリックメソッドがありますが、使用できないOAuthTokenから継承された6つのパブリックメソッドがあります。それらのいずれかにアクセスしようとすると、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 クラス名が表示され、メソッドが表示されます。

ここに画像の説明を入力

使用する必要がある 2 つのメソッドは、getToken() と getTokenSecret() です。どちらも引数を取らないので、javacast する必要はありません。

coldfusion8 と最新の twitter4j リリース 3.0.3 を使用

4

1 に答える 1

1

クラスとメソッドの両方がpublic. バグかもしれません。CF はリフレクションを使用してメソッドを識別し、呼び出します。通常は正しくなりますが、常にではありません。古いバージョンで 1 回か 2 回発生するのを見たことがあります。通常、継承されたメソッドを使用します。

それが問題である場合は、回避策としてリフレクションを自分で使用できます。

<cfscript>
    emptyArray = [];
    method = RequestToken.getClass().getMethod("getTokenSecret", emptyArray);
    result = method.invoke( RequestToken, emptyArray);
</cfscript>
于 2013-06-24T21:06:24.170 に答える