This is an automated email from the ASF dual-hosted git repository.

markt 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 380fb11  Add default method support to BeanELResolver
380fb11 is described below

commit 380fb1144b9ba68494b1c42397141ebe21af8a8d
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Tue Sep 7 17:46:02 2021 +0100

    Add default method support to BeanELResolver
---
 java/jakarta/el/BeanELResolver.java     | 12 +++++++-----
 test/jakarta/el/TestBeanELResolver.java | 25 ++++++++++++++++++++++++-
 webapps/docs/changelog.xml              |  5 +++++
 3 files changed, 36 insertions(+), 6 deletions(-)

diff --git a/java/jakarta/el/BeanELResolver.java 
b/java/jakarta/el/BeanELResolver.java
index 07c7f24..2b6f455 100644
--- a/java/jakarta/el/BeanELResolver.java
+++ b/java/jakarta/el/BeanELResolver.java
@@ -215,11 +215,13 @@ public class BeanELResolver extends ELResolver {
                 for (PropertyDescriptor pd: pds) {
                     this.properties.put(pd.getName(), new BeanProperty(type, 
pd));
                 }
-                if (System.getSecurityManager() != null) {
-                    // When running with SecurityManager, some classes may be
-                    // not accessible, but have accessible interfaces.
-                    populateFromInterfaces(type);
-                }
+                /**
+                 * Populating from any interfaces solves two distinct problems:
+                 * 1. When running under a security manager, classes may be
+                 *    unaccessible but have accessible interfaces.
+                 * 2. It causes default methods to be included.
+                 */
+                populateFromInterfaces(type);
             } catch (IntrospectionException ie) {
                 throw new ELException(ie);
             }
diff --git a/test/jakarta/el/TestBeanELResolver.java 
b/test/jakarta/el/TestBeanELResolver.java
index 88fd6ff..6847aca 100644
--- a/test/jakarta/el/TestBeanELResolver.java
+++ b/test/jakarta/el/TestBeanELResolver.java
@@ -939,7 +939,22 @@ public class TestBeanELResolver {
         Assert.assertEquals(BEAN_NAME, result);
     }
 
-    private static class Bean {
+    /**
+     * Tests that a valid property implemented by a default method is resolved.
+     */
+    @Test
+    public void testGetDefaultValue() {
+        BeanELResolver resolver = new BeanELResolver();
+        ELContext context = new 
StandardELContext(ELManager.getExpressionFactory());
+
+        Object result = resolver.getValue(context, new Bean(), 
PROPERTY02_NAME);
+
+        Assert.assertEquals("Default", result);
+        Assert.assertTrue(context.isPropertyResolved());
+    }
+
+
+    private static class Bean implements MyInterface {
 
         @SuppressWarnings("unused")
         public void setValueA(String valueA) {
@@ -947,6 +962,14 @@ public class TestBeanELResolver {
         }
     }
 
+
+    public interface MyInterface {
+        default String getValueB() {
+            return "Default";
+        }
+    }
+
+
     private void doNegativeTest(Object base, Object trigger, MethodUnderTest 
method,
             boolean checkResult) {
         BeanELResolver resolver = new BeanELResolver();
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 6bb894b..be86080 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -111,6 +111,11 @@
         Deprecate <code>ELResolver.getFeatureDescriptors</code> to align Tomcat
         with recent updates in the Jakarta EL specification project. (markt)
       </scode>
+      <add>
+        Add support for default methods to <code>BeanRELResolver</code> to 
align
+        Tomcat with recent updates in the Jakarta EL specification project.
+        (markt)
+      </add>
     </changelog>
   </subsection>
 </section>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to