如何修复java.lang.NoSuchMethodError:sun.security.ssl.Handshaker.setApplicationProtocols([Ljava/lang/String;) [英] How to fix java.lang.NoSuchMethodError: sun.security.ssl.Handshaker.setApplicationProtocols([Ljava/lang/String;)

查看:129
本文介绍了如何修复java.lang.NoSuchMethodError:sun.security.ssl.Handshaker.setApplicationProtocols([Ljava/lang/String;)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Trying to send an email I got NoSuchMethodError exception when executing transport.connect(...). I chose the same version JDK(1.8.0_251) for my project, module, Glassfish (payara), maven like on this post shows but I keep receiving the same exception. I tried to add the port to the connect method but also the same error. I checked the Gmail account which is sending emails has activated the option to be used by unsecured apps. I also tried to change the method that instance the session to "getDefaultInstance" but anything changed. This worked time a while. I don't know what else could I try.

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方法的传输值:

Value of transport previously to execute the connect method:

smtp://LaGallinaTuruleta@

我不知道我的Windows用户名为何会出现在这里.

I don't know why my Windows User name gets here.

推荐答案

我也遇到了这个问题!

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

After checking I found a solution in this post https://github.com/eclipse-ee4j/glassfish/issues/22436 You have to remove sun folder from grizzly-npn-bootstrap.jar

它的位置:glassfish5/glassfish/modules/endorsed/

Its located : glassfish5/glassfish/modules/endorsed/

希望这会有所帮助!

这篇关于如何修复java.lang.NoSuchMethodError:sun.security.ssl.Handshaker.setApplicationProtocols([Ljava/lang/String;)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆