Гость
Форумы / Java [игнор отключен] [закрыт для гостей] / Nested exception / 19 сообщений из 19, страница 1 из 1
04.07.2019, 18:22
    #39834001
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested exception
Всем привет!

Для отправки email использую javax.mail. Внешний SMTP сервер через некоторое время рвёт соединение.
Ловлю exception:
Код: java
1.
2.
3.
javax.mail.MessagingException: Can't send command to SMTP host;
  nested exception is:
	java.net.SocketException: Обрыв канала (Write failed)


Как мне в блоке catch определить, что есть вложенное исключение java.net.SocketException?
После чего я буду соединятся с сервером снова.
...
Рейтинг: 0 / 0
04.07.2019, 18:27
    #39834006
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested exception
Код: java
1.
2.
Session s = //a JavaMail session I got from somewhere
boolean isConnected = s.getTransport("smtp").isConnected();


вот это и проверяй в блоке эксепшена а не вложенность исключений
...
Рейтинг: 0 / 0
04.07.2019, 18:38
    #39834012
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested exception
Т.е. переменная connected будет равна false после выбрасывания исключения?

Код: java
1.
2.
3.
public synchronized boolean isConnected() {
      return connected;
}



забыл ник
Код: java
1.
2.
Session s = //a JavaMail session I got from somewhere
boolean isConnected = s.getTransport("smtp").isConnected();


вот это и проверяй в блоке эксепшена а не вложенность исключений
...
Рейтинг: 0 / 0
04.07.2019, 18:47
    #39834021
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested exception
Molasar, у любого JavaException есть методы для движения вверх по стеку исключений.

https://docs.oracle.com/javaee/6/api/javax/mail/MessagingException.html

Но я убеждён что тебе это не нужно.
...
Рейтинг: 0 / 0
04.07.2019, 18:48
    #39834023
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested exception
MolasarКак мне в блоке catchа где ты привел этот блок?
...
Рейтинг: 0 / 0
04.07.2019, 18:50
    #39834024
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested exception
maytonНо я убеждён что тебе это не нужно.но пригодится)
...
Рейтинг: 0 / 0
04.07.2019, 19:00
    #39834030
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested exception
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
@Override
    public void sendMessage(Message message) throws SenderException {
        if (transport != null) {
            try {               
                javax.mail.Message smtpMessage = new MimeMessage(smtpSession);

                smtpMessage.setFrom(...);
                smtpMessage.setRecipients(...);
                smtpMessage.setSubject(...);
                smtpMessage.setText(...);
                smtpMessage.saveChanges();

                transport.sendMessage(
                        smtpMessage,
                        smtpMessage.getAllRecipients());
    
            } catch (MessagingException ex) {
                if (!transport.isConnected()) {
                    try {
                        transport.close();
                    } catch (MessagingException ex1) {
                        throw new SenderException(
                                exceptionFailedCloseSMTP, ex1);
                    }
                    transport = null;
                    openSession(senderConfig);
                    sendMessage(message);
                }
            } 
        } else {
            throw new SenderException(exceptionSendWOSMTP);
        }
    }




PetroNotC SharpMolasarКак мне в блоке catchа где ты привел этот блок?
...
Рейтинг: 0 / 0
04.07.2019, 19:12
    #39834036
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested exception
PetroNotC SharpmaytonНо я убеждён что тебе это не нужно.но пригодится)
С другой стороны. Он пишет дескыть... После чего я буду соединятся с сервером снова.
Отличная идея. А что есть кейс когда не надо соединятся? Какое вообще можно принять решение
по факту исключения? Расскажите мне господа хорошие. Какое?
...
Рейтинг: 0 / 0
04.07.2019, 19:18
    #39834038
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested exception
mayton,
Наверно есть кейс автопопытки как автодозвон на телефоне).
И есть кейс что письмо будет в статусе Не отправилось(
...
Рейтинг: 0 / 0
04.07.2019, 19:21
    #39834039
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested exception
Ну и пусть проверяет MessagingException. Зачем ему глубже копать?
...
Рейтинг: 0 / 0
04.07.2019, 19:22
    #39834040
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested exception
Molasar
Код: java
1.
} catch (MessagingException ex) {

после этой строки добавь метод
проверитьВложенное(ex);
Что внутри него выше дали ссылку.
...
Рейтинг: 0 / 0
04.07.2019, 19:30
    #39834042
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested exception
maytonНу и пусть проверяет MessagingException. Зачем ему глубже копать?обычно там подробности (во вложенном). Все должны уметь их достать.
Я про это.
...
Рейтинг: 0 / 0
04.07.2019, 19:34
    #39834043
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested exception
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
                if (!transport.isConnected()) {
                    try {
                        transport.close();
                    } catch (MessagingException ex1) {
                        throw new SenderException(
                                exceptionFailedCloseSMTP, ex1);
                    }
                    transport = null;
                    openSession(senderConfig);
                    sendMessage(message);
                }


Еще более ужасно выглядит попытка повторной отправки. Это что. Типа с первого раза не затолкали.
А второй - точно-точно зайдет? Хорошо. А где третий рывок? И где для них всех обработка ошибки?
...
Рейтинг: 0 / 0
04.07.2019, 19:36
    #39834044
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested exception
mayton,
Да. Повтор я бы выше, делал. Это вроде как БЛ.
...
Рейтинг: 0 / 0
04.07.2019, 19:41
    #39834046
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested exception
Код: java
1.
2.
3.
do{
   ....
while(somethingWrong);


Почему сразу так не сделать?
...
Рейтинг: 0 / 0
04.07.2019, 20:14
    #39834058
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested exception
Поэтому мне и важно обработать вложенное исключение, т.к. если с 1-й попытки письмо не отправилось по причине разрыва соединения SMTP сервером, то необходимо восстановить соединение и повторить отправку. В этом случае письмо точно уйдёт. Если конечно не будет другого исключения.
mayton
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
                if (!transport.isConnected()) {
                    try {
                        transport.close();
                    } catch (MessagingException ex1) {
                        throw new SenderException(
                                exceptionFailedCloseSMTP, ex1);
                    }
                    transport = null;
                    openSession(senderConfig);
                    sendMessage(message);
                }


Еще более ужасно выглядит попытка повторной отправки. Это что. Типа с первого раза не затолкали.
А второй - точно-точно зайдет? Хорошо. А где третий рывок? И где для них всех обработка ошибки?
...
Рейтинг: 0 / 0
04.07.2019, 20:26
    #39834065
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested exception
Molasarпо причине разрыва соединения SMTP сервером,а если он надолго в ауте. Санкции)
...
Рейтинг: 0 / 0
05.07.2019, 00:05
    #39834118
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nested exception
Да плевать. Пускай крутит бесконечные циклы. Кому от этого плохо? Ваш браузер за 5 минут сделает
больше запросов чем этот код за сутки.
...
Рейтинг: 0 / 0
05.07.2019, 10:20
    #39834215
Nested exception
может для реконнекта библиотекой воспользоваться?

https://github.com/jhalterman/failsafe
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Nested exception / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]