У меня очень любопытная ситуация.Как я могу уловить исключение во время выполнения из EJB?
Я пытаюсь выполнить метод EJB и возвращает результат с JAX-RS
public Service readSingle(...) {
try {
service.query(...);
} catch (final NoResultException nre) {
throw new NotFoundException(...);
} catch (final NonUniqueResultException nure) {
throw new BadRequstException(...);
}
}
Метод запроса требует некоторых значений и BiFuction
и Function
.
Фактический вызов выглядит следующим образом.
try {
return serviceService.<Service>query(
id,
ofNullable(matrixParameters.getFirst("onid"))
.map(Integer::parseInt).orElse(null),
ofNullable(matrixParameters.getFirst("tsid"))
.map(Integer::parseInt).orElse(null),
ofNullable(matrixParameters.getFirst("sid"))
.map(Integer::parseInt).orElse(null),
ofNullable(matrixParameters.getFirst("number"))
.map(Integer::parseInt).orElse(null),
ofNullable(matrixParameters.getFirst("programId"))
.orElse(null),
operatorId,
(builder, root) -> emptyList(),
TypedQuery::getSingleResult);
} catch (final NoResultException nre) {
throw new NotFoundException(
"no entity idnetified by " + serviceIdSegment.getPath()
+ " with " + matrixParameters.toString());
} catch (final NonUniqueResultException nure) {
throw new BadRequestException("multiple entities identified");
}
Ok Я прошел TypedQuery::getSingleResult
и я ожидаю, NonUniqueResultException
должен быть пойман, когда он должен быть выброшен.
Но Payara продолжает отвечать 500, и журнал показывает, что NonUniqueResultException
никогда не попадал под код.
Я отключил свои ExceptionMappers, результаты такие же.