【问题标题】:java.lang.NoClassDefFoundError: org/apache/http/conn/scheme/SchemeSocketFactoryjava.lang.NoClassDefFoundError: org/apache/http/conn/scheme/SchemeSocketFactory
【发布时间】:2015-05-26 20:18:29
【问题描述】:

我正在尝试通过 AWSCredentials 发送邮件但遇到异常

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-flow-build-tools-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 = "support@brandzter.com"; // should be verified email

    LinkedList<String> recipients = new LinkedList<String>();
    recipients.add("khoyendra@globussoft.com"); // 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);
}

}

我也在尝试搜索这个罐子,但没有得到。 我不确定是否使用了错误的罐子。 谁能告诉我是什么问题?

我是

【问题讨论】:

  • 你能告诉我们类路径的文件吗?

标签: java jakarta-mail


【解决方案1】:

javadocs 开始,SchemeSocketFactory 类仅在版本 4.1 之后可用。所以这可能与您使用 4.0 alpha jar 的事实有关。尝试将您的 http-client 库升级到 4.1 或更高版本。

【讨论】:

  • 现在我正在使用 httpclient-4.2.jar 并收到新错误。 java.lang.NoSuchMethodError: org.apache.http.protocol.BasicHttpContext: 方法 ()V 未找到
  • 你的类路径中需要commons-codec jar。
  • 是的,我已经添加了这些,但仍然得到 --- java.lang.NoSuchMethodError: org.apache.http.protocol.BasicHttpContext: method ()V not found
  • 您可能还需要将 http-core.jar 替换为高于 4.0 的版本
  • 如果您下载最新的 aws java SDK(我刚刚下载了 aws-java-sdk-1.9.3),所需的库将在第三方/**/lib 文件夹中。有一堆!目前我正在寻找以下 httpcomponents jar: httpclient-4.3.jar httpcore-4.3.jar
【解决方案2】:

the javadoc看来,org/apache/http/conn/scheme/SchemeSocketFactory这个类似乎从4.1版本就存在了。

所以,尝试将 httpclient jar 升级到至少 4.1 版本。

【讨论】:

    【解决方案3】:

    如果你下载了最新的aws java SDK(我刚刚下载了aws-java-sdk-1.9.3),

    所需的库将位于第三方/**/lib 文件夹中。有一堆!

    jomofrodo 的回答需要更多关注。搞定了。 谢谢!

    【讨论】:

      【解决方案4】:

      就我而言,我在 Netbeans 7.2 中创建了两个库:一个用于 Apache Commons Codec 1.6,一个用于 Apache Commons HttpClient 4.2.2。在这种情况下,因为我为 HttpClient 创建的库也包含 Codec 1.6 jar,所以我遇到了同样的错误。

      确保您的类路径中没有引用两个相同的库,或者同一库的两个冲突版本。

      【讨论】:

        【解决方案5】:

        调试您的代码并指出异常发生的位置。我认为您使用的任何类实例都不包含在您的 jar 文件中。我不确定。通过调试找到。我认为 SchemeSocketFactory 在您的类路径中不存在。请检查

        【讨论】:

        • 这一行出现错误 - AmazonSimpleEmailServiceClient sesClient = new AmazonSimpleEmailServiceClient(credentials);
        • 您在 AmazonSimpleEmailServiceClient 中使用的任何类都不在您的类路径中。请检查.......
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-06
        • 2017-03-16
        • 2015-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-05
        相关资源
        最近更新 更多