This is an automated email from the ASF dual-hosted git repository. lukaszlenart pushed a commit to branch servlet-3 in repository https://gitbox.apache.org/repos/asf/struts.git
commit 059a2a61174611236ae2e004e8a5fd4f9a31e5cc Author: Lukasz Lenart <lukaszlen...@apache.org> AuthorDate: Sat May 14 09:12:42 2022 +0200 WW-5182 Upgrade to Servlet API 3.1 --- apps/showcase/pom.xml | 11 +- bundles/pom.xml | 4 +- core/pom.xml | 11 +- .../org/apache/struts2/components/Include.java | 15 ++ .../struts2/components/ServletUrlRenderer.java | 4 +- .../java/org/apache/struts2/util/StrutsUtil.java | 16 ++ .../main/java/org/apache/struts2/util/URLBean.java | 17 +- .../struts2/interceptor/CookieInterceptorTest.java | 231 +++++++++++++-------- .../views/jsp/StrutsMockServletContext.java | 159 +++++++++++++- plugins/embeddedjsp/pom.xml | 9 - plugins/jasperreports/pom.xml | 6 - plugins/jfreechart/pom.xml | 18 +- plugins/json/pom.xml | 17 +- plugins/junit/pom.xml | 15 +- plugins/osgi/pom.xml | 9 - plugins/pom.xml | 2 +- plugins/portlet-mocks/pom.xml | 13 +- plugins/portlet/pom.xml | 16 +- .../portlet/servlet/PortletServletContext.java | 143 +++++++++++++ .../portlet/servlet/PortletServletInputStream.java | 21 +- .../servlet/PortletServletOutputStream.java | 15 +- .../portlet/servlet/PortletServletRequest.java | 194 ++++++++++++----- .../portlet/servlet/PortletServletResponse.java | 30 ++- plugins/rest/pom.xml | 10 - plugins/spring/pom.xml | 24 +-- plugins/testng/pom.xml | 17 +- plugins/velocity/pom.xml | 11 +- pom.xml | 4 +- 28 files changed, 710 insertions(+), 332 deletions(-) diff --git a/apps/showcase/pom.xml b/apps/showcase/pom.xml index 5c4c581c8..c2136fe7a 100644 --- a/apps/showcase/pom.xml +++ b/apps/showcase/pom.xml @@ -101,7 +101,7 @@ <dependency> <groupId>javax.servlet</groupId> - <artifactId>servlet-api</artifactId> + <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency> @@ -155,15 +155,6 @@ <version>6.1.2.Final</version> </dependency> - <!-- The Servlet API mocks in Spring Framework 4.x only supports Servlet 3.0 and higher. - This is only necessary in tests--> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>javax.servlet-api</artifactId> - <version>3.1.0</version> - <scope>test</scope> - </dependency> - </dependencies> <build> diff --git a/bundles/pom.xml b/bundles/pom.xml index 606f2358f..d34c67496 100755 --- a/bundles/pom.xml +++ b/bundles/pom.xml @@ -53,12 +53,10 @@ <dependency> <groupId>javax.servlet</groupId> - <artifactId>servlet-api</artifactId> - <version>2.4</version> + <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency> - </dependencies> <reporting> diff --git a/core/pom.xml b/core/pom.xml index 4ae6fa027..f34b8e92e 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -188,7 +188,7 @@ <dependency> <groupId>javax.servlet</groupId> - <artifactId>servlet-api</artifactId> + <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency> @@ -345,15 +345,6 @@ <scope>test</scope> </dependency> - <!-- The Servlet API mocks in Spring Framework 4.x only supports Servlet 3.0 and higher. - This is only necessary in tests--> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>javax.servlet-api</artifactId> - <version>3.1.0</version> - <scope>test</scope> - </dependency> - <dependency> <groupId>commons-validator</groupId> <artifactId>commons-validator</artifactId> diff --git a/core/src/main/java/org/apache/struts2/components/Include.java b/core/src/main/java/org/apache/struts2/components/Include.java index 70692bf1e..2e1f862dd 100644 --- a/core/src/main/java/org/apache/struts2/components/Include.java +++ b/core/src/main/java/org/apache/struts2/components/Include.java @@ -25,6 +25,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.struts2.RequestUtils; import org.apache.struts2.StrutsConstants; +import org.apache.struts2.StrutsException; import org.apache.struts2.util.FastByteArrayOutputStream; import org.apache.struts2.views.annotations.StrutsTag; import org.apache.struts2.views.annotations.StrutsTagAttribute; @@ -33,6 +34,7 @@ import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.ServletRequest; +import javax.servlet.WriteListener; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; @@ -296,6 +298,19 @@ public class Include extends Component { buffer = new FastByteArrayOutputStream(); } + @Override + public boolean isReady() { + return true; + } + + @Override + public void setWriteListener(WriteListener writeListener) { + try { + writeListener.onWritePossible(); + } catch (IOException e) { + throw new StrutsException(e); + } + } /** * Return all data that has been written to this OutputStream. diff --git a/core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java b/core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java index 3fa192584..18831e9ce 100644 --- a/core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java +++ b/core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java @@ -321,7 +321,7 @@ public class ServletUrlRenderer implements UrlRenderer { * @param parameters component parameters * @param contextParameters request parameters */ - protected void mergeRequestParameters(String value, Map<String, Object> parameters, Map<String, Object> contextParameters) { + protected void mergeRequestParameters(String value, Map<String, Object> parameters, Map<String, ?> contextParameters) { Map<String, Object> mergedParams = new LinkedHashMap<>(contextParameters); @@ -333,7 +333,7 @@ public class ServletUrlRenderer implements UrlRenderer { String queryString = value.substring(value.indexOf('?') + 1); mergedParams = urlHelper.parseQueryString(queryString, false); - for (Map.Entry<String, Object> entry : contextParameters.entrySet()) { + for (Map.Entry<String, ?> entry : contextParameters.entrySet()) { if (!mergedParams.containsKey(entry.getKey())) { mergedParams.put(entry.getKey(), entry.getValue()); } diff --git a/core/src/main/java/org/apache/struts2/util/StrutsUtil.java b/core/src/main/java/org/apache/struts2/util/StrutsUtil.java index 7d8379c89..36cfabcc9 100644 --- a/core/src/main/java/org/apache/struts2/util/StrutsUtil.java +++ b/core/src/main/java/org/apache/struts2/util/StrutsUtil.java @@ -24,11 +24,13 @@ import com.opensymphony.xwork2.util.TextParseUtil; import com.opensymphony.xwork2.util.ValueStack; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.apache.struts2.StrutsException; import org.apache.struts2.views.jsp.ui.OgnlTool; import org.apache.struts2.views.util.UrlHelper; import javax.servlet.RequestDispatcher; import javax.servlet.ServletOutputStream; +import javax.servlet.WriteListener; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; @@ -278,6 +280,20 @@ public class StrutsUtil { public void write(int aByte) { writer.write(aByte); } + + @Override + public boolean isReady() { + return true; + } + + @Override + public void setWriteListener(WriteListener writeListener) { + try { + writeListener.onWritePossible(); + } catch (IOException e) { + throw new StrutsException(e); + } + } } } diff --git a/core/src/main/java/org/apache/struts2/util/URLBean.java b/core/src/main/java/org/apache/struts2/util/URLBean.java index 5e09718ff..8832b4c0e 100644 --- a/core/src/main/java/org/apache/struts2/util/URLBean.java +++ b/core/src/main/java/org/apache/struts2/util/URLBean.java @@ -19,7 +19,6 @@ package org.apache.struts2.util; import com.opensymphony.xwork2.ActionContext; -import org.apache.struts2.ServletActionContext; import org.apache.struts2.views.util.DefaultUrlHelper; import org.apache.struts2.views.util.UrlHelper; @@ -58,20 +57,10 @@ public class URLBean { public String getURL() { // all this trickier with maps is to reduce the number of objects created - Map<String, Object> fullParams = null; - - if (params != null) { - fullParams = new HashMap<String, Object>(); - } + Map<String, Object> fullParams = new HashMap<>(); if (page == null) { - // No particular page requested, so go to "same page" - // Add query params to parameters - if (fullParams != null) { - fullParams.putAll(request.getParameterMap()); - } else { - fullParams = request.getParameterMap(); - } + fullParams.putAll(request.getParameterMap()); } // added parameters override, just like in URLTag @@ -84,7 +73,7 @@ public class URLBean { public URLBean addParameter(String name, Object value) { if (params == null) { - params = new HashMap<String, String>(); + params = new HashMap<>(); } if (value == null) { diff --git a/core/src/test/java/org/apache/struts2/interceptor/CookieInterceptorTest.java b/core/src/test/java/org/apache/struts2/interceptor/CookieInterceptorTest.java index 69d36ce4f..afe18f731 100644 --- a/core/src/test/java/org/apache/struts2/interceptor/CookieInterceptorTest.java +++ b/core/src/test/java/org/apache/struts2/interceptor/CookieInterceptorTest.java @@ -18,25 +18,26 @@ */ package org.apache.struts2.interceptor; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.http.Cookie; - +import com.opensymphony.xwork2.Action; +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.ActionInvocation; +import com.opensymphony.xwork2.ActionSupport; +import com.opensymphony.xwork2.mock.MockActionInvocation; import com.opensymphony.xwork2.security.DefaultAcceptedPatternsChecker; import com.opensymphony.xwork2.security.DefaultExcludedPatternsChecker; -import com.opensymphony.xwork2.mock.MockActionInvocation; -import org.springframework.mock.web.MockHttpServletRequest; - import org.apache.struts2.ServletActionContext; import org.apache.struts2.StrutsInternalTestCase; -import static org.easymock.EasyMock.*; +import org.springframework.mock.web.MockHttpServletRequest; -import com.opensymphony.xwork2.Action; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.ActionSupport; +import javax.servlet.http.Cookie; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import static org.easymock.EasyMock.createMock; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.verify; public class CookieInterceptorTest extends StrutsInternalTestCase { @@ -44,9 +45,9 @@ public class CookieInterceptorTest extends StrutsInternalTestCase { public void testIntercepDefault() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); request.setCookies( - new Cookie("cookie1", "cookie1value"), - new Cookie("cookie2", "cookie2value"), - new Cookie("cookie3", "cookie3value") + new Cookie("cookie1", "cookie1value"), + new Cookie("cookie2", "cookie2value"), + new Cookie("cookie3", "cookie3value") ); ServletActionContext.setRequest(request); @@ -55,7 +56,7 @@ public class CookieInterceptorTest extends StrutsInternalTestCase { ActionContext.getContext().getValueStack().push(action); ActionInvocation invocation = (ActionInvocation) createMock(ActionInvocation.class); - + expect(invocation.getAction()).andReturn(action); expect(invocation.invoke()).andReturn(Action.SUCCESS); @@ -75,16 +76,16 @@ public class CookieInterceptorTest extends StrutsInternalTestCase { assertNull(ActionContext.getContext().getValueStack().findValue("cookie1")); assertNull(ActionContext.getContext().getValueStack().findValue("cookie2")); assertNull(ActionContext.getContext().getValueStack().findValue("cookie3")); - + verify(invocation); } public void testInterceptAll1() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); request.setCookies( - new Cookie("cookie1", "cookie1value"), - new Cookie("cookie2", "cookie2value"), - new Cookie("cookie3", "cookie3value") + new Cookie("cookie1", "cookie1value"), + new Cookie("cookie2", "cookie2value"), + new Cookie("cookie3", "cookie3value") ); ServletActionContext.setRequest(request); @@ -93,7 +94,7 @@ public class CookieInterceptorTest extends StrutsInternalTestCase { ActionContext.getContext().getValueStack().push(action); ActionInvocation invocation = (ActionInvocation) createMock(ActionInvocation.class); - + expect(invocation.getAction()).andReturn(action); expect(invocation.invoke()).andReturn(Action.SUCCESS); @@ -117,7 +118,7 @@ public class CookieInterceptorTest extends StrutsInternalTestCase { assertEquals(ActionContext.getContext().getValueStack().findValue("cookie1"), "cookie1value"); assertEquals(ActionContext.getContext().getValueStack().findValue("cookie2"), "cookie2value"); assertEquals(ActionContext.getContext().getValueStack().findValue("cookie3"), "cookie3value"); - + verify(invocation); } @@ -125,9 +126,9 @@ public class CookieInterceptorTest extends StrutsInternalTestCase { public void testInterceptAll2() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); request.setCookies( - new Cookie("cookie1", "cookie1value"), - new Cookie("cookie2", "cookie2value"), - new Cookie("cookie3", "cookie3value") + new Cookie("cookie1", "cookie1value"), + new Cookie("cookie2", "cookie2value"), + new Cookie("cookie3", "cookie3value") ); ServletActionContext.setRequest(request); @@ -159,16 +160,16 @@ public class CookieInterceptorTest extends StrutsInternalTestCase { assertEquals(ActionContext.getContext().getValueStack().findValue("cookie1"), "cookie1value"); assertEquals(ActionContext.getContext().getValueStack().findValue("cookie2"), "cookie2value"); assertEquals(ActionContext.getContext().getValueStack().findValue("cookie3"), "cookie3value"); - + verify(invocation); } public void testInterceptSelectedCookiesNameOnly1() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); request.setCookies( - new Cookie("cookie1", "cookie1value"), - new Cookie("cookie2", "cookie2value"), - new Cookie("cookie3", "cookie3value") + new Cookie("cookie1", "cookie1value"), + new Cookie("cookie2", "cookie2value"), + new Cookie("cookie3", "cookie3value") ); ServletActionContext.setRequest(request); @@ -200,16 +201,16 @@ public class CookieInterceptorTest extends StrutsInternalTestCase { assertEquals(ActionContext.getContext().getValueStack().findValue("cookie1"), "cookie1value"); assertEquals(ActionContext.getContext().getValueStack().findValue("cookie2"), null); assertEquals(ActionContext.getContext().getValueStack().findValue("cookie3"), "cookie3value"); - + verify(invocation); } public void testInterceptSelectedCookiesNameOnly2() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); request.setCookies( - new Cookie("cookie1", "cookie1value"), - new Cookie("cookie2", "cookie2value"), - new Cookie("cookie3", "cookie3value") + new Cookie("cookie1", "cookie1value"), + new Cookie("cookie2", "cookie2value"), + new Cookie("cookie3", "cookie3value") ); ServletActionContext.setRequest(request); @@ -218,7 +219,7 @@ public class CookieInterceptorTest extends StrutsInternalTestCase { ActionContext.getContext().getValueStack().push(action); ActionInvocation invocation = (ActionInvocation) createMock(ActionInvocation.class); - + expect(invocation.getAction()).andReturn(action); expect(invocation.invoke()).andReturn(Action.SUCCESS); @@ -242,16 +243,16 @@ public class CookieInterceptorTest extends StrutsInternalTestCase { assertEquals(ActionContext.getContext().getValueStack().findValue("cookie1"), "cookie1value"); assertEquals(ActionContext.getContext().getValueStack().findValue("cookie2"), null); assertEquals(ActionContext.getContext().getValueStack().findValue("cookie3"), "cookie3value"); - + verify(invocation); } public void testInterceptSelectedCookiesNameOnly3() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); request.setCookies( - new Cookie("cookie1", "cookie1value"), - new Cookie("cookie2", "cookie2value"), - new Cookie("cookie3", "cookie3value") + new Cookie("cookie1", "cookie1value"), + new Cookie("cookie2", "cookie2value"), + new Cookie("cookie3", "cookie3value") ); ServletActionContext.setRequest(request); @@ -283,7 +284,7 @@ public class CookieInterceptorTest extends StrutsInternalTestCase { assertEquals(ActionContext.getContext().getValueStack().findValue("cookie1"), "cookie1value"); assertEquals(ActionContext.getContext().getValueStack().findValue("cookie2"), null); assertEquals(ActionContext.getContext().getValueStack().findValue("cookie3"), "cookie3value"); - + verify(invocation); } @@ -291,9 +292,9 @@ public class CookieInterceptorTest extends StrutsInternalTestCase { public void testInterceptSelectedCookiesNameAndValue() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); request.setCookies( - new Cookie("cookie1", "cookie1value"), - new Cookie("cookie2", "cookie2value"), - new Cookie("cookie3", "cookie3value") + new Cookie("cookie1", "cookie1value"), + new Cookie("cookie2", "cookie2value"), + new Cookie("cookie3", "cookie3value") ); ServletActionContext.setRequest(request); @@ -325,7 +326,7 @@ public class CookieInterceptorTest extends StrutsInternalTestCase { assertEquals(ActionContext.getContext().getValueStack().findValue("cookie1"), "cookie1value"); assertEquals(ActionContext.getContext().getValueStack().findValue("cookie2"), null); assertEquals(ActionContext.getContext().getValueStack().findValue("cookie3"), null); - + verify(invocation); } @@ -338,20 +339,44 @@ public class CookieInterceptorTest extends StrutsInternalTestCase { String pollution5 = "model[\"class\"]['classLoader']['jarPath']"; String pollution6 = "class[\"classLoader\"]['jarPath']"; + try { + new Cookie(pollution1, "pollution1"); + fail("It shouldn't be possible to create cookie: " + pollution1); + } catch (IllegalArgumentException e) { + assertEquals(e.getMessage(), "Cookie name \"" + pollution1 + "\" is a reserved token"); + } + + try { + new Cookie(pollution4, "pollution4"); + fail("It shouldn't be possible to create cookie: " + pollution4); + } catch (IllegalArgumentException e) { + assertEquals(e.getMessage(), "Cookie name \"" + pollution4 + "\" is a reserved token"); + } + + try { + new Cookie(pollution5, "pollution5"); + fail("It shouldn't be possible to create cookie: " + pollution5); + } catch (IllegalArgumentException e) { + assertEquals(e.getMessage(), "Cookie name \"" + pollution5 + "\" is a reserved token"); + } + + try { + new Cookie(pollution6, "pollution6"); + fail("It shouldn't be possible to create cookie: " + pollution6); + } catch (IllegalArgumentException e) { + assertEquals(e.getMessage(), "Cookie name \"" + pollution6 + "\" is a reserved token"); + } + request.setCookies( - new Cookie(pollution1, "pollution1"), - new Cookie("pollution1", pollution1), - new Cookie(pollution2, "pollution2"), - new Cookie("pollution2", pollution2), - new Cookie(pollution3, "pollution3"), - new Cookie("pollution3", pollution3), - new Cookie(pollution4, "pollution4"), - new Cookie("pollution4", pollution4), - new Cookie(pollution5, "pollution5"), - new Cookie("pollution5", pollution5), - new Cookie(pollution6, "pollution6"), - new Cookie("pollution6", pollution6) - ); + new Cookie("pollution1", pollution1), + new Cookie(pollution2, "pollution2"), + new Cookie("pollution2", pollution2), + new Cookie(pollution3, "pollution3"), + new Cookie("pollution3", pollution3), + new Cookie("pollution4", pollution4), + new Cookie("pollution5", pollution5), + new Cookie("pollution6", pollution6) + ); ServletActionContext.setRequest(request); final Map<String, Boolean> excludedName = new HashMap<String, Boolean>(); @@ -375,12 +400,12 @@ public class CookieInterceptorTest extends StrutsInternalTestCase { interceptor.intercept(invocation); - assertFalse(excludedName.get(pollution1)); + //assertFalse(excludedName.get(pollution1)); assertFalse(excludedName.get(pollution2)); assertFalse(excludedName.get(pollution3)); - assertFalse(excludedName.get(pollution4)); - assertFalse(excludedName.get(pollution5)); - assertFalse(excludedName.get(pollution6)); + //assertFalse(excludedName.get(pollution4)); + //assertFalse(excludedName.get(pollution5)); +// assertFalse(excludedName.get(pollution6)); } public void testCookiesWithStrutsInternalsAccess() throws Exception { @@ -393,13 +418,13 @@ public class CookieInterceptorTest extends StrutsInternalTestCase { String reqCookieValue = "request.userId=1"; request.setCookies( - new Cookie(sessionCookieName, "1"), - new Cookie("1", sessionCookieValue), - new Cookie(appCookieName, "1"), - new Cookie("1", appCookieValue), - new Cookie(reqCookieName, "1"), - new Cookie("1", reqCookieValue) - ); + new Cookie(sessionCookieName, "1"), + new Cookie("1", sessionCookieValue), + new Cookie(appCookieName, "1"), + new Cookie("1", appCookieValue), + new Cookie(reqCookieName, "1"), + new Cookie("1", reqCookieValue) + ); ServletActionContext.setRequest(request); final Map<String, Boolean> excludedName = new HashMap<String, Boolean>(); @@ -436,13 +461,13 @@ public class CookieInterceptorTest extends StrutsInternalTestCase { String reqCookieValue = "request.userId=1"; request.setCookies( - new Cookie(sessionCookieName, "1"), - new Cookie("1", sessionCookieValue), - new Cookie(appCookieName, "1"), - new Cookie("1", appCookieValue), - new Cookie(reqCookieName, "1"), - new Cookie("1", reqCookieValue) - ); + new Cookie(sessionCookieName, "1"), + new Cookie("1", sessionCookieValue), + new Cookie(appCookieName, "1"), + new Cookie("1", appCookieValue), + new Cookie(reqCookieName, "1"), + new Cookie("1", reqCookieValue) + ); ServletActionContext.setRequest(request); final Map<String, Boolean> excludedName = new HashMap<>(); @@ -486,14 +511,29 @@ public class CookieInterceptorTest extends StrutsInternalTestCase { return this.cookies; } - public String getCookie1() { return cookie1; } - public void setCookie1(String cookie1) { this.cookie1 = cookie1; } + public String getCookie1() { + return cookie1; + } - public String getCookie2() { return cookie2; } - public void setCookie2(String cookie2) { this.cookie2 = cookie2; } + public void setCookie1(String cookie1) { + this.cookie1 = cookie1; + } - public String getCookie3() { return cookie3; } - public void setCookie3(String cookie3) { this.cookie3 = cookie3; } + public String getCookie2() { + return cookie2; + } + + public void setCookie2(String cookie2) { + this.cookie2 = cookie2; + } + + public String getCookie3() { + return cookie3; + } + + public void setCookie3(String cookie3) { + this.cookie3 = cookie3; + } } public static class MockActionWithActionCookieAware extends ActionSupport implements org.apache.struts2.action.CookiesAware { @@ -511,14 +551,29 @@ public class CookieInterceptorTest extends StrutsInternalTestCase { return this.cookies; } - public String getCookie1() { return cookie1; } - public void setCookie1(String cookie1) { this.cookie1 = cookie1; } + public String getCookie1() { + return cookie1; + } - public String getCookie2() { return cookie2; } - public void setCookie2(String cookie2) { this.cookie2 = cookie2; } + public void setCookie1(String cookie1) { + this.cookie1 = cookie1; + } - public String getCookie3() { return cookie3; } - public void setCookie3(String cookie3) { this.cookie3 = cookie3; } + public String getCookie2() { + return cookie2; + } + + public void setCookie2(String cookie2) { + this.cookie2 = cookie2; + } + + public String getCookie3() { + return cookie3; + } + + public void setCookie3(String cookie3) { + this.cookie3 = cookie3; + } } } diff --git a/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockServletContext.java b/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockServletContext.java index 0f9461c66..c677acc14 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockServletContext.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockServletContext.java @@ -23,14 +23,21 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.Collections; import java.util.Enumeration; +import java.util.EventListener; import java.util.HashMap; import java.util.Map; import java.util.Set; +import javax.servlet.Filter; +import javax.servlet.FilterRegistration; import javax.servlet.RequestDispatcher; import javax.servlet.Servlet; import javax.servlet.ServletContext; import javax.servlet.ServletException; +import javax.servlet.ServletRegistration; +import javax.servlet.SessionCookieConfig; +import javax.servlet.SessionTrackingMode; +import javax.servlet.descriptor.JspConfigDescriptor; /** @@ -42,12 +49,12 @@ public class StrutsMockServletContext implements ServletContext { String realPath; String servletInfo; String contextPath; - Map initParams = new HashMap(); - Map attributes = new HashMap(); + Map<String, String> initParams = new HashMap<>(); + Map<String, Object> attributes = new HashMap<>(); InputStream resourceAsStream; - public void setInitParameter(String name, String value) { - initParams.put(name, value); + public boolean setInitParameter(String name, String value) { + return initParams.put(name, value) != null; } public void setRealPath(String value) { @@ -74,7 +81,7 @@ public class StrutsMockServletContext implements ServletContext { return null; } - public Set getResourcePaths(String s) { + public Set<String> getResourcePaths(String s) { return null; } @@ -105,11 +112,11 @@ public class StrutsMockServletContext implements ServletContext { return null; } - public Enumeration getServlets() { + public Enumeration<Servlet> getServlets() { return null; } - public Enumeration getServletNames() { + public Enumeration<String> getServletNames() { return null; } @@ -130,7 +137,7 @@ public class StrutsMockServletContext implements ServletContext { return (String) initParams.get(s); } - public Enumeration getInitParameterNames() { + public Enumeration<String> getInitParameterNames() { return Collections.enumeration(initParams.keySet()); } @@ -138,7 +145,7 @@ public class StrutsMockServletContext implements ServletContext { return attributes.get(s); } - public Enumeration getAttributeNames() { + public Enumeration<String> getAttributeNames() { return Collections.enumeration(attributes.keySet()); } @@ -157,12 +164,142 @@ public class StrutsMockServletContext implements ServletContext { public void setServletInfo(String servletInfo) { this.servletInfo = servletInfo; } - + public String getContextPath() { return contextPath; - } + } public void setContextPath(String contextPath) { this.contextPath = contextPath; } + + @Override + public int getEffectiveMajorVersion() { + return 0; + } + + @Override + public int getEffectiveMinorVersion() { + return 0; + } + + @Override + public ServletRegistration.Dynamic addServlet(String servletName, String className) { + return null; + } + + @Override + public ServletRegistration.Dynamic addServlet(String servletName, Servlet servlet) { + return null; + } + + @Override + public ServletRegistration.Dynamic addServlet(String servletName, Class<? extends Servlet> servletClass) { + return null; + } + + @Override + public <T extends Servlet> T createServlet(Class<T> clazz) throws ServletException { + return null; + } + + @Override + public ServletRegistration getServletRegistration(String servletName) { + return null; + } + + @Override + public Map<String, ? extends ServletRegistration> getServletRegistrations() { + return null; + } + + @Override + public FilterRegistration.Dynamic addFilter(String filterName, String className) { + return null; + } + + @Override + public FilterRegistration.Dynamic addFilter(String filterName, Filter filter) { + return null; + } + + @Override + public FilterRegistration.Dynamic addFilter(String filterName, Class<? extends Filter> filterClass) { + return null; + } + + @Override + public <T extends Filter> T createFilter(Class<T> clazz) throws ServletException { + return null; + } + + @Override + public FilterRegistration getFilterRegistration(String filterName) { + return null; + } + + @Override + public Map<String, ? extends FilterRegistration> getFilterRegistrations() { + return null; + } + + @Override + public SessionCookieConfig getSessionCookieConfig() { + return null; + } + + @Override + public void setSessionTrackingModes(Set<SessionTrackingMode> sessionTrackingModes) { + + } + + @Override + public Set<SessionTrackingMode> getDefaultSessionTrackingModes() { + return null; + } + + @Override + public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() { + return null; + } + + @Override + public void addListener(String className) { + + } + + @Override + public <T extends EventListener> void addListener(T t) { + + } + + @Override + public void addListener(Class<? extends EventListener> listenerClass) { + + } + + @Override + public <T extends EventListener> T createListener(Class<T> clazz) throws ServletException { + return null; + } + + @Override + public JspConfigDescriptor getJspConfigDescriptor() { + return null; + } + + @Override + public ClassLoader getClassLoader() { + return null; + } + + @Override + public void declareRoles(String... roleNames) { + + } + + @Override + public String getVirtualServerName() { + return null; + } } diff --git a/plugins/embeddedjsp/pom.xml b/plugins/embeddedjsp/pom.xml index f8c56b547..ceab2252d 100644 --- a/plugins/embeddedjsp/pom.xml +++ b/plugins/embeddedjsp/pom.xml @@ -89,15 +89,6 @@ <artifactId>tomcat-jasper</artifactId> <scope>provided</scope> </dependency> - - <!-- The Servlet API mocks in Spring Framework 4.x only supports Servlet 3.0 and higher. - This is only necessary in tests--> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>javax.servlet-api</artifactId> - <version>3.1.0</version> - <scope>test</scope> - </dependency> </dependencies> <build> diff --git a/plugins/jasperreports/pom.xml b/plugins/jasperreports/pom.xml index eb0eb0808..ffc6675ed 100644 --- a/plugins/jasperreports/pom.xml +++ b/plugins/jasperreports/pom.xml @@ -63,12 +63,6 @@ <artifactId>jsp-api</artifactId> <scope>provided</scope> </dependency> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>javax.servlet-api</artifactId> - <version>3.1.0</version> - <scope>test</scope> - </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> diff --git a/plugins/jfreechart/pom.xml b/plugins/jfreechart/pom.xml index 30681863f..61bcedda9 100644 --- a/plugins/jfreechart/pom.xml +++ b/plugins/jfreechart/pom.xml @@ -19,13 +19,14 @@ * under the License. */ --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.struts</groupId> <artifactId>struts2-plugins</artifactId> <version>6.0.0-SNAPSHOT</version> - </parent> + </parent> <artifactId>struts2-jfreechart-plugin</artifactId> <packaging>jar</packaging> @@ -71,18 +72,9 @@ <artifactId>easymock</artifactId> <scope>test</scope> </dependency> - - <!-- The Servlet API mocks in Spring Framework 4.x only supports Servlet 3.0 and higher. - This is only necessary in tests--> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>javax.servlet-api</artifactId> - <version>3.1.0</version> - <scope>test</scope> - </dependency> - </dependencies> + <properties> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> </project> diff --git a/plugins/json/pom.xml b/plugins/json/pom.xml index 4f9004cc5..5b296f3a7 100644 --- a/plugins/json/pom.xml +++ b/plugins/json/pom.xml @@ -19,7 +19,8 @@ * under the License. */ --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.struts</groupId> @@ -105,18 +106,10 @@ <artifactId>assertj-core</artifactId> <scope>test</scope> </dependency> - - <!-- The Servlet API mocks in Spring Framework 4.x only supports Servlet 3.0 and higher. - This is only necessary in tests--> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>javax.servlet-api</artifactId> - <version>3.1.0</version> - <scope>test</scope> - </dependency> - </dependencies> + <properties> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> + </project> diff --git a/plugins/junit/pom.xml b/plugins/junit/pom.xml index 4a7e51369..bade83131 100644 --- a/plugins/junit/pom.xml +++ b/plugins/junit/pom.xml @@ -19,7 +19,8 @@ * under the License. */ --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.struts</groupId> @@ -85,17 +86,9 @@ <artifactId>struts2-portlet-mocks-plugin</artifactId> <optional>true</optional> </dependency> - - <!-- The Servlet API mocks in Spring Framework 4.x only supports Servlet 3.0 and higher. - This is only necessary in tests--> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>javax.servlet-api</artifactId> - <version>3.1.0</version> - <scope>test</scope> - </dependency> </dependencies> + <properties> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> </project> diff --git a/plugins/osgi/pom.xml b/plugins/osgi/pom.xml index dfdc0557f..56753608b 100644 --- a/plugins/osgi/pom.xml +++ b/plugins/osgi/pom.xml @@ -106,15 +106,6 @@ <scope>test</scope> </dependency> - <!-- The Servlet API mocks in Spring Framework 4.x only supports Servlet 3.0 and higher. - This is only necessary in tests--> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>javax.servlet-api</artifactId> - <version>3.1.0</version> - <scope>test</scope> - </dependency> - <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> diff --git a/plugins/pom.xml b/plugins/pom.xml index 4150947c4..552c477e0 100644 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -76,7 +76,7 @@ <dependency> <groupId>javax.servlet</groupId> - <artifactId>servlet-api</artifactId> + <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency> diff --git a/plugins/portlet-mocks/pom.xml b/plugins/portlet-mocks/pom.xml index e4bf15a00..c516946d8 100644 --- a/plugins/portlet-mocks/pom.xml +++ b/plugins/portlet-mocks/pom.xml @@ -19,7 +19,8 @@ * under the License. */ --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.struts</groupId> @@ -47,16 +48,8 @@ <artifactId>portlet-api</artifactId> <scope>provided</scope> </dependency> - - <!-- The Servlet API mocks in Spring Framework 4.x only supports Servlet 3.0 and higher. - This is only necessary in tests--> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>javax.servlet-api</artifactId> - <version>3.1.0</version> - <scope>test</scope> - </dependency> </dependencies> + <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> diff --git a/plugins/portlet/pom.xml b/plugins/portlet/pom.xml index da4bc9bf0..2c12c7c2c 100644 --- a/plugins/portlet/pom.xml +++ b/plugins/portlet/pom.xml @@ -19,7 +19,8 @@ * under the License. */ --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.struts</groupId> @@ -139,17 +140,10 @@ <artifactId>commons-fileupload</artifactId> <scope>test</scope> </dependency> - - <!-- The Servlet API mocks in Spring Framework 4.x only supports Servlet 3.0 and higher. - This is only necessary in tests--> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>javax.servlet-api</artifactId> - <version>3.1.0</version> - <scope>test</scope> - </dependency> </dependencies> + <properties> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> + </project> diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletContext.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletContext.java index 40b29b12b..f52ba4dc6 100644 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletContext.java +++ b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletContext.java @@ -20,14 +20,22 @@ package org.apache.struts2.portlet.servlet; import javax.portlet.PortletContext; import javax.portlet.PortletRequestDispatcher; +import javax.servlet.Filter; +import javax.servlet.FilterRegistration; import javax.servlet.RequestDispatcher; import javax.servlet.Servlet; import javax.servlet.ServletContext; import javax.servlet.ServletException; +import javax.servlet.ServletRegistration; +import javax.servlet.SessionCookieConfig; +import javax.servlet.SessionTrackingMode; +import javax.servlet.descriptor.JspConfigDescriptor; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.util.Enumeration; +import java.util.EventListener; +import java.util.Map; import java.util.Set; /** @@ -86,6 +94,11 @@ public class PortletServletContext implements ServletContext { return portletContext.getInitParameterNames(); } + @Override + public boolean setInitParameter(String name, String value) { + return false; + } + /* (non-Javadoc) * @see javax.servlet.ServletContext#getMajorVersion() */ @@ -107,6 +120,16 @@ public class PortletServletContext implements ServletContext { return portletContext.getMinorVersion(); } + @Override + public int getEffectiveMajorVersion() { + return 0; + } + + @Override + public int getEffectiveMinorVersion() { + return 0; + } + /** * Returns a {@link PortletServletRequestDispatcher} wrapping the {@link PortletRequestDispatcher} * as a {@link RequestDispatcher} instance. @@ -179,6 +202,126 @@ public class PortletServletContext implements ServletContext { return portletContext.getPortletContextName(); } + @Override + public ServletRegistration.Dynamic addServlet(String servletName, String className) { + return null; + } + + @Override + public ServletRegistration.Dynamic addServlet(String servletName, Servlet servlet) { + return null; + } + + @Override + public ServletRegistration.Dynamic addServlet(String servletName, Class<? extends Servlet> servletClass) { + return null; + } + + @Override + public <T extends Servlet> T createServlet(Class<T> clazz) throws ServletException { + return null; + } + + @Override + public ServletRegistration getServletRegistration(String servletName) { + return null; + } + + @Override + public Map<String, ? extends ServletRegistration> getServletRegistrations() { + return null; + } + + @Override + public FilterRegistration.Dynamic addFilter(String filterName, String className) { + return null; + } + + @Override + public FilterRegistration.Dynamic addFilter(String filterName, Filter filter) { + return null; + } + + @Override + public FilterRegistration.Dynamic addFilter(String filterName, Class<? extends Filter> filterClass) { + return null; + } + + @Override + public <T extends Filter> T createFilter(Class<T> clazz) throws ServletException { + return null; + } + + @Override + public FilterRegistration getFilterRegistration(String filterName) { + return null; + } + + @Override + public Map<String, ? extends FilterRegistration> getFilterRegistrations() { + return null; + } + + @Override + public SessionCookieConfig getSessionCookieConfig() { + return null; + } + + @Override + public void setSessionTrackingModes(Set<SessionTrackingMode> sessionTrackingModes) { + + } + + @Override + public Set<SessionTrackingMode> getDefaultSessionTrackingModes() { + return null; + } + + @Override + public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() { + return null; + } + + @Override + public void addListener(String className) { + + } + + @Override + public <T extends EventListener> void addListener(T t) { + + } + + @Override + public void addListener(Class<? extends EventListener> listenerClass) { + + } + + @Override + public <T extends EventListener> T createListener(Class<T> clazz) throws ServletException { + return null; + } + + @Override + public JspConfigDescriptor getJspConfigDescriptor() { + return null; + } + + @Override + public ClassLoader getClassLoader() { + return null; + } + + @Override + public void declareRoles(String... roleNames) { + + } + + @Override + public String getVirtualServerName() { + return null; + } + /** * @throws IllegalStateException Not supported in a portlet. * @see javax.servlet.ServletContext#getServletNames() diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletInputStream.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletInputStream.java index 78b5c95fb..510248b3e 100644 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletInputStream.java +++ b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletInputStream.java @@ -21,6 +21,7 @@ package org.apache.struts2.portlet.servlet; import java.io.IOException; import java.io.InputStream; +import javax.servlet.ReadListener; import javax.servlet.ServletInputStream; /** @@ -31,11 +32,11 @@ import javax.servlet.ServletInputStream; public class PortletServletInputStream extends ServletInputStream { private InputStream portletInputStream; - + public PortletServletInputStream(InputStream portletInputStream) { this.portletInputStream = portletInputStream; } - + /* (non-Javadoc) * @see java.io.InputStream#read() */ @@ -107,7 +108,7 @@ public class PortletServletInputStream extends ServletInputStream { public long skip(long n) throws IOException { return portletInputStream.skip(n); } - + /** * Get the wrapped {@link InputStream} instance. * @return The wrapped {@link InputStream} instance. @@ -116,4 +117,18 @@ public class PortletServletInputStream extends ServletInputStream { return portletInputStream; } + @Override + public boolean isFinished() { + return true; + } + + @Override + public boolean isReady() { + return true; + } + + @Override + public void setReadListener(ReadListener readListener) { + // no-op + } } diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletOutputStream.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletOutputStream.java index 94f114fa4..6a297d743 100644 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletOutputStream.java +++ b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletOutputStream.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.io.OutputStream; import javax.servlet.ServletOutputStream; +import javax.servlet.WriteListener; /** * Wrapper object exposing a {@link OutputStream} from a portlet as a {@link ServletOutputStream} instance. @@ -31,7 +32,7 @@ import javax.servlet.ServletOutputStream; public class PortletServletOutputStream extends ServletOutputStream { private OutputStream portletOutputStream; - + public PortletServletOutputStream(OutputStream portletOutputStream) { this.portletOutputStream = portletOutputStream; } @@ -75,7 +76,7 @@ public class PortletServletOutputStream extends ServletOutputStream { public void write(byte[] b, int off, int len) throws IOException { portletOutputStream.write(b, off, len); } - + /** * Get the wrapped {@link OutputStream} instance. * @return The wrapped {@link OutputStream} instance. @@ -83,4 +84,14 @@ public class PortletServletOutputStream extends ServletOutputStream { public OutputStream getOutputStream() { return portletOutputStream; } + + @Override + public boolean isReady() { + return true; + } + + @Override + public void setWriteListener(WriteListener writeListener) { + // no-op + } } diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletRequest.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletRequest.java index 9e7db1707..a6049e940 100644 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletRequest.java +++ b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletRequest.java @@ -23,6 +23,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.security.Principal; +import java.util.Collection; import java.util.Collections; import java.util.Enumeration; import java.util.Locale; @@ -34,12 +35,20 @@ import javax.portlet.PortletContext; import javax.portlet.PortletRequest; import javax.portlet.PortletRequestDispatcher; import javax.portlet.PortletSession; +import javax.servlet.AsyncContext; +import javax.servlet.DispatcherType; import javax.servlet.RequestDispatcher; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; import javax.servlet.ServletInputStream; import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import javax.servlet.http.HttpUpgradeHandler; +import javax.servlet.http.Part; import static org.apache.struts2.portlet.PortletConstants.*; @@ -71,7 +80,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.http.HttpServletRequest#getAuthType() */ public String getAuthType() { @@ -80,7 +89,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.http.HttpServletRequest#getContextPath() */ public String getContextPath() { @@ -89,7 +98,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Not allowed in a portlet. - * + * * @throws IllegalStateException * Not allowed in a portlet. */ @@ -102,7 +111,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Not allowed in a portlet. - * + * * @throws IllegalStateException * Not allowed in a portlet. */ @@ -113,7 +122,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Gets a property from the {@link PortletRequest}. Note that a * {@link PortletRequest} is not guaranteed to map properties to headers. - * + * * @see PortletRequest#getProperty(String) * @see javax.servlet.http.HttpServletRequest#getHeader(java.lang.String) */ @@ -124,7 +133,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Gets the property names from the {@link PortletRequest}. Note that a * {@link PortletRequest} is not guaranteed to map properties to headers. - * + * * @see PortletRequest#getPropertyNames() * @see javax.servlet.http.HttpServletRequest#getHeaderNames() */ @@ -136,7 +145,7 @@ public class PortletServletRequest implements HttpServletRequest { * Gets the values for the specified property from the * {@link PortletRequest}. Note that a {@link PortletRequest} is not * guaranteed to map properties to headers. - * + * * @see PortletRequest#getProperties(String) * @see HttpServletRequest#getHeaders(String) */ @@ -146,7 +155,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Not allowed in a portlet. - * + * * @throws IllegalStateException * Not allowed in a portlet. */ @@ -156,7 +165,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.http.HttpServletRequest#getMethod() */ public String getMethod() { @@ -170,7 +179,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.http.HttpServletRequest#getPathInfo() */ public String getPathInfo() { @@ -179,7 +188,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.http.HttpServletRequest#getPathTranslated() */ public String getPathTranslated() { @@ -188,7 +197,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.http.HttpServletRequest#getQueryString() */ public String getQueryString() { @@ -197,7 +206,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.http.HttpServletRequest#getRemoteUser() */ public String getRemoteUser() { @@ -206,7 +215,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Not allowed in a portlet. - * + * * @throws IllegalStateException * Not allowed in a portlet. */ @@ -216,7 +225,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Not allowed in a portlet. - * + * * @throws IllegalStateException * Not allowed in a portlet. */ @@ -226,7 +235,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.http.HttpServletRequest#getRequestedSessionId() */ public String getRequestedSessionId() { @@ -237,7 +246,7 @@ public class PortletServletRequest implements HttpServletRequest { * A {@link PortletRequest} has no servlet path. But for compatibility with * Struts 2 components and interceptors, the action parameter on the request * is mapped to the servlet path. - * + * * @see javax.servlet.http.HttpServletRequest#getServletPath() */ public String getServletPath() { @@ -250,16 +259,21 @@ public class PortletServletRequest implements HttpServletRequest { /** * Get the {@link PortletSession} as a {@link PortletHttpSession} instance. - * + * * @see javax.servlet.http.HttpServletRequest#getSession() */ public HttpSession getSession() { return new PortletHttpSession(portletRequest.getPortletSession()); } + @Override + public String changeSessionId() { + return null; + } + /** * Get the {@link PortletSession} as a {@link PortletHttpSession} instance. - * + * * @see javax.servlet.http.HttpServletRequest#getSession(boolean) */ public HttpSession getSession(boolean create) { @@ -268,7 +282,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.http.HttpServletRequest#getUserPrincipal() */ public Principal getUserPrincipal() { @@ -277,7 +291,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Not allowed in a portlet. - * + * * @throws IllegalStateException * Not allowed in a portlet. */ @@ -287,7 +301,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Not allowed in a portlet. - * + * * @throws IllegalStateException * Not allowed in a portlet. */ @@ -297,7 +311,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Not allowed in a portlet. - * + * * @throws IllegalStateException * Not allowed in a portlet. */ @@ -305,9 +319,39 @@ public class PortletServletRequest implements HttpServletRequest { throw new IllegalStateException("Not allowed in a portlet"); } + @Override + public boolean authenticate(HttpServletResponse response) throws IOException, ServletException { + return false; + } + + @Override + public void login(String username, String password) throws ServletException { + + } + + @Override + public void logout() throws ServletException { + + } + + @Override + public Collection<Part> getParts() throws IOException, ServletException { + return null; + } + + @Override + public Part getPart(String name) throws IOException, ServletException { + return null; + } + + @Override + public <T extends HttpUpgradeHandler> T upgrade(Class<T> handlerClass) throws IOException, ServletException { + return null; + } + /* * (non-Javadoc) - * + * * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdValid() */ public boolean isRequestedSessionIdValid() { @@ -316,7 +360,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.http.HttpServletRequest#isUserInRole(java.lang.String) */ public boolean isUserInRole(String role) { @@ -327,7 +371,7 @@ public class PortletServletRequest implements HttpServletRequest { * Gets an attribute value on the {@link PortletRequest}. If the attribute * name is <tt>javax.servlet.include.servlet_path</tt>, it returns the * same as {@link PortletServletRequest#getServletPath()} - * + * * @see javax.servlet.ServletRequest#getAttribute(java.lang.String) */ public Object getAttribute(String name) { @@ -340,7 +384,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.ServletRequest#getAttributeNames() */ public Enumeration getAttributeNames() { @@ -349,7 +393,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Can only be invoked in the event phase. - * + * * @see ServletRequest#getCharacterEncoding() * @throws IllegalStateException * If the portlet is not in the event phase. @@ -364,7 +408,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Can only be invoked in the event phase. - * + * * @see ServletRequest#getContentLength() * @throws IllegalStateException * If the portlet is not in the event phase. @@ -377,9 +421,14 @@ public class PortletServletRequest implements HttpServletRequest { } } + @Override + public long getContentLengthLong() { + return 0; + } + /** * Can only be invoked in the event phase. - * + * * @see ServletRequest#getContentType() * @throws IllegalStateException * If the portlet is not in the event phase. @@ -396,7 +445,7 @@ public class PortletServletRequest implements HttpServletRequest { * Can only be invoked in the event phase. When invoked in the event phase, * it will wrap the portlet's {@link InputStream} as a * {@link PortletServletInputStream}. - * + * * @see ServletRequest#getInputStream() * @throws IllegalStateException * If the portlet is not in the event phase. @@ -412,7 +461,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Not allowed in a portlet. - * + * * @throws IllegalStateException * Not allowed in a portlet. */ @@ -425,7 +474,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Not allowed in a portlet. - * + * * @throws IllegalStateException * Not allowed in a portlet. */ @@ -438,7 +487,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Not allowed in a portlet. - * + * * @throws IllegalStateException * Not allowed in a portlet. */ @@ -449,9 +498,44 @@ public class PortletServletRequest implements HttpServletRequest { throw new IllegalStateException("Not allowed in a portlet"); } + @Override + public ServletContext getServletContext() { + return null; + } + + @Override + public AsyncContext startAsync() throws IllegalStateException { + return null; + } + + @Override + public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse) throws IllegalStateException { + return null; + } + + @Override + public boolean isAsyncStarted() { + return false; + } + + @Override + public boolean isAsyncSupported() { + return false; + } + + @Override + public AsyncContext getAsyncContext() { + return null; + } + + @Override + public DispatcherType getDispatcherType() { + return null; + } + /* * (non-Javadoc) - * + * * @see javax.servlet.ServletRequest#getLocale() */ public Locale getLocale() { @@ -460,7 +544,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.ServletRequest#getLocales() */ public Enumeration getLocales() { @@ -469,7 +553,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.ServletRequest#getParameter(java.lang.String) */ public String getParameter(String name) { @@ -485,7 +569,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.ServletRequest#getParameterMap() */ public Map getParameterMap() { @@ -494,7 +578,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.ServletRequest#getParameterNames() */ public Enumeration getParameterNames() { @@ -503,7 +587,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.ServletRequest#getParameterValues(java.lang.String) */ public String[] getParameterValues(String name) { @@ -512,7 +596,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Not allowed in a portlet. - * + * * @throws IllegalStateException * Not allowed in a portlet. */ @@ -525,7 +609,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Can only be invoked in the event phase. - * + * * @see ServletRequest#getReader() * @throws IllegalStateException * If the portlet is not in the event phase. @@ -540,7 +624,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.ServletRequest#getRealPath(java.lang.String) */ public String getRealPath(String path) { @@ -549,7 +633,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Not allowed in a portlet. - * + * * @throws IllegalStateException * Not allowed in a portlet. */ @@ -562,7 +646,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Not allowed in a portlet. - * + * * @throws IllegalStateException * Not allowed in a portlet. */ @@ -575,7 +659,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Not allowed in a portlet. - * + * * @throws IllegalStateException * Not allowed in a portlet. */ @@ -589,7 +673,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Get the {@link PortletRequestDispatcher} as a * {@link PortletServletRequestDispatcher} instance. - * + * * @see javax.servlet.ServletRequest#getRequestDispatcher(java.lang.String) */ public RequestDispatcher getRequestDispatcher(String path) { @@ -599,7 +683,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.ServletRequest#getScheme() */ public String getScheme() { @@ -608,7 +692,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.ServletRequest#getServerName() */ public String getServerName() { @@ -617,7 +701,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Not allowed in a portlet. - * + * * @throws IllegalStateException * Not allowed in a portlet. */ @@ -630,7 +714,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.ServletRequest#isSecure() */ public boolean isSecure() { @@ -639,7 +723,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.ServletRequest#removeAttribute(java.lang.String) */ public void removeAttribute(String name) { @@ -648,7 +732,7 @@ public class PortletServletRequest implements HttpServletRequest { /* * (non-Javadoc) - * + * * @see javax.servlet.ServletRequest#setAttribute(java.lang.String, * java.lang.Object) */ @@ -658,7 +742,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Can only be invoked in the event phase. - * + * * @see ServletRequest#setCharacterEncoding(String) * @throws IllegalStateException * If the portlet is not in the event phase. @@ -674,7 +758,7 @@ public class PortletServletRequest implements HttpServletRequest { /** * Get the wrapped {@link PortletRequest} instance. - * + * * @return The wrapped {@link PortletRequest} instance. */ public PortletRequest getPortletRequest() { diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java index e14b347f0..e5c76f9ab 100644 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java +++ b/plugins/portlet/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java @@ -20,6 +20,7 @@ package org.apache.struts2.portlet.servlet; import java.io.IOException; import java.io.PrintWriter; +import java.util.Collection; import java.util.Locale; import javax.portlet.PortletResponse; @@ -31,11 +32,11 @@ import javax.servlet.http.HttpServletResponse; public class PortletServletResponse implements HttpServletResponse { protected PortletResponse portletResponse; - + public PortletServletResponse(PortletResponse portletResponse) { this.portletResponse = portletResponse; } - + public void addCookie(Cookie cookie) { throw new IllegalStateException("Not allowed in a portlet"); } @@ -104,6 +105,26 @@ public class PortletServletResponse implements HttpServletResponse { throw new IllegalStateException("Not allowed in a portlet"); } + @Override + public int getStatus() { + return 0; + } + + @Override + public String getHeader(String name) { + return null; + } + + @Override + public Collection<String> getHeaders(String name) { + return null; + } + + @Override + public Collection<String> getHeaderNames() { + return null; + } + public void flushBuffer() throws IOException { if(portletResponse instanceof RenderResponse) { ((RenderResponse)portletResponse).flushBuffer(); @@ -211,6 +232,11 @@ public class PortletServletResponse implements HttpServletResponse { throw new IllegalStateException("Not allowed in a portlet"); } + @Override + public void setContentLengthLong(long len) { + + } + public void setContentType(String type) { if(portletResponse instanceof RenderResponse) { ((RenderResponse)portletResponse).setContentType(type); diff --git a/plugins/rest/pom.xml b/plugins/rest/pom.xml index 73efaff36..aa649b5ac 100644 --- a/plugins/rest/pom.xml +++ b/plugins/rest/pom.xml @@ -96,16 +96,6 @@ <artifactId>assertj-core</artifactId> <scope>test</scope> </dependency> - - <!-- The Servlet API mocks in Spring Framework 4.x only supports Servlet 3.0 and higher. - This is only necessary in tests--> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>javax.servlet-api</artifactId> - <version>3.1.0</version> - <scope>test</scope> - </dependency> - </dependencies> </project> diff --git a/plugins/spring/pom.xml b/plugins/spring/pom.xml index 087c3b398..8ac635eb6 100644 --- a/plugins/spring/pom.xml +++ b/plugins/spring/pom.xml @@ -19,7 +19,8 @@ * under the License. */ --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.struts</groupId> @@ -51,13 +52,13 @@ <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> </dependency> - + <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <optional>true</optional> </dependency> - + <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> @@ -80,30 +81,21 @@ <artifactId>commons-jci-fam</artifactId> <optional>true</optional> </dependency> - + <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <optional>true</optional> </dependency> - <dependency> + <dependency> <groupId>org.easymock</groupId> <artifactId>easymock</artifactId> <scope>test</scope> </dependency> - - <!-- The Servlet API mocks in Spring Framework 4.0 support Servlet 3.0 and higher - So this is only necessary in tests--> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>javax.servlet-api</artifactId> - <version>3.1.0</version> - <scope>test</scope> - </dependency> - </dependencies> + </dependencies> <properties> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> </project> diff --git a/plugins/testng/pom.xml b/plugins/testng/pom.xml index 78aad4319..74dd9d305 100644 --- a/plugins/testng/pom.xml +++ b/plugins/testng/pom.xml @@ -19,7 +19,8 @@ * under the License. */ --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.struts</groupId> @@ -51,18 +52,10 @@ <artifactId>jsp-api</artifactId> <scope>provided</scope> </dependency> - - <!-- The Servlet API mocks in Spring Framework 4.x only supports Servlet 3.0 and higher. - This is only necessary in tests--> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>javax.servlet-api</artifactId> - <version>3.1.0</version> - <scope>test</scope> - </dependency> - </dependencies> + <properties> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> + </project> diff --git a/plugins/velocity/pom.xml b/plugins/velocity/pom.xml index 8a2c69a80..a14561f24 100644 --- a/plugins/velocity/pom.xml +++ b/plugins/velocity/pom.xml @@ -51,7 +51,7 @@ <dependency> <groupId>javax.servlet</groupId> - <artifactId>servlet-api</artifactId> + <artifactId>javax.servlet-api</artifactId> </dependency> <dependency> @@ -59,15 +59,6 @@ <artifactId>jsp-api</artifactId> </dependency> - <!-- The Servlet API mocks in Spring Framework 4.0 support Servlet 3.0 and higher - So this is only necessary in tests--> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>javax.servlet-api</artifactId> - <version>3.1.0</version> - <scope>test</scope> - </dependency> - <dependency> <groupId>mockobjects</groupId> <artifactId>mockobjects-core</artifactId> diff --git a/pom.xml b/pom.xml index e767d3676..0029f5128 100644 --- a/pom.xml +++ b/pom.xml @@ -809,8 +809,8 @@ <dependency> <groupId>javax.servlet</groupId> - <artifactId>servlet-api</artifactId> - <version>2.5</version> + <artifactId>javax.servlet-api</artifactId> + <version>3.1.0</version> <scope>provided</scope> </dependency>