Обработка исключений в SlingModels и использование Pojos в AEM? - PullRequest
2 голосов
/ 07 октября 2019

Мой вопрос прост. Должны ли мы или не должны обрабатывать / перехватывать исключения в слинг-моделях / WCMUsePojos?

Подробности:

У нас есть несколько SlingModels, которые вызывают OSGiметоды обслуживания, когда выдается какое-либо исключение, мы ловим его прямо в SlingModel, а затем выполняем в методе модели @PostConstruct

slingHttpResponse.sendError(500);

Это не похоже на работу для нас, статус ответа500 (проверено на вкладке сети браузера), но страница загружается в любом случае вместо загрузки нашей страницы 500.jsp или «Внутренней страницы ошибки сервера», которая является настроенной. исключение для обработчика по умолчанию. Это успешно загружает страницу 500.jsp.

Пример.

@PostConstruct // THIS WORKS
public void init() throws Exception{
   try{
     // Business Logic calling Injected OSGi Service Methods
   }
   catch(Exception e){
     // Log exception and rethrow
     LOG.error("Exception in Model",e);
     throw e;
   }
}

Является ли вышеуказанная реализация идеальной? Это работает в отличие от приведенного ниже кода, который НЕ работает для нас

 @PostConstruct  // THIS DOES NOT WORK PROPERLY
    public void init() throws Exception{
       try{
         // Business Logic calling Injected OSGi Service Methods
       }
       catch(Exception e){
         // Log exception and SEND ERROR
         LOG.error("Exception in Model",e);
         slingHttpResponse.sendError(500);
       }
    }

1 Ответ

2 голосов
/ 08 октября 2019

На обычной странице объект запроса и ответа несколько раз оборачивается большинством SlingFilters и даже самим HTL. Многие из этих реализаций просто извлекают выходные данные ответа и игнорируют остальные (например, http-заголовок, коды состояния, атрибуты запроса, ...).

Если вы делаете простой тест (просторендеринг вашего компонента), вы увидите, что оба метода работают. Если вы делаете это на простой странице основных компонентов, то вы все равно получаете 500, но страница и компонент уже отрисованы.

Вы должны пойти за исключением. Недостатком является то, что он может открывать внутренние органы для конечных пользователей. Это серьезный риск для безопасности.

Но взгляните на «Обработчик ошибок компонентов» от AEM Commons. В зависимости от режима выполнения он может заменить компонент другим фрагментом HTML.

https://adobe -consulting-services.github.io / acs-aem-commons / features / component-error-handler /index.html

...