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> { }
