summaryrefslogtreecommitdiffstatsabout
diff options
context:
space:
mode:
authorAaron Whiteside2012-04-14 19:52:25 (EDT)
committer Glyn Normington2012-05-21 09:25:13 (EDT)
commite5e5d1e2c92de514c78667042bafc6691faf212b (patch)
treede3c7b45e2da4a644bfa2dae5b2967e9345f273c
parent77a8196b7bb3733197587dee3c0bf12da22d45da (diff)
downloadorg.eclipse.gemini.blueprint-e5e5d1e2c92de514c78667042bafc6691faf212b.zip
org.eclipse.gemini.blueprint-e5e5d1e2c92de514c78667042bafc6691faf212b.tar.gz
org.eclipse.gemini.blueprint-e5e5d1e2c92de514c78667042bafc6691faf212b.tar.bz2
Spring 3.1.1 support!
- updated version in /pom.xml and boot-bundles.properties - fixed ClassUtilsTest test under Spring 3.1.1, as missing an interface when testing a classes interface hierarchy - updated TypeFactory for Spring 3.1.1 support - no more TypeDescriptor.NULL the actual reference will just be null. - added support for arrays - removed usage of deprecated methods and updated to their replacements (getElementType() -> getElementTypeDescriptor().getType(), getMapKeyType() -> type.getMapKeyTypeDescriptor().getType() and getMapValueType() -> getMapValueTypeDescriptor().getType() ). - it turns out that spring 3.1.x removed support for getting the MethodParameter of a TypeDescriptor, so we are unable to determine the ParameterizedType of any non collection/array parameter. Spring handles the collection/array ParameterizedType's automatically, but nothing else. Which is a pitty but as it turns out we were not even using this capability anyway, please see SpringBlueprintConverter where we make no use of the ReifiedType.getActualTypeArgument() method. - the best I could do was return Object.class in ReifiedType.getActualTypeArgument() for non collection/array ParameterizedType's - not that it's used anywhere anyway. - updated SpringBlueprintConverterService for Spring 3.1.1 support - no more TypeDescriptor.NULL the actual reference will just be null. - no more access to MethodParameter, so we make do with targetType.getType(). - updated TypeFactoryTest for Spring 3.1.1 support - converted to junit 4.x style - @Ignore'd three tests that can no longer work under spring 3.1.1 - added one test for arrays - fixed some typos in SpringBlueprintContainer's javadoc. Ran all unit and integration tests, no failures!
-rw-r--r--core/src/main/java/org/eclipse/gemini/blueprint/blueprint/container/SpringBlueprintContainer.java62
-rw-r--r--core/src/main/java/org/eclipse/gemini/blueprint/blueprint/container/SpringBlueprintConverterService.java12
-rw-r--r--core/src/main/java/org/eclipse/gemini/blueprint/blueprint/container/TypeFactory.java43
-rw-r--r--core/src/test/java/org/eclipse/gemini/blueprint/blueprint/container/TypeFactoryTest.java80
-rw-r--r--core/src/test/java/org/eclipse/gemini/blueprint/util/ClassUtilsTest.java5
-rw-r--r--pom.xml4
-rw-r--r--test-support/src/main/resources/org/eclipse/gemini/blueprint/test/internal/boot-bundles.properties2
7 files changed, 121 insertions, 87 deletions
diff --git a/core/src/main/java/org/eclipse/gemini/blueprint/blueprint/container/SpringBlueprintContainer.java b/core/src/main/java/org/eclipse/gemini/blueprint/blueprint/container/SpringBlueprintContainer.java
index b078cd0..bb786b1 100644
--- a/core/src/main/java/org/eclipse/gemini/blueprint/blueprint/container/SpringBlueprintContainer.java
+++ b/core/src/main/java/org/eclipse/gemini/blueprint/blueprint/container/SpringBlueprintContainer.java
@@ -1,41 +1,41 @@
-/******************************************************************************
- * Copyright (c) 2006, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * and Apache License v2.0 which accompanies this distribution.
- * The Eclipse Public License is available at
- * http://www.eclipse.org/legal/epl-v10.html and the Apache License v2.0
- * is available at http://www.opensource.org/licenses/apache2.0.php.
- * You may elect to redistribute this code under either of these licenses.
- *
- * Contributors:
- * VMware Inc.
- *****************************************************************************/
-
+/******************************************************************************
+ * Copyright (c) 2006, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * and Apache License v2.0 which accompanies this distribution.
+ * The Eclipse Public License is available at
+ * http://www.eclipse.org/legal/epl-v10.html and the Apache License v2.0
+ * is available at http://www.opensource.org/licenses/apache2.0.php.
+ * You may elect to redistribute this code under either of these licenses.
+ *
+ * Contributors:
+ * VMware Inc.
+ *****************************************************************************/
+
package org.eclipse.gemini.blueprint.blueprint.container;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedHashSet;
-import java.util.Set;
-
-import org.eclipse.gemini.blueprint.blueprint.reflect.MetadataFactory;
-import org.osgi.service.blueprint.container.BlueprintContainer;
-import org.osgi.service.blueprint.container.ComponentDefinitionException;
-import org.osgi.service.blueprint.container.NoSuchComponentException;
-import org.osgi.service.blueprint.reflect.ComponentMetadata;
-import org.springframework.beans.factory.config.BeanDefinition;
-import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.util.CollectionUtils;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import org.eclipse.gemini.blueprint.blueprint.reflect.MetadataFactory;
+import org.osgi.service.blueprint.container.BlueprintContainer;
+import org.osgi.service.blueprint.container.ComponentDefinitionException;
+import org.osgi.service.blueprint.container.NoSuchComponentException;
+import org.osgi.service.blueprint.reflect.ComponentMetadata;
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.util.CollectionUtils;
/**
- * Default {@link BlueprintContainer} implementation. Wraps a Spring's {@link ConfigurableListableBeanFactory} to the
+ * Default {@link BlueprintContainer} implementation. Wraps Spring's {@link ConfigurableListableBeanFactory} in the
* BlueprintContainer interface.
*
* <b>Note</b>: This class does not fully implements the Blueprint contract: for example it does not fire any of the
- * Blueprint events nor performs exception handling - these concerned are left to the Blueprint extender.
+ * Blueprint events nor performs exception handling - these concerns are left to the Blueprint extender.
*
* @author Adrian Colyer
* @author Costin Leau
diff --git a/core/src/main/java/org/eclipse/gemini/blueprint/blueprint/container/SpringBlueprintConverterService.java b/core/src/main/java/org/eclipse/gemini/blueprint/blueprint/container/SpringBlueprintConverterService.java
index 8f687a7..51273cb 100644
--- a/core/src/main/java/org/eclipse/gemini/blueprint/blueprint/container/SpringBlueprintConverterService.java
+++ b/core/src/main/java/org/eclipse/gemini/blueprint/blueprint/container/SpringBlueprintConverterService.java
@@ -27,7 +27,6 @@ import org.osgi.service.blueprint.container.Converter;
import org.osgi.service.blueprint.container.ReifiedType;
import org.springframework.beans.SimpleTypeConverter;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
-import org.springframework.core.MethodParameter;
import org.springframework.core.convert.ConversionException;
import org.springframework.core.convert.ConversionService;
import org.springframework.core.convert.TypeDescriptor;
@@ -90,13 +89,13 @@ public class SpringBlueprintConverterService implements ConversionService {
}
public Object convert(final Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
- if (targetType == TypeDescriptor.NULL)
+ if (targetType == null)
return source;
final ReifiedType type = TypeFactory.getType(targetType);
boolean hasSecurity = (System.getSecurityManager() != null);
AccessControlContext acc = (hasSecurity ? SecurityUtils.getAccFrom(cbf) : null);
- Object result = null;
+ Object result;
if (hasSecurity) {
result = AccessController.doPrivileged(new PrivilegedAction<Object>() {
@@ -112,9 +111,6 @@ public class SpringBlueprintConverterService implements ConversionService {
return result;
}
- MethodParameter mp = targetType.getMethodParameter();
- Class<?> tType = (mp != null && mp.getNestingLevel() > 1 ? null : targetType.getType());
-
if (!targetType.isCollection() && !targetType.isArray() && !targetType.isMap()) {
if (type.size() > 0) {
for (int i = 0; i < type.size(); i++) {
@@ -122,7 +118,7 @@ public class SpringBlueprintConverterService implements ConversionService {
if (!Object.class.equals(arg.getRawClass())) {
throw new BlueprintConverterException(
"No conversion found for generic argument(s) for reified type " + arg.getRawClass()
- + "source type " + sourceType + "| targetType =" + tType, null);
+ + "source type " + sourceType + "| targetType =" + targetType.getType(), null);
}
}
}
@@ -133,7 +129,7 @@ public class SpringBlueprintConverterService implements ConversionService {
}
lazyInitConverter();
- return typeConverter.convertIfNecessary(source, tType, targetType.getMethodParameter());
+ return typeConverter.convertIfNecessary(source, targetType.getType());
}
private void lazyInitConverter() {
diff --git a/core/src/main/java/org/eclipse/gemini/blueprint/blueprint/container/TypeFactory.java b/core/src/main/java/org/eclipse/gemini/blueprint/blueprint/container/TypeFactory.java
index 9ef181c..72e24e5 100644
--- a/core/src/main/java/org/eclipse/gemini/blueprint/blueprint/container/TypeFactory.java
+++ b/core/src/main/java/org/eclipse/gemini/blueprint/blueprint/container/TypeFactory.java
@@ -24,8 +24,6 @@ import java.util.Collections;
import java.util.List;
import org.osgi.service.blueprint.container.ReifiedType;
-import org.springframework.core.GenericTypeResolver;
-import org.springframework.core.MethodParameter;
import org.springframework.core.convert.TypeDescriptor;
import org.springframework.util.ClassUtils;
import org.springframework.util.ObjectUtils;
@@ -49,7 +47,7 @@ class TypeFactory {
}
GenericsReifiedType(TypeDescriptor descriptor) {
- super(((descriptor==TypeDescriptor.NULL) || (descriptor == null)) ? Object.class: ClassUtils.resolvePrimitiveIfNecessary(descriptor.getType()));
+ super((descriptor == null) ? Object.class: ClassUtils.resolvePrimitiveIfNecessary(descriptor.getType()));
arguments = getArguments(descriptor);
size = arguments.size();
}
@@ -70,7 +68,7 @@ class TypeFactory {
public int size() {
return size;
}
- };
+ }
static ReifiedType getType(TypeDescriptor targetType) {
return new GenericsReifiedType(targetType);
@@ -79,38 +77,37 @@ class TypeFactory {
private static List<ReifiedType> getArguments(TypeDescriptor type) {
List<ReifiedType> arguments;
- if (type== null || type == TypeDescriptor.NULL) {
+ if (type == null) {
return Collections.emptyList();
}
- // is it an array/map
- if (type.isCollection()) {
+ // is it a collection or an array
+ if (type.isCollection() || type.isArray()) {
arguments = new ArrayList<ReifiedType>(1);
- Class<?> elementType = type.getElementType();
+ Class<?> elementType = type.getElementTypeDescriptor() == null ? null : type.getElementTypeDescriptor().getType();
arguments.add(elementType != null ? new GenericsReifiedType(elementType) : OBJECT);
return arguments;
}
+ // is it a map
if (type.isMap()) {
arguments = new ArrayList<ReifiedType>(2);
- Class<?> elementType = type.getMapKeyType();
- arguments.add(elementType != null ? new GenericsReifiedType(elementType) : OBJECT);
- elementType = type.getMapValueType();
- arguments.add(elementType != null ? new GenericsReifiedType(elementType) : OBJECT);
+ Class<?> keyType = type.getMapKeyTypeDescriptor() == null ? null : type.getMapKeyTypeDescriptor().getType();
+ arguments.add(keyType != null ? new GenericsReifiedType(keyType) : OBJECT);
+ Class<?> valueType = type.getMapValueTypeDescriptor() == null ? null : type.getMapValueTypeDescriptor().getType();
+ arguments.add(valueType != null ? new GenericsReifiedType(valueType) : OBJECT);
return arguments;
}
- // check if the class is parameterized
- MethodParameter mp = type.getMethodParameter();
- if (mp != null) {
- Type targetType = GenericTypeResolver.getTargetType(mp);
- if (!(targetType instanceof Class)) {
- ReifiedType rType = getReifiedType(targetType);
- arguments = new ArrayList<ReifiedType>(1);
- arguments.add(rType);
- return arguments;
- }
- }
+ // some other generic type
+ if (type.getType().getTypeParameters() != null) {
+ arguments = new ArrayList<ReifiedType>(1);
+ for (TypeVariable tv : type.getType().getTypeParameters()) {
+ ReifiedType rType = getReifiedType(tv);
+ arguments.add(rType);
+ }
+ return arguments;
+ }
return Collections.emptyList();
}
diff --git a/core/src/test/java/org/eclipse/gemini/blueprint/blueprint/container/TypeFactoryTest.java b/core/src/test/java/org/eclipse/gemini/blueprint/blueprint/container/TypeFactoryTest.java
index 0085779..90384be 100644
--- a/core/src/test/java/org/eclipse/gemini/blueprint/blueprint/container/TypeFactoryTest.java
+++ b/core/src/test/java/org/eclipse/gemini/blueprint/blueprint/container/TypeFactoryTest.java
@@ -23,18 +23,20 @@ import java.util.Properties;
import java.util.TreeMap;
import java.util.concurrent.atomic.AtomicReference;
-import junit.framework.TestCase;
-
import org.eclipse.gemini.blueprint.blueprint.MyCustomDictionary;
+import org.junit.Ignore;
+import org.junit.Test;
import org.osgi.service.blueprint.container.ReifiedType;
import org.springframework.beans.BeanUtils;
import org.springframework.core.MethodParameter;
import org.springframework.core.convert.TypeDescriptor;
+import static org.junit.Assert.assertEquals;
+
/**
* @author Costin Leau
*/
-public class TypeFactoryTest extends TestCase {
+public class TypeFactoryTest {
private static class TestSet<A> {
@@ -48,16 +50,19 @@ public class TypeFactoryTest extends TestCase {
}
public void typedList(LinkedList<Point> arg) {
- };
+ }
+
+ public void array(Integer[] arg) {
+ }
public void extendsList(LinkedList<? extends Shape> arg) {
- };
+ }
public void superList(LinkedList<? super Shape> arg) {
- };
+ }
public void typedMap(TreeMap<Integer, Double> arg) {
- };
+ }
public void pointMap(TreeMap<String, Point> arg) {
}
@@ -84,24 +89,36 @@ public class TypeFactoryTest extends TestCase {
}
}
+ @Test
public void testJdk4Classes() throws Exception {
ReifiedType tp = getReifiedTypeFor("rawList");
assertEquals(1, tp.size());
assertEquals(List.class, tp.getRawClass());
}
+ @Test
public void testPrimitive() throws Exception {
ReifiedType tp = getReifiedTypeFor("primitive");
assertEquals(0, tp.size());
assertEquals(Integer.class, tp.getRawClass());
}
+ @Test
+ public void testArray() throws Exception {
+ ReifiedType tp = getReifiedTypeFor("array");
+ assertEquals(1, tp.size());
+ assertEquals(Integer[].class, tp.getRawClass());
+ assertEquals(Integer.class, tp.getActualTypeArgument(0).getRawClass());
+ }
+
+ @Test
public void testInteger() throws Exception {
ReifiedType tp = getReifiedTypeFor("integer");
assertEquals(0, tp.size());
assertEquals(Integer.class, tp.getRawClass());
}
+ @Test
public void testTypedObjectList() throws Exception {
ReifiedType tp = getReifiedTypeFor("typedList");
assertEquals(1, tp.size());
@@ -109,6 +126,7 @@ public class TypeFactoryTest extends TestCase {
assertEquals(Point.class, tp.getActualTypeArgument(0).getRawClass());
}
+ @Test
public void testExtendsList() throws Exception {
ReifiedType tp = getReifiedTypeFor("extendsList");
assertEquals(1, tp.size());
@@ -116,6 +134,7 @@ public class TypeFactoryTest extends TestCase {
assertEquals(Shape.class, tp.getActualTypeArgument(0).getRawClass());
}
+ @Test
public void testSuperList() throws Exception {
ReifiedType tp = getReifiedTypeFor("superList");
assertEquals(1, tp.size());
@@ -123,6 +142,7 @@ public class TypeFactoryTest extends TestCase {
assertEquals(Shape.class, tp.getActualTypeArgument(0).getRawClass());
}
+ @Test
public void testTypedMap() throws Exception {
ReifiedType tp = getReifiedTypeFor("typedMap");
assertEquals(2, tp.size());
@@ -131,6 +151,7 @@ public class TypeFactoryTest extends TestCase {
assertEquals(Double.class, tp.getActualTypeArgument(1).getRawClass());
}
+ @Test
public void testPointMap() throws Exception {
ReifiedType tp = getReifiedTypeFor("pointMap");
assertEquals(2, tp.size());
@@ -139,41 +160,59 @@ public class TypeFactoryTest extends TestCase {
assertEquals(Point.class, tp.getActualTypeArgument(1).getRawClass());
}
- public void testTypedReference() throws Exception {
+ // Since spring 3.1 the TypeDescriptor no longer contains any reference to the MethodParameter
+ // class, we we are unable to get the ParameterizedType of a method parameter.
+ // So all actual type arguments just become Object.class.
+ @Test
+ @Ignore
+ public void testTypedReference() throws Exception {
ReifiedType tp = getReifiedTypeFor("typedReference");
- assertEquals(1, tp.size());
assertEquals(AtomicReference.class, tp.getRawClass());
- assertEquals(Boolean.class, tp.getActualTypeArgument(0).getRawClass());
+ assertEquals(1, tp.size());
+ assertEquals(Boolean.class, tp.getActualTypeArgument(0).getRawClass());
}
+ @Test
public void testObjectTypedReference() throws Exception {
ReifiedType tp = getReifiedTypeFor("objectTypedReference");
- assertEquals(1, tp.size());
assertEquals(AtomicReference.class, tp.getRawClass());
- assertEquals(Object.class, tp.getActualTypeArgument(0).getRawClass());
+ assertEquals(1, tp.size());
+ assertEquals(Object.class, tp.getActualTypeArgument(0).getRawClass());
}
+ @Test
public void testWildcardReference() throws Exception {
ReifiedType tp = getReifiedTypeFor("wildcardReference");
- assertEquals(1, tp.size());
assertEquals(AtomicReference.class, tp.getRawClass());
- assertEquals(Object.class, tp.getActualTypeArgument(0).getRawClass());
+ assertEquals(1, tp.size());
+ assertEquals(Object.class, tp.getActualTypeArgument(0).getRawClass());
}
+ // Since spring 3.1 the TypeDescriptor no longer contains any reference to the MethodParameter
+ // class, we we are unable to get the ParameterizedType of a method parameter.
+ // So all actual type arguments just become Object.class.
+ @Test
+ @Ignore
public void testSuperReference() throws Exception {
ReifiedType tp = getReifiedTypeFor("superTypedReference");
- assertEquals(1, tp.size());
assertEquals(AtomicReference.class, tp.getRawClass());
- assertEquals(Properties.class, tp.getActualTypeArgument(0).getRawClass());
+ assertEquals(1, tp.size());
+ assertEquals(Properties.class, tp.getActualTypeArgument(0).getRawClass());
}
+ // Since spring 3.1 the TypeDescriptor no longer contains any reference to the MethodParameter
+ // class, we we are unable to get the ParameterizedType of a method parameter.
+ // So all actual type arguments just come Object.class.
+ @Test
+ @Ignore
public void testExtendsReference() throws Exception {
ReifiedType tp = getReifiedTypeFor("extendsTypedReference");
- assertEquals(1, tp.size());
assertEquals(AtomicReference.class, tp.getRawClass());
- assertEquals(Properties.class, tp.getActualTypeArgument(0).getRawClass());
+ assertEquals(1, tp.size());
+ assertEquals(Properties.class, tp.getActualTypeArgument(0).getRawClass());
}
+ @Test
public void testTypeVariable() throws Exception {
ReifiedType tp = getReifiedTypeFor("typeVariable");
assertEquals(1, tp.size());
@@ -181,6 +220,7 @@ public class TypeFactoryTest extends TestCase {
assertEquals(Object.class, tp.getActualTypeArgument(0).getRawClass());
}
+ @Test
public void testCustomDictionary() throws Exception {
ReifiedType tp = getReifiedTypeFor("customDictionary");
assertEquals(2, tp.size());
@@ -189,8 +229,9 @@ public class TypeFactoryTest extends TestCase {
assertEquals(Object.class, tp.getActualTypeArgument(1).getRawClass());
}
+ @Test
public void testUnknownType() throws Exception {
- ReifiedType type = TypeFactory.getType(TypeDescriptor.NULL);
+ ReifiedType type = TypeFactory.getType(TypeDescriptor.forObject(null));
assertEquals(Object.class, type.getRawClass());
}
@@ -199,5 +240,4 @@ public class TypeFactoryTest extends TestCase {
TypeDescriptor td = new TypeDescriptor(new MethodParameter(mt, 0));
return TypeFactory.getType(td);
}
-
} \ No newline at end of file
diff --git a/core/src/test/java/org/eclipse/gemini/blueprint/util/ClassUtilsTest.java b/core/src/test/java/org/eclipse/gemini/blueprint/util/ClassUtilsTest.java
index 69830dd..593a97b 100644
--- a/core/src/test/java/org/eclipse/gemini/blueprint/util/ClassUtilsTest.java
+++ b/core/src/test/java/org/eclipse/gemini/blueprint/util/ClassUtilsTest.java
@@ -38,6 +38,7 @@ import org.springframework.context.Lifecycle;
import org.springframework.context.MessageSource;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.AbstractRefreshableApplicationContext;
+import org.springframework.core.env.EnvironmentCapable;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.io.support.ResourcePatternResolver;
@@ -80,7 +81,7 @@ public class ClassUtilsTest extends TestCase {
Class<?>[] clazz = ClassUtils.getAllInterfaces(DelegatedExecutionOsgiBundleApplicationContext.class);
Class<?>[] expected =
{ ConfigurableOsgiBundleApplicationContext.class, ConfigurableApplicationContext.class,
- ApplicationContext.class, Lifecycle.class, ListableBeanFactory.class,
+ ApplicationContext.class, Lifecycle.class, EnvironmentCapable.class, ListableBeanFactory.class,
HierarchicalBeanFactory.class, MessageSource.class, ApplicationEventPublisher.class,
ResourcePatternResolver.class, BeanFactory.class, ResourceLoader.class };
@@ -98,7 +99,7 @@ public class ClassUtilsTest extends TestCase {
DefaultResourceLoader.class, ResourceLoader.class,
DelegatedExecutionOsgiBundleApplicationContext.class,
ConfigurableOsgiBundleApplicationContext.class, ConfigurableApplicationContext.class,
- ApplicationContext.class, Lifecycle.class, ListableBeanFactory.class,
+ ApplicationContext.class, Lifecycle.class, EnvironmentCapable.class, ListableBeanFactory.class,
HierarchicalBeanFactory.class, ApplicationEventPublisher.class, ResourcePatternResolver.class,
MessageSource.class, BeanFactory.class, DisposableBean.class };
diff --git a/pom.xml b/pom.xml
index 7cecad2..a4700f1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,8 +29,8 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- Spring version -->
- <spring.maven.artifact.version>3.0.7.RELEASE</spring.maven.artifact.version>
- <spring.base.version>3.0.0</spring.base.version>
+ <spring.maven.artifact.version>3.1.1.RELEASE</spring.maven.artifact.version>
+ <spring.base.version>3.1.0</spring.base.version>
<symName.prefix>org.eclipse.gemini.blueprint</symName.prefix>
<spring.osgi.symbolic.name>${project.groupId}.${project.artifactId}</spring.osgi.symbolic.name>
diff --git a/test-support/src/main/resources/org/eclipse/gemini/blueprint/test/internal/boot-bundles.properties b/test-support/src/main/resources/org/eclipse/gemini/blueprint/test/internal/boot-bundles.properties
index 53c2c60..ca69c84 100644
--- a/test-support/src/main/resources/org/eclipse/gemini/blueprint/test/internal/boot-bundles.properties
+++ b/test-support/src/main/resources/org/eclipse/gemini/blueprint/test/internal/boot-bundles.properties
@@ -19,7 +19,7 @@
ignore.junit.version=4.9.0
ignore.log4j.version=1.2.16
-ignore.spring.version=3.0.7.RELEASE
+ignore.spring.version=3.1.1.RELEASE
ignore.gemini.blueprint.version=1.0.1.BUILD-SNAPSHOT
ignore.slf4j.version=1.6.4
ignore.asm.version=2.2.3