You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by rs...@apache.org on 2014/09/29 13:36:27 UTC
svn commit: r1628162 -
/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
Author: rsandtner
Date: Mon Sep 29 11:36:27 2014
New Revision: 1628162
URL: http://svn.apache.org/r1628162
Log:
OWB-1011 intercepted beans must be proxyable, added validation
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java?rev=1628162&r1=1628161&r2=1628162&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java Mon Sep 29 11:36:27 2014
@@ -41,8 +41,10 @@ import javax.enterprise.inject.spi.Annot
import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.spi.Decorator;
+import javax.enterprise.inject.spi.DeploymentException;
import javax.enterprise.inject.spi.InterceptionType;
import javax.enterprise.inject.spi.Interceptor;
+import javax.inject.Inject;
import javax.interceptor.ExcludeClassInterceptors;
import javax.interceptor.Interceptors;
import javax.interceptor.InvocationContext;
@@ -184,16 +186,36 @@ public class InterceptorResolutionServic
List<Interceptor<?>> cdiConstructorInterceptors = new ArrayList<Interceptor<?>>(allUsedConstructorCdiInterceptors);
Collections.sort(cdiConstructorInterceptors, new InterceptorComparator(webBeansContext));
- if (Modifier.isFinal(annotatedType.getJavaClass().getModifiers()) &&
- (allUsedEjbInterceptors.size() > 0 ||
- allUsedCdiInterceptors.size() > 0 ||
- lifecycleMethodInterceptorInfos.size() > 0 ||
- (decorators != null && decorators.size() > 0)))
+ boolean interceptedBean = allUsedEjbInterceptors.size() > 0 ||
+ allUsedCdiInterceptors.size() > 0 ||
+ lifecycleMethodInterceptorInfos.size() > 0;
+
+ if ((interceptedBean || decorators.size() > 0) && Modifier.isFinal(annotatedType.getJavaClass().getModifiers()))
{
- throw new WebBeansConfigurationException("Cannot apply Decorators or Interceptors on a final class: "
+ throw new WebBeansConfigurationException("Cannot apply Decorators or Interceptors on a final class: "
+ annotatedType.getJavaClass().getName());
}
-
+
+ // if we have an interceptedBean, the bean must be proxyable in any case (also @Dependent)
+ if (interceptedBean)
+ {
+ boolean proxyable = false;
+ for (AnnotatedConstructor<T> constructor : annotatedType.getConstructors())
+ {
+ if ((constructor.getParameters().isEmpty() && !isUnproxyable(constructor)) ||
+ constructor.isAnnotationPresent(Inject.class))
+ {
+ proxyable = true;
+ break;
+ }
+ }
+
+ if (!proxyable)
+ {
+ throw new DeploymentException("Intercepted Bean " + annotatedType.getBaseType() + " must be proxyable");
+ }
+ }
+
return new BeanInterceptorInfo(decorators, allUsedEjbInterceptors,
cdiInterceptors, cdiConstructorInterceptors,
selfInterceptorBean,