You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2014/12/12 17:23:22 UTC
cxf git commit: [CXF-6079,
CXF-6153] Support for RequestDispatcher.include and Cache-Control for
static resources
Repository: cxf
Updated Branches:
refs/heads/master 5e97d1e29 -> 1946e323a
[CXF-6079, CXF-6153] Support for RequestDispatcher.include and Cache-Control for static resources
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/1946e323
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/1946e323
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/1946e323
Branch: refs/heads/master
Commit: 1946e323a0df6e5f9748af82106cff39d7b5d01f
Parents: 5e97d1e
Author: Sergey Beryozkin <sb...@talend.com>
Authored: Fri Dec 12 16:23:00 2014 +0000
Committer: Sergey Beryozkin <sb...@talend.com>
Committed: Fri Dec 12 16:23:00 2014 +0000
----------------------------------------------------------------------
.../jaxrs/provider/RequestDispatcherProvider.java | 15 +++++++++++++--
.../cxf/transport/servlet/AbstractHTTPServlet.java | 14 ++++++++++++--
.../systest/jaxrs/JAXRSRequestDispatcherTest.java | 10 ++++++++++
.../test/resources/jaxrs_dispatch/WEB-INF/beans.xml | 12 ++++++++++++
4 files changed, 47 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cxf/blob/1946e323/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/RequestDispatcherProvider.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/RequestDispatcherProvider.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/RequestDispatcherProvider.java
index dfcb3a8..7282005 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/RequestDispatcherProvider.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/RequestDispatcherProvider.java
@@ -91,6 +91,7 @@ public class RequestDispatcherProvider extends AbstractConfigurableProvider
private boolean strictPathCheck;
private String locationPrefix;
private String resourceExtension;
+ private boolean includeResource;
private MessageContext mc;
@@ -191,7 +192,9 @@ public class RequestDispatcherProvider extends AbstractConfigurableProvider
RequestDispatcher rd = getRequestDispatcher(sc, clazz, theServletPath + path);
try {
- mc.put(AbstractHTTPDestination.REQUEST_REDIRECTED, Boolean.TRUE);
+ if (!includeResource) {
+ mc.put(AbstractHTTPDestination.REQUEST_REDIRECTED, Boolean.TRUE);
+ }
HttpServletRequestFilter requestFilter = new HttpServletRequestFilter(
servletRequest, path, theServletPath, saveParametersAsAttributes);
@@ -203,7 +206,11 @@ public class RequestDispatcherProvider extends AbstractConfigurableProvider
}
setRequestParameters(requestFilter);
logRedirection(path, attributeName, o);
- rd.forward(requestFilter, mc.getHttpServletResponse());
+ if (includeResource) {
+ rd.include(requestFilter, mc.getHttpServletResponse());
+ } else {
+ rd.forward(requestFilter, mc.getHttpServletResponse());
+ }
} catch (Throwable ex) {
mc.put(AbstractHTTPDestination.REQUEST_REDIRECTED, Boolean.FALSE);
ex.printStackTrace();
@@ -395,6 +402,10 @@ public class RequestDispatcherProvider extends AbstractConfigurableProvider
this.useCurrentServlet = useCurrentServlet;
}
+ public void setIncludeResource(boolean includeResource) {
+ this.includeResource = includeResource;
+ }
+
protected static class HttpServletRequestFilter extends HttpServletRequestWrapper {
private Map<String, String[]> params;
http://git-wip-us.apache.org/repos/asf/cxf/blob/1946e323/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
----------------------------------------------------------------------
diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
index a48b157..520b448 100644
--- a/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
+++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
@@ -50,6 +50,7 @@ import org.apache.cxf.Bus;
import org.apache.cxf.common.classloader.ClassLoaderUtils;
import org.apache.cxf.common.i18n.BundleUtils;
import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.common.util.PropertyUtils;
import org.apache.cxf.common.util.StringUtils;
import org.apache.cxf.helpers.IOUtils;
import org.apache.cxf.resource.ResourceManager;
@@ -69,6 +70,7 @@ public abstract class AbstractHTTPServlet extends HttpServlet implements Filter
private static final String STATIC_RESOURCES_PARAMETER = "static-resources-list";
private static final String STATIC_WELCOME_FILE_PARAMETER = "static-welcome-file";
+ private static final String STATIC_CACHE_CONTROL = "static-cache-control";
private static final String STATIC_RESOURCES_MAP_RESOURCE = "/cxfServletStaticResourcesMap.txt";
private static final String REDIRECTS_PARAMETER = "redirects-list";
@@ -76,6 +78,7 @@ public abstract class AbstractHTTPServlet extends HttpServlet implements Filter
private static final String REDIRECT_SERVLET_PATH_PARAMETER = "redirect-servlet-path";
private static final String REDIRECT_ATTRIBUTES_PARAMETER = "redirect-attributes";
private static final String REDIRECT_QUERY_CHECK_PARAMETER = "redirect-query-check";
+ private static final String REDIRECT_WITH_INCLUDE_PARAMETER = "redirect-with-include";
private static final String USE_X_FORWARDED_HEADERS_PARAMETER = "use-x-forwarded-headers";
private static final String X_FORWARDED_PROTO_HEADER = "X-Forwarded-Proto";
private static final String X_FORWARDED_FOR_HEADER = "X-Forwarded-For";
@@ -340,7 +343,10 @@ public abstract class AbstractHTTPServlet extends HttpServlet implements Filter
response.setContentType(type);
}
}
-
+ String cacheControl = getServletConfig().getInitParameter(STATIC_CACHE_CONTROL);
+ if (cacheControl != null) {
+ response.setHeader("Cache-Control", cacheControl.trim());
+ }
ServletOutputStream os = response.getOutputStream();
IOUtils.copy(is, os);
os.flush();
@@ -377,7 +383,11 @@ public abstract class AbstractHTTPServlet extends HttpServlet implements Filter
}
HttpServletRequest servletRequest =
new HttpServletRequestRedirectFilter(request, pathInfo, theServletPath, customServletPath);
- rd.forward(servletRequest, response);
+ if (PropertyUtils.isTrue(getServletConfig().getInitParameter(REDIRECT_WITH_INCLUDE_PARAMETER))) {
+ rd.include(servletRequest, response);
+ } else {
+ rd.forward(servletRequest, response);
+ }
} catch (Throwable ex) {
throw new ServletException("RequestDispatcher for path " + pathInfo + " has failed", ex);
}
http://git-wip-us.apache.org/repos/asf/cxf/blob/1946e323/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSRequestDispatcherTest.java
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSRequestDispatcherTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSRequestDispatcherTest.java
index 0cc12a8..93a1394 100644
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSRequestDispatcherTest.java
+++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSRequestDispatcherTest.java
@@ -43,6 +43,16 @@ public class JAXRSRequestDispatcherTest extends AbstractBusClientServerTestBase
public void testGetBookHTML() throws Exception {
String endpointAddress =
"http://localhost:" + PORT + "/the/bookstore1/books/html/123";
+ doTestGetBookHTML(endpointAddress);
+ }
+ @Test
+ public void testGetBookHTMLInclude() throws Exception {
+ String endpointAddress =
+ "http://localhost:" + PORT + "/the/bookstore5/books/html/123";
+ doTestGetBookHTML(endpointAddress);
+ }
+
+ private void doTestGetBookHTML(String endpointAddress) throws Exception {
WebClient client = WebClient.create(endpointAddress);
client.accept("text/html");
WebClient.getConfig(client).getHttpConduit().getClient().setReceiveTimeout(100000000);
http://git-wip-us.apache.org/repos/asf/cxf/blob/1946e323/systests/jaxrs/src/test/resources/jaxrs_dispatch/WEB-INF/beans.xml
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/resources/jaxrs_dispatch/WEB-INF/beans.xml b/systests/jaxrs/src/test/resources/jaxrs_dispatch/WEB-INF/beans.xml
index abe3a17..c1187b5 100644
--- a/systests/jaxrs/src/test/resources/jaxrs_dispatch/WEB-INF/beans.xml
+++ b/systests/jaxrs/src/test/resources/jaxrs_dispatch/WEB-INF/beans.xml
@@ -42,6 +42,10 @@
<property name="resourcePath" value="/book.html"/>
<property name="dispatcherName" value="default"/>
</bean>
+ <bean id="dispatchProvider5" class="org.apache.cxf.jaxrs.provider.RequestDispatcherProvider">
+ <property name="resourcePath" value="/book.html"/>
+ <property name="includeResource" value="true"/>
+ </bean>
<jaxrs:server id="bookservice1" address="/bookstore1">
<jaxrs:serviceBeans>
<ref bean="serviceBean"/>
@@ -74,5 +78,13 @@
<ref bean="dispatchProvider4"/>
</jaxrs:providers>
</jaxrs:server>
+ <jaxrs:server id="bookservice5" address="/bookstore5">
+ <jaxrs:serviceBeans>
+ <ref bean="serviceBean"/>
+ </jaxrs:serviceBeans>
+ <jaxrs:providers>
+ <ref bean="dispatchProvider5"/>
+ </jaxrs:providers>
+ </jaxrs:server>
</beans>
<!-- END SNIPPET: beans -->