2012-06-19 43 views
5

Vì vậy, vấn đề tiếp theo của tôi với mã này. Có vẻ như không tìm được phương pháp và đôi mắt của tôi không được đào tạo. Bất kỳ trợ giúp có sẵn về điều này?Amazon Credentials Phương pháp không tìm thấy

package packeging; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.Calendar; 
import java.util.Date; 

import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import com.amazonaws.HttpMethod; 
import com.amazonaws.auth.BasicAWSCredentials; 
import com.amazonaws.services.s3.AmazonS3; 
import com.amazonaws.services.s3.AmazonS3Client; 
import com.amazonaws.auth.BasicAWSCredentials; 
import org.apache.http.*; 
/** 
* Servlet implementation class Hashtastic 
*/ 
@WebServlet("/Hashtastic") 
public class Hashtastic extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
    private final static String BUCKET_NAME = "idlatestingbucket";//http://s3.amazonaws.com/THESISDB/techy.jpg 
    private final static String FILE_NAME = "TestPicture/wallpaper-264411.png"; 
    private final static String ACCESS_KEY = "Fakepass"; 
    private final static String SECRET_KEY = "Fakekey"; 
    /** 
    * Default constructor. 
    */ 
    public Hashtastic() { 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     PrintWriter out = response.getWriter(); 
      Calendar cal = Calendar.getInstance(); 
     cal.add(Calendar.SECOND, 1000); 
     Date expDate = cal.getTime(); 
     out.println(expDate+"\n"); 

     BasicAWSCredentials cre = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY); 
     AmazonS3 s3 = new AmazonS3Client(cre); 
     String url = s3.generatePresignedUrl(BUCKET_NAME, FILE_NAME, expDate, HttpMethod.GET).toString(); 
     out.println(url); 
     out.close(); 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
    } 

} 

Tôi gặp lỗi 500 này. Nó nói rằng nó thiếu một phương pháp. Tôi có jar trong lib và plugin của tôi cho nhật thực.

description The server encountered an internal error() that prevented it from fulfilling this request. 

exception 

javax.servlet.ServletException: Servlet execution threw an exception 


root cause 

java.lang.NoSuchMethodError: org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager: method <init>()V not found 
    com.amazonaws.http.ConnectionManagerFactory.createThreadSafeClientConnManager(ConnectionManagerFactory.java:26) 
    com.amazonaws.http.HttpClientFactory.createHttpClient(HttpClientFactory.java:83) 
    com.amazonaws.http.AmazonHttpClient.<init>(AmazonHttpClient.java:116) 
    com.amazonaws.AmazonWebServiceClient.<init>(AmazonWebServiceClient.java:60) 
    com.amazonaws.services.s3.AmazonS3Client.<init>(AmazonS3Client.java:291) 
    com.amazonaws.services.s3.AmazonS3Client.<init>(AmazonS3Client.java:273) 
    packeging.Hashtastic.doGet(Hashtastic.java:48) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 


note The full stack trace of the root cause is available in the Apache Tomcat/7.0.27 logs. 

Bất kỳ trợ giúp nào?

Trả lời

8

Điều này có thể xảy ra nếu bạn có phiên bản sai của lọ httpclient trong đường dẫn lớp hoặc nếu bạn có nhiều phiên bản của lọ đó trong đường dẫn lớp của bạn (ví dụ: http: // httpclient-4.0.1.jar và httpclient-4.1 .1.jar).

Nó cũng có thể do một lọ khác có chứa phiên bản khác của cùng một lớp. Ví dụ, tôi biết rằng gwt-dev.jar chứa một phiên bản của ThreadSafeClientConnManager. Trong trường hợp này, vấn đề có thể được giải quyết bằng cách điều chỉnh thứ tự đường dẫn xây dựng để đặt httpclient.jar trước gwt-dev.jar (hoặc các jar khác gây ra vấn đề).

+0

Vâng tôi đã tìm ra nó cùng lúc bạn đăng. Đó là vấn đề chính xác anyways nhờ sự giúp đỡ! – ThreeFold

+0

Điều này cũng có thể xảy ra nếu máy chủ ứng dụng như Websphere 8 bao gồm một phiên bản cũ hơn httpclient-4.1.x vì nó đã ở phiên bản 4.1 mà hàm tạo mặc định đã được triển khai. Trong trường hợp này, bạn phải thay đổi chính sách tải lớp trên ứng dụng của bạn từ PARENT_FIRST thành PARENT_LAST và bao gồm một JAR 4.1 trở lên trong EAR/WAR của bạn. –

3

Từ kinh nghiệm với cùng một ngoại lệ chính xác, cơ hội là khá tốt vì nó được gây ra bởi gwt-dev xuất hiện trước aws-java-sdk trong classpath của bạn và do gwt-dev có chứa xung đột (về tải lớp) phiên bản của org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager

Nếu bạn tình cờ sử dụng Maven, hãy sắp xếp lại các phụ thuộc của bạn như sau và có thể thêm cảnh báo cho các nhà bảo trì khác về tầm quan trọng của việc đặt hàng.

<dependency> 
    <groupId>com.amazonaws</groupId> 
    <artifactId>aws-java-sdk</artifactId> 
    <version>1.3.26</version> 
</dependency> 

<dependency> 
    <groupId>com.google.gwt</groupId> 
    <artifactId>gwt-dev</artifactId> 
    <version>2.3.0</version> 
</dependency> 
Các vấn đề liên quan