struts-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From lukaszlen...@apache.org
Subject [struts] 02/08: WW-5047 Allows define a custom bean provider
Date Tue, 26 Nov 2019 19:52:19 GMT
This is an automated email from the ASF dual-hosted git repository.

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

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

    WW-5047 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 1613ae2..cec1c65 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"


Mime
View raw message