【发布时间】:2011-12-06 10:07:15
【问题描述】:
我正在使用 ColdFusion 9.0.1 和 twitter4j 库的最新(当前日期)稳定版本 - twitter4j-core-2.2.4。我正在尝试创建允许用户使用他们的 Twitter 帐户在我们的网站上登录或注册的功能。 我能够创建授权部分:用户单击我们网站上的链接,系统将他重定向到 Twitter 页面。在此页面上,他能够“授权”我们的应用程序。在该系统使用 callBackURL 将他重定向回来之后。 但我对下一步有问题。当我尝试 setOAuthAccessToken 并尝试使用以下部分代码实例化 AccessToken 对象时:
accessToken = createObject( 'java', 'twitter4j.auth.AccessToken' ).init( 'myStoredRequestToken', 'myStoredRequestTokenSecret' );
但我有以下错误:
实例化 Java 对象时发生异常。班上 不能是接口或抽象类。错误:''。
有什么想法吗?
更新:
stacktrace的开始部分:
'coldfusion.runtime.java.JavaObjectInstantiationException:对象实例化异常。在coldfusion.runtime.java.JavaProxy.CreateObject(JavaProxy.java:171) 在coldfusion.runtime.java.JavaProxy.invoke(JavaProxy.java:80) 在coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2360) 在cftwitter2ecfc2084917956$funcGETUSERCREDENTIALS.runFunction(C:\inetpub\wwwroot_test\twPlayGrnd_com\twitter.cfc:36) 在coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472) 在coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java :368) 在coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55) 在...
...切到这里,不确定这是否重要...
最后一部分是
cfapplication2ecfc665259542$funcONREQUEST.runFunction(C:\inetpub\wwwroot_test\twPlayGrnd\application.cfc:55) ... 55 更多原因:java.lang.IllegalArgumentException:访问令牌格式无效。在 twitter4j.auth.AccessToken.(AccessToken.java:50) ... 60 更多'
我看到了有关错误格式的消息,但根据 http://twitter4j.org 的文档,它应该接受两个 agruments(带键的字符串)。我错了吗?
更新 2 *请找出答案 - 很抱歉让您对我的第一篇文章和示例感到困惑...当然,我使用了 myStoredRequestToken、myStoredRequestTokenSecret,而不是消费者密钥/秘密 * *我为此功能使用了相关的代码部分*
application.cfc (“onApplicationStart”函数,在应用程序启动时实例化组件)
<cffunction name="onApplicationStart" access="public" returntype="boolean" output="false">
...
<cfset application.com.twitterInstance = server.javaloader.create("twitter4j.TwitterFactory").getInstance() />
<cfset application.com.twitter = createObject("component","_com.twitter").init() /> *<!--- cfc component which will be listed below --->*
...
</cffunction>
twitter.cfc (对应的coldfusion组件)
<cfcomponent displayname="twitter" output="false">
<cffunction name="init" access="public" output="false">
<cfreturn this>
</cffunction>
<cffunction name="authorizeTwitter" access="public" output="false">
<cfargument name="callBackURL" type="string" required="false" default="#request.twtCallBackURL#" />
<cfset var requestToken = "" />
<cfset application.com.twitterInstance.setOAuthConsumer(request.twtConsumerKey,request.twtConsumerSecret) />
<cfset requestToken = application.com.twitterInstance.getOAuthRequestToken(arguments.callBackURL) />
<cflock scope="session" type="exclusive" timeout="10">
<cfset session.oAuthRequestToken = requestToken.getToken()>
<cfset session.oAuthRequestTokenSecret = requestToken.getTokenSecret()>
</cflock>
<cflocation url="#vLocal.requestToken.getAuthorizationURL()#" addtoken="No" />
</cffunction>
<cffunction name="getUserCredentials" access="public" output="true">
<cfset var vLocal = {} />
<cfset vLocal.accessToken = "" />
<cfset vLocal.userData = "" />
<cfset vLocal.requestToken = "" />
<cfset vLocal.accessToken = server.javaloader.create("twitter4j.auth.AccessToken").init(session.oAuthRequestToken,session.oAuthRequestTokenSecret)>
<cfset application.com.twitterInstance.setOAuthAccessToken(vLocal.accessToken) />
<cfset vLocal.userData = application.com.twitterInstance.verifyCredentials() />
<cfdump var="#vLocal.userData#" label="User Credentials">
</cffunction>
第一个功能是第一步 - 向 twitter 请求自动化页面(用户可以在其中自动化或拒绝应用程序)。回调 URL 运行调用第二个函数的页面,我只有在这一步有问题(生成 accessToken 的行)。
如果我使用 createObject 函数而不是 javaloader,我会得到相同的结果。
*所以,我的主要问题还是一样 - 获取用户唯一的访问令牌?请指出我,我做错了什么?唯一用户的 accessToken 生成的正确格式是什么?我应该在那里放置 oauth_verifier 参数吗?如果有,怎么做?*
【问题讨论】:
-
这确实很奇怪。该参数签名与该类的构造函数之一匹配,它不是接口。也许尝试在参数上使用 JavaCast 以确保它们以 java.lang.String 的形式通过。否则我会画一个空白。
-
发布堆栈跟踪。它包含真实的(即更详细的)错误消息。
-
@Leigh - 谢谢,完成。我应该发布整个堆栈跟踪吗?剪切部分只包含一个一个运行的函数和模板。
-
@JasonDean 感谢您的想法,刚刚测试了以下内容:
accessToken = createObject( "java", "twitter4j.auth.AccessToken" ).init(javaCast("string",session.oAuthRequestToken),javaCast("string",session.oAuthRequestTokenSecret));但不幸的是有同样的错误:( -
它确实接受两个字符串,是的。但无论如何从错误中听起来它不喜欢钥匙。你确定它们是有效的吗?
标签: coldfusion twitter4j