Я использую Wildfly 12 (EE 8).
Я пытаюсь поймать EJBAccessException, чтобы перебросить его как свой собственный тип исключения через мой Перехватчик, но безрезультатно. Код в моем перехватчике вообще не вызывается, когда он генерируется. Это работает и ловит другие исключения, так что я не уверен, что не так. EJB как-то не распознает мой Interceptor относительно этой «внутренней» проблемы, или он может вызываться только после того, как вызван собственный AuthorizationInterceptor Wildfly?
Мой ejb-jar.xml:
<interceptors>
<interceptor>
<interceptor-class>myExceptionInterceptor</interceptor-class>
</interceptor>
</interceptors>
<assembly-descriptor>
<interceptor-binding>
<ejb-name>*</ejb-name>
<interceptor-class>myExceptionInterceptor</interceptor-class>
</interceptor-binding>
</assembly-descriptor>
Мой файл beans.xml пуст, я также попытался поместить туда объявление Interceptor, но безрезультатно.
Мой перехватчик:
@Throws
@Interceptor
@Priority(Interceptor.Priority.APPLICATION) // Tried playing with this too
public class myExceptionInterceptor implements Serializable {
@AroundInvoke
public Object check(InvocationContext invocationContext) throws Exception {
try {
return invocationContext.proceed();
}
catch (javax.ejb.EJBAccessException e) {
//rethrow as own exception
}
Часть моего standalone.xml, касающаяся безопасности EJB:
<default-security-domain value="jaspitest"/>
<default-missing-method-permissions-deny-access value="true"/>
Привязка My Interceptor:
@Inherited
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target( {ElementType.METHOD, ElementType.TYPE} )
public @interface Throws {}
Пример боба, к которому я обращаюсь:
@Stateless
public class UserService extends Service<User> {
@RolesAllowed(Role.ADMIN)
public void delete() {}
}