【问题标题】:Creating Domain with AWS SimpleDB from Java Servlet从 Java Servlet 使用 AWS SimpleDB 创建域
【发布时间】:2012-02-14 17:10:05
【问题描述】:

我是一名大学生,正在从事一个研究项目,该项目涉及将 Web 应用程序迁移到 Amazon 的云。上个学期我一直在使用 servlet,并且能够使用运行在 Tomcat 中的 java servlet 来获得应用程序的大部分功能。

我现在正在尝试集成 Amazon Web Services,例如 SimpleDB 和电子邮件服务。我使用 Eclipse Java EE for Web Developers Indigo IDE 进行开发。我安装了 AWS 插件,并且能够运行 Amazon 提供的示例代码以成功调用 SDB 和 SES。

但是,当我尝试直接或通过单独的类从 servlet 调用 simpleDB 之类的服务时,我收到以下错误:

HTTP 状态 500 -

输入异常报告

消息

描述服务器遇到一个内部错误()阻止 它无法满足此请求。

异常

javax.servlet.ServletException:实例化 servlet 类时出错 org.comtor.cloud.api.APIservlet org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) java.lang.Thread.run(Thread.java:680) 根本原因

java.lang.NoClassDefFoundError: com/amazonaws/auth/AWSCredentials java.lang.Class.getDeclaredConstructors0(本机方法) java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) java.lang.Class.getConstructor0(Class.java:2699) java.lang.Class.newInstance0(Class.java:326) java.lang.Class.newInstance(Class.java:308) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) java.lang.Thread.run(Thread.java:680) 根本原因

java.lang.ClassNotFoundException: com.amazonaws.auth.AWSCredentials org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1688) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1533) java.lang.Class.getDeclaredConstructors0(本机方法) java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) java.lang.Class.getConstructor0(Class.java:2699) java.lang.Class.newInstance0(Class.java:326) java.lang.Class.newInstance(Class.java:308) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) java.lang.Thread.run(Thread.java:680) note 的完整堆栈跟踪 根本原因可在 Apache Tomcat/7.0.23 日志中找到。

Apache Tomcat/7.0.23

我的代码如下所示:

package org.comtor.cloud.api;

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;

import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.simpledb.AmazonSimpleDBClient;
import com.amazonaws.services.simpledb.model.CreateDomainRequest;

import java.io.IOException;

@SuppressWarnings("serial")
public class APIservlet extends HttpServlet {
  public void doGet (HttpServletRequest request,
                     HttpServletResponse response)
    throws ServletException, IOException
  {
      doPost(request, response);
  }
  public void doPost(HttpServletRequest request,
          HttpServletResponse response)
                  throws ServletException, IOException {
        PrintWriter out = response.getWriter();

        // AWS Credentials
        String sAccessKey = "myAccessKey";
        String sSecretKey = "mySecretKey";

        // Authenticate AWS account
        BasicAWSCredentials oAWSCredentials = new BasicAWSCredentials(sAccessKey, sSecretKey);
        AmazonSimpleDBClient awsSimpleDBClient = new AmazonSimpleDBClient(oAWSCredentials);

        // Try to access simpleDB
        try 
        {
            System.out.println("Connecting to Simple Database");
            // Create a domain
            String myDomain = "MyStore";
            System.out.println("Creating domain called " + myDomain + ".\n");
            awsSimpleDBClient.createDomain(new CreateDomainRequest(myDomain));
            System.out.println("Connection Made");

        } 
        // Print Error Stack Trace
        catch (NoSuchAlgorithmException e) 
        {
            e.printStackTrace();
        }

        // Close PrintWriter
        out.close();
  }
}

** 从代码中删除访问和密钥 **

SES 也是如此。我也尝试过使用像 'typica' 这样的 java 库,但仍然收到 NoClassDef 错误。我在库文件夹下的构建路径中有 AWS 库,并且 jar 包/类似乎在那里。所以我不确定为什么我无法使用这些类与我的 servlet 中的 simpleDB 进行交互。

对于此事的任何帮助,我将不胜感激。我相信我并不完全了解如何从 Web 环境调用 AWS SDB。

谢谢。

【问题讨论】:

    标签: java tomcat servlets amazon-web-services amazon-simpledb


    【解决方案1】:

    java.lang.ClassNotFoundException: com.amazonaws.auth.AWSCredentials 表示此类不在您的类路径中。确保包含 com.amazonaws.auth.AWSCredentials 类的 jar 包含在您的 Web 应用程序的 WEB-INF/lib 文件夹中。

    【讨论】:

    • 谢谢你,我不知道为什么我的图书馆没有一个结转。他们过去在我使用 Eclipse 时使用过。我必须手动将 .war 上传到我的本地 Tomcat 安装,并将大量库放在 WEB-INF/lib 文件夹中。从 AWS jar 到 Apache HTTPcore/client jar,一切都丢失了。我将查看我的构建路径设置,看看为什么这些库没有保留。不管我确实让它工作了,谢谢。
    猜你喜欢
    • 2018-06-11
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多