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

lukaszlenart pushed a commit to branch feat/ognl-3.5-upgrade
in repository https://gitbox.apache.org/repos/asf/struts.git

commit 47718f5a8a74e99bd60317fbcf2a81080bdfa3d9
Author: Lukasz Lenart <[email protected]>
AuthorDate: Mon Apr 6 18:19:55 2026 +0200

    WW-5326 refactor(ognl): parameterize core interfaces with StrutsContext
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
---
 .../org/apache/struts2/ognl/OgnlNullHandlerWrapper.java   |  7 +++----
 .../org/apache/struts2/ognl/OgnlTypeConverterWrapper.java |  5 ++---
 .../org/apache/struts2/ognl/SecurityMemberAccess.java     |  9 ++++-----
 .../apache/struts2/ognl/XWorkTypeConverterWrapper.java    | 15 +++++++--------
 .../org/apache/struts2/ognl/accessor/RootAccessor.java    |  3 ++-
 5 files changed, 18 insertions(+), 21 deletions(-)

diff --git 
a/core/src/main/java/org/apache/struts2/ognl/OgnlNullHandlerWrapper.java 
b/core/src/main/java/org/apache/struts2/ognl/OgnlNullHandlerWrapper.java
index a90c93231..4c05b24d4 100644
--- a/core/src/main/java/org/apache/struts2/ognl/OgnlNullHandlerWrapper.java
+++ b/core/src/main/java/org/apache/struts2/ognl/OgnlNullHandlerWrapper.java
@@ -18,10 +18,9 @@
  */
 package org.apache.struts2.ognl;
 
-import ognl.OgnlContext;
 import org.apache.struts2.conversion.NullHandler;
 
-public class OgnlNullHandlerWrapper implements ognl.NullHandler {
+public class OgnlNullHandlerWrapper implements ognl.NullHandler<StrutsContext> 
{
 
     private final NullHandler wrapped;
 
@@ -30,13 +29,13 @@ public class OgnlNullHandlerWrapper implements 
ognl.NullHandler {
     }
 
     @Override
-    public Object nullMethodResult(OgnlContext context, Object target,
+    public Object nullMethodResult(StrutsContext context, Object target,
                                    String methodName, Object[] args) {
         return wrapped.nullMethodResult(context, target, methodName, args);
     }
 
     @Override
-    public Object nullPropertyValue(OgnlContext context, Object target, Object 
property) {
+    public Object nullPropertyValue(StrutsContext context, Object target, 
Object property) {
         return wrapped.nullPropertyValue(context, target, property);
     }
 
diff --git 
a/core/src/main/java/org/apache/struts2/ognl/OgnlTypeConverterWrapper.java 
b/core/src/main/java/org/apache/struts2/ognl/OgnlTypeConverterWrapper.java
index 8aad8972b..7a5023cfe 100644
--- a/core/src/main/java/org/apache/struts2/ognl/OgnlTypeConverterWrapper.java
+++ b/core/src/main/java/org/apache/struts2/ognl/OgnlTypeConverterWrapper.java
@@ -18,7 +18,6 @@
  */
 package org.apache.struts2.ognl;
 
-import ognl.OgnlContext;
 import org.apache.struts2.conversion.TypeConverter;
 
 import java.lang.reflect.Member;
@@ -26,7 +25,7 @@ import java.lang.reflect.Member;
 /**
  * Wraps an XWork type conversion class for as an OGNL TypeConverter
  */
-public class OgnlTypeConverterWrapper implements ognl.TypeConverter {
+public class OgnlTypeConverterWrapper implements 
ognl.TypeConverter<StrutsContext> {
 
     private final TypeConverter typeConverter;
 
@@ -38,7 +37,7 @@ public class OgnlTypeConverterWrapper implements 
ognl.TypeConverter {
     }
 
     @Override
-    public Object convertValue(OgnlContext context, Object target, Member 
member, String propertyName, Object value, Class<?> toType) {
+    public Object convertValue(StrutsContext context, Object target, Member 
member, String propertyName, Object value, Class<?> toType) {
         return typeConverter.convertValue(context, target, member, 
propertyName, value, toType);
     }
 
diff --git 
a/core/src/main/java/org/apache/struts2/ognl/SecurityMemberAccess.java 
b/core/src/main/java/org/apache/struts2/ognl/SecurityMemberAccess.java
index d25bbe377..424cec9c6 100644
--- a/core/src/main/java/org/apache/struts2/ognl/SecurityMemberAccess.java
+++ b/core/src/main/java/org/apache/struts2/ognl/SecurityMemberAccess.java
@@ -19,7 +19,6 @@
 package org.apache.struts2.ognl;
 
 import ognl.MemberAccess;
-import ognl.OgnlContext;
 import org.apache.commons.lang3.BooleanUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -54,7 +53,7 @@ import static 
org.apache.struts2.util.DebugUtils.logWarningForFirstOccurrence;
  * Allows access decisions to be made on the basis of whether a member is 
static or not.
  * Also blocks or allows access to properties.
  */
-public class SecurityMemberAccess implements MemberAccess {
+public class SecurityMemberAccess implements MemberAccess<StrutsContext> {
 
     private static final Logger LOG = 
LogManager.getLogger(SecurityMemberAccess.class);
 
@@ -115,7 +114,7 @@ public class SecurityMemberAccess implements MemberAccess {
     }
 
     @Override
-    public Object setup(OgnlContext context, Object target, Member member, 
String propertyName) {
+    public Object setup(StrutsContext context, Object target, Member member, 
String propertyName) {
         Object result = null;
 
         if (isAccessible(context, target, member, propertyName)) {
@@ -130,7 +129,7 @@ public class SecurityMemberAccess implements MemberAccess {
     }
 
     @Override
-    public void restore(OgnlContext context, Object target, Member member, 
String propertyName, Object state) {
+    public void restore(StrutsContext context, Object target, Member member, 
String propertyName, Object state) {
         if (state == null) {
             return;
         }
@@ -145,7 +144,7 @@ public class SecurityMemberAccess implements MemberAccess {
     }
 
     @Override
-    public boolean isAccessible(OgnlContext context, Object target, Member 
member, String propertyName) {
+    public boolean isAccessible(StrutsContext context, Object target, Member 
member, String propertyName) {
         LOG.debug("Checking access for [target: {}, member: {}, property: 
{}]", target, member, propertyName);
 
         if (member == null) {
diff --git 
a/core/src/main/java/org/apache/struts2/ognl/XWorkTypeConverterWrapper.java 
b/core/src/main/java/org/apache/struts2/ognl/XWorkTypeConverterWrapper.java
index 49112ab12..49ede9405 100644
--- a/core/src/main/java/org/apache/struts2/ognl/XWorkTypeConverterWrapper.java
+++ b/core/src/main/java/org/apache/struts2/ognl/XWorkTypeConverterWrapper.java
@@ -18,7 +18,6 @@
  */
 package org.apache.struts2.ognl;
 
-import ognl.OgnlContext;
 import org.apache.struts2.conversion.TypeConverter;
 
 import java.lang.reflect.Member;
@@ -29,19 +28,19 @@ import java.util.Map;
  */
 public class XWorkTypeConverterWrapper implements TypeConverter {
 
-    private final ognl.TypeConverter typeConverter;
+    private final ognl.TypeConverter<StrutsContext> typeConverter;
 
-    public XWorkTypeConverterWrapper(ognl.TypeConverter conv) {
+    public XWorkTypeConverterWrapper(ognl.TypeConverter<StrutsContext> conv) {
         this.typeConverter = conv;
     }
 
     @Override
     public Object convertValue(Map context, Object target, Member member, 
String propertyName, Object value, Class toType) {
-        // Cast context to OgnlContext for OGNL 3.4.8+ compatibility
-        OgnlContext ognlContext = (context instanceof OgnlContext oc) ? oc : 
null;
-        if (ognlContext == null) {
-            throw new IllegalArgumentException("Context must be an OgnlContext 
for OGNL 3.4.8+");
+        // Cast context to StrutsContext for OGNL 3.5.x compatibility
+        StrutsContext strutsContext = (context instanceof StrutsContext sc) ? 
sc : null;
+        if (strutsContext == null) {
+            throw new IllegalArgumentException("Context must be a 
StrutsContext for OGNL 3.5.x+");
         }
-        return typeConverter.convertValue(ognlContext, target, member, 
propertyName, value, toType);
+        return typeConverter.convertValue(strutsContext, target, member, 
propertyName, value, toType);
     }
 }
diff --git 
a/core/src/main/java/org/apache/struts2/ognl/accessor/RootAccessor.java 
b/core/src/main/java/org/apache/struts2/ognl/accessor/RootAccessor.java
index 50e9feea0..febfc7012 100644
--- a/core/src/main/java/org/apache/struts2/ognl/accessor/RootAccessor.java
+++ b/core/src/main/java/org/apache/struts2/ognl/accessor/RootAccessor.java
@@ -21,9 +21,10 @@ package org.apache.struts2.ognl.accessor;
 import ognl.ClassResolver;
 import ognl.MethodAccessor;
 import ognl.PropertyAccessor;
+import org.apache.struts2.ognl.StrutsContext;
 
 /**
  * @since 6.4.0
  */
-public interface RootAccessor extends PropertyAccessor, MethodAccessor, 
ClassResolver {
+public interface RootAccessor extends PropertyAccessor<StrutsContext>, 
MethodAccessor<StrutsContext>, ClassResolver<StrutsContext> {
 }

Reply via email to