[appengine-java] Google Voice + App Engine (Java)
Hello All, I tried using google voice within App Engine and it fails to execute because of the custom Security Manager that App Engine uses. From the stack trace, it looks like it is failing during the Http Connection it needs to make to send SMS. My goal is to use SMS feature within my application. I tried running the same code outside of App Engine runtime, using just my JDK as a console app and it works fine. The restriction is imposed by App Engine. Is there any way to get around it or Google Voice is a no no within App Engine. I would assume that Google Voice is a trusted code since its part of google APIs. Any pointers will really help me...Thanks. Sinu Here is the code - try { log.info(going to log in); Voice voice = new Voice(email, password); log.info(logged in); voice.sendSMS(phonenum, message); log.info(sms sent); return true; } catch(Exception e) { e.printStackTrace(); return false; } - Here is the stack trace.. - going to log in https://www.google.com/accounts/ClientLogin - OK Logged in to Google - Auth token received java.security.AccessControlException: access denied (java.lang.RuntimePermission setFactory) at java.security.AccessControlContext.checkPermission(AccessControlContext.java: 323) at java.security.AccessController.checkPermission(AccessController.java: 546) at java.lang.SecurityManager.checkPermission(SecurityManager.java: 532) at com.google.appengine.tools.development.DevAppServerFactory $CustomSecurityManager.checkPermission(DevAppServerFactory.java:166) at java.lang.SecurityManager.checkSetFactory(SecurityManager.java: 1612) at java.net.HttpURLConnection.setFollowRedirects(HttpURLConnection.java: 249) at com.techventus.server.voice.Voice.get(Voice.java:1144) at com.techventus.server.voice.Voice.getGeneral(Voice.java:361) at com.techventus.server.voice.Voice.init(Voice.java:262) at com.techventus.server.voice.Voice.init(Voice.java:211) at com.sinusekhar.cloudapps.zumba.dao.MobileDAO.sendSMS(MobileDAO.java: 15) at org.apache.jsp.zumba.jsp.play_jsp._jspService(play_jsp.java:64) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java: 377) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java: 313) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) at com.google.appengine.tools.development.PrivilegedJspServlet.access $101(PrivilegedJspServlet.java:23) at com.google.appengine.tools.development.PrivilegedJspServlet $2.run(PrivilegedJspServlet.java:59) at java.security.AccessController.doPrivileged(Native Method) at com.google.appengine.tools.development.PrivilegedJspServlet.service(PrivilegedJspServlet.java: 57) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java: 511) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1166) at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java: 58) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java: 43) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java: 122) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java: 388) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java: 216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java: 182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java: 765) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java: 418) at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java: 70) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java: 152) at
Re: [appengine-java] Google Voice + App Engine (Java)
I think your lib uses not whitelisted java API or blocked java API java.security.AccessControlException: access denied (java.lang.RuntimePermission setFactory) Following your stacktrace the problem comes from java.net.HttpURLConnection.setFollowRedirect The method is called by com.techventus.server.voice.Voice.get(Voice.java:1144) I searched using Google... is this your lib? http://code.google.com/p/google-voice-java ? If yes, download the latest source code and compile it. The latest version of Voice.java does not contain the call to java.net.HttpURLConnection.setFollowRedirect. It was replaced some revisions ago. http://code.google.com/p/google-voice-java/source/diff?spec=svn137old=115r=135format=sidepath=/trunk/src/com/techventus/server/voice/Voice.java http://code.google.com/p/google-voice-java/source/browse/trunk/src/com/techventus/server/voice/Voice.java The jar in the download area was not updated. So you need to download the source code and compile it by yourself. Fabrizio On Wed, Feb 2, 2011 at 5:34 PM, lovegoogle sinusek...@gmail.com wrote: Hello All, I tried using google voice within App Engine and it fails to execute because of the custom Security Manager that App Engine uses. From the stack trace, it looks like it is failing during the Http Connection it needs to make to send SMS. My goal is to use SMS feature within my application. I tried running the same code outside of App Engine runtime, using just my JDK as a console app and it works fine. The restriction is imposed by App Engine. Is there any way to get around it or Google Voice is a no no within App Engine. I would assume that Google Voice is a trusted code since its part of google APIs. Any pointers will really help me...Thanks. Sinu Here is the code - try { log.info(going to log in); Voice voice = new Voice(email, password); log.info(logged in); voice.sendSMS(phonenum, message); log.info(sms sent); return true; } catch(Exception e) { e.printStackTrace(); return false; } - Here is the stack trace.. - going to log in https://www.google.com/accounts/ClientLogin - OK Logged in to Google - Auth token received java.security.AccessControlException: access denied (java.lang.RuntimePermission setFactory) at java.security.AccessControlContext.checkPermission(AccessControlContext.java: 323) at java.security.AccessController.checkPermission(AccessController.java: 546) at java.lang.SecurityManager.checkPermission(SecurityManager.java: 532) at com.google.appengine.tools.development.DevAppServerFactory $CustomSecurityManager.checkPermission(DevAppServerFactory.java:166) at java.lang.SecurityManager.checkSetFactory(SecurityManager.java: 1612) at java.net.HttpURLConnection.setFollowRedirects(HttpURLConnection.java: 249) at com.techventus.server.voice.Voice.get(Voice.java:1144) at com.techventus.server.voice.Voice.getGeneral(Voice.java:361) at com.techventus.server.voice.Voice.init(Voice.java:262) at com.techventus.server.voice.Voice.init(Voice.java:211) at com.sinusekhar.cloudapps.zumba.dao.MobileDAO.sendSMS(MobileDAO.java: 15) at org.apache.jsp.zumba.jsp.play_jsp._jspService(play_jsp.java:64) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java: 377) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java: 313) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) at com.google.appengine.tools.development.PrivilegedJspServlet.access $101(PrivilegedJspServlet.java:23) at com.google.appengine.tools.development.PrivilegedJspServlet $2.run(PrivilegedJspServlet.java:59) at java.security.AccessController.doPrivileged(Native Method) at com.google.appengine.tools.development.PrivilegedJspServlet.service(PrivilegedJspServlet.java: 57) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java: 511) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1166) at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java: 58) at