children = new ArrayList<>();
Object[] values = (Object[]) getPropertyValue();
@@ -45,7 +46,7 @@ public class ArrayAdapter extends AbstractAdapterElement {
if (childAdapter != null)
children.add(childAdapter);
- log.debug("{} adding adapter: {}", this, childAdapter);
+ LOG.debug("{} adding adapter: {}", this, childAdapter);
}
return children;
diff --git a/core/src/main/java/org/apache/struts2/views/xslt/BeanAdapter.java b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/BeanAdapter.java
similarity index 77%
rename from core/src/main/java/org/apache/struts2/views/xslt/BeanAdapter.java
rename to plugins/xslt/src/main/java/org/apache/struts2/result/xslt/BeanAdapter.java
index c62582312..ce5b9abf9 100644
--- a/core/src/main/java/org/apache/struts2/views/xslt/BeanAdapter.java
+++ b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/BeanAdapter.java
@@ -16,10 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.struts2.views.xslt;
+package org.apache.struts2.result.xslt;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.message.ParameterizedMessage;
import org.apache.struts2.StrutsException;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -46,53 +47,48 @@ import java.util.Map;
* public String getLastName();
* }
*
- *
+ *
* would be rendered as: <myPerson> <firstName>...</firstName> <lastName>...</lastName> </myPerson>
*/
public class BeanAdapter extends AbstractAdapterElement {
- //Static fields/initializer
- private static final Object[] NULLPARAMS = new Object[0];
+ private static final Logger LOG = LogManager.getLogger(BeanAdapter.class);
+
+ private static final Object[] NULL_PARAMS = new Object[0];
/**
* Cache can savely be static because the cached information is the same for all instances of this class.
*/
- private static Map propertyDescriptorCache;
-
- //Instance fields
-
- private Logger log = LogManager.getLogger(this.getClass());
-
- //Constructors
+ private static Map, PropertyDescriptor[]> propertyDescriptorCache;
public BeanAdapter() {
}
- public BeanAdapter(
- AdapterFactory adapterFactory, AdapterNode parent, String propertyName, Object value) {
+ public BeanAdapter(AdapterFactory adapterFactory, AdapterNode parent, String propertyName, Object value) {
setContext(adapterFactory, parent, propertyName, value);
}
- //Methods
-
+ @Override
public String getTagName() {
return getPropertyName();
}
+ @Override
public NodeList getChildNodes() {
NodeList nl = super.getChildNodes();
// Log child nodes for debug:
- if (log.isDebugEnabled() && nl != null) {
- log.debug("BeanAdapter getChildNodes for: {}", getTagName());
- log.debug(nl.toString());
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("BeanAdapter getChildNodes for: {}", getTagName());
+ LOG.debug(nl.toString());
}
return nl;
}
+ @Override
protected List buildChildAdapters() {
- log.debug("BeanAdapter building children. Property name: {}", getPropertyName());
+ LOG.debug("BeanAdapter building children. Property name: {}", getPropertyName());
List newAdapters = new ArrayList<>();
- Class type = getPropertyValue().getClass();
+ Class> type = getPropertyValue().getClass();
PropertyDescriptor[] props = getPropertyDescriptors(getPropertyValue());
if (props.length > 0) {
@@ -100,10 +96,9 @@ public class BeanAdapter extends AbstractAdapterElement {
Method m = prop.getReadMethod();
if (m == null) {
- //FIXME: write only property or indexed access
continue;
}
- log.debug("Bean reading property method: {}", m.getName());
+ LOG.debug("Bean reading property method: {}", m.getName());
String propertyName = prop.getName();
Object propertyValue;
@@ -114,12 +109,13 @@ public class BeanAdapter extends AbstractAdapterElement {
Perhaps with annotations in Java5?
*/
try {
- propertyValue = m.invoke(getPropertyValue(), NULLPARAMS);
+ propertyValue = m.invoke(getPropertyValue(), NULL_PARAMS);
} catch (Exception e) {
+ Exception report = e;
if (e instanceof InvocationTargetException) {
- e = (Exception) ((InvocationTargetException) e).getTargetException();
+ report = (Exception) ((InvocationTargetException) e).getTargetException();
}
- log.error("Cannot access bean property: {}", propertyName, e);
+ LOG.error(new ParameterizedMessage("Cannot access bean property: {}", propertyName), report);
continue;
}
@@ -131,14 +127,15 @@ public class BeanAdapter extends AbstractAdapterElement {
childAdapter = getAdapterFactory().adaptNode(this, propertyName, propertyValue);
}
- if (childAdapter != null)
+ if (childAdapter != null) {
newAdapters.add(childAdapter);
+ }
- log.debug("{} adding adapter: {}", this, childAdapter);
+ LOG.debug("{} adding adapter: {}", this, childAdapter);
}
} else {
// No properties found
- log.info("Class {} has no readable properties, trying to adapt {} with StringAdapter...", type.getName(), getPropertyName());
+ LOG.info("Class {} has no readable properties, trying to adapt {} with StringAdapter...", type.getName(), getPropertyName());
}
return newAdapters;
@@ -150,13 +147,13 @@ public class BeanAdapter extends AbstractAdapterElement {
private synchronized PropertyDescriptor[] getPropertyDescriptors(Object bean) {
try {
if (propertyDescriptorCache == null) {
- propertyDescriptorCache = new HashMap();
+ propertyDescriptorCache = new HashMap<>();
}
PropertyDescriptor[] props = propertyDescriptorCache.get(bean.getClass());
if (props == null) {
- log.debug("Caching property descriptor for {}", bean.getClass().getName());
+ LOG.debug("Caching property descriptor for {}", bean.getClass().getName());
props = Introspector.getBeanInfo(bean.getClass(), Object.class).getPropertyDescriptors();
propertyDescriptorCache.put(bean.getClass(), props);
}
diff --git a/core/src/main/java/org/apache/struts2/views/xslt/CollectionAdapter.java b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/CollectionAdapter.java
similarity index 84%
rename from core/src/main/java/org/apache/struts2/views/xslt/CollectionAdapter.java
rename to plugins/xslt/src/main/java/org/apache/struts2/result/xslt/CollectionAdapter.java
index b53118f71..3fff01140 100644
--- a/core/src/main/java/org/apache/struts2/views/xslt/CollectionAdapter.java
+++ b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/CollectionAdapter.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.struts2.views.xslt;
+package org.apache.struts2.result.xslt;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -28,7 +28,7 @@ import java.util.List;
public class CollectionAdapter extends AbstractAdapterElement {
- private Logger log = LogManager.getLogger(this.getClass());
+ private static final Logger LOG = LogManager.getLogger(CollectionAdapter.class);
public CollectionAdapter() { }
@@ -36,8 +36,9 @@ public class CollectionAdapter extends AbstractAdapterElement {
setContext(rootAdapterFactory, parent, propertyName, value);
}
+ @Override
protected List buildChildAdapters() {
- Collection values = (Collection) getPropertyValue();
+ Collection> values = (Collection>) getPropertyValue();
List children = new ArrayList<>(values.size());
for (Object value : values) {
@@ -47,10 +48,12 @@ public class CollectionAdapter extends AbstractAdapterElement {
} else {
childAdapter = getAdapterFactory().adaptNode(this, "item", value);
}
- if (childAdapter != null)
- children.add(childAdapter);
- log.debug("{} adding adapter: {}", this, childAdapter);
+ if (childAdapter != null) {
+ children.add(childAdapter);
+ }
+
+ LOG.debug("{} adding adapter: {}", this, childAdapter);
}
return children;
diff --git a/core/src/main/java/org/apache/struts2/views/xslt/MapAdapter.java b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/MapAdapter.java
similarity index 72%
rename from core/src/main/java/org/apache/struts2/views/xslt/MapAdapter.java
rename to plugins/xslt/src/main/java/org/apache/struts2/result/xslt/MapAdapter.java
index 9595f6568..b70ead92b 100644
--- a/core/src/main/java/org/apache/struts2/views/xslt/MapAdapter.java
+++ b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/MapAdapter.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.struts2.views.xslt;
+package org.apache.struts2.result.xslt;
import org.w3c.dom.Node;
@@ -39,21 +39,22 @@ import java.util.Map;
*/
public class MapAdapter extends AbstractAdapterElement {
- public MapAdapter() { }
-
- public MapAdapter(AdapterFactory adapterFactory, AdapterNode parent, String propertyName, Map value) {
- setContext( adapterFactory, parent, propertyName, value );
+ public MapAdapter() {
}
- public Map map() {
- return (Map)getPropertyValue();
+ public MapAdapter(AdapterFactory adapterFactory, AdapterNode parent, String propertyName, Map, ?> value) {
+ setContext(adapterFactory, parent, propertyName, value);
}
+ public Map, ?> map() {
+ return (Map, ?>) getPropertyValue();
+ }
+
+ @Override
protected List buildChildAdapters() {
List children = new ArrayList<>(map().entrySet().size());
- for (Object o : map().entrySet()) {
- Map.Entry entry = (Map.Entry) o;
+ for (Map.Entry, ?> entry : map().entrySet()) {
Object key = entry.getKey();
Object value = entry.getValue();
EntryElement child = new EntryElement(getAdapterFactory(), this, "entry", key, value);
@@ -64,19 +65,20 @@ public class MapAdapter extends AbstractAdapterElement {
}
static class EntryElement extends AbstractAdapterElement {
- Object key, value;
+ Object key;
+ Object value;
- public EntryElement( AdapterFactory adapterFactory,
- AdapterNode parent, String propertyName, Object key, Object value ) {
- setContext( adapterFactory, parent, propertyName, null/*we have two values*/ );
+ public EntryElement(AdapterFactory adapterFactory, AdapterNode parent, String propertyName, Object key, Object value) {
+ setContext(adapterFactory, parent, propertyName, null/*we have two values*/);
this.key = key;
this.value = value;
}
+ @Override
protected List buildChildAdapters() {
List children = new ArrayList<>();
- children.add( getAdapterFactory().adaptNode( this, "key", key ) );
- children.add( getAdapterFactory().adaptNode( this, "value", value ) );
+ children.add(getAdapterFactory().adaptNode(this, "key", key));
+ children.add(getAdapterFactory().adaptNode(this, "value", value));
return children;
}
}
diff --git a/core/src/main/java/org/apache/struts2/views/xslt/ProxyAttrAdapter.java b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/ProxyAttrAdapter.java
similarity index 93%
rename from core/src/main/java/org/apache/struts2/views/xslt/ProxyAttrAdapter.java
rename to plugins/xslt/src/main/java/org/apache/struts2/result/xslt/ProxyAttrAdapter.java
index 53ecf049e..2bed551ab 100644
--- a/core/src/main/java/org/apache/struts2/views/xslt/ProxyAttrAdapter.java
+++ b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/ProxyAttrAdapter.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.struts2.views.xslt;
+package org.apache.struts2.result.xslt;
import org.w3c.dom.Attr;
import org.w3c.dom.DOMException;
@@ -35,13 +35,10 @@ public class ProxyAttrAdapter extends ProxyNodeAdapter implements Attr {
super(factory, parent, value);
}
- // convenience
protected Attr attr() {
return (Attr) getPropertyValue();
}
- // Proxied Attr methods
-
public String getName() {
return attr().getName();
}
@@ -62,8 +59,6 @@ public class ProxyAttrAdapter extends ProxyNodeAdapter implements Attr {
return (Element) getParent();
}
- // DOM level 3
-
public TypeInfo getSchemaTypeInfo() {
throw operationNotSupported();
}
@@ -72,12 +67,10 @@ public class ProxyAttrAdapter extends ProxyNodeAdapter implements Attr {
throw operationNotSupported();
}
- // end DOM level 3
-
- // End Proxied Attr methods
-
+ @Override
public String toString() {
return "ProxyAttribute for: " + attr();
}
+
}
diff --git a/core/src/main/java/org/apache/struts2/views/xslt/ProxyElementAdapter.java b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/ProxyElementAdapter.java
similarity index 89%
rename from core/src/main/java/org/apache/struts2/views/xslt/ProxyElementAdapter.java
rename to plugins/xslt/src/main/java/org/apache/struts2/result/xslt/ProxyElementAdapter.java
index 8fbc6d45e..5599b453c 100644
--- a/core/src/main/java/org/apache/struts2/views/xslt/ProxyElementAdapter.java
+++ b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/ProxyElementAdapter.java
@@ -16,11 +16,16 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.struts2.views.xslt;
+package org.apache.struts2.result.xslt;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import org.w3c.dom.*;
+import org.w3c.dom.Attr;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.TypeInfo;
import java.util.ArrayList;
import java.util.List;
@@ -40,7 +45,7 @@ import java.util.List;
*/
public class ProxyElementAdapter extends ProxyNodeAdapter implements Element {
- private Logger log = LogManager.getLogger(this.getClass());
+ private static final Logger LOG = LogManager.getLogger(ProxyElementAdapter.class);
public ProxyElementAdapter(AdapterFactory factory, AdapterNode parent, Element value) {
super(factory, parent, value);
@@ -53,6 +58,7 @@ public class ProxyElementAdapter extends ProxyNodeAdapter implements Element {
return (Element) getPropertyValue();
}
+ @Override
protected List buildChildAdapters() {
List adapters = new ArrayList<>();
NodeList children = node().getChildNodes();
@@ -60,7 +66,7 @@ public class ProxyElementAdapter extends ProxyNodeAdapter implements Element {
Node child = children.item(i);
Node adapter = wrap(child);
if (adapter != null) {
- log.debug("Wrapped child node: {}", child.getNodeName());
+ LOG.debug("Wrapped child node: {}", child.getNodeName());
adapters.add(adapter);
}
}
@@ -86,15 +92,10 @@ public class ProxyElementAdapter extends ProxyNodeAdapter implements Element {
}
public Attr getAttributeNode(String name) {
- log.debug("Wrapping attribute: {}", name);
+ LOG.debug("Wrapping attribute: {}", name);
return (Attr) wrap(element().getAttributeNode(name));
}
- // I'm overriding this just for clarity. The base impl is correct.
- public NodeList getElementsByTagName(String name) {
- return super.getElementsByTagName(name);
- }
-
public String getAttributeNS(String namespaceURI, String localName) {
return element().getAttributeNS(namespaceURI, localName);
}
@@ -103,12 +104,7 @@ public class ProxyElementAdapter extends ProxyNodeAdapter implements Element {
return (Attr) wrap(element().getAttributeNodeNS(namespaceURI, localName));
}
- public NodeList getElementsByTagNameNS(String namespaceURI, String localName) {
- return super.getElementsByTagNameNS(namespaceURI, localName);
- }
-
// Unsupported mutators of Element
-
public void removeAttribute(String name) throws DOMException {
throw new UnsupportedOperationException();
}
@@ -159,6 +155,7 @@ public class ProxyElementAdapter extends ProxyNodeAdapter implements Element {
// end DOM level 3 methods
+ @Override
public String toString() {
return "ProxyElement for: " + element();
}
diff --git a/core/src/main/java/org/apache/struts2/views/xslt/ProxyNamedNodeMap.java b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/ProxyNamedNodeMap.java
similarity index 93%
rename from core/src/main/java/org/apache/struts2/views/xslt/ProxyNamedNodeMap.java
rename to plugins/xslt/src/main/java/org/apache/struts2/result/xslt/ProxyNamedNodeMap.java
index f0a218195..b707c0da8 100644
--- a/core/src/main/java/org/apache/struts2/views/xslt/ProxyNamedNodeMap.java
+++ b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/ProxyNamedNodeMap.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.struts2.views.xslt;
+package org.apache.struts2.result.xslt;
import org.w3c.dom.DOMException;
import org.w3c.dom.NamedNodeMap;
@@ -24,16 +24,16 @@ import org.w3c.dom.Node;
/**
* A NamedNodeMap that wraps the Nodes returned in their proxies.
- *
+ *
* Note: Since maps have no guaranteed order we don't need to worry about identity
* here as we do with "child" adapters. In that case we need to preserve identity
* in order to support finding the next/previous siblings.
*/
public class ProxyNamedNodeMap implements NamedNodeMap {
- private NamedNodeMap nodes;
- private AdapterFactory adapterFactory;
- private AdapterNode parent;
+ private final NamedNodeMap nodes;
+ private final AdapterFactory adapterFactory;
+ private final AdapterNode parent;
public ProxyNamedNodeMap(AdapterFactory factory, AdapterNode parent, NamedNodeMap nodes) {
this.nodes = nodes;
diff --git a/core/src/main/java/org/apache/struts2/views/xslt/ProxyNodeAdapter.java b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/ProxyNodeAdapter.java
similarity index 68%
rename from core/src/main/java/org/apache/struts2/views/xslt/ProxyNodeAdapter.java
rename to plugins/xslt/src/main/java/org/apache/struts2/result/xslt/ProxyNodeAdapter.java
index 52f76d33d..c2065f92d 100644
--- a/core/src/main/java/org/apache/struts2/views/xslt/ProxyNodeAdapter.java
+++ b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/ProxyNodeAdapter.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.struts2.views.xslt;
+package org.apache.struts2.result.xslt;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -32,14 +32,14 @@ import org.w3c.dom.Node;
*/
public abstract class ProxyNodeAdapter extends AbstractAdapterNode {
- private Logger log = LogManager.getLogger(this.getClass());
+ private static final Logger LOG = LogManager.getLogger(ProxyNodeAdapter.class);
- public ProxyNodeAdapter(AdapterFactory factory, AdapterNode parent, Node value) {
- setContext(factory, parent, "document"/*propname unused*/, value);
- log.debug("Proxied node is: {}" + value);
- log.debug("Node class is: {}", value.getClass());
- log.debug("Node type is: {}", value.getNodeType());
- log.debug("Node name is: {}", value.getNodeName());
+ protected ProxyNodeAdapter(AdapterFactory factory, AdapterNode parent, Node value) {
+ setContext(factory, parent, "document", value);
+ LOG.debug("Proxied node is: {}", value);
+ LOG.debug("Node class is: {}", value.getClass());
+ LOG.debug("Node type is: {}", value.getNodeType());
+ LOG.debug("Node name is: {}", value.getNodeName());
}
/**
@@ -60,72 +60,71 @@ public abstract class ProxyNodeAdapter extends AbstractAdapterNode {
protected NamedNodeMap wrap(NamedNodeMap nnm) {
return getAdapterFactory().proxyNamedNodeMap(this, nnm);
}
- //protected NodeList wrap( NodeList nl ) { }
-
- //protected Node unwrap( Node child ) {
- // return ((ProxyNodeAdapter)child).node();
- //}
-
- // Proxied Node methods
+ @Override
public String getNodeName() {
- log.trace("getNodeName");
+ LOG.trace("getNodeName");
return node().getNodeName();
}
+ @Override
public String getNodeValue() throws DOMException {
- log.trace("getNodeValue");
+ LOG.trace("getNodeValue");
return node().getNodeValue();
}
+ @Override
public short getNodeType() {
- if (log.isTraceEnabled()) {
- log.trace("getNodeType: " + getNodeName() + ": " + node().getNodeType());
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("getNodeType: {}:{}", getNodeName(), node().getNodeType());
}
return node().getNodeType();
}
+ @Override
public NamedNodeMap getAttributes() {
NamedNodeMap nnm = wrap(node().getAttributes());
- if (log.isTraceEnabled()) {
- log.trace("getAttributes: " + nnm);
- }
+ LOG.trace("getAttributes: {}", nnm);
return nnm;
}
+ @Override
public boolean hasChildNodes() {
- log.trace("hasChildNodes");
+ LOG.trace("hasChildNodes");
return node().hasChildNodes();
}
+ @Override
public boolean isSupported(String s, String s1) {
- log.trace("isSupported");
- // Is this ok? What kind of features are they asking about?
+ LOG.trace("isSupported");
return node().isSupported(s, s1);
}
+ @Override
public String getNamespaceURI() {
- log.trace("getNamespaceURI");
+ LOG.trace("getNamespaceURI");
return node().getNamespaceURI();
}
+ @Override
public String getPrefix() {
- log.trace("getPrefix");
+ LOG.trace("getPrefix");
return node().getPrefix();
}
+ @Override
public String getLocalName() {
- log.trace("getLocalName");
+ LOG.trace("getLocalName");
return node().getLocalName();
}
+ @Override
public boolean hasAttributes() {
- log.trace("hasAttributes");
+ LOG.trace("hasAttributes");
return node().hasAttributes();
}
- // End proxied Node methods
-
+ @Override
public String toString() {
return "ProxyNode for: " + node();
}
diff --git a/core/src/main/java/org/apache/struts2/views/xslt/ProxyTextNodeAdapter.java b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/ProxyTextNodeAdapter.java
similarity index 98%
rename from core/src/main/java/org/apache/struts2/views/xslt/ProxyTextNodeAdapter.java
rename to plugins/xslt/src/main/java/org/apache/struts2/result/xslt/ProxyTextNodeAdapter.java
index 1f5b45b22..8a586b81a 100644
--- a/core/src/main/java/org/apache/struts2/views/xslt/ProxyTextNodeAdapter.java
+++ b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/ProxyTextNodeAdapter.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.struts2.views.xslt;
+package org.apache.struts2.result.xslt;
import org.w3c.dom.DOMException;
import org.w3c.dom.Text;
@@ -38,6 +38,7 @@ public class ProxyTextNodeAdapter extends ProxyNodeAdapter implements Text {
return (Text) getPropertyValue();
}
+ @Override
public String toString() {
return "ProxyTextNode for: " + text();
}
diff --git a/core/src/main/java/org/apache/struts2/views/xslt/ServletURIResolver.java b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/ServletURIResolver.java
similarity index 73%
rename from core/src/main/java/org/apache/struts2/views/xslt/ServletURIResolver.java
rename to plugins/xslt/src/main/java/org/apache/struts2/result/xslt/ServletURIResolver.java
index 23a1c86a8..8521b334d 100644
--- a/core/src/main/java/org/apache/struts2/views/xslt/ServletURIResolver.java
+++ b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/ServletURIResolver.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.struts2.views.xslt;
+package org.apache.struts2.result.xslt;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -31,39 +31,39 @@ import java.io.InputStream;
/**
* ServletURIResolver is a URIResolver that can retrieve resources from the servlet context using the scheme "response".
* e.g.
- *
+ *
* A URI resolver is called when a stylesheet uses an xsl:include, xsl:import, or document() function to find the
* resource (file).
*/
public class ServletURIResolver implements URIResolver {
- private Logger log = LogManager.getLogger(getClass());
- static final String PROTOCOL = "response:";
+ private static final Logger LOG = LogManager.getLogger(ServletURIResolver.class);
- private ServletContext sc;
+ private static final String PROTOCOL = "response:";
- public ServletURIResolver(ServletContext sc) {
- log.trace("ServletURIResolver: {}", sc);
- this.sc = sc;
+ private final ServletContext servletContext;
+
+ public ServletURIResolver(ServletContext servletContext) {
+ this.servletContext = servletContext;
}
public Source resolve(String href, String base) throws TransformerException {
- log.debug("ServletURIResolver resolve(): href={}, base={}", href, base);
+ LOG.debug("ServletURIResolver resolve(): href={}, base={}", href, base);
if (href.startsWith(PROTOCOL)) {
String res = href.substring(PROTOCOL.length());
- log.debug("Resolving resource <{}>", res);
+ LOG.debug("Resolving resource <{}>", res);
- InputStream is = sc.getResourceAsStream(res);
+ InputStream is = servletContext.getResourceAsStream(res);
if (is == null) {
throw new TransformerException(
- "Resource " + res + " not found in resources.");
+ "Resource " + res + " not found in resources.");
}
return new StreamSource(is);
}
throw new TransformerException(
- "Cannot handle protocol of resource " + href);
+ "Cannot handle protocol of resource " + href);
}
}
diff --git a/core/src/main/java/org/apache/struts2/views/xslt/SimpleAdapterDocument.java b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/SimpleAdapterDocument.java
similarity index 89%
rename from core/src/main/java/org/apache/struts2/views/xslt/SimpleAdapterDocument.java
rename to plugins/xslt/src/main/java/org/apache/struts2/result/xslt/SimpleAdapterDocument.java
index 23c315070..e9a587b28 100644
--- a/core/src/main/java/org/apache/struts2/views/xslt/SimpleAdapterDocument.java
+++ b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/SimpleAdapterDocument.java
@@ -16,10 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.struts2.views.xslt;
-
-import java.util.Arrays;
-import java.util.List;
+package org.apache.struts2.result.xslt;
import org.apache.struts2.StrutsException;
import org.w3c.dom.Attr;
@@ -38,12 +35,15 @@ import org.w3c.dom.NodeList;
import org.w3c.dom.ProcessingInstruction;
import org.w3c.dom.Text;
+import java.util.Collections;
+import java.util.List;
+
/**
* SimpleAdapterDocument adapted a Java object and presents it as
* a Document. This class represents the Document container and uses
* the AdapterFactory to produce a child adapter for the wrapped object.
* The adapter produced must be of an Element type or an exception is thrown.
- *
+ *
* Note: in theory we could base this on AbstractAdapterElement and then allow
* the wrapped object to be a more general Node type. We would just use
* ourselves as the root element. However I don't think this is an issue as
@@ -53,12 +53,11 @@ public class SimpleAdapterDocument extends AbstractAdapterNode implements Docume
private Element rootElement;
- public SimpleAdapterDocument(
- AdapterFactory adapterFactory, AdapterNode parent, String propertyName, Object value) {
+ public SimpleAdapterDocument(AdapterFactory adapterFactory, AdapterNode parent, String propertyName, Object value) {
setContext(adapterFactory, parent, propertyName, value);
-
}
+ @Override
public void setPropertyValue(Object prop) {
super.setPropertyValue(prop);
rootElement = null; // recreate the root element
@@ -68,24 +67,25 @@ public class SimpleAdapterDocument extends AbstractAdapterNode implements Docume
* Lazily construct the root element adapter from the value object.
*/
private Element getRootElement() {
- if (rootElement != null)
+ if (rootElement != null) {
return rootElement;
+ }
- Node node = getAdapterFactory().adaptNode(
- this, getPropertyName(), getPropertyValue());
- if (node instanceof Element)
+ Node node = getAdapterFactory().adaptNode(this, getPropertyName(), getPropertyValue());
+ if (node instanceof Element) {
rootElement = (Element) node;
- else
- throw new StrutsException(
- "Document adapter expected to wrap an Element type. Node is not an element:" + node);
-
+ } else {
+ throw new StrutsException("Document adapter expected to wrap an Element type. Node is not an element: " + node);
+ }
return rootElement;
}
+ @Override
protected List getChildAdapters() {
- return Arrays.asList(new Node[]{getRootElement()});
+ return Collections.singletonList(getRootElement());
}
+ @Override
public NodeList getChildNodes() {
return new NodeList() {
public Node item(int i) {
@@ -110,14 +110,17 @@ public class SimpleAdapterDocument extends AbstractAdapterNode implements Docume
return null;
}
+ @Override
public NodeList getElementsByTagName(String string) {
return null;
}
+ @Override
public NodeList getElementsByTagNameNS(String string, String string1) {
return null;
}
+ @Override
public Node getFirstChild() {
return getRootElement();
}
@@ -126,14 +129,17 @@ public class SimpleAdapterDocument extends AbstractAdapterNode implements Docume
return null;
}
+ @Override
public Node getLastChild() {
return getRootElement();
}
+ @Override
public String getNodeName() {
return "#document";
}
+ @Override
public short getNodeType() {
return Node.DOCUMENT_NODE;
}
@@ -178,6 +184,7 @@ public class SimpleAdapterDocument extends AbstractAdapterNode implements Docume
return null;
}
+ @Override
public boolean hasChildNodes() {
return true;
}
@@ -186,10 +193,12 @@ public class SimpleAdapterDocument extends AbstractAdapterNode implements Docume
return null;
}
+ @Override
public Node getChildAfter(Node child) {
return null;
}
+ @Override
public Node getChildBefore(Node child) {
return null;
}
diff --git a/core/src/main/java/org/apache/struts2/views/xslt/SimpleNodeList.java b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/SimpleNodeList.java
similarity index 82%
rename from core/src/main/java/org/apache/struts2/views/xslt/SimpleNodeList.java
rename to plugins/xslt/src/main/java/org/apache/struts2/result/xslt/SimpleNodeList.java
index 7affaa919..cb5f96c76 100644
--- a/core/src/main/java/org/apache/struts2/views/xslt/SimpleNodeList.java
+++ b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/SimpleNodeList.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.struts2.views.xslt;
+package org.apache.struts2.result.xslt;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -26,30 +26,30 @@ import org.w3c.dom.NodeList;
import java.util.List;
public class SimpleNodeList implements NodeList {
- private Logger log = LogManager.getLogger(SimpleNodeList.class);
- private List nodes;
+ private static final Logger LOG = LogManager.getLogger(SimpleNodeList.class);
+
+ private final List nodes;
public SimpleNodeList(List nodes) {
this.nodes = nodes;
}
public int getLength() {
- if (log.isTraceEnabled()) {
- log.trace("getLength: {}", nodes.size());
- }
+ LOG.trace("getLength: {}", nodes.size());
return nodes.size();
}
public Node item(int i) {
- log.trace("getItem: {}", i);
+ LOG.trace("getItem: {}", i);
return nodes.get(i);
}
public String toString() {
StringBuilder sb = new StringBuilder("SimpleNodeList: [");
- for (int i = 0; i < getLength(); i++)
+ for (int i = 0; i < getLength(); i++) {
sb.append(item(i).getNodeName()).append(',');
+ }
sb.append("]");
return sb.toString();
}
diff --git a/core/src/main/java/org/apache/struts2/views/xslt/SimpleTextNode.java b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/SimpleTextNode.java
similarity index 88%
rename from core/src/main/java/org/apache/struts2/views/xslt/SimpleTextNode.java
rename to plugins/xslt/src/main/java/org/apache/struts2/result/xslt/SimpleTextNode.java
index b09b58f99..fc3242c59 100644
--- a/core/src/main/java/org/apache/struts2/views/xslt/SimpleTextNode.java
+++ b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/SimpleTextNode.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.struts2.views.xslt;
+package org.apache.struts2.result.xslt;
import org.apache.struts2.StrutsException;
import org.w3c.dom.DOMException;
@@ -34,7 +34,7 @@ public class SimpleTextNode extends AbstractAdapterNode implements Node, Text {
}
public void setData(String string) throws DOMException {
- throw new StrutsException("Operation not supported");
+ throw operationNotSupported();
}
public String getData() throws DOMException {
@@ -45,14 +45,17 @@ public class SimpleTextNode extends AbstractAdapterNode implements Node, Text {
return getStringValue().length();
}
+ @Override
public String getNodeName() {
return "#text";
}
+ @Override
public short getNodeType() {
return Node.TEXT_NODE;
}
+ @Override
public String getNodeValue() throws DOMException {
return getStringValue();
}
@@ -62,19 +65,19 @@ public class SimpleTextNode extends AbstractAdapterNode implements Node, Text {
}
public void deleteData(int i, int i1) throws DOMException {
- throw new StrutsException("Operation not supported");
+ throw operationNotSupported();
}
public void insertData(int i, String string) throws DOMException {
- throw new StrutsException("Operation not supported");
+ throw operationNotSupported();
}
public void replaceData(int i, int i1, String string) throws DOMException {
- throw new StrutsException("Operation not supported");
+ throw operationNotSupported();
}
public Text splitText(int i) throws DOMException {
- throw new StrutsException("Operation not supported");
+ throw operationNotSupported();
}
public String substringData(int beginIndex, int endIndex) throws DOMException {
diff --git a/core/src/main/java/org/apache/struts2/views/xslt/StringAdapter.java b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/StringAdapter.java
similarity index 93%
rename from core/src/main/java/org/apache/struts2/views/xslt/StringAdapter.java
rename to plugins/xslt/src/main/java/org/apache/struts2/result/xslt/StringAdapter.java
index 3948d2e49..927019a5a 100644
--- a/core/src/main/java/org/apache/struts2/views/xslt/StringAdapter.java
+++ b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/StringAdapter.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.struts2.views.xslt;
+package org.apache.struts2.result.xslt;
import com.opensymphony.xwork2.util.DomHelper;
import org.apache.logging.log4j.LogManager;
@@ -46,7 +46,8 @@ import java.util.List;
*/
public class StringAdapter extends AbstractAdapterElement {
- private Logger log = LogManager.getLogger(this.getClass());
+ private static final Logger LOG = LogManager.getLogger(StringAdapter.class);
+
boolean parseStringAsXML;
public StringAdapter() {
@@ -75,15 +76,16 @@ public class StringAdapter extends AbstractAdapterElement {
return getPropertyValue().toString();
}
+ @Override
protected List buildChildAdapters() {
Node node;
if (getParseStringAsXML()) {
- log.debug("parsing string as xml: {}", getStringValue());
+ LOG.debug("parsing string as xml: {}", getStringValue());
// Parse the String to a DOM, then proxy that as our child
node = DomHelper.parse(new InputSource(new StringReader(getStringValue())));
node = getAdapterFactory().proxyNode(this, node);
} else {
- log.debug("using string as is: {}", getStringValue());
+ LOG.debug("using string as is: {}", getStringValue());
// Create a Text node as our child
node = new SimpleTextNode(getAdapterFactory(), this, "text", getStringValue());
}
diff --git a/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/XSLTResult.java
similarity index 94%
rename from core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java
rename to plugins/xslt/src/main/java/org/apache/struts2/result/xslt/XSLTResult.java
index 1361c628a..36efe1851 100644
--- a/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java
+++ b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/XSLTResult.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.struts2.views.xslt;
+package org.apache.struts2.result.xslt;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.Result;
@@ -27,7 +27,6 @@ import org.apache.commons.lang3.BooleanUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsConstants;
import org.apache.struts2.StrutsException;
import javax.servlet.http.HttpServletResponse;
@@ -62,7 +61,7 @@ public class XSLTResult implements Result {
private static final Logger LOG = LogManager.getLogger(XSLTResult.class);
/**
- * 'stylesheetLocation' parameter. Points to the xsl.
+ * 'stylesheetLocation' parameter. Points to the xsl.
*/
public static final String DEFAULT_PARAM = "stylesheetLocation";
@@ -87,16 +86,6 @@ public class XSLTResult implements Result {
*/
private String stylesheetLocation;
- /**
- * Indicates the property name patterns which should be exposed to the xml.
- */
- private String matchingPattern;
-
- /**
- * Indicates the property name patterns which should be excluded from the xml.
- */
- private String excludingPattern;
-
/**
* Indicates the ognl expression representing the bean which is to be exposed as xml.
*/
@@ -110,7 +99,7 @@ public class XSLTResult implements Result {
private String encoding = "UTF-8";
private boolean parse;
- private AdapterFactory adapterFactory;
+ private transient AdapterFactory adapterFactory;
public XSLTResult() {
}
@@ -120,7 +109,7 @@ public class XSLTResult implements Result {
setStylesheetLocation(stylesheetLocation);
}
- @Inject(StrutsConstants.STRUTS_XSLT_NOCACHE)
+ @Inject(XsltConstants.STRUTS_XSLT_NOCACHE)
public void setNoCache(String xsltNoCache) {
this.noCache = BooleanUtils.toBoolean(xsltNoCache);
}
@@ -313,7 +302,7 @@ public class XSLTResult implements Result {
return templates;
}
- protected Source getDOMSourceForStack(Object value) throws IllegalAccessException, InstantiationException {
+ protected Source getDOMSourceForStack(Object value) {
return new DOMSource(getAdapterFactory().adaptDocument("result", value));
}
}
diff --git a/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/XsltConstants.java b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/XsltConstants.java
new file mode 100644
index 000000000..a1749a579
--- /dev/null
+++ b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/XsltConstants.java
@@ -0,0 +1,31 @@
+/*
+ * 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.
+ */
+package org.apache.struts2.result.xslt;
+
+public final class XsltConstants {
+
+ /**
+ * Avoids creating instance
+ */
+ private XsltConstants() {}
+
+ /** Whether XSLT templates should not be cached */
+ public static final String STRUTS_XSLT_NOCACHE = "struts.xslt.nocache";
+
+}
diff --git a/core/src/main/java/org/apache/struts2/views/xslt/package.html b/plugins/xslt/src/main/java/org/apache/struts2/result/xslt/package.html
similarity index 100%
rename from core/src/main/java/org/apache/struts2/views/xslt/package.html
rename to plugins/xslt/src/main/java/org/apache/struts2/result/xslt/package.html
diff --git a/plugins/xslt/src/main/resources/struts-plugin.xml b/plugins/xslt/src/main/resources/struts-plugin.xml
new file mode 100644
index 000000000..9bda180f4
--- /dev/null
+++ b/plugins/xslt/src/main/resources/struts-plugin.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java b/plugins/xslt/src/test/java/org/apache/struts2/result/xslt/XSLTResultTest.java
similarity index 68%
rename from core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java
rename to plugins/xslt/src/test/java/org/apache/struts2/result/xslt/XSLTResultTest.java
index ecc2b8469..861b02551 100644
--- a/core/src/test/java/org/apache/struts2/views/xslt/XSLTResultTest.java
+++ b/plugins/xslt/src/test/java/org/apache/struts2/result/xslt/XSLTResultTest.java
@@ -16,17 +16,17 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.struts2.views.xslt;
+package org.apache.struts2.result.xslt;
import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionChainResult;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.Result;
import com.opensymphony.xwork2.mock.MockActionInvocation;
import com.opensymphony.xwork2.util.ClassLoaderUtil;
import com.opensymphony.xwork2.util.ValueStack;
+import junit.framework.TestCase;
import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsInternalTestCase;
+import org.apache.struts2.junit.StrutsTestCase;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.mock.web.MockServletContext;
@@ -43,7 +43,7 @@ import java.util.List;
* Unit test for {@link XSLTResult}.
*
*/
-public class XSLTResultTest extends StrutsInternalTestCase {
+public class XSLTResultTest extends StrutsTestCase {
private XSLTResult result;
private MockHttpServletResponse response;
@@ -57,7 +57,7 @@ public class XSLTResultTest extends StrutsInternalTestCase {
result.setParse(false);
result.setStylesheetLocation(null);
result.execute(mai);
- fail("Should have thrown an IllegalArgumentException");
+ TestCase.fail("Should have thrown an IllegalArgumentException");
} catch (IllegalArgumentException e) {
// success
}
@@ -68,7 +68,7 @@ public class XSLTResultTest extends StrutsInternalTestCase {
result.setParse(false);
result.setStylesheetLocation("nofile.xsl");
result.execute(mai);
- fail("Should have thrown a TransformerException");
+ TestCase.fail("Should have thrown a TransformerException");
} catch (TransformerException e) {
// success
}
@@ -80,8 +80,8 @@ public class XSLTResultTest extends StrutsInternalTestCase {
result.execute(mai);
String out = response.getContentAsString();
- assertTrue(out.startsWith(""));
- assertTrue(out.indexOf(" -1);
+ TestCase.assertTrue(out.startsWith(""));
+ TestCase.assertTrue(out.contains(""));
- assertTrue(out.contains("WebWork in Action"));
- assertTrue(out.contains("Patrick and Jason"));
- assertTrue(out.contains("IIV"));
- assertTrue(out.contains(""));
- assertTrue(out.contains("XWork not in Action"));
- assertTrue(out.contains("Superman"));
- assertTrue(out.contains("12343456667"));
+ TestCase.assertTrue(out.startsWith(""));
+ TestCase.assertTrue(out.contains("WebWork in Action"));
+ TestCase.assertTrue(out.contains("Patrick and Jason"));
+ TestCase.assertTrue(out.contains("IIV"));
+ TestCase.assertTrue(out.contains(""));
+ TestCase.assertTrue(out.contains("XWork not in Action"));
+ TestCase.assertTrue(out.contains("Superman"));
+ TestCase.assertTrue(out.contains("12343456667"));
}
public void testSimpleTransformParse() throws Exception {
@@ -106,8 +106,8 @@ public class XSLTResultTest extends StrutsInternalTestCase {
result.execute(mai);
String out = response.getContentAsString();
- assertTrue(out.startsWith(""));
- assertTrue(out.indexOf(" -1);
+ TestCase.assertTrue(out.startsWith(""));
+ TestCase.assertTrue(out.contains(""));
- assertTrue(out.indexOf(" -1);
- assertTrue(out.indexOf("Hello Santa Claus how are you?") > -1);
+ TestCase.assertTrue(out.startsWith(""));
+ TestCase.assertTrue(out.contains(""));
- assertTrue(out.indexOf(" -1);
- assertTrue(out.indexOf("Hello Santa Claus how are you?") > -1);
- assertTrue(out.indexOf("WebWork in Action by Patrick and Jason") > -1);
- assertTrue(out.indexOf("XWork not in Action by Superman") > -1);
+ TestCase.assertTrue(out.startsWith(""));
+ TestCase.assertTrue(out.contains(""));
- assertTrue(out.indexOf(" -1);
- assertTrue(out.indexOf("Hello Santa Claus how are you?") > -1);
- assertTrue(out.indexOf("You are active: true") > -1);
+ TestCase.assertTrue(out.startsWith(""));
+ TestCase.assertTrue(out.contains(""));
- assertTrue(out.indexOf("") > -1);
+ TestCase.assertTrue(out.startsWith(""));
+ TestCase.assertTrue(out.contains(""));
}
- public void testTransform4WithBadDocumentInclude() throws Exception {
+ public void testTransform4WithBadDocumentInclude() {
result = new XSLTResult(){
protected URIResolver getURIResolver() {
return new URIResolver() {
@@ -183,28 +183,26 @@ public class XSLTResultTest extends StrutsInternalTestCase {
result.setStylesheetLocation("XSLTResultTest4.badinclude.xsl");
try {
result.execute(mai);
- fail("Should have thrown an exception");
+ TestCase.fail("Should have thrown an exception");
} catch (Exception ex) {
- assertEquals("Error transforming result", ex.getMessage());
+ TestCase.assertEquals("Error transforming result", ex.getMessage());
}
}
-
- public void testTransformWithError() throws Exception {
+
+ public void testTransformWithError() {
result = new XSLTResult(){
protected URIResolver getURIResolver() {
- return new URIResolver() {
- public Source resolve(String href, String base) throws TransformerException {
- throw new TransformerException("Some random error");
- }
+ return (href, base) -> {
+ throw new TransformerException("Some random error");
};
}
};
result.setStylesheetLocation("XSLTResultTest4.xsl");
try {
result.execute(mai);
- fail("Should have thrown an exception");
+ TestCase.fail("Should have thrown an exception");
} catch (Exception ex) {
- assertEquals("Error transforming result", ex.getMessage());
+ TestCase.assertEquals("Error transforming result", ex.getMessage());
}
}
@@ -213,9 +211,9 @@ public class XSLTResultTest extends StrutsInternalTestCase {
result.setStylesheetLocation("XSLTResultTest.bad.character.xsl");
try {
result.execute(mai);
- fail("Should have thrown an exception");
+ TestCase.fail("Should have thrown an exception");
} catch (Exception ex) {
- assertEquals("Error transforming result", ex.getMessage());
+ TestCase.assertEquals("Error transforming result", ex.getMessage());
}
}
@@ -227,9 +225,9 @@ public class XSLTResultTest extends StrutsInternalTestCase {
String out = response.getContentAsString();
- assertEquals(302, response.getStatus());
- assertTrue(out.startsWith(""));
- assertTrue(out.indexOf(" -1);
+ TestCase.assertEquals(302, response.getStatus());
+ TestCase.assertTrue(out.startsWith(""));
+ TestCase.assertTrue(out.contains(" getBooks() {
+ List list = new ArrayList<>();
list.add(new Book("WebWork in Action", "Patrick and Jason", Arrays.asList("I", "IV")));
list.add(null);
list.add(new Book("XWork not in Action", "Superman", Arrays.asList("1234", "345", "6667")));
@@ -313,11 +311,11 @@ public class XSLTResultTest extends StrutsInternalTestCase {
}
- public class Book {
+ public static class Book {
- private String title;
- private String author;
- private List editions;
+ private final String title;
+ private final String author;
+ private final List editions;
public Book(String title, String author, List editions) {
this.title = title;
diff --git a/core/src/test/resources/XSLTResultTest-val.xml b/plugins/xslt/src/test/resources/XSLTResultTest-val.xml
similarity index 100%
rename from core/src/test/resources/XSLTResultTest-val.xml
rename to plugins/xslt/src/test/resources/XSLTResultTest-val.xml
diff --git a/core/src/test/resources/XSLTResultTest.bad.character.xsl b/plugins/xslt/src/test/resources/XSLTResultTest.bad.character.xsl
similarity index 100%
rename from core/src/test/resources/XSLTResultTest.bad.character.xsl
rename to plugins/xslt/src/test/resources/XSLTResultTest.bad.character.xsl
diff --git a/core/src/test/resources/XSLTResultTest.xsl b/plugins/xslt/src/test/resources/XSLTResultTest.xsl
similarity index 100%
rename from core/src/test/resources/XSLTResultTest.xsl
rename to plugins/xslt/src/test/resources/XSLTResultTest.xsl
diff --git a/core/src/test/resources/XSLTResultTest2.xsl b/plugins/xslt/src/test/resources/XSLTResultTest2.xsl
similarity index 100%
rename from core/src/test/resources/XSLTResultTest2.xsl
rename to plugins/xslt/src/test/resources/XSLTResultTest2.xsl
diff --git a/core/src/test/resources/XSLTResultTest3.xsl b/plugins/xslt/src/test/resources/XSLTResultTest3.xsl
similarity index 100%
rename from core/src/test/resources/XSLTResultTest3.xsl
rename to plugins/xslt/src/test/resources/XSLTResultTest3.xsl
diff --git a/core/src/test/resources/XSLTResultTest4.badinclude.xsl b/plugins/xslt/src/test/resources/XSLTResultTest4.badinclude.xsl
similarity index 100%
rename from core/src/test/resources/XSLTResultTest4.badinclude.xsl
rename to plugins/xslt/src/test/resources/XSLTResultTest4.badinclude.xsl
diff --git a/core/src/test/resources/XSLTResultTest4.xsl b/plugins/xslt/src/test/resources/XSLTResultTest4.xsl
similarity index 100%
rename from core/src/test/resources/XSLTResultTest4.xsl
rename to plugins/xslt/src/test/resources/XSLTResultTest4.xsl
diff --git a/core/src/test/resources/XSLTResultTest5.xsl b/plugins/xslt/src/test/resources/XSLTResultTest5.xsl
similarity index 100%
rename from core/src/test/resources/XSLTResultTest5.xsl
rename to plugins/xslt/src/test/resources/XSLTResultTest5.xsl
diff --git a/core/src/test/resources/XSLTResultTest6.xsl b/plugins/xslt/src/test/resources/XSLTResultTest6.xsl
similarity index 100%
rename from core/src/test/resources/XSLTResultTest6.xsl
rename to plugins/xslt/src/test/resources/XSLTResultTest6.xsl
diff --git a/pom.xml b/pom.xml
index c866e545b..dcc4d0ee5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,24 +2,25 @@
-
+
org.apache.struts
@@ -32,7 +33,7 @@
6.2.0-SNAPSHOT
pom
Struts 2
- http://struts.apache.org/
+ https://struts.apache.org/
Apache Struts 2
2000
@@ -91,15 +92,15 @@
The Apache Software License, Version 2.0
- http://www.apache.org/licenses/LICENSE-2.0.txt
+ https://www.apache.org/licenses/LICENSE-2.0.txt
repo
-
+
Apache Software Foundation
- http://www.apache.org
+ https://www.apache.org
@@ -271,10 +272,10 @@
**/TestBean.java
-
- junit
- false
-
+
+ junit
+ false
+
@@ -315,10 +316,10 @@
true
false
-
+
-
+
pom.xml
@@ -367,7 +368,7 @@
enforce
-
+
@@ -673,6 +674,12 @@
${project.version}
+
+ org.apache.struts
+ struts2-xslt-plugin
+ ${project.version}
+
+
org.freemarker
freemarker
@@ -683,7 +690,8 @@
org.apache.felix
org.apache.felix.framework
6.0.3
- provided
+ provided
+
@@ -1045,7 +1053,8 @@
4.3.1
+ Excluding the older version here to pass enforcer. When next upgrading mockito-core,
+ confirm whether this exclusion is still required. -->
org.objenesis
objenesis