2012-06-22 76 views
6

我特林通過AWSCredentials發送郵件,但得到一個異常java.lang.NoClassDefFoundError:組織/阿帕奇/ HTTP /康涅狄格州/方案/ SchemeSocketFactory

java.lang.NoClassDefFoundError: org/apache/http/conn/scheme/SchemeSocketFactory

我已經添加了這些罐子:

  • AWS-java的SDK-1.3.11.jar
  • AWS-java的SDK-1.3.11-javadoc.jar
  • AWS-java的SDK-1.3.11-sources.jar
  • aws- Java的SDK流 - 構建 - 工具 - 1.3.11.jar
  • 的commons-logging.jar
  • 的HttpClient-4.0-alpha4.jar
  • 的HttpCore-4.0-alpha6.jar
  • 的log4j-1.2。 13.jar
  • 的mail.jar

我的Java代碼 -

import com.amazonaws.auth.AWSCredentials; 
import com.amazonaws.auth.BasicAWSCredentials; 
import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient; 
import com.amazonaws.services.simpleemail.model.*; 
import java.util.LinkedList; 

public class SESExample { 
public static final String ACCESS_KEY = "My Access"; 
public static final String SECRET_KEY = "My Secret"; 

public static void main(String args[]) { 
    String sender = "[email protected]"; // should be verified email 

    LinkedList<String> recipients = new LinkedList<String>(); 
    recipients.add("[email protected]"); // again a verified email, if you are in sandbox 

    SendMail(sender, recipients, "Hi", "Hi how are u?"); 
} 

public static void SendMail(String sender, LinkedList<String> recipients, String subject, String body) { 
    Destination destination = new Destination(recipients); 

    Content subjectContent = new Content(subject); 
    Content bodyContent = new Content(body); 
    Body msgBody = new Body(bodyContent); 
    Message msg = new Message(subjectContent, msgBody); 

    SendEmailRequest request = new SendEmailRequest(sender, destination, msg); 

    AWSCredentials credentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY); 
    AmazonSimpleEmailServiceClient sesClient = new AmazonSimpleEmailServiceClient(credentials); 
    SendEmailResult result = sesClient.sendEmail(request); 

    System.out.println(result); 
} 

}

我也試圖搜索這個罐子,但沒有得到。 我使用錯誤的jar無法確定。 任何人都可以告訴我是什麼問題?

+0

你能告訴我們classpath的文件嗎?此行中出現 – Zakaria

回答

18

javadocs開始,SchemeSocketFactory類僅在版本4.1以後纔可用。所以這可能與你使用4.0 alpha罐的事實有關。嘗試將您的http-client庫升級到4.1或更高版本。

+0

現在我正在使用httpclient-4.2.jar並獲取新錯誤。 java.lang.NoSuchMethodError:org.apache.http.protocol.BasicHttpContext:method ()V not found –

+0

您需要[commons-codec](http://commons.apache.org/codec/download_codec.cgi )jar在你的classpath中。 – Jeshurun

+0

是啊,我已經添加了這些,但仍然得到--- java.lang.NoSuchMethodError:org.apache.http.protocol.BasicHttpContext:法()V找不到 –

0

調試代碼並在異常發生指出。你使用的任何類的實例都不包含在你的jar文件中,我認爲是這樣。我不確定。通過調試發現。我認爲SchemeSocketFactory不存在於你的類路徑中。請檢查

+0

錯誤 - AmazonSimpleEmailServiceClient sesClient = new AmazonSimpleEmailServiceClient(credentials); –

+0

您在AmazonSimpleEmailServiceClient中使用的任何類都不在您的類路徑中。請檢查....... – Amith

2

the javadoc,似乎org/apache/http/conn/scheme/SchemeSocketFactory類自4.1版本以來存在。

因此,嘗試將httpclient jar升級到至少4.1版本。

1

就我而言,我在Netbeans 7.2中創建了兩個庫:一個用於Apache Commons Codec 1.6,另一個用於Apache Commons HttpClient 4.2.2。在這種情況下,因爲我爲HttpClient製作的庫也包含Codec 1.6 jar,所以我得到了同樣的錯誤。

確保您的類路徑中沒有引用兩個相同的庫,或者沒有相同庫的兩個衝突版本。

2

如果你下載最新的AWS的Java SDK(我剛剛下載AWS-Java的SDK-1.9.3),

the required libraries will be in the third-party/**/lib folders. There are a bunch of them!

這個答案從jomofrodo需要更多atention。搞定了。 謝謝!

相關問題