mirror of
https://github.com/apache/struts.git
synced 2026-08-06 23:27:07 +00:00
Merge pull request #1087 from apache/kusal-depr-apis-3.5
WW-3714 Deprecate and repackage common APIs part 2.5
This commit is contained in:
@@ -248,6 +248,9 @@ public class DefaultActionInvocation implements ActionInvocation {
|
||||
Interceptor interceptor = interceptorMapping.getInterceptor();
|
||||
if (interceptor instanceof WithLazyParams) {
|
||||
interceptor = lazyParamInjector.injectParams(interceptor, interceptorMapping.getParams(), invocationContext);
|
||||
} else if (interceptor instanceof Interceptor.LegacyAdapter && ((Interceptor.LegacyAdapter) interceptor).getAdaptee() instanceof WithLazyParams) {
|
||||
org.apache.struts2.interceptor.Interceptor adaptee = ((Interceptor.LegacyAdapter) interceptor).getAdaptee();
|
||||
lazyParamInjector.injectParams(adaptee, interceptorMapping.getParams(), invocationContext);
|
||||
}
|
||||
if (interceptor instanceof ConditionalInterceptor) {
|
||||
resultCode = executeConditional((ConditionalInterceptor) interceptor);
|
||||
|
||||
@@ -70,13 +70,18 @@ public class DefaultInterceptorFactory implements InterceptorFactory {
|
||||
reflectionProvider.setProperties(params, o);
|
||||
}
|
||||
|
||||
Interceptor interceptor = null;
|
||||
if (o instanceof Interceptor) {
|
||||
Interceptor interceptor = (Interceptor) o;
|
||||
interceptor.init();
|
||||
return interceptor;
|
||||
interceptor = (Interceptor) o;
|
||||
} else if (o instanceof org.apache.struts2.interceptor.Interceptor) {
|
||||
interceptor = Interceptor.adapt((org.apache.struts2.interceptor.Interceptor) o);
|
||||
}
|
||||
|
||||
throw new ConfigurationException("Class [" + interceptorClassName + "] does not implement Interceptor", interceptorConfig);
|
||||
if (interceptor == null) {
|
||||
throw new ConfigurationException("Class [" + interceptorClassName + "] does not implement Interceptor", interceptorConfig);
|
||||
}
|
||||
interceptor.init();
|
||||
return interceptor;
|
||||
} catch (InstantiationException e) {
|
||||
cause = e;
|
||||
message = "Unable to instantiate an instance of Interceptor class [" + interceptorClassName + "].";
|
||||
|
||||
@@ -20,6 +20,7 @@ package com.opensymphony.xwork2.factory;
|
||||
|
||||
import com.opensymphony.xwork2.ObjectFactory;
|
||||
import com.opensymphony.xwork2.Result;
|
||||
import com.opensymphony.xwork2.config.ConfigurationException;
|
||||
import com.opensymphony.xwork2.config.entities.ResultConfig;
|
||||
import com.opensymphony.xwork2.inject.Inject;
|
||||
import com.opensymphony.xwork2.util.reflection.ReflectionException;
|
||||
@@ -51,19 +52,29 @@ public class DefaultResultFactory implements ResultFactory {
|
||||
Result result = null;
|
||||
|
||||
if (resultClassName != null) {
|
||||
result = (Result) objectFactory.buildBean(resultClassName, extraContext);
|
||||
Object o = objectFactory.buildBean(resultClassName, extraContext);
|
||||
|
||||
Map<String, String> params = resultConfig.getParams();
|
||||
if (params != null) {
|
||||
for (Map.Entry<String, String> paramEntry : params.entrySet()) {
|
||||
try {
|
||||
reflectionProvider.setProperty(paramEntry.getKey(), paramEntry.getValue(), result, extraContext, true);
|
||||
reflectionProvider.setProperty(paramEntry.getKey(), paramEntry.getValue(), o, extraContext, true);
|
||||
} catch (ReflectionException ex) {
|
||||
if (result instanceof ReflectionExceptionHandler) {
|
||||
((ReflectionExceptionHandler) result).handle(ex);
|
||||
if (o instanceof ReflectionExceptionHandler) {
|
||||
((ReflectionExceptionHandler) o).handle(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (o instanceof Result) {
|
||||
result = (Result) o;
|
||||
} else if (o instanceof org.apache.struts2.Result) {
|
||||
result = Result.adapt((org.apache.struts2.Result) o);
|
||||
}
|
||||
if (result == null) {
|
||||
throw new ConfigurationException("Class [" + resultClassName + "] does not implement Result", resultConfig);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
@@ -28,9 +28,32 @@ import com.opensymphony.xwork2.ActionInvocation;
|
||||
@Deprecated
|
||||
public interface ConditionalInterceptor extends org.apache.struts2.interceptor.ConditionalInterceptor, Interceptor {
|
||||
|
||||
@Override
|
||||
default boolean shouldIntercept(org.apache.struts2.ActionInvocation invocation) {
|
||||
return shouldIntercept(ActionInvocation.adapt(invocation));
|
||||
}
|
||||
|
||||
boolean shouldIntercept(ActionInvocation invocation);
|
||||
|
||||
static ConditionalInterceptor adapt(org.apache.struts2.interceptor.ConditionalInterceptor actualInterceptor) {
|
||||
if (actualInterceptor instanceof ConditionalInterceptor) {
|
||||
return (ConditionalInterceptor) actualInterceptor;
|
||||
}
|
||||
return actualInterceptor != null ? new LegacyAdapter(actualInterceptor) : null;
|
||||
}
|
||||
|
||||
class LegacyAdapter extends Interceptor.LegacyAdapter implements ConditionalInterceptor {
|
||||
|
||||
private final org.apache.struts2.interceptor.ConditionalInterceptor adaptee;
|
||||
|
||||
private LegacyAdapter(org.apache.struts2.interceptor.ConditionalInterceptor adaptee) {
|
||||
super(adaptee);
|
||||
this.adaptee = adaptee;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldIntercept(ActionInvocation invocation) {
|
||||
return adaptee.shouldIntercept(invocation);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,4 +34,42 @@ public interface Interceptor extends org.apache.struts2.interceptor.Interceptor
|
||||
}
|
||||
|
||||
String intercept(ActionInvocation invocation) throws Exception;
|
||||
|
||||
static Interceptor adapt(org.apache.struts2.interceptor.Interceptor actualInterceptor) {
|
||||
if (actualInterceptor instanceof org.apache.struts2.interceptor.ConditionalInterceptor) {
|
||||
return ConditionalInterceptor.adapt((org.apache.struts2.interceptor.ConditionalInterceptor) actualInterceptor);
|
||||
}
|
||||
if (actualInterceptor instanceof Interceptor) {
|
||||
return (Interceptor) actualInterceptor;
|
||||
}
|
||||
return actualInterceptor != null ? new LegacyAdapter(actualInterceptor) : null;
|
||||
}
|
||||
|
||||
class LegacyAdapter implements Interceptor {
|
||||
|
||||
private final org.apache.struts2.interceptor.Interceptor adaptee;
|
||||
|
||||
protected LegacyAdapter(org.apache.struts2.interceptor.Interceptor adaptee) {
|
||||
this.adaptee = adaptee;
|
||||
}
|
||||
|
||||
public org.apache.struts2.interceptor.Interceptor getAdaptee() {
|
||||
return adaptee;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String intercept(ActionInvocation invocation) throws Exception {
|
||||
return adaptee.intercept(invocation);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
adaptee.destroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
adaptee.init();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,11 +70,14 @@ public interface WithLazyParams {
|
||||
}
|
||||
|
||||
public Interceptor injectParams(Interceptor interceptor, Map<String, String> params, ActionContext invocationContext) {
|
||||
return (Interceptor) injectParams((org.apache.struts2.interceptor.Interceptor) interceptor, params, invocationContext);
|
||||
}
|
||||
|
||||
public org.apache.struts2.interceptor.Interceptor injectParams(org.apache.struts2.interceptor.Interceptor interceptor, Map<String, String> params, ActionContext invocationContext) {
|
||||
for (Map.Entry<String, String> entry : params.entrySet()) {
|
||||
Object paramValue = textParser.evaluate(new char[]{ '$' }, entry.getValue(), valueEvaluator, TextParser.DEFAULT_LOOP_COUNT);
|
||||
ognlUtil.setProperty(entry.getKey(), paramValue, interceptor, invocationContext.getContextMap());
|
||||
}
|
||||
|
||||
return interceptor;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,13 +20,14 @@ package org.apache.struts2.factory;
|
||||
|
||||
import com.opensymphony.xwork2.ObjectFactory;
|
||||
import com.opensymphony.xwork2.Result;
|
||||
import com.opensymphony.xwork2.config.ConfigurationException;
|
||||
import com.opensymphony.xwork2.config.entities.ResultConfig;
|
||||
import com.opensymphony.xwork2.factory.ResultFactory;
|
||||
import com.opensymphony.xwork2.inject.Inject;
|
||||
import com.opensymphony.xwork2.result.ParamNameAwareResult;
|
||||
import com.opensymphony.xwork2.util.reflection.ReflectionException;
|
||||
import com.opensymphony.xwork2.util.reflection.ReflectionExceptionHandler;
|
||||
import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
|
||||
import com.opensymphony.xwork2.result.ParamNameAwareResult;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@@ -53,16 +54,36 @@ public class StrutsResultFactory implements ResultFactory {
|
||||
Result result = null;
|
||||
|
||||
if (resultClassName != null) {
|
||||
result = (Result) objectFactory.buildBean(resultClassName, extraContext);
|
||||
Object o = objectFactory.buildBean(resultClassName, extraContext);
|
||||
Map<String, String> params = resultConfig.getParams();
|
||||
if (params != null) {
|
||||
setParameters(extraContext, result, params);
|
||||
setParameters(extraContext, o, params);
|
||||
}
|
||||
if (o instanceof Result) {
|
||||
result = (Result) o;
|
||||
} else if (o instanceof org.apache.struts2.Result) {
|
||||
result = Result.adapt((org.apache.struts2.Result) o);
|
||||
}
|
||||
if (result == null) {
|
||||
throw new ConfigurationException("Class [" + resultClassName + "] does not implement Result", resultConfig);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
protected void setParameters(Map<String, Object> extraContext, Result result, Map<String, String> params) {
|
||||
setParametersHelper(extraContext, result, params);
|
||||
}
|
||||
|
||||
protected void setParameters(Map<String, Object> extraContext, Object result, Map<String, String> params) {
|
||||
if (result instanceof Result) {
|
||||
setParameters(extraContext, (Result) result, params);
|
||||
} else {
|
||||
setParametersHelper(extraContext, result, params);
|
||||
}
|
||||
}
|
||||
|
||||
private void setParametersHelper(Map<String, Object> extraContext, Object result, Map<String, String> params) {
|
||||
for (Map.Entry<String, String> paramEntry : params.entrySet()) {
|
||||
try {
|
||||
String name = paramEntry.getKey();
|
||||
@@ -77,6 +98,18 @@ public class StrutsResultFactory implements ResultFactory {
|
||||
}
|
||||
|
||||
protected void setParameter(Result result, String name, String value, Map<String, Object> extraContext) {
|
||||
setParameterHelper(result, name, value, extraContext);
|
||||
}
|
||||
|
||||
private void setParameter(Object result, String name, String value, Map<String, Object> extraContext) {
|
||||
if (result instanceof Result) {
|
||||
setParameter((Result) result, name, value, extraContext);
|
||||
} else {
|
||||
setParameterHelper(result, name, value, extraContext);
|
||||
}
|
||||
}
|
||||
|
||||
private void setParameterHelper(Object result, String name, String value, Map<String, Object> extraContext) {
|
||||
if (result instanceof ParamNameAwareResult) {
|
||||
if (((ParamNameAwareResult) result).acceptableParameterName(name, value)) {
|
||||
reflectionProvider.setProperty(name, value, result, extraContext, true);
|
||||
@@ -85,5 +118,4 @@ public class StrutsResultFactory implements ResultFactory {
|
||||
reflectionProvider.setProperty(name, value, result, extraContext, true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user