Я разрабатываю REST-фасад для службы EJB, что означает, что он вызывает EJB, преобразует результат в представления, которые REST-caller поймет, а затем вернет (как json или xml). Все это великолепно. Но служба EJB выбрасывает множество исключений, e. г. когда результат не найден или несколько других случаев. Так как я не хочу, чтобы те, распространяющийся REST-вызывающему, я осуществил ExceptionMapper:Resteasy ExceptionMapper не возвращает результат
public class EjbExceptionMapper implements ExceptionMapper<EJBException> {
private static final Logger logger = LoggerFactory.getLogger(EjbExceptionMapper.class);
@Override
public Response toResponse(final EJBException exception) {
ResponseBuilder result = Response.status(Status.BAD_REQUEST);
logger.debug("Bad request:", exception);
if (exception.getCause() != null) {
final Throwable cause = exception.getCause();
if (cause instanceof NoDeliveryFoundException) {
logger.debug("Found NoDeliveryFoundException:", cause);
result = Response.status(Status.NO_CONTENT).entity(cause.getMessage());
}
}
return result.build();
}
}
Все исключения из моего EJB-службы поступите javax.ejb.EJBException
, что этот Mapper удается поймать просто отлично, с различными обычаями Исключения приложения как причины. План заключается в возврате различных ответов в зависимости от типа причины исключения EJBException. Логгер-вызовы, используемые для отладки, выполняются, если я получаю исключение NoDeliveryFoundException в качестве причины, поэтому я знаю, что он выполнен (правильно зарегистрирован Mapper и используется для сопоставления), но клиент никогда не видит ответа.
Каждый вызов, ведущий к исключению EJBException в базовой службе (и, следовательно, использование этого ExceptionMapper), вообще не приводит к отклику, как если бы метод toResponse() возвращал значение null, а не настраиваемый ответ Response.
Я даже зашел так далеко, чтобы зарегистрировать ответ прямо перед его возвратом, он существует и содержит то, что я ожидаю, поэтому я уверен, что он возвращается методом toResponse. Но все же мой клиент не получает ответа.
Итак, теперь я в тупике, и поскольку ни один поиск не смог найти кого-то, описывающего подобную проблему, я обращаюсь к вам, дорогая. ;)
Наверное, нет, поскольку моя проблема заключается не в том, что я получаю ответ с пустой сущностью или чем-то подобным. Я вообще не получаю ответа, клиент даже не получает код состояния HTTP. Пустое тело ответа было бы замечательным, если бы я, по крайней мере, получил код для клиента. – sheltem
И какой клиент вы используете? Если вы используете 'curl' с флагом' --verbose', что вы получите? – eiden
Я использовал либо браузер напрямую, либо простой клиент REST для Opera. Когда я вернусь в офис, мне придется проверять с завитом. Я не работаю в воскресенье. ;) – sheltem