2012-06-19 16 views
5

Quindi il mio prossimo problema con questo codice. Sembra di non trovare un metodo e i miei occhi non sono addestrati. Qualsiasi aiuto disponibile su questo?Amazon Credentials Metodo non trovato

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 
    } 

} 

Sto ricevendo questo errore 500. Dice che manca un metodo. Ho il barattolo nella mia libreria e i plugin per Eclipse.

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. 

Qualsiasi aiuto?

risposta

8

Questo potrebbe accadere se si ha la versione sbagliata del jar httpclient nel classpath o se si dispone di più di una versione di jar nel classpath (ad es. Con httpclient-4.0.1.jar e httpclient-4.1 .1.jar).

Potrebbe anche essere causato da un altro jar contenente una versione diversa della stessa classe. Ad esempio, so che gwt-dev.jar contiene una versione di ThreadSafeClientConnManager. Se questo è il caso, il problema potrebbe probabilmente essere risolto regolando l'ordine del percorso di build per mettere httpclient.jar prima di gwt-dev.jar (o l'altro jar che causa problemi).

+0

Sì, l'ho capito circa nello stesso momento in cui hai pubblicato. E 'stato quel problema esatto comunque grazie per l'aiuto! – ThreeFold

+0

Può accadere anche se il server delle applicazioni come Websphere 8 include una versione precedente di httpclient-4.1.x perché era in 4.1 che il costruttore predefinito è stato implementato. In questo caso devi modificare la politica di caricamento della classe sulla tua applicazione da PARENT_FIRST a PARENT_LAST e includere un JAR 4.1+ nell'EAR/WAR. –

3

Dall'esperienza con questa stessa identica eccezione, le probabilità sono abbastanza buone che è causata da gwt-dev che appare prima di aws-java-sdk nel classpath e a causa di gwt-dev che contiene un conflitto (in termini di caricamento delle classi) versione di org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager

Se ti capita di usare Maven, riordina le tue dipendenze come segue e magari aggiungi un avvertimento ai colleghi manutentori sul significato dell'ordine.

<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> 
Problemi correlati