WW-5049 Sets proper order of configuration elements
diff --git a/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java b/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java
index 745f908..a314149 100644
--- a/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java
+++ b/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java
@@ -22,6 +22,7 @@
 import com.opensymphony.xwork2.FileManager;
 import com.opensymphony.xwork2.FileManagerFactory;
 import com.opensymphony.xwork2.ObjectFactory;
+import com.opensymphony.xwork2.config.BeanSelectionProvider;
 import com.opensymphony.xwork2.config.Configuration;
 import com.opensymphony.xwork2.config.ConfigurationException;
 import com.opensymphony.xwork2.config.ConfigurationProvider;
@@ -225,11 +226,11 @@
                         String impl = child.getAttribute("class");
                         try {
                             Class classImpl = ClassLoaderUtil.loadClass(impl, getClass());
-                            if (ConfigurationProvider.class.isAssignableFrom(classImpl)) {
-                                ConfigurationProvider provider = (ConfigurationProvider) classImpl.newInstance();
+                            if (BeanSelectionProvider.class.isAssignableFrom(classImpl)) {
+                                BeanSelectionProvider provider = (BeanSelectionProvider) classImpl.newInstance();
                                 provider.register(containerBuilder, props);
                             } else {
-                                throw new ConfigurationException("The bean-provider: name:" + name + " class:" + impl + " doesnt implement " + ConfigurationProvider.class.getName(), childNode);
+                                throw new ConfigurationException("The bean-provider: name:" + name + " class:" + impl + " does not implement " + BeanSelectionProvider.class.getName(), childNode);
                             }
                         } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) {
                             throw new ConfigurationException("Unable to load bean-provider: name:" + name + " class:" + impl, e, childNode);
diff --git a/core/src/main/resources/struts-2.6.dtd b/core/src/main/resources/struts-2.6.dtd
index 6eb5654..84714cc 100644
--- a/core/src/main/resources/struts-2.6.dtd
+++ b/core/src/main/resources/struts-2.6.dtd
@@ -30,7 +30,7 @@
 	"http://struts.apache.org/dtds/struts-2.6.dtd">
 -->
 
-<!ELEMENT struts ((package|include|bean-provider|bean|constant)*, unknown-handler-stack?)>
+<!ELEMENT struts ((package|include|bean|constant)*,bean-provider?, unknown-handler-stack?)>
 <!ATTLIST struts
     order CDATA #IMPLIED
 >
@@ -125,12 +125,6 @@
     file CDATA #REQUIRED
 >
 
-<!ELEMENT bean-provider (#PCDATA)>
-<!ATTLIST bean-provider
-    name CDATA #IMPLIED
-    class CDATA #IMPLIED
->
-
 <!ELEMENT bean (#PCDATA)>
 <!ATTLIST bean
     type CDATA #IMPLIED
@@ -141,6 +135,12 @@
     optional CDATA #IMPLIED
 >
 
+<!ELEMENT bean-provider (#PCDATA)>
+<!ATTLIST bean-provider
+    name CDATA #IMPLIED
+    class CDATA #IMPLIED
+>
+
 <!ELEMENT constant (#PCDATA)>
 <!ATTLIST constant
     name CDATA #REQUIRED
diff --git a/core/src/main/resources/xwork-2.6.dtd b/core/src/main/resources/xwork-2.6.dtd
index 6f0e319..8c70840 100644
--- a/core/src/main/resources/xwork-2.6.dtd
+++ b/core/src/main/resources/xwork-2.6.dtd
@@ -30,7 +30,7 @@
 	"http://struts.apache.org/dtds/xwork-2.6.dtd">
 -->
 
-<!ELEMENT xwork ((package|include|bean-provider|bean|constant)*, unknown-handler-stack?)>
+<!ELEMENT xwork ((package|include|bean|constant)*, bean-provider?, unknown-handler-stack?)>
 <!ATTLIST xwork
     order CDATA #IMPLIED
 >
@@ -125,12 +125,6 @@
     file CDATA #REQUIRED
 >
 
-<!ELEMENT bean-provider (#PCDATA)>
-<!ATTLIST bean-provider
-    name CDATA #IMPLIED
-    class CDATA #IMPLIED
->
-
 <!ELEMENT bean (#PCDATA)>
 <!ATTLIST bean
     type CDATA #IMPLIED
@@ -141,6 +135,12 @@
     optional CDATA #IMPLIED
 >
 
+<!ELEMENT bean-provider (#PCDATA)>
+<!ATTLIST bean-provider
+    name CDATA #IMPLIED
+    class CDATA #IMPLIED
+>
+
 <!ELEMENT constant (#PCDATA)>
 <!ATTLIST constant
     name CDATA #REQUIRED
diff --git a/plugins/velocity/src/main/resources/struts-plugin.xml b/plugins/velocity/src/main/resources/struts-plugin.xml
index 435fab9..b4fabf5 100644
--- a/plugins/velocity/src/main/resources/struts-plugin.xml
+++ b/plugins/velocity/src/main/resources/struts-plugin.xml
@@ -25,9 +25,7 @@
     
 <struts>
 
-    <bean-provider name="velocityBeans" class="org.apache.struts2.views.velocity.VelocityBeanSelectionProvider"/>
-
-    <bean class="org.apache.struts2.views.velocity.VelocityManager" />
+    <bean name="struts" class="org.apache.struts2.views.velocity.VelocityManager" />
 
     <bean type="org.apache.struts2.components.template.TemplateEngine" name="vm"
           class="org.apache.struts2.views.velocity.template.VelocityTemplateEngine" />
@@ -41,4 +39,6 @@
         </result-types>
     </package>
 
+    <bean-provider name="velocityBeans" class="org.apache.struts2.views.velocity.VelocityBeanSelectionProvider"/>
+
 </struts>