我正在尝试在Java web应用程序中使用amazon AWS,在apache tomcat中运行。当我运行我的应用程序时,它失败了,
java.lang.InstantiationError: com.amazonaws.handlers.b
com.amazonaws.services.s3.AmazonS3Client.<init>(Unknown Source)
com.amazonaws.services.s3.AmazonS3Client.<init>(Unknown Source)
org.test.msync.photoweb.PhotoWebServlet.processRequest(PhotoWebServlet.java:47)
org.test.msync.photoweb.PhotoWebServlet.doGet(PhotoWebServlet.java:104)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
任何想法?
查看AmazonS3Client的代码,似乎是在尝试加载一个名为“request.handlers”的资源,这个资源在SDK jar中不存在......我在其他地方找不到任何引用。
编辑:更正,request.handlers在JAR中,但S3下的版本为空。不知道“b”来自哪里。
编辑:删除tomcat标签,因为我尝试使用相同结果的glassfish。请注意,它确实可以在java SE环境中使用。
答案 0 :(得分:-1)
它在java se环境中工作的事实应该告诉我们这是一个类路径问题。意味着错误来自类路径上缺少的类,可能是名为b的类。你是如何部署tomcat的?你是如何在java se中运行该版本的?通过日食?你是否也通过日食运行tomcat?我猜你在tomcat类路径上缺少一些jar文件。将缺少的jar文件放在tomcat运行应用程序的文件夹中,在WEB-INF / lib下,应该解决这个问题。这个文件夹的位置取决于您的设置。
如果这没有用,那么请提供有关tomcat执行和java se的设置的更多信息:)
答案 1 :(得分:-1)
我在Context.xml中关闭了“antiLockingJARs”,问题就消失了。
如果为true,则Tomcat类加载器将为 采取额外措施避免JAR文件 访问资源时锁定 通过URL在JAR内部。这将 影响应用程序的启动时间, 但可能证明是有用的 平台或配置文件 锁定可能发生。如果没有指定, 默认值为false。
我无法解释为什么AWS jar有这个设置的问题。默认情况下,当我通过netbeans(6.9.1)创建一个新的Web应用程序项目时,它被设置为true。