简体   繁体   English

Tomcat 7-Google Oauth2-ClassNotFoundException-Java-Eclipse

[英]Tomcat 7 - Google Oauth2 - ClassNotFoundException - Java - Eclipse

I am trying to get offline access to my google calendar. 我试图离线访问我的Google日历。 This question has been answered before here: Offline Access to google calendar using java but for some reason I always get an ClassNotFoundException, when trying to authenticate. 在此之前,已经回答了这个问题: 使用Java脱机访问Google日历,但是由于某种原因,在尝试进行身份验证时,我总是收到ClassNotFoundException。

I am running the application locally on an Apache Tomcat 7 Server and use Eclipse Mars. 我在Apache Tomcat 7服务器上本地运行该应用程序,并使用Eclipse Mars。 I installed the following APIs via the Google API ManagerPlugin: 我通过Google API ManagerPlugin安装了以下API:

  • Google OAuth2 API v2 Google OAuth2 API v2
  • (Google OAuth API v1) The plugin tells me, that v2 is preferred (Google OAuth API v1)插件告诉我,首选v2
  • Google Calendar API Google Calendar API

Usually I copy external jar-files to the WEB-INF/lib folder and to the Tomcat/lib folder but I guess the plugin does this for me right? 通常,我将外部jar文件复制到WEB-INF / lib文件夹和Tomcat / lib文件夹,但是我想插件对我有用吗? All API's are listed on my JavaBuildPath. 我的JavaBuildPath上列出了所有API。

If I run the same functions as Java Application it works, so something must be wrong with the Tomcat settings. 如果我运行的功能与Java应用程序相同,那么它可以工作,因此Tomcat设置一定有问题。

Did anyone have such an issue before and can help me? 以前有没有人遇到过这样的问题并且可以帮助我? Thanks in advance. 提前致谢。

Servlet (Credentials removed): Servlet(已删除凭据):

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    response.getWriter().append("Served at: ").append(request.getContextPath());
    this.authenticate(request, response);
}


 public void authenticate(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

        String client_id                = "";
        String redirect_uri             = "";
        String scope                    = "https://www.googleapis.com/auth/calendar";
        String client_secret            = "";
        List <String> scopes;
        HttpTransport transport         = new NetHttpTransport();
        JsonFactory jsonFactory         = new JacksonFactory();

        scopes = new LinkedList<String>();
        scopes.add(scope);
        GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(transport, jsonFactory, client_id, client_secret, scopes).build();
        GoogleAuthorizationCodeRequestUrl url = flow.newAuthorizationUrl();
        url.setRedirectUri(redirect_uri);
        url.setApprovalPrompt("force");
        url.setAccessType("offline");
        String authorize_url = url.build();
        response.sendRedirect(authorize_url);
    }

Console: 安慰:

java.lang.ClassNotFoundException: com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow$Builder
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1854)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1703)
at net.meetme.CalendarServlet.authenticate(CalendarServlet.java:88)
at net.meetme.CalendarServlet.doGet(CalendarServlet.java:42)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)

Thank you for your fast replies. 感谢您的快速答复。 I deployed all the jar-files to my WEB-INF/lib. 我将所有的jar文件都部署到了我的WEB-INF / lib。

The mistake was that I also added all the jar-files to the Java Build Path. 错误是我也将所有jar文件添加到Java Build Path。 You just need to remove these jar- files from the build path and it works. 您只需要从构建路径中删除这些jar文件即可。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM