【问题标题】:Base64DecoderException error google app engine [closed]Base64DecoderException错误谷歌应用引擎[关闭]
【发布时间】:2011-07-02 11:30:59
【问题描述】:

您好,我在 Google 应用引擎中收到此错误:

HTTP 错误 500

访问 /uploadtest 时出现问题。原因:

com/google/gdata/util/common/util/Base64DecoderException

原因:

java.lang.NoClassDefFoundError: com/google/gdata/util/common/util/Base64DecoderException
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.newInstance0(Class.java:326)
at java.lang.Class.newInstance(Class.java:308)
at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428)
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
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 com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
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 com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:351)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

原因:java.lang.ClassNotFoundException:com.google.gdata.util.common.util.Base64DecoderException 在 java.net.URLClassLoader$1.run(URLClassLoader.java:202) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:190) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:306) 在 com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:176) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... 37 更多 原因:

java.lang.ClassNotFoundException: com.google.gdata.util.common.util.Base64DecoderException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:176)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
    at java.lang.Class.getConstructor0(Class.java:2699)
    at java.lang.Class.newInstance0(Class.java:326)
    at java.lang.Class.newInstance(Class.java:308)
    at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
    at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428)
    at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    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 com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
    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 com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:351)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Powered by Jetty://

这是我在 UploadTest.java 中的代码:

package sharepro.java.todo;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.spec.EncodedKeySpec;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;


import java.io.IOException;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


//import com.google.appengine.repackaged.com.google.common.util.Base64DecoderException;
//import com.google.appengine.repackaged.com.google.common.util.Base64;
import com.google.gdata.client.authn.oauth.GoogleOAuthHelper;
import com.google.gdata.client.authn.oauth.GoogleOAuthParameters;
import com.google.gdata.client.authn.oauth.OAuthRsaSha1Signer;
import com.google.gdata.util.common.util.Base64;
import com.google.gdata.util.common.util.Base64DecoderException;

@SuppressWarnings("serial")
public class Uploadtest extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse resp)
     throws IOException {
     String CONSUMER_KEY = "shareject.appspot.com";

     resp.setContentType("text/html");
     resp.getWriter().println("Hello 1, we will use the following consumer key to obtain a OAuth Access Token:<br>" + CONSUMER_KEY);

     GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
     oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
     oauthParameters.setScope("https://docs.google.com/feeds/");
     oauthParameters.setOAuthCallback("http://shareject.appspot.com/UpgradeToken");
     //Update the above URL to match the domain name for your App Engine application
     System.out.print("sundi ");
     PrivateKey privKey = null;
    try {
        privKey = getPrivateKey("WEB-INF/rsakey.pk8");
    } catch (com.google.gdata.util.common.util.Base64DecoderException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

     //resp.getWriter().println(privKey.toString());

     GoogleOAuthHelper oauthHelper = null;
     try {

     oauthHelper = new GoogleOAuthHelper(new OAuthRsaSha1Signer(privKey));
     oauthHelper.getUnauthorizedRequestToken(oauthParameters);
     }
     catch (Exception e){
     resp.getWriter().println(e.toString());
     }

     String approvalPageUrl = oauthHelper.createUserAuthorizationUrl(oauthParameters);
     resp.getWriter().println("<br><br><br>");
     resp.getWriter().println("<a href=\"" + approvalPageUrl + "\">Retrieve an OAuth Token</a>");



     /*resp.getWriter().println("<br><br><br>");
     resp.getWriter().println("<a href=\"" + CONSUMER_KEY+ "\">Retrieve an OAuth Token</a>");*/


    }

    private PrivateKey getPrivateKey(String privKeyFilename) throws com.google.gdata.util.common.util.Base64DecoderException {
        // TODO Auto-generated method stub
          FileInputStream keyfis = null;
          try {
          keyfis = new FileInputStream(privKeyFilename);
          } catch (FileNotFoundException e2) {
          e2.printStackTrace();
          }
          byte[] encKey = null;
          try {
          encKey = new byte[keyfis.available()];
          } catch (IOException e3) {
          e3.printStackTrace();
          }
          try {
          keyfis.read(encKey);
          } catch (IOException e2) {
          e2.printStackTrace();
          }
          try {
          keyfis.close();
          } catch (IOException e2) {
          e2.printStackTrace();
          }

          PrivateKey privKey = null;
          KeyFactory keyFactory = null;

          String str = new String(encKey);


          String BEGIN = "-----BEGIN PRIVATE KEY-----";
          String END = "-----END PRIVATE KEY-----";

          if (str.contains(BEGIN) && str.contains(END)) {
              str = str.substring(BEGIN.length(), str.lastIndexOf(END));
          }


          KeyFactory fac = null;
          try {
          fac = KeyFactory.getInstance("RSA");
          } catch (NoSuchAlgorithmException e) {
          e.printStackTrace();
          }
          EncodedKeySpec privKeySpec = null;

          System.out.print("sundi debug 99");
         // privKeySpec = new PKCS8EncodedKeySpec(com.google.gdata.util.common.util.Base64.decode(str));
          try {
            privKeySpec = new PKCS8EncodedKeySpec(Base64.decode(str));
        } catch (Base64DecoderException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
          try {
          privKey = fac.generatePrivate(privKeySpec);
          } catch (InvalidKeySpecException e) {
          e.printStackTrace();
          } 

          return privKey;

    }

    public void doPost(HttpServletRequest req, HttpServletResponse resp){



    }




}

请帮我解决同样的问题...谢谢 Sundi

【问题讨论】:

  • 伙计,如果您要求其他人的时间,请至少尽量让潜在的回答者更容易。在你问之前至少谷歌一次。提示:谷歌搜索“Caused by”之后的内容
  • 我到处都用谷歌搜索过......没有可能的答案......我也已经在所有谷歌群组中发布......仍在等待有人回复......这个错误非常罕见..我已经包含了包(在导入中),但之后也发现了错误......
  • 它说类文件丢失,但我已经包含了包含这个类文件的 jar 文件(import com.google.gdata.util.common.util.Base64; import com.google.gdata.util. common.util.Base64DecoderException;)......我希望得到一些简单的建议......无论如何你可以谷歌一次并且没有有效的答案......如果你找到一些我会很高兴..再也不会带着希望在这里发布棘手的问题,当然简单的问题已经在这里了.....干杯!!!

标签: java google-app-engine


【解决方案1】:

好的。我可能有点苛刻,但是每当您在任何论坛上发布问题时,请尽量使其易于阅读。发布整个堆栈跟踪和代码是可以的,但您应该附上快速摘要以及到目前为止您尝试过的内容。我敢打赌,如果你这样做,你会得到更好的回应(注意你得到的反对票和接近票。显然,至少有几个人有同样的感觉)。

无论如何,您没有通过谷歌找到解决方案的原因可能是因为您专注于Base64DecoderException。如果您搜索过“ClassNotFoundException jetty”,您可能已经找到了解决方案。

“ClassNotFoundException”是什么意思?这意味着,The searched-for class definition existed when the currently executing class was compiled, but the definition can no longer be found

正如你所说你正确地导入了这个类,但坦率地说,当你启动码头时,你并没有将这个类的 jar 文件提供给 JVM。换句话说,确保在构建战争时包含此类的 jar。

如果你觉得超级懒惰,想要这个错误立即消失,你可以下载 jar here 并将它放在 $jetty.home/lib 下。然而,这通常被认为是一种不好的做法。解决此问题的正确/可接受的方法是在 war 文件中包含必要的 jar。

【讨论】:

  • cool bro..You rock..我已将它包含在我的库文件夹中,但没有包含在库中(不知何故忘记了我的坏事,这么多事情要做,所以有点受阻)...现在它正在发挥魅力..非常感谢:)
猜你喜欢
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多