我正在GAE/J上使用Twitter4J撰寫Twitter網絡應用程序。Google App Engine中的HttpSession問題/ J
我在會話中保存Twitter和請求令牌對象,以便在回撥後使用。
我有兩個servlet。 IndexServlet設置會話和HomeServlet從會話中獲取(通過twitter oAuth回呼)。
如果我在兩個servlet中註釋掉會話處理行,那麼回調函數可以正常工作。
請提出任何解決方法。我在這裏分享我的代碼。
IndexServlet.java
Twitter twitter = new Twitter();
twitter.setOAuthConsumer("<masked>", "<masked>");
RequestToken requestToken = null;
try {
requestToken = twitter.getOAuthRequestToken();
log.info("OAuth token has been taken");
} catch (TwitterException e) {
log.warning(e.toString());
}
HttpSession session = request.getSession();
if (session.getAttribute("twitter")==null){
session.setAttribute("twitter", twitter);
out.println("-----------------------------> session is set");
}
if (session.getAttribute("token")==null){
session.setAttribute("token", requestToken);
out.println("-----------------------------> session is set");
}
String authUrl = requestToken.getAuthorizationURL();
HomeServlet.java
HttpSession session = request.getSession();
twitter = (Twitter)session.getAttribute("twitter");
r = (RequestToken)session.getAttribute("token");
twitter.setOAuthAccessToken(r.getAccessToken());
twitter.updateStatus("Hello World!");
異常
javax.servlet.ServletException: java.lang.ArrayStoreException: [Ljava.lang.String;
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:239)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle(Server.java:313)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:830)
at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:139)
at com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:235)
at com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:4950)
at com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:4948)
at com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java:24)
at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:359)
at com.google.net.rpc.impl.Server$2.run(Server.java:823)
at com.google.tracing.LocalTraceSpanRunnable.run(LocalTraceSpanRunnable.java:56)
是的,我忘了提,但我已經在appengin XML文件中啓用它。 – 2009-09-23 06:44:51