You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2017/06/14 13:03:23 UTC
tomee git commit: TOMEE-2064 avoid NPE if no constructor interceptors
are used on ejb, thanks Svetlin Zarev for the patch
Repository: tomee
Updated Branches:
refs/heads/master 29c7594ba -> 97c27de3b
TOMEE-2064 avoid NPE if no constructor interceptors are used on ejb, thanks Svetlin Zarev for the patch
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/97c27de3
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/97c27de3
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/97c27de3
Branch: refs/heads/master
Commit: 97c27de3b078f23c470f7b7175e14f2debff4840
Parents: 29c7594
Author: rmannibucau <rm...@apache.org>
Authored: Wed Jun 14 15:03:03 2017 +0200
Committer: rmannibucau <rm...@apache.org>
Committed: Wed Jun 14 15:03:03 2017 +0200
----------------------------------------------------------------------
.../java/org/apache/openejb/cdi/CdiEjbBean.java | 12 ++--
.../StatelessWithAroundInvokeOnlyTest.java | 67 ++++++++++++++++++++
2 files changed, 75 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/97c27de3/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
index 9f46e60..34dbd33 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
@@ -529,10 +529,14 @@ public class CdiEjbBean<T> extends BaseEjbBean<T> implements InterceptedMarker,
final Map<Constructor<?>, InterceptorResolutionService.BusinessMethodInterceptorInfo> constructorInterceptorInfos =
interceptorInfo.getConstructorInterceptorInfos();
if (!constructorInterceptorInfos.isEmpty()) { // were missed by OWB
- for (final javax.enterprise.inject.spi.Interceptor interceptorBean : constructorInterceptorInfos.values().iterator().next().getEjbInterceptors()) {
- if (!interceptorInstances.containsKey(interceptorBean)) {
- ccImpl.putContextual(interceptorBean);
- interceptorInstances.put(interceptorBean, interceptorBean.create(ccImpl));
+ final javax.enterprise.inject.spi.Interceptor<?>[] ejbInterceptors = constructorInterceptorInfos.values().iterator().next().getEjbInterceptors();
+
+ if (null != ejbInterceptors) {
+ for (final javax.enterprise.inject.spi.Interceptor interceptorBean : ejbInterceptors) {
+ if (!interceptorInstances.containsKey(interceptorBean)) {
+ ccImpl.putContextual(interceptorBean);
+ interceptorInstances.put(interceptorBean, interceptorBean.create(ccImpl));
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/97c27de3/container/openejb-core/src/test/java/org/apache/openejb/interceptors/StatelessWithAroundInvokeOnlyTest.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/interceptors/StatelessWithAroundInvokeOnlyTest.java b/container/openejb-core/src/test/java/org/apache/openejb/interceptors/StatelessWithAroundInvokeOnlyTest.java
new file mode 100644
index 0000000..0b78199
--- /dev/null
+++ b/container/openejb-core/src/test/java/org/apache/openejb/interceptors/StatelessWithAroundInvokeOnlyTest.java
@@ -0,0 +1,67 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.interceptors;
+
+import org.apache.openejb.jee.Empty;
+import org.apache.openejb.jee.StatelessBean;
+import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.testing.Classes;
+import org.apache.openejb.testing.Module;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.InvocationContext;
+
+import static org.testng.Assert.assertEquals;
+
+@RunWith(ApplicationComposer.class)
+public class StatelessWithAroundInvokeOnlyTest {
+ @EJB
+ private StatelessTestBean stateless;
+
+ @Test
+ public void testAroundInvoke() {
+ final int param = 1;
+ final int result = stateless.execute(param);
+ assertEquals(result, param);
+ }
+
+ @Module
+ @Classes(cdi = true)
+ public StatelessBean bean() {
+ final StatelessBean bean = new StatelessBean(StatelessTestBean.class);
+ bean.setLocalBean(new Empty());
+ return bean;
+ }
+
+ @Stateless
+ public static class StatelessTestBean {
+
+ public int execute(int x) {
+ return -x;
+ }
+
+ @AroundInvoke
+ private Object aroundInvoke(InvocationContext ctx) throws Exception {
+ final Integer result = (Integer) ctx.proceed();
+ return Integer.valueOf(-result.intValue());
+ }
+ }
+}