This is an automated email from the ASF dual-hosted git repository.
tandraschko pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/openwebbeans.git
The following commit(s) were added to refs/heads/main by this push:
new ca7d60a73 OWB-1128 - Event.fire() - the runtime type of the event
object not validated
ca7d60a73 is described below
commit ca7d60a73109103ef32abfcabaa4b81428bbe2df
Author: tandraschko <[email protected]>
AuthorDate: Wed Apr 15 11:41:56 2026 +0200
OWB-1128 - Event.fire() - the runtime type of the event object not validated
---
.../java/org/apache/webbeans/event/EventImpl.java | 4 +-
.../org/apache/webbeans/util/WebBeansUtil.java | 5 ++-
.../WebBeansUtilValidEventTypeWildcardTest.java | 51 ++++++++++++++++++++++
3 files changed, 56 insertions(+), 4 deletions(-)
diff --git
a/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java
b/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java
index c19c44d1d..a28682253 100644
--- a/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java
+++ b/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java
@@ -106,7 +106,7 @@ public class EventImpl<T> implements Event<T>, Serializable
}
else
{
-
webBeansContext.getWebBeansUtil().validEventType(eventType.getClass(),
metadata.getType());
+ webBeansContext.getWebBeansUtil().validEventType(eventType,
metadata.getType());
doFireSyncEvent(event, metadata.select(eventType));
}
}
@@ -123,7 +123,7 @@ public class EventImpl<T> implements Event<T>, Serializable
Type eventType = event.getClass();
if (eventType != metadata.validatedType())
{
-
webBeansContext.getWebBeansUtil().validEventType(eventType.getClass(),
metadata.getType());
+ webBeansContext.getWebBeansUtil().validEventType(eventType,
metadata.getType());
return webBeansContext.getNotificationManager()
.fireEvent(event, metadata.select(eventType), false,
notificationOptions);
}
diff --git
a/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
b/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
index 78671354a..53ee8fcd6 100644
--- a/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
+++ b/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
@@ -48,7 +48,6 @@ import
org.apache.webbeans.component.creation.ObserverMethodsBuilder;
import org.apache.webbeans.component.creation.ProducerFieldBeansBuilder;
import org.apache.webbeans.component.creation.ProducerMethodBeansBuilder;
import org.apache.webbeans.config.OwbParametrizedTypeImpl;
-import org.apache.webbeans.config.OwbWildcardTypeImpl;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.container.AnnotatedTypeWrapper;
import org.apache.webbeans.container.InjectionResolver;
@@ -1598,7 +1597,9 @@ public final class WebBeansUtil
{
for (Type t :
OwbParametrizedTypeImpl.class.cast(et).getActualTypeArguments())
{
- if (OwbWildcardTypeImpl.class.isInstance(t))
+ // Wildcards are often fine; throwing on every
OwbWildcardTypeImpl broke CDI TCK
+ // wildcard cases (and Enum resolution). Still reject
loose type variables.
+ if (TypeVariable.class.isInstance(t))
{
throw new IllegalArgumentException("TypeVariable
forbidden for events");
}
diff --git
a/webbeans-impl/src/test/java/org/apache/webbeans/util/WebBeansUtilValidEventTypeWildcardTest.java
b/webbeans-impl/src/test/java/org/apache/webbeans/util/WebBeansUtilValidEventTypeWildcardTest.java
new file mode 100644
index 000000000..5c7efed85
--- /dev/null
+++
b/webbeans-impl/src/test/java/org/apache/webbeans/util/WebBeansUtilValidEventTypeWildcardTest.java
@@ -0,0 +1,51 @@
+/*
+ * 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.webbeans.util;
+
+import jakarta.enterprise.context.ApplicationScoped;
+
+import org.apache.webbeans.test.AbstractUnitTest;
+import org.junit.Test;
+
+/**
+ * {@link WebBeansUtil#validEventType(java.lang.reflect.Type,
java.lang.reflect.Type)} must not throw
+ * on every {@link org.apache.webbeans.config.OwbWildcardTypeImpl} in resolved
args (OWB-1128; CDI TCK
+ * {@code ParameterizedEventTest#testWildcardIsResolvable}). {@link Enum} hits
{@link GenericsUtil}'s
+ * shortcut that adds such a wildcard — the old blanket check failed here.
+ *
+ * @see <a href="https://issues.apache.org/jira/browse/OWB-1128">OWB-1128</a>
+ */
+public class WebBeansUtilValidEventTypeWildcardTest extends AbstractUnitTest
+{
+
+ @Test
+ public void validEventTypeAcceptsOwbWildcardFromEnumResolution()
+ {
+ startContainer(Sentinel.class);
+
+ final WebBeansUtil util = getWebBeansContext().getWebBeansUtil();
+
+ util.validEventType(Enum.class, Object.class);
+ }
+
+ @ApplicationScoped
+ public static class Sentinel
+ {
+ }
+}