2012-06-22 49 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。搞定了。 谢谢!

相关问题