/ Изключения от Java домейн - java, изключение

Изключения от Java домейн - java, изключение

Бях написал спокоен уеб сервиз. Договорът на спокоен уеб сервиз е да се получават параметри, да се комуникира с външна услуга чрез SSL и да се отговори обратно на клиента. Няма никакви проблеми в договора за услуги и услугата. Дизайнът на услугата беше добър и всички проверени изключения бяха уловени в блока за хващане, но след няколко теста за услуги, тогава изглеждаше, че непроверените изключения не се обработват правилно. Има ли някакъв начин за капсулиране на тези непроверени изключения с изключение на домейни. За да бъде прост, как да се справяте или очаквате непроверените изключения.

Отговори:

0 за отговор № 1

В конкретния случай на спокоен уеб сервиз,рамката има "хванал всички" манипулатор, който прави нещо, което не харесвате. Така че, срещу някои други отговори тук, няма нищо лошо за добавяне на повече или по-различно управление. Ръководителят на рамката със сигурност не почиства за вас, така че можете да направите нещата по-добри, като почистите за себе си.

  1. Можете да добавите картографиране на изключения към вашия списък с доставчици, съгласно стандарта JAX-RS.

  2. Можете да обгърнете кода си в try / catch на Throwable и след това да създадете Response, който ви харесва в хендлера.

Без да зная какъв набор от инструменти използвате за JAX-RS, не мога да бъда по-подробен за (1).


0 за отговор № 2

Винаги трябва да имате едно място във вашетокод, в който се справяте с всички изключения и това, което описвате, звучи като че ли имате бъркотия в обработката на код навсякъде, където се нарича метод, който декларира проверени изключения. Използвайте този код в код на по-ниско ниво, който среща отменени изключения:

try {
...
catch (RuntimeException e) { throw e;}
catch (Exception e) { throw new RuntimeException(e); }

И при бариерата на изключенията (споменатото централно място) използвайте

try {
...
catch (Throwable t) { // logging, returning error response, whatever
}
finally { // global resource cleanup
}

Да се ​​направи повече от това се изисква само в специални случаислучаите, които ще намерите, не са много често срещани в базата с кодове и това е, когато вашите методи от по-ниско ниво придобиват ресурси, допълнителни към вече придобитите ресурси за всяка заявка. Пример може да бъде файл I / O. В такива случаи е задължително да се използва a try-finally да се погрижим за този допълнителен ресурс, но все още не трябва catch и поглъщане изключения: основната бариера на изключение все още трябва да знае, че е имало проблем и да направи неговото почистване.


-1 за отговор № 3

RuntimeExceptions трябва да посочи грешки при кодирането, така че в идеалния случай трябва да поправите грешките, а неопитвайки се да се справят с тях. За съжаление някои разработчици на библиотеки злоупотребяват с RTEs за не-бъгове и ви принуждават да ги хванете. Можете да прехвърлите RuntimeException в изключение.

....
catch (RuntimeException e) {
throw new MyCheckedException("Failed to...", e);
}

РЕДАКТИРАНЕ: Изглежда, че "е противоречива гледна точка в наши дни. Знам, че лошите проверени изключения могат да бъдат болка. API в "щастлив случай", когато не се интересувате от изключения, но много по-трудно е да знаете какво да очаквате от "тъжния случай", когато го правите. Също така е по-трудно за изпълнителите на интерфейси да знаят какво се очаква от тях - кои RuntimeExceptions са или не им е позволено да хвърлят и т.н.