Twitter4j:java.lang.IllegalStateException:すでに利用可能なアクセストークン -- java フィールド と jakarta-ee フィールド と servlets フィールド と twitter フィールド と twitter4j フィールド 関連 問題

Twitter4j: java.lang.IllegalStateException: Access token already available












1
vote

問題

日本語

JSPとサーバーを使ってTwitterクライアントを作成するためにTwitter4jを使用しています。私がアクセストークンを要求しているとき、私は次の例外を得ています:

<事前> <コード> java.lang.IllegalStateException: Access token already available.

その後、スタックオーバーフローを検索しました。私はこの投稿著者の解決策で書かれています:

私はConfiguration Builderによってハードされたアクセストークンを設定していました。

しかし彼らはそれをどのように固定したかについては言及していません。また、アクセストークンにもハードコードされていません。これが私のコード

です <事前> <コード> StringBuffer callbackURL = request.getRequestURL(); System.out.println("callbackurl is" + callbackURL); int index = callbackURL.lastIndexOf("/"); callbackURL.replace(index, callbackURL.length(), "").append("/callback"); ConfigurationBuilder cb = new ConfigurationBuilder(); cb.setDebugEnabled(true) .setOAuthConsumerKey(getServletContext().getInitParameter("consumerKey")) .setOAuthConsumerSecret(getServletContext().getInitParameter("consumerSecret")); TwitterFactory tf = new TwitterFactory(cb.build()); Twitter twitter = tf.getInstance(); System.out.println("Twitter is" + twitter); request.getSession().setAttribute("twitter", twitter); RequestToken requestToken = twitter.getOAuthRequestToken(callbackURL.toString()); System.out.println("request token is " + requestToken); request.getSession().setAttribute("requestToken", requestToken); System.out.println(requestToken.getAuthenticationURL()); response.sendRedirect(requestToken.getAuthenticationURL());

これはstacktrace

です <事前> <コード> HTTP ERROR 500 Problem accessing /Demo1. Reason: Access token already available. Caused by: java.lang.IllegalStateException: Access token already available. at twitter4j.auth.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:113) at twitter4j.auth.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:104) at twitter4j.TwitterBaseImpl.getOAuthRequestToken(TwitterBaseImpl.java:281) at com.example.Demo1.doGet(Demo1.java:69) at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:565) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:479) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:521) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1031) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:965) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111) at org.eclipse.jetty.server.Server.handle(Server.java:349) at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:449) at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:910) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:634) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:230) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:76) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:609) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:45) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534) at java.lang.Thread.run(Thread.java:679)
英語

I am using Twitter4j for creating Twitter client with JSP and servets. When I am requesting for access token I am getting the following exception:

java.lang.IllegalStateException: Access token already available. 

Then I searched on Stack Overflow. I got this post where in solution the author has written:

I was setting an Access Token hard coded by the Configuration Builder.

But they haven't mentioned how they fixed it.I am also not hardcoding access token. Here is my code

 StringBuffer callbackURL = request.getRequestURL();  System.out.println("callbackurl is" + callbackURL);   int index = callbackURL.lastIndexOf("/");  callbackURL.replace(index, callbackURL.length(), "").append("/callback");    ConfigurationBuilder cb = new ConfigurationBuilder();  cb.setDebugEnabled(true)      .setOAuthConsumerKey(getServletContext().getInitParameter("consumerKey"))      .setOAuthConsumerSecret(getServletContext().getInitParameter("consumerSecret"));   TwitterFactory tf = new TwitterFactory(cb.build());  Twitter twitter = tf.getInstance();   System.out.println("Twitter is" + twitter);   request.getSession().setAttribute("twitter", twitter);   RequestToken requestToken = twitter.getOAuthRequestToken(callbackURL.toString());  System.out.println("request token is " + requestToken);   request.getSession().setAttribute("requestToken", requestToken);   System.out.println(requestToken.getAuthenticationURL());   response.sendRedirect(requestToken.getAuthenticationURL()); 

This is the stacktrace

HTTP ERROR 500  Problem accessing /Demo1. Reason:      Access token already available.  Caused by:  java.lang.IllegalStateException: Access token already available.     at twitter4j.auth.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:113)     at twitter4j.auth.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:104)     at twitter4j.TwitterBaseImpl.getOAuthRequestToken(TwitterBaseImpl.java:281)     at com.example.Demo1.doGet(Demo1.java:69)     at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)     at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)     at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:565)     at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:479)     at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)     at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:521)     at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)     at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1031)     at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406)     at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186)     at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:965)     at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)     at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)     at org.eclipse.jetty.server.Server.handle(Server.java:349)     at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:449)     at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:910)     at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:634)     at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:230)     at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:76)     at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:609)     at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:45)     at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)     at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534)     at java.lang.Thread.run(Thread.java:679) 
</div
              
     
     

回答リスト

0
 
vote

最近も同様の問題を満たし、ソースコードラインを1行ずつデバッグします。私はついにその設定は準備ができている前に複数のソースを取ります。 ConsumerKey、ConsumereCretなどのプロパティを設定するときは、これらの行から設定されます。 <事前> <コード> ConfigurationBuilder cb = new ConfigurationBuilder(); cb.setDebugEnabled(true) .setOAuthConsumerKey(getServletContext().getInitParameter("consumerKey")) .setOAuthConsumerSecret(getServletContext().getInitParameter("consumerSecret"));

さらに、Twitter4jはクラスパスをスキャンし、関連キー値ペアを定義するプロパティファイルを見つけます。チュートリアルの指示に従ってこのファイルを作成し、これを削除するのを忘れます。しかしチュートリアルでは、IllegalStatusExceptionの原因であった、生成されたAccessTokenとAccessSecretを使用してAPIにアクセスする方法を説明しました。

この問題を見つけた後、プロパティファイル内のAccessTokenとAccessTokenSecretキーを削除しました。それから問題解決しました。

これがあなたを助けることができることを願っています。

 

I met similar problem recently and I debug the source code line by line. I finally found that the configuration would take multiple sources before its ready. When setting the properties such as consumerKey, consumerSecret, it would set from these lines

ConfigurationBuilder cb = new ConfigurationBuilder();  cb.setDebugEnabled(true)      .setOAuthConsumerKey(getServletContext().getInitParameter("consumerKey"))      .setOAuthConsumerSecret(getServletContext().getInitParameter("consumerSecret")); 

In addition, twitter4j will scan the classpath and find the property files which defines the related key value pairs. I created this file by following the instruction of the tutorial and I forget to delete this. But in the tutorial, it just told you how to get to access the api with the generated accessToken and accessSecret, which were the cause of the IllegalStatusException.

After I found this issue, and I deleted the accessToken and accessTokenSecret keys in the property file. Then problem solved.

Hope this can help you.

</div
 
 
0
 
vote

私は同じ問題を直面しています。これは、アクセストークンがConfiguration Builderですでに利用可能であるためです。そのため、Configuration Builder

のNULLとして設定する必要があります。 <事前> <コード> StringBuffer callbackURL = request.getRequestURL(); System.out.println("callbackurl is" + callbackURL); int index = callbackURL.lastIndexOf("/"); callbackURL.replace(index, callbackURL.length(), "").append("/callback"); ConfigurationBuilder cb = new ConfigurationBuilder(); cb.setDebugEnabled(true).setOAuthConsumerKey((String) "consumerkey") .setOAuthConsumerSecret("consumersecret").setOAuthAccessToken(null) .setOAuthAccessTokenSecret(null) .setOAuthRequestTokenURL("https://api.twitter.com/oauth/request_token") .setOAuthAuthorizationURL("https://api.twitter.com/oauth/authorize") .setOAuthAccessTokenURL("https://api.twitter.com/oauth/access_token"); TwitterFactory tf = new TwitterFactory(cb.build()); Twitter twitter = tf.getInstance(); System.out.println("Twitter is" + twitter); request.getSession().setAttribute("twitter", twitter); RequestToken requestToken = twitter.getOAuthRequestToken(callbackURL.toString()); System.out.println("request token is " + requestToken); request.getSession().setAttribute("requestToken", requestToken); System.out.println(requestToken.getAuthenticationURL()); response.sendRedirect(requestToken.getAuthenticationURL());

このコードでプログラムを正しく実行できます。

 

I have faced same problem, that is because the access token is already available in the configuration builder. so you need to set it as null in configuration builder

StringBuffer callbackURL = request.getRequestURL();  System.out.println("callbackurl is" + callbackURL);   int index = callbackURL.lastIndexOf("/");  callbackURL.replace(index, callbackURL.length(), "").append("/callback");    ConfigurationBuilder cb = new ConfigurationBuilder(); cb.setDebugEnabled(true).setOAuthConsumerKey((String) "consumerkey")             .setOAuthConsumerSecret("consumersecret").setOAuthAccessToken(null)             .setOAuthAccessTokenSecret(null)             .setOAuthRequestTokenURL("https://api.twitter.com/oauth/request_token")             .setOAuthAuthorizationURL("https://api.twitter.com/oauth/authorize")             .setOAuthAccessTokenURL("https://api.twitter.com/oauth/access_token");   TwitterFactory tf = new TwitterFactory(cb.build());  Twitter twitter = tf.getInstance();   System.out.println("Twitter is" + twitter);   request.getSession().setAttribute("twitter", twitter);   RequestToken requestToken = twitter.getOAuthRequestToken(callbackURL.toString());  System.out.println("request token is " + requestToken);   request.getSession().setAttribute("requestToken", requestToken);   System.out.println(requestToken.getAuthenticationURL());   response.sendRedirect(requestToken.getAuthenticationURL()); 

with this code am able to run the program properly.

</div
 
 

関連する質問

2  Twitter 4jとTwitterストリーミングAPIを通して私のフォロワーのすべてのツイートを取得する方法は?  ( How to retrieve all the tweets of my followers through the twitter streaming api ) 
Twitter4Jライブラリで次のコードを使用して、私のフォロワーのすべてのつぶやきを取得します。 <事前> <コード> friendsIDs = TwitterConnectionManager.getTwitter().getFriendsIDs().g...

4  Twitter4jを使用してTwitterからのツイートを取得する  ( Retrieving tweets from twitter using twitter4j ) 
Twitterデータを分析することで竜巻の位置を推測するためのアプリケーションを開発しています。このために、最初にいくつかの手動で注釈付きのつぶやきにニューラルネットワークを訓練する必要があります。私は彼らの中に「竜巻」という言葉を持っている昨年からツイート...

13  要求トークンのAndroid Twitter RetrievereQueStokene 401  ( Android twitter retrieverequesttoken 401 on request token ) 
Twitter OAuthのた​​めの次のサンプルアプリを試しています。 href="http://www.androidsdkforum.com/android-sdk-development/3-oauth-twitter.html" rel="nof...

0  Android - Twittating 4j Proguard Error  ( Android twitter4j proguard error ) 
私のAPKを難読化しようとしている問題を抱えていました - これのような質問。私はその質問に対する受け入れされた答えを適用しました、そして私のAPKはその後建設されました。 しかし、私のアプリケーションを実行すると、最初のスプラッシュ画面が表示される前にクラ...

0  Twitter4jを使ってツイートを表示する方法  ( How to use twitter4j to show tweets ) 
このチュートリアル http:/ /www.javacodegeeks.com/2012/03/twitter-api-on-your-java-application.html とまったく同じことをしました。しかし、私は以下に示すエラーを得ています。私は何か...

3  Android Twitter4j OAuthは3gのときには機能しません  ( Android twitter4j oauth does not works when on 3g ) 
Twitter4jを使ってAndroidアプリを作成しました。 API呼び出しのどれも3Gのときに認証できますが、Wi-Fiのときに完全に機能します。 問題は何ですか? ...

0  レプリのリストを取得します  ( Get list of replys ) 
Twitterの特定のアカウントにツイートを入手するためのTwitter4jを使用しています ` <事前> <コード> try { Twitter twitter = new TwitterFactory().getInstance(); ...

2  Twitter4Jライブラリを使用してツイートを検索するには「近く」を実行する方法  ( How to perform near search for tweets using twitter4j library ) 
「近く」検索クエリを実行しようとしています。 Twitter4jしかし例外を得る。 <事前> <コード> public static void main(String[] args) { Twitter twitter = new TwitterFa...

0  Twitter4j:認証資格情報(https://dev.twitter.com/pages/auth)が見つからないか間違っていた  ( Twitter4j authentication credentials https dev twitter com pages auth were ) 
Twitter4J APIを使用して特定のキーワードを持つツイートを検索するプログラムを作成していますが、認証中にエラーが発生しています。 <事前> <コード> Exception in thread "main" 401:Authentication cr...

0  Twiiter4j GetDirectMessages()はもう機能しませんか?  ( Twiiter4j getdirectmessages does not work anymore ) 
Twitter4J 2.2.5を使用しています(最新の、他のバージョンを試してみました)。そして、直接メッセージを全く機能させることはできません。時に前に機能するのと同じコード。 Twitterが何かを変更したと思います。 私はを使っています Twitte...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有