2012-06-19 14 views
5

तो इस कोड के साथ मेरी अगली समस्या। ऐसा लगता है कि कोई तरीका नहीं ढूंढ रहा है और मेरी आंखें अनियंत्रित हैं। इस पर कोई मदद उपलब्ध है?अमेज़ॅन प्रमाण पत्र विधि नहीं मिला

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 और plugins में जार है।

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 जार का गलत संस्करण हो, या यदि आपके क्लासपाथ में उस जार के एक से अधिक संस्करण हैं (उदाहरण के लिए httpclient-4.0.1.jar और httpclient-4.1 दोनों .1.jar)।

यह एक और जार के कारण भी हो सकता है जिसमें एक ही वर्ग के एक अलग संस्करण होते हैं। उदाहरण के लिए, मुझे पता है कि gwt-dev.jar में ThreadSafeClientConnManager का एक संस्करण है। यदि ऐसा है, तो gwt-dev.jar (या अन्य जार समस्या उत्पन्न करने से पहले) httpclient.jar डालने के लिए बिल्ड पथ ऑर्डर को समायोजित करके समस्या हल हो सकती है।

+0

हाँ मैंने आपके द्वारा पोस्ट किए गए एक ही समय में इसे समझ लिया। यह वही समस्या थी जो मदद के लिए धन्यवाद! – ThreeFold

+0

यह तब भी हो सकता है जब वेबस्पेयर 8 जैसे अनुप्रयोग सर्वर में httpclient-4.1.x की तुलना में पुराना संस्करण शामिल है क्योंकि यह 4.1 में था कि डिफ़ॉल्ट कन्स्ट्रक्टर लागू किया गया था। इस मामले में आपको अपने आवेदन पर क्लास लोडिंग पॉलिसी को PARENT_FIRST से PARENT_LAST तक बदलना होगा और अपने ईएआर/वार में 4.1+ जेएआर शामिल करना होगा। –

3

इस सटीक अपवाद के साथ अनुभव से, संभावनाएं काफी अच्छी हैं कि यह आपके वर्गपाथ में aws-java-sdk से पहले प्रकट होने वाले gwt-dev के कारण होता है और gwt-dev को विरोधाभासी (क्लासलोडिंग के मामले में) के कारण होता है। org.apache.http.impl.conn.tsccm.hreadSafeClientConnManager का संस्करण

यदि आप मेवेन का उपयोग करते हैं, तो अपनी निर्भरताओं को फिर से क्रमबद्ध करें और शायद ऑर्डरिंग के महत्व पर साथी रखरखाव को चेतावनी दें।

<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> 
संबंधित मुद्दे