WW-4963 Implements new ServletRequestAware interface

that uses withRequest instead of setRequest
This commit is contained in:
Lukasz Lenart
2018-09-19 16:26:24 +02:00
parent d38efae5f0
commit 3820eae31f
4 changed files with 64 additions and 0 deletions
@@ -0,0 +1,39 @@
/*
* 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.action;
import javax.servlet.http.HttpServletRequest;
/**
* All Actions that want to have access to the servlet request object must implement this interface.
*
* This interface is only relevant if the Action is used in a servlet environment.
*
* Note that using this interface makes the Action tied to a servlet environment, so it should be
* avoided if possible since things like unit testing will become more difficult.
*/
public interface ServletRequestAware {
/**
* Applies the HTTP request object in implementing classes.
*
* @param request the HTTP request.
*/
void withServletRequest(HttpServletRequest request);
}
@@ -128,6 +128,11 @@ public class ServletConfigInterceptor extends AbstractInterceptor implements Str
((ServletRequestAware) action).setServletRequest(request);
}
if (action instanceof org.apache.struts2.action.ServletRequestAware) {
HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);
((org.apache.struts2.action.ServletRequestAware) action).withServletRequest(request);
}
if (action instanceof ServletResponseAware) {
HttpServletResponse response = (HttpServletResponse) context.get(HTTP_RESPONSE);
((ServletResponseAware) action).setServletResponse(response);
@@ -33,13 +33,17 @@ import javax.servlet.http.HttpServletRequest;
* Note that using this interface makes the Action tied to a servlet environment, so it should be
* avoided if possible since things like unit testing will become more difficult.
* </p>
* @deprecated please use {@link org.apache.struts2.action.ServletRequestAware} instead
*/
@Deprecated
public interface ServletRequestAware {
/**
* Sets the HTTP request object in implementing classes.
*
* @param request the HTTP request.
* @deprecated please use {@link org.apache.struts2.action.ServletRequestAware#withServletRequest(HttpServletRequest)}
*/
@Deprecated
public void setServletRequest(HttpServletRequest request);
}
@@ -64,6 +64,22 @@ public class ServletConfigInterceptorTest extends StrutsInternalTestCase {
verify(mock);
}
public void testActionServletRequestAware() throws Exception {
org.apache.struts2.action.ServletRequestAware mock = createMock(org.apache.struts2.action.ServletRequestAware.class);
MockHttpServletRequest req = new MockHttpServletRequest();
MockActionInvocation mai = createActionInvocation(mock);
mai.getInvocationContext().put(StrutsStatics.HTTP_REQUEST, req);
mock.withServletRequest(req);
expectLastCall();
replay(mock);
interceptor.intercept(mai);
verify(mock);
}
public void testServletResponseAware() throws Exception {
ServletResponseAware mock = (ServletResponseAware) createMock(ServletResponseAware.class);