WW-5326 refactor(ognl): parameterize core interfaces with StrutsContext

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Lukasz Lenart
2026-04-06 18:19:55 +02:00
parent e2e8fa1f33
commit 47718f5a8a
5 changed files with 18 additions and 21 deletions
@@ -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);
}
@@ -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);
}
@@ -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) {
@@ -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);
}
}
@@ -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> {
}