diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/action/PortletResponseAware.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/action/PortletResponseAware.java new file mode 100644 index 000000000..007a65bb5 --- /dev/null +++ b/plugins/portlet/src/main/java/org/apache/struts2/portlet/action/PortletResponseAware.java @@ -0,0 +1,30 @@ +/* + * 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.portlet.action; + +import javax.portlet.PortletResponse; + +/** + * @since 2.6 + */ +public interface PortletResponseAware { + + void withPortletResponse(PortletResponse response); + +} diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptor.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptor.java index 8c7f5857a..420042e1d 100644 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptor.java +++ b/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptor.java @@ -62,6 +62,12 @@ public class PortletAwareInterceptor extends AbstractInterceptor implements Stru PortletResponse response = (PortletResponse) context.get(PortletConstants.RESPONSE); ((PortletResponseAware) action).setPortletResponse(response); } + + if (action instanceof org.apache.struts2.portlet.action.PortletResponseAware) { + PortletResponse response = (PortletResponse) context.get(PortletConstants.RESPONSE); + ((org.apache.struts2.portlet.action.PortletResponseAware) action).withPortletResponse(response); + } + if (action instanceof PrincipalAware) { PortletRequest request = (PortletRequest) context.get(PortletConstants.REQUEST); ((PrincipalAware) action).setPrincipalProxy(new PortletPrincipalProxy(request)); diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletResponseAware.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletResponseAware.java index 48cbb445a..dc4f71b93 100644 --- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletResponseAware.java +++ b/plugins/portlet/src/main/java/org/apache/struts2/portlet/interceptor/PortletResponseAware.java @@ -20,8 +20,16 @@ package org.apache.struts2.portlet.interceptor; import javax.portlet.PortletResponse; +/** + * @deprecated please use {@link org.apache.struts2.portlet.action.PortletResponseAware} instead + */ +@Deprecated public interface PortletResponseAware { + /** + * @deprecated please use {@link org.apache.struts2.portlet.action.PortletResponseAware#withPortletResponse(PortletResponse)} instead + */ + @Deprecated void setPortletResponse(PortletResponse response); } diff --git a/plugins/portlet/src/test/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptorTest.java b/plugins/portlet/src/test/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptorTest.java index 4443411f4..b9664c9e5 100644 --- a/plugins/portlet/src/test/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptorTest.java +++ b/plugins/portlet/src/test/java/org/apache/struts2/portlet/interceptor/PortletAwareInterceptorTest.java @@ -25,6 +25,7 @@ import org.apache.struts2.portlet.PortletConstants; import org.easymock.EasyMock; import javax.portlet.PortletRequest; +import javax.portlet.PortletResponse; import java.util.HashMap; import java.util.Map; @@ -78,4 +79,23 @@ public class PortletAwareInterceptorTest extends TestCase { EasyMock.verify(action); } + + public void testActionPortletResponseAware() throws Exception { + PortletResponse response = EasyMock.createMock(PortletResponse.class); + Map ctx = new HashMap<>(); + ctx.put(PortletConstants.RESPONSE, response); + org.apache.struts2.portlet.action.PortletResponseAware action = EasyMock.createMock(org.apache.struts2.portlet.action.PortletResponseAware.class); + action.withPortletResponse(response); + + ActionInvocation invocation = EasyMock.createNiceMock(ActionInvocation.class); + EasyMock.expect(invocation.getInvocationContext()).andReturn(new ActionContext(ctx)); + EasyMock.expect(invocation.getAction()).andReturn(action); + + EasyMock.replay(action); + EasyMock.replay(invocation); + + interceptor.intercept(invocation); + + EasyMock.verify(action); + } }