This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch WW-5049-velocity-plugin
in repository https://gitbox.apache.org/repos/asf/struts.git

commit a7cfed7a9641d2f48a7656dee76412bb8efa9b5a
Author: Lukasz Lenart <lukaszlen...@apache.org>
AuthorDate: Tue Nov 26 19:00:18 2019 +0100

    WW-5049 Allows define a custom bean provider
---
 .../config/providers/XmlConfigurationProvider.java |  18 ++-
 core/src/main/resources/struts-2.6.dtd             | 157 +++++++++++++++++++++
 .../velocity/src/main/resources/struts-plugin.xml  |   7 +-
 3 files changed, 177 insertions(+), 5 deletions(-)

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 24d388e..dd61d81 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
@@ -219,7 +219,21 @@ public class XmlConfigurationProvider implements 
ConfigurationProvider {
 
                     final String nodeName = child.getNodeName();
 
-                    if ("bean".equals(nodeName)) {
+                    if ("bean-provider".equals(nodeName)) {
+                        String name = child.getAttribute("name");
+                        String impl = child.getAttribute("class");
+                        try {
+                            Class classImpl = ClassLoaderUtil.loadClass(impl, 
getClass());
+                            if 
(classImpl.isAssignableFrom(ConfigurationProvider.class)) {
+                                ConfigurationProvider provider = 
(ConfigurationProvider) classImpl.newInstance();
+                                provider.register(containerBuilder, props);
+                            } else {
+                                throw new ConfigurationException("The 
bean-provider: name:" + name + " class:" + impl + " doesnt implement " + 
ConfigurationProvider.class.getName(), childNode);
+                            }
+                        } catch (ClassNotFoundException | 
IllegalAccessException | InstantiationException e) {
+                            throw new ConfigurationException("Unable to load 
bean-provider: name:" + name + " class:" + impl, e, childNode);
+                        }
+                    } else if ("bean".equals(nodeName)) {
                         String type = child.getAttribute("type");
                         String name = child.getAttribute("name");
                         String impl = child.getAttribute("class");
@@ -233,8 +247,6 @@ public class XmlConfigurationProvider implements 
ConfigurationProvider {
                             scope = Scope.REQUEST;
                         } else if ("session".equals(scopeStr)) {
                             scope = Scope.SESSION;
-                        } else if ("singleton".equals(scopeStr)) {
-                            scope = Scope.SINGLETON;
                         } else if ("thread".equals(scopeStr)) {
                             scope = Scope.THREAD;
                         }
diff --git a/core/src/main/resources/struts-2.6.dtd 
b/core/src/main/resources/struts-2.6.dtd
new file mode 100644
index 0000000..6eb5654
--- /dev/null
+++ b/core/src/main/resources/struts-2.6.dtd
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<!-- START SNIPPET: strutsDtd -->
+
+<!--
+   Struts configuration DTD.
+   Use the following DOCTYPE
+
+   <!DOCTYPE struts PUBLIC
+       "-//Apache Software Foundation//DTD Struts Configuration 2.6//EN"
+       "http://struts.apache.org/dtds/struts-2.6.dtd";>
+-->
+
+<!ELEMENT struts ((package|include|bean-provider|bean|constant)*, 
unknown-handler-stack?)>
+<!ATTLIST struts
+    order CDATA #IMPLIED
+>
+
+<!ELEMENT package (result-types?, interceptors?, default-interceptor-ref?, 
default-action-ref?, default-class-ref?, global-results?, 
global-allowed-methods?, global-exception-mappings?, action*)>
+<!ATTLIST package
+    name CDATA #REQUIRED
+    extends CDATA #IMPLIED
+    namespace CDATA #IMPLIED
+    abstract CDATA #IMPLIED
+    strict-method-invocation (true|false) "true"
+>
+
+<!ELEMENT result-types (result-type+)>
+
+<!ELEMENT result-type (param*)>
+<!ATTLIST result-type
+    name CDATA #REQUIRED
+    class CDATA #REQUIRED
+    default (true|false) "false"
+>
+
+<!ELEMENT interceptors (interceptor|interceptor-stack)+>
+
+<!ELEMENT interceptor (param*)>
+<!ATTLIST interceptor
+    name CDATA #REQUIRED
+    class CDATA #REQUIRED
+>
+
+<!ELEMENT interceptor-stack (interceptor-ref*)>
+<!ATTLIST interceptor-stack
+    name CDATA #REQUIRED
+>
+
+<!ELEMENT interceptor-ref (param*)>
+<!ATTLIST interceptor-ref
+    name CDATA #REQUIRED
+>
+
+<!ELEMENT default-interceptor-ref (#PCDATA)>
+<!ATTLIST default-interceptor-ref
+    name CDATA #REQUIRED
+>
+
+<!ELEMENT default-action-ref (#PCDATA)>
+<!ATTLIST default-action-ref
+    name CDATA #REQUIRED
+>
+
+<!ELEMENT default-class-ref (#PCDATA)>
+<!ATTLIST default-class-ref
+    class CDATA #REQUIRED
+>
+
+<!ELEMENT global-results (result+)>
+
+<!ELEMENT global-allowed-methods (#PCDATA)>
+
+<!ELEMENT global-exception-mappings (exception-mapping+)>
+
+<!ELEMENT action 
((param|result|interceptor-ref|exception-mapping)*,allowed-methods?)>
+<!ATTLIST action
+    name CDATA #REQUIRED
+    class CDATA #IMPLIED
+    method CDATA #IMPLIED
+    converter CDATA #IMPLIED
+>
+
+<!ELEMENT param (#PCDATA)>
+<!ATTLIST param
+    name CDATA #REQUIRED
+>
+
+<!ELEMENT result (#PCDATA|param)*>
+<!ATTLIST result
+    name CDATA #IMPLIED
+    type CDATA #IMPLIED
+>
+
+<!ELEMENT exception-mapping (#PCDATA|param)*>
+<!ATTLIST exception-mapping
+    name CDATA #IMPLIED
+    exception CDATA #REQUIRED
+    result CDATA #REQUIRED
+>
+
+<!ELEMENT allowed-methods (#PCDATA)>
+
+<!ELEMENT include (#PCDATA)>
+<!ATTLIST include
+    file CDATA #REQUIRED
+>
+
+<!ELEMENT bean-provider (#PCDATA)>
+<!ATTLIST bean-provider
+    name CDATA #IMPLIED
+    class CDATA #IMPLIED
+>
+
+<!ELEMENT bean (#PCDATA)>
+<!ATTLIST bean
+    type CDATA #IMPLIED
+    name CDATA #IMPLIED
+    class CDATA #REQUIRED
+    scope CDATA #IMPLIED
+    static CDATA #IMPLIED
+    optional CDATA #IMPLIED
+>
+
+<!ELEMENT constant (#PCDATA)>
+<!ATTLIST constant
+    name CDATA #REQUIRED
+    value CDATA #REQUIRED
+>
+
+<!ELEMENT unknown-handler-stack (unknown-handler-ref*)>
+<!ELEMENT unknown-handler-ref (#PCDATA)>
+<!ATTLIST unknown-handler-ref
+    name CDATA #REQUIRED
+>
+
+<!-- END SNIPPET: strutsDtd -->
+
diff --git a/plugins/velocity/src/main/resources/struts-plugin.xml 
b/plugins/velocity/src/main/resources/struts-plugin.xml
index 00a4207..04842de 100644
--- a/plugins/velocity/src/main/resources/struts-plugin.xml
+++ b/plugins/velocity/src/main/resources/struts-plugin.xml
@@ -20,10 +20,13 @@
  */
 -->
 <!DOCTYPE struts PUBLIC
-       "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
-       "http://struts.apache.org/dtds/struts-2.5.dtd";>
+       "-//Apache Software Foundation//DTD Struts Configuration 2.6//EN"
+       "http://struts.apache.org/dtds/struts-2.6.dtd";>
     
 <struts>
+
+    <bean-provider name="velocityBeans" 
class="org.apache.struts2.views.velocity.VelocityBeanSelectionProvider"/>
+
     <bean class="org.apache.struts2.views.velocity.VelocityManager" 
name="struts" />
 
     <bean type="org.apache.struts2.components.template.TemplateEngine" 
name="vm"

Reply via email to