Catch up with the latest Spring Framework 5 snapshot
This commit is contained in:
@@ -67,7 +67,7 @@ subprojects { subproject ->
|
||||
log4jVersion = "2.7"
|
||||
servletVersion = "3.1.0"
|
||||
slf4jVersion = "1.7.22"
|
||||
springVersion = "5.0.0.M4"
|
||||
springVersion = "5.0.0.BUILD-SNAPSHOT"
|
||||
springSecurityVersion = "4.2.1.RELEASE"
|
||||
tiles3Version = "3.0.7"
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ import java.util.TreeSet;
|
||||
|
||||
import org.springframework.binding.convert.ConversionExecutor;
|
||||
import org.springframework.binding.convert.ConversionService;
|
||||
import org.springframework.core.GenericCollectionTypeResolver;
|
||||
import org.springframework.core.ResolvableType;
|
||||
|
||||
/**
|
||||
* Special converter that converts from a source array to a target collection. Supports the selection of an
|
||||
@@ -137,8 +137,7 @@ public class ArrayToCollection implements TwoWayConverter {
|
||||
if (elementConverter != null) {
|
||||
return elementConverter;
|
||||
} else {
|
||||
Class<?> elementType = GenericCollectionTypeResolver
|
||||
.getCollectionType((Class<? extends Collection<?>>) targetClass);
|
||||
Class<?> elementType = ResolvableType.forClass(targetClass).asCollection().resolveGeneric(0);
|
||||
if (elementType != null) {
|
||||
Class<?> componentType = source.getClass().getComponentType();
|
||||
return conversionService.getConversionExecutor(componentType, elementType);
|
||||
|
||||
@@ -5,7 +5,7 @@ import java.util.Collection;
|
||||
import org.springframework.binding.convert.ConversionExecutor;
|
||||
import org.springframework.binding.convert.ConversionService;
|
||||
import org.springframework.core.CollectionFactory;
|
||||
import org.springframework.core.GenericCollectionTypeResolver;
|
||||
import org.springframework.core.ResolvableType;
|
||||
|
||||
/**
|
||||
* A converter that can convert from one collection type to another.
|
||||
@@ -66,7 +66,7 @@ public class CollectionToCollection implements Converter {
|
||||
if (elementConverter != null) {
|
||||
return elementConverter;
|
||||
} else {
|
||||
Class<?> elementType = GenericCollectionTypeResolver.getCollectionType(targetClass);
|
||||
Class<?> elementType = ResolvableType.forClass(targetClass).asCollection().resolveGeneric(0);
|
||||
if (elementType != null) {
|
||||
Class<?> componentType = source.getClass().getComponentType();
|
||||
return conversionService.getConversionExecutor(componentType, elementType);
|
||||
|
||||
@@ -20,7 +20,7 @@ import java.util.Collection;
|
||||
import org.springframework.binding.convert.ConversionExecutor;
|
||||
import org.springframework.binding.convert.ConversionService;
|
||||
import org.springframework.core.CollectionFactory;
|
||||
import org.springframework.core.GenericCollectionTypeResolver;
|
||||
import org.springframework.core.ResolvableType;
|
||||
|
||||
/**
|
||||
* Special two-way converter that converts an object to an single-element collection. Supports type conversion of the
|
||||
@@ -82,7 +82,7 @@ public class ObjectToCollection implements Converter {
|
||||
if (elementConverter != null) {
|
||||
return elementConverter;
|
||||
} else {
|
||||
Class<?> elementType = GenericCollectionTypeResolver.getCollectionType(targetClass);
|
||||
Class<?> elementType = ResolvableType.forClass(targetClass).asCollection().resolveGeneric(0);
|
||||
if (elementType != null) {
|
||||
Class<?> componentType = source.getClass().getComponentType();
|
||||
return conversionService.getConversionExecutor(componentType, elementType);
|
||||
|
||||
@@ -16,19 +16,14 @@
|
||||
package org.springframework.faces.webflow;
|
||||
|
||||
import javax.el.CompositeELResolver;
|
||||
import javax.el.ELContext;
|
||||
import javax.el.ELResolver;
|
||||
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.beans.factory.access.el.SpringBeanELResolver;
|
||||
import org.springframework.beans.factory.support.StaticListableBeanFactory;
|
||||
import org.springframework.binding.expression.el.MapAdaptableELResolver;
|
||||
import org.springframework.webflow.execution.RequestContext;
|
||||
import org.springframework.webflow.execution.RequestContextHolder;
|
||||
import org.springframework.webflow.expression.el.FlowResourceELResolver;
|
||||
import org.springframework.webflow.expression.el.ImplicitFlowVariableELResolver;
|
||||
import org.springframework.webflow.expression.el.RequestContextELResolver;
|
||||
import org.springframework.webflow.expression.el.ScopeSearchingELResolver;
|
||||
import org.springframework.webflow.expression.el.SpringBeanWebFlowELResolver;
|
||||
|
||||
/**
|
||||
* Custom {@link ELResolver} for resolving web flow specific expressions.
|
||||
@@ -46,21 +41,7 @@ public class FlowELResolver extends CompositeELResolver {
|
||||
add(new FlowResourceELResolver());
|
||||
add(new ScopeSearchingELResolver());
|
||||
add(new MapAdaptableELResolver());
|
||||
add(new BeanELResolver());
|
||||
}
|
||||
|
||||
private static class BeanELResolver extends SpringBeanELResolver {
|
||||
|
||||
private static final BeanFactory EMPTY_BEAN_FACTORY = new StaticListableBeanFactory();
|
||||
|
||||
protected BeanFactory getBeanFactory(ELContext elContext) {
|
||||
RequestContext requestContext = RequestContextHolder.getRequestContext();
|
||||
if (requestContext == null) {
|
||||
return EMPTY_BEAN_FACTORY;
|
||||
}
|
||||
BeanFactory beanFactory = requestContext.getActiveFlow().getApplicationContext();
|
||||
return beanFactory != null ? beanFactory : EMPTY_BEAN_FACTORY;
|
||||
}
|
||||
add(new SpringBeanWebFlowELResolver());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -15,10 +15,17 @@
|
||||
*/
|
||||
package org.springframework.webflow.expression.el;
|
||||
|
||||
import java.beans.FeatureDescriptor;
|
||||
import java.util.Iterator;
|
||||
import javax.el.ELContext;
|
||||
import javax.el.ELException;
|
||||
import javax.el.ELResolver;
|
||||
import javax.el.PropertyNotWritableException;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.beans.factory.access.el.SpringBeanELResolver;
|
||||
import org.springframework.beans.factory.support.StaticListableBeanFactory;
|
||||
import org.springframework.webflow.execution.RequestContext;
|
||||
import org.springframework.webflow.execution.RequestContextHolder;
|
||||
@@ -27,7 +34,9 @@ import org.springframework.webflow.execution.RequestContextHolder;
|
||||
* EL resolver for resolving Spring Beans accessible by a flow's bean factory.
|
||||
* @author Jeremy Grelle
|
||||
*/
|
||||
public class SpringBeanWebFlowELResolver extends SpringBeanELResolver {
|
||||
public class SpringBeanWebFlowELResolver extends ELResolver {
|
||||
|
||||
private static final Log logger = LogFactory.getLog(SpringBeanWebFlowELResolver.class);
|
||||
|
||||
private static final BeanFactory EMPTY_BEAN_FACTORY = new StaticListableBeanFactory();
|
||||
|
||||
@@ -53,4 +62,76 @@ public class SpringBeanWebFlowELResolver extends SpringBeanELResolver {
|
||||
return requestContext != null ? requestContext : RequestContextHolder.getRequestContext();
|
||||
}
|
||||
|
||||
// ELResolver implementatio...
|
||||
|
||||
@Override
|
||||
public Object getValue(ELContext elContext, Object base, Object property) throws ELException {
|
||||
if (base == null) {
|
||||
String beanName = property.toString();
|
||||
BeanFactory bf = getBeanFactory(elContext);
|
||||
if (bf.containsBean(beanName)) {
|
||||
if (logger.isTraceEnabled()) {
|
||||
logger.trace("Successfully resolved variable '" + beanName + "' in Spring BeanFactory");
|
||||
}
|
||||
elContext.setPropertyResolved(true);
|
||||
return bf.getBean(beanName);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> getType(ELContext elContext, Object base, Object property) throws ELException {
|
||||
if (base == null) {
|
||||
String beanName = property.toString();
|
||||
BeanFactory bf = getBeanFactory(elContext);
|
||||
if (bf.containsBean(beanName)) {
|
||||
elContext.setPropertyResolved(true);
|
||||
return bf.getType(beanName);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValue(ELContext elContext, Object base, Object property, Object value) throws ELException {
|
||||
if (base == null) {
|
||||
String beanName = property.toString();
|
||||
BeanFactory bf = getBeanFactory(elContext);
|
||||
if (bf.containsBean(beanName)) {
|
||||
if (value == bf.getBean(beanName)) {
|
||||
// Setting the bean reference to the same value is alright - can simply be ignored...
|
||||
elContext.setPropertyResolved(true);
|
||||
}
|
||||
else {
|
||||
throw new PropertyNotWritableException(
|
||||
"Variable '" + beanName + "' refers to " +
|
||||
"a Spring bean which by definition is not writable");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isReadOnly(ELContext elContext, Object base, Object property) throws ELException {
|
||||
if (base == null) {
|
||||
String beanName = property.toString();
|
||||
BeanFactory bf = getBeanFactory(elContext);
|
||||
if (bf.containsBean(beanName)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext elContext, Object base) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> getCommonPropertyType(ELContext elContext, Object base) {
|
||||
return Object.class;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user