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());
+        }
+    }
+}