On 20/05/2026 21:00, Christopher Schultz wrote:
Mark,

On 5/20/26 3:47 PM, Mark Thomas wrote:
On 20/05/2026 20:36, Christopher Schultz wrote:
Mark,

Would it be worth adding conditional logic to 11.0.x and later depending upon the runtime version of Java?

I'm not sure. It would mean some form of JreCompat being added to the EL code.

Oh right I forgot about EL being somewhat segregated.

I'm leaning towards it not being worth it unless someone complains about the performance.

+1

Does that workaround just do "more work" on Java 21 and not accomplish anyting, or might it actually result in wrong behavior?

It just does unnecessary work.

Your email made me remember something I'd been thinking about for JreCompat stuff a while ago. I think there is a simple solution to this case.

/me goes and does a little coding

Yes. That works. Commit to follow shortly. Thanks for the prompt.

Mark


-chris

On 5/20/26 4:44 AM, [email protected] wrote:
This is an automated email from the ASF dual-hosted git repository.

markt-asf pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/main by this push:
      new 115bfeb411 Remove pre-Java 21 workaround
115bfeb411 is described below

commit 115bfeb4116f328938162e333b01b7671edc664e
Author: Mark Thomas <[email protected]>
AuthorDate: Wed May 20 09:44:22 2026 +0100

     Remove pre-Java 21 workaround
     Minimum Java version is 21 for Jakarta EE 12 / Tomcat 12
---
  java/jakarta/el/BeanSupportFull.java | 25 -------------------------
  1 file changed, 25 deletions(-)

diff --git a/java/jakarta/el/BeanSupportFull.java b/java/jakarta/el/ BeanSupportFull.java
index ac35a3b1ff..2311f8ca23 100644
--- a/java/jakarta/el/BeanSupportFull.java
+++ b/java/jakarta/el/BeanSupportFull.java
@@ -42,35 +42,10 @@ class BeanSupportFull extends BeanSupport {
                  for (PropertyDescriptor pd : pds) {
                      this.properties.put(pd.getName(), new BeanPropertyFull(type, pd));
                  }
-                /*
-                 * https://bugs.openjdk.org/browse/JDK-8071693 - Introspector ignores default interface methods.
-                 *
-                 * This bug is fixed in Java 21 b21. This workaround can be removed once the minimum Java version is 21. -                 * Populating from any interfaces causes default methods to be included.
-                 */
-                populateFromInterfaces(type);
              } catch (IntrospectionException ie) {
                  throw new ELException(ie);
              }
          }
-
-        private void populateFromInterfaces(Class<?> aClass) throws IntrospectionException {
-            Class<?>[] interfaces = aClass.getInterfaces();
-            for (Class<?> ifs : interfaces) {
-                BeanInfo info = Introspector.getBeanInfo(ifs);
-                PropertyDescriptor[] pds = info.getPropertyDescriptors();
-                for (PropertyDescriptor pd : pds) {
-                    if (!this.properties.containsKey(pd.getName())) {
-                        this.properties.put(pd.getName(), new BeanPropertyFull(this.type, pd));
-                    }
-                }
-                populateFromInterfaces(ifs);
-            }
-            Class<?> superclass = aClass.getSuperclass();
-            if (superclass != null) {
-                populateFromInterfaces(superclass);
-            }
-        }
      }
      static final class BeanPropertyFull extends BeanProperty {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to