java - 如何修复 java.lang.NoSuchMethodError : sun. security.ssl.Handshaker.setApplicationProtocols([Ljava/lang/String;)

标签 java java-8 jakarta-mail

尝试发送电子邮件时,我在执行 transport.connect(...) 时收到 NoSuchMethodError 异常。我为我的项目、模块、Glassfish (payara)、maven 选择了相同版本的 JDK(1.8.0_251) post显示但我一直收到相同的异常。我试图将端口添加到连接方法,但也出现同样的错误。我检查了发送电子邮件的 Gmail 帐户是否激活了不安全应用程序使用的选项。我还尝试将实例化 session 的方法更改为“getDefaultInstance”,但一切都发生了变化。这工作了一段时间。我不知道我还能尝试什么。

java.lang.NoSuchMethodError: sun.security.ssl.Handshaker.setApplicationProtocols([Ljava/lang/String;)V
at sun.security.ssl.SSLSocketImpl.initHandshaker(SSLSocketImpl.java:1350)
at sun.security.ssl.SSLSocketImpl.doneConnect(SSLSocketImpl.java:708)
at sun.security.ssl.SSLSocketImpl.<init>(SSLSocketImpl.java:583)
at sun.security.ssl.SSLSocketFactoryImpl.createSocket(SSLSocketFactoryImpl.java:110)
at com.sun.mail.util.MailSSLSocketFactory.createSocket(MailSSLSocketFactory.java:255)
at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:479)
at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1994)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:709)
at javax.mail.Service.connect(Service.java:342)
at services.EmailSender.generateAndSendEmail(EmailSender.java:47)
at services.UserServices.registerUser(UserServices.java:124)
at rest.UserRest.register(UserRest.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167)
at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:469)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:391)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:80)
at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:253)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)
at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232)
at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680)
at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)
at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:319)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1636)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:259)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:757)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:577)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:158)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:371)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:238)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:520)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:217)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:182)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:156)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:218)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:95)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:260)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:177)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:109)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:88)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:53)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:524)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:89)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:94)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:33)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:114)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:569)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:549)
at java.lang.Thread.run(Thread.java:748)

]]

public class EmailSender {

public void generateAndSendEmail(String to, String msg, String subject) throws MessagingException {
    Properties mailServerProperties;
    Session getMailSession;
    MimeMessage generateMailMessage;

    // STEP 1
    mailServerProperties = System.getProperties();
    mailServerProperties.put("mail.smtp.port", Integer.parseInt("587"));
    mailServerProperties.put("mail.smtp.auth", "true");
    mailServerProperties.put("mail.smtp.ssl.trust", "smtp.gmail.com");
    mailServerProperties.put("mail.smtp.starttls.enable", "true");

    // STEP 2
    getMailSession = Session.getDefaultInstance(mailServerProperties, null);
    generateMailMessage = new MimeMessage(getMailSession);
    generateMailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
    generateMailMessage.setSubject(subject);
    String emailBody = msg;
    generateMailMessage.setContent(emailBody, "text/html");

    //  STEP 3
    Transport transport = getMailSession.getTransport("smtp");

    transport.connect("smtp.gmail.com",    //  URL
            YamlConfig.getInstance().getEmail(),    //  EMAIL
            YamlConfig.getInstance().getPassword());    //  PASSWORD
    transport.sendMessage(generateMailMessage, generateMailMessage.getAllRecipients());
    transport.close();
}

之前执行connect方法的传输值:

smtp://LaGallinaTuruleta@

我不知道为什么我的 Windows 用户名会出现在这里。

最佳答案

我也遇到过这个问题!

检查后我在这篇文章中找到了解决方案 https://github.com/eclipse-ee4j/glassfish/issues/22436 您必须从 grizzly-npn-bootstrap.jar 中删除 sun 文件夹

它位于:glassfish5/glassfish/modules/endorsed/

希望这会有所帮助!

关于java - 如何修复 java.lang.NoSuchMethodError : sun. security.ssl.Handshaker.setApplicationProtocols([Ljava/lang/String;),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62158828/

相关文章:

java-8 - 发出流的 Java 8 流

java - 如何在 Java 8 (Scala) 中将日期时间字符串转换为长(UNIX 纪元时间)毫秒

Java mailto 到 MIME

Java Mail - 电子邮件不通过 Gmail 发送

java - 动态改变线程池的大小

Java 邮件消息传递异常

带有 UCanAccess 的 java.util.regex.PatternSyntaxException

java - #Askfirebase 在 android 中的 firebase 回收器适配器中获取上一个项目值(POJO)

java - 如何选择不符合Mongo中某些字段的文档使用Java?

java - web.xml 中项目的 servlet-mapping 属性不位于 webapps 的顶层