Merge pull request #29 from jbonofre/XBEAN-304

[XBEAN-304] Support all Spring versions, including Spring 5.3.x
diff --git a/pom.xml b/pom.xml
index ce57913..e597fe7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -66,6 +66,7 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 
         <asm.version>9.3</asm.version>
+        <spring.version>5.3.18</spring.version>
 
         <xbean.automatic.module.name>${project.groupId}</xbean.automatic.module.name>
     </properties>
@@ -282,19 +283,19 @@
             <dependency>
                 <groupId>org.springframework</groupId>
                 <artifactId>spring-beans</artifactId>
-                <version>2.5.6</version>
+                <version>${spring.version}</version>
             </dependency>
 
             <dependency>
                 <groupId>org.springframework</groupId>
                 <artifactId>spring-context</artifactId>
-                <version>2.5.6</version>
+                <version>${spring.version}</version>
             </dependency>
 
             <dependency>
                 <groupId>org.springframework</groupId>
                 <artifactId>spring-web</artifactId>
-                <version>2.5.6</version>
+                <version>${spring.version}</version>
             </dependency>
 
             <dependency>
diff --git a/xbean-spring/pom.xml b/xbean-spring/pom.xml
index a01c187..8efaa9d 100644
--- a/xbean-spring/pom.xml
+++ b/xbean-spring/pom.xml
@@ -132,9 +132,9 @@
                         <Import-Package>
                             com.thoughtworks.qdox*;resolution:=optional,
                             org.apache.tools.ant*;resolution:=optional,
-                            org.springframework.*;version="[2.5,4)",
-                            org.springframework.core;resolution:=optional;version="[2.5,4)",
-                            org.springframework.web*;resolution:=optional;version="[2.5,4)",
+                            org.springframework.*;version="[3,6)",
+                            org.springframework.core;resolution:=optional;version="[3,6)",
+                            org.springframework.web*;resolution:=optional;version="[3,6)",
                             *
                         </Import-Package>
                         <DynamicImport-Package>META-INF.services.org.apache.xbean.spring.*,META-INF.services.org.xbean.spring</DynamicImport-Package>
diff --git a/xbean-spring/src/main/java/org/apache/xbean/spring/context/ClassPathXmlApplicationContext.java b/xbean-spring/src/main/java/org/apache/xbean/spring/context/ClassPathXmlApplicationContext.java
index a1e2c23..c57ac27 100644
--- a/xbean-spring/src/main/java/org/apache/xbean/spring/context/ClassPathXmlApplicationContext.java
+++ b/xbean-spring/src/main/java/org/apache/xbean/spring/context/ClassPathXmlApplicationContext.java
@@ -162,6 +162,11 @@
         }
     }
 
+    @Override
+    protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader) {
+        reader.setValidating(false);
+    }
+
     /**
      * {@inheritDoc}
      */
diff --git a/xbean-spring/src/main/java/org/apache/xbean/spring/context/FileSystemXmlApplicationContext.java b/xbean-spring/src/main/java/org/apache/xbean/spring/context/FileSystemXmlApplicationContext.java
index 06ed419..07bc2ee 100644
--- a/xbean-spring/src/main/java/org/apache/xbean/spring/context/FileSystemXmlApplicationContext.java
+++ b/xbean-spring/src/main/java/org/apache/xbean/spring/context/FileSystemXmlApplicationContext.java
@@ -150,6 +150,11 @@
         }
     }
 
+    @Override
+    protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader) {
+        reader.setValidating(false);
+    }
+
     /**
      * {@inheritDoc}
      */
diff --git a/xbean-spring/src/main/java/org/apache/xbean/spring/context/ResourceXmlApplicationContext.java b/xbean-spring/src/main/java/org/apache/xbean/spring/context/ResourceXmlApplicationContext.java
index 97dedde..4588c0b 100644
--- a/xbean-spring/src/main/java/org/apache/xbean/spring/context/ResourceXmlApplicationContext.java
+++ b/xbean-spring/src/main/java/org/apache/xbean/spring/context/ResourceXmlApplicationContext.java
@@ -103,6 +103,11 @@
         initBeanDefinitionReader(beanDefinitionReader);
         loadBeanDefinitions(beanDefinitionReader);
     }
+
+    @Override
+    protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader) {
+        reader.setValidating(false);
+    }
     
     /**
      * {@inheritDoc}
diff --git a/xbean-spring/src/main/java/org/apache/xbean/spring/context/XmlWebApplicationContext.java b/xbean-spring/src/main/java/org/apache/xbean/spring/context/XmlWebApplicationContext.java
index 6d8e9ac..b1abda7 100644
--- a/xbean-spring/src/main/java/org/apache/xbean/spring/context/XmlWebApplicationContext.java
+++ b/xbean-spring/src/main/java/org/apache/xbean/spring/context/XmlWebApplicationContext.java
@@ -53,6 +53,11 @@
         this.xmlPreprocessors = xmlPreprocessors;
     }
 
+    @Override
+    protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader) {
+        reader.setValidating(false);
+    }
+
     /**
      * {@inheritDoc}
      */
diff --git a/xbean-spring/src/main/java/org/apache/xbean/spring/context/v2/XBeanBeanDefinitionDocumentReader.java b/xbean-spring/src/main/java/org/apache/xbean/spring/context/v2/XBeanBeanDefinitionDocumentReader.java
index 9aea83c..1ad5579 100644
--- a/xbean-spring/src/main/java/org/apache/xbean/spring/context/v2/XBeanBeanDefinitionDocumentReader.java
+++ b/xbean-spring/src/main/java/org/apache/xbean/spring/context/v2/XBeanBeanDefinitionDocumentReader.java
@@ -44,6 +44,20 @@
         return delegate;
     }
 
+    // introduced in Spring 3.1
+    protected BeanDefinitionParserDelegate createHelper(XmlReaderContext readerContext, Element root, BeanDefinitionParserDelegate parentDelegate) {
+        BeanDefinitionParserDelegate delegate = XBeanV2Helper.createParser(readerContext);
+        delegate.initDefaults(root, parentDelegate);
+        return delegate;
+    }
+
+    // introduced in Spring 4
+    protected BeanDefinitionParserDelegate createDelegate(XmlReaderContext readerContext, Element root, BeanDefinitionParserDelegate parentDelegate) {
+        BeanDefinitionParserDelegate delegate = XBeanV2Helper.createParser(readerContext);
+        delegate.initDefaults(root, parentDelegate);
+        return delegate;
+    }
+
     protected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate) {
         String namespaceUri = root.getNamespaceURI();
         if (!DomUtils.nodeNameEquals(root, "beans") && 
diff --git a/xbean-spring/src/main/java/org/apache/xbean/spring/context/v2c/XBeanNamespaceHandler.java b/xbean-spring/src/main/java/org/apache/xbean/spring/context/v2c/XBeanNamespaceHandler.java
index 35cc949..8f1ecdf 100644
--- a/xbean-spring/src/main/java/org/apache/xbean/spring/context/v2c/XBeanNamespaceHandler.java
+++ b/xbean-spring/src/main/java/org/apache/xbean/spring/context/v2c/XBeanNamespaceHandler.java
@@ -126,12 +126,15 @@
             BeanDefinitionParserDelegate.DEPENDS_ON_ATTRIBUTE, 
             BeanDefinitionParserDelegate.FACTORY_METHOD_ATTRIBUTE, 
             BeanDefinitionParserDelegate.FACTORY_BEAN_ATTRIBUTE,
-            BeanDefinitionParserDelegate.DEPENDENCY_CHECK_ATTRIBUTE, 
+            // removed in Spring 5
+            "dependency-check",
             BeanDefinitionParserDelegate.AUTOWIRE_ATTRIBUTE, 
             BeanDefinitionParserDelegate.INIT_METHOD_ATTRIBUTE, 
             BeanDefinitionParserDelegate.DESTROY_METHOD_ATTRIBUTE,
-            BeanDefinitionParserDelegate.ABSTRACT_ATTRIBUTE, 
-            BeanDefinitionParserDelegate.SINGLETON_ATTRIBUTE, 
+            BeanDefinitionParserDelegate.ABSTRACT_ATTRIBUTE,
+            BeanDefinitionParserDelegate.SCOPE_ATTRIBUTE,
+            // removed in Spring 4
+            "singleton",
             BeanDefinitionParserDelegate.LAZY_INIT_ATTRIBUTE };
 
     private static final String JAVA_PACKAGE_PREFIX = "java://";
diff --git a/xbean-spring/src/test/resources/org/apache/xbean/spring/jndi/jndi.xml b/xbean-spring/src/test/resources/org/apache/xbean/spring/jndi/jndi.xml
index be8d586..ba1f6ac 100644
--- a/xbean-spring/src/test/resources/org/apache/xbean/spring/jndi/jndi.xml
+++ b/xbean-spring/src/test/resources/org/apache/xbean/spring/jndi/jndi.xml
@@ -19,7 +19,7 @@
 -->
 <!-- START SNIPPET: jndi -->
 <beans>
-  <bean id="jndi" class="org.apache.xbean.spring.jndi.DefaultContext" singleton="true">
+  <bean id="jndi" class="org.apache.xbean.spring.jndi.DefaultContext" scope="singleton">
     <property name="entries">
       <map>
         <entry key="test/restaurant">
diff --git a/xbean-spring/src/test/resources/org/apache/xbean/spring/jndi/spring.xml b/xbean-spring/src/test/resources/org/apache/xbean/spring/jndi/spring.xml
index 32adb1a..2860bbb 100644
--- a/xbean-spring/src/test/resources/org/apache/xbean/spring/jndi/spring.xml
+++ b/xbean-spring/src/test/resources/org/apache/xbean/spring/jndi/spring.xml
@@ -35,7 +35,7 @@
   </restaurant>
 
   <!-- lets initialise JNDI here -->
-  <bean id="jndi" class="org.apache.xbean.spring.jndi.SpringInitialContextFactory" factory-method="makeInitialContext" singleton="true">
+  <bean id="jndi" class="org.apache.xbean.spring.jndi.SpringInitialContextFactory" factory-method="makeInitialContext" scope="singleton">
     <property name="entries">
       <map>
         <entry key="test/restaurant" value-ref="restaurant" />