2012-06-19 6 views
5

このコードで私の次の問題。方法が見つからないようで、私の目は訓練されていません。これについて利用できるヘルプはありますか?Amazon資格証明のメソッドが見つかりません

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 
    } 

} 

この500エラーが発生します。それは方法が欠けていると言います。私は日食のための私のlibとプラグインの瓶を持っています。

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. 

ヘルプがありますか?

答えて

8

クラスパスに不正なバージョンのhttpclient jarがある場合、またはクラスパスに複数のバージョンのjarがある場合(たとえば、httpclient-4.0.1.jarとhttpclient-4.1の両方を持つ場合など) .1.jar)。

同じクラスの異なるバージョンを含む別のjarによっても発生する可能性があります。たとえば、gwt-dev.jarにはThreadSafeClientConnManagerのバージョンが含まれています。この場合、問題はおそらく、gwt-dev.jarの前にhttpclient.jar(または他のjarが問題を引き起こす)を入れるようにビルド・パスの順序を調整することで解決できます。

+0

私はあなたが投稿したのと同じ時期にそれを理解しました。とにかく助けてくれてありがとうございました! – ThreeFold

+0

Websphere 8などのアプリケーション・サーバーに、httpclient-4.1.xよりも古いバージョンが含まれていて、4.1のデフォルト・コンストラクターがインプリメントされていたために発生することもあります。この場合、アプリケーションのクラスローディングポリシーをPARENT_FIRSTからPARENT_LASTに変更し、EAR/WARに4.1+ JARを追加する必要があります。 –

3

この全く同じExceptionでの経験から、クラスパスのaws-java-sdkの前に表示されるgwt-devと(クラスローディングの点で)競合するgwt-devが原因である可能性がかなり高いですorg.apache.http.impl.conn.tsccm.ThreadSafeClientConnManagerのバージョン

Mavenを使用している場合は、以下のように依存関係を並べ替えて、仲間のメンテナーに注文の重要性に関する警告を追加してください。

<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> 
関連する問題