Первый вопрос.Использование электронной почты Google с SSL на Resin 3.1 в AWS
Я ищу помощь в настройке java & смолы, чтобы разрешить мне открывать URL-адрес https из моего приложения. Документы Resin не говорят, я думаю, что я делаю все правильно в Java, но я запускаю «java.lang.NoClassDefFoundError: не удалось инициализировать класс sun.net.www.protocol.https.DelegateHttpsUrlConnection" , Я ожидаю, что исправление будет либо одной строкой в файле конфигурации, либо отсутствующим банком ... но какой?
Подробнее:
Oracle Linux JDK 1,7 Смола 3,1 (да он старый) Google почта апи v1 (см Maven зависимость ниже)
Я реализовал класс GmailSender, который отправляет электронную почту из из моего приложения:
httpTransport = GoogleNetHttpTransport.newTrustedTransport();
...
private Credential authorizeServiceAccount() throws IOException, GeneralSecurityException {
Credential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(serviceAccountId)
.setServiceAccountPrivateKeyFromP12File(new File(privateKeyFileName))
.setServiceAccountScopes(SCOPES)
.setServiceAccountUser(serviceAccountUser)
.build();
return credential;
}
Gmail getGmailService() throws IOException, GeneralSecurityException {
Credential credential = authorizeServiceAccount();
return new Gmail.Builder(httpTransport, JSON_FACTORY, credential)
.setApplicationName(applicationName)
.build();
}
public void send(SimpleMailMessage simpleMailMessage) throws MailException {
Message m;
try {
MimeMessage mm = asMimeMessage(simpleMailMessage);
m = asMessage(mm);
} catch (IOException e) {
throw new MailPreparationException("Unable to create email", e);
} catch (MessagingException e) {
throw new MailPreparationException("Unable to create email", e);
}
try {
Gmail gmail = getGmailService();
m = gmail.users().messages().send("me", m).execute();
} catch (IOException e) {
throw new MailSendException("Unable to send mail", e);
} catch (GeneralSecurityException e) {
throw new MailSendException("Could not send email", e);
} catch (Throwable t) {
throw new MailSendException("Unexpected failure sending email", t);
}
String id = m.getId();
//System.out.println("Mail sent. Id is: " + id);
}
И в Maven конфигурации:
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-gmail</artifactId>
<version>v1-rev35-1.21.0</version>
</dependency>
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client-jetty</artifactId>
<version>1.21.0</version>
</dependency>
И исключение - выглядит в основном хорошо для выпуска класса четкости, за исключением:
20160326-15:15:54.481org.springframework.mail.MailSendException; nested exceptions (0) are: 20160326-15:15:54.481Caused by: java.lang.NoClassDefFoundError: Could not initialize class sun.net.www.protocol.https.DelegateHttpsURLConnection 20160326-15:15:54.481 at sun.net.www.protocol.https.HttpsURLConnectionImpl.(HttpsURLConnectionImpl.java:86) 20160326-15:15:54.481 at sun.net.www.protocol.https.Handler.openConnection(Handler.java:62) 20160326-15:15:54.481 at sun.net.www.protocol.https.Handler.openConnection(Handler.java:57) 20160326-15:15:54.481 at java.net.URL.openConnection(URL.java:971) 20160326-15:15:54.481 at com.google.api.client.http.javanet.DefaultConnectionFactory.openConnection(DefaultConnectionFactory.java:31) 20160326-15:15:54.481 at com.google.api.client.http.javanet.NetHttpTransport.buildRequest(NetHttpTransport.java:136) 20160326-15:15:54.481 at com.google.api.client.http.javanet.NetHttpTransport.buildRequest(NetHttpTransport.java:62) 20160326-15:15:54.481 at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:863) 20160326-15:15:54.481 at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:283) 20160326-15:15:54.481 at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307) 20160326-15:15:54.481 at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:384) 20160326-15:15:54.481 at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489) 20160326-15:15:54.481 at com.google.api.client.auth.oauth2.Credential.intercept(Credential.java:217) 20160326-15:15:54.481 at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:859) 20160326-15:15:54.481 at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419) 20160326-15:15:54.481 at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352) 20160326-15:15:54.481 at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469) 20160326-15:15:54.481 at MyPackage.GmailSender.send(GmailSender.java:155)
Я экспериментировал с установкой протоколов в моей смоле запустить скрипт:
args="-jar $RESIN_HOME/lib/resin.jar -server-root $SERVER_ROOT -conf $config -server $SERVER_NAME"
#args="-Dhttps.protocols=TLSv1.2,TLSv1.1,TLSv1 -jar $RESIN_HOME/lib/resin.jar -server-root $SERVER_ROOT -conf $config -server $SERVER_NAME"
Но это изменение кажется не иметь никакого влияния. Что мне не хватает?
Спасибо!
Я отхожу от этого подхода, чтобы использовать более быстрый и безопасный API Google Mail. Мои тесты Junit работают нормально - они просто не запускаются в веб-контейнере. – tfield