Собрать исключения из нескольких операторов в одинJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Собрать исключения из нескольких операторов в один

Сообщение Anonymous »

Я пишу менеджер для отправки электронных писем с использованием библиотеки javax.mail. При создании сообщения я вызываю методы set несколько раз, используя значения, предоставленные вызывающей стороной моего метода:

Код: Выделить всё

// MailBuilder: builder class for containing various email-related values
public void sendEmails(MailBuilder mailBuilder) {
Message msg = new SMTPMessage(Session.getInstance(presetProperties));

try {
msg.setContent(mailBuilder.body);
msg.setRecipients(RecipientType.TO, mailBuilder.to);
msg.setRecipients(RecipientType.CC, mailBuilder.cc);
msg.setRecipients(RecipientType.BCC, mailBuilder.bcc);
msg.setSubject(mailBuilder.subject);
} catch (MessagingException e) {
throw new IllegalArgumentException("Malformed email", e);
}

// ...send email
}
Если какой-либо из методов set выдает исключение, я хочу обернуть его в IllegalArgumentException для отправки вызывающему объекту. Однако если я оберну их все в один блок try, и если setContent выдаст исключение, другие методы не будут вызваны, и любые ошибки, которые могли возникнуть с этими методами, также не будут получены. сообщается звонящему. Я знаю, что могу объединить блоки try-catch, подобные этому, чтобы собирать возможные подавленные исключения, но это очень неуклюже:

Код: Выделить всё

MessagingException collectedExceptions = null;
try {
msg.setContent(mailBuilder.body)
} catch (MessagingException e) {
if (collectedExceptions == null) collectedExceptions = e;
else collectedExceptions.addSuppressed(e);
}

try {
msg.setSubject(mailBuilder.subject);
} catch (MessagingException e) {
if (collectedExceptions == null) collectedExceptions = e;
else collectedExceptions.addSuppressed(e);
}

// repeat for other methods

if (collectedExceptions != null) throw collectedExceptions;
Есть ли более чистый способ использовать несколько методов и исключать исключение только в конце любого из них?


Подробнее здесь: https://stackoverflow.com/questions/790 ... s-into-one
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»