You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by ch...@apache.org on 2014/03/11 06:23:20 UTC
[1/2] git commit: DELTASPIKE-414 Refactored RequestResponseHolder to
allow to bind request/response individually
Repository: deltaspike
Updated Branches:
refs/heads/master 0316dab80 -> 6f37b12f0
DELTASPIKE-414 Refactored RequestResponseHolder to allow to bind request/response individually
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/360a6946
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/360a6946
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/360a6946
Branch: refs/heads/master
Commit: 360a69460cb4384554e9c3fa4060ec2b62f2bc00
Parents: 0316dab
Author: Christian Kaltepoth <ch...@apache.org>
Authored: Mon Mar 10 07:55:32 2014 +0100
Committer: Christian Kaltepoth <ch...@apache.org>
Committed: Mon Mar 10 07:55:32 2014 +0100
----------------------------------------------------------------------
.../servlet/impl/produce/RequestResponse.java | 63 -----------------
.../impl/produce/RequestResponseHolder.java | 72 +++++++++++---------
.../produce/RequestResponseHolderFilter.java | 6 +-
.../impl/produce/ServletObjectProducer.java | 10 +--
4 files changed, 50 insertions(+), 101 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/360a6946/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponse.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponse.java b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponse.java
deleted file mode 100644
index 9e554d6..0000000
--- a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponse.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 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.deltaspike.servlet.impl.produce;
-
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
-/**
- * Simple value objects that holds a request/response pair.
- */
-class RequestResponse
-{
-
- private final ServletRequest request;
- private final ServletResponse response;
-
- /**
- * Creates a new instance of this class.
- *
- * @param request
- * the request
- * @param response
- * the response
- */
- RequestResponse(ServletRequest request, ServletResponse response)
- {
- this.request = request;
- this.response = response;
- }
-
- /**
- * Returns the request stored in this object.
- */
- ServletRequest getRequest()
- {
- return request;
- }
-
- /**
- * Returns the response stored in this object.
- */
- ServletResponse getResponse()
- {
- return response;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/360a6946/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolder.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolder.java b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolder.java
index b7dd459..3660d9f 100644
--- a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolder.java
+++ b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolder.java
@@ -22,69 +22,79 @@ import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
- * The {@link RequestResponseHolder} holds {@link RequestResponse} objects in a {@link ThreadLocal}.
+ * Utility class which is used to bind the {@link ServletRequest} and {@link ServletResponse} to the current thread.
+ *
+ * @param <Type>
+ * {@link ServletRequest} or {@link ServletResponse}
*/
-class RequestResponseHolder
+class RequestResponseHolder<Type>
{
- private static final ThreadLocal<RequestResponse> requestResponseThreadLocal = new ThreadLocal<RequestResponse>();
+ /**
+ * Instance for storing the {@link ServletRequest}
+ */
+ static final RequestResponseHolder<ServletRequest> REQUEST = new RequestResponseHolder<ServletRequest>();
+
+ /**
+ * Instance for storing the {@link ServletResponse}
+ */
+ static final RequestResponseHolder<ServletResponse> RESPONSE = new RequestResponseHolder<ServletResponse>();
+
+ private final ThreadLocal<Type> threadLocal = new ThreadLocal<Type>();
private RequestResponseHolder()
{
- // no instance creation allowed
+ // hide constructor
}
/**
- * Binds the a request/response pair to the current thread.
+ * Binds the request or response to the current thread.
*
- * @param request
- * The request, must not be <code>null</code>
- * @param response
- * The response, must not be <code>null</code>
+ * @param instance
+ * The request/response
+ * @throws IllegalStateException
+ * if there is already an instance bound to the thread
*/
- static void bind(ServletRequest request, ServletResponse response)
+ void bind(Type instance)
{
- bind(new RequestResponse(request, response));
+ if (isBound())
+ {
+ throw new IllegalStateException("There is already an instance bound to this thread.");
+ }
+ threadLocal.set(instance);
}
/**
- * Binds the a request/response pair to the current thread.
- *
- * @param pair
- * The request/response pair, must not be <code>null</code>
+ * Returns <code>true</code> if there is already an instance bound to the thread
*/
- static void bind(RequestResponse pair)
+ boolean isBound()
{
- if (requestResponseThreadLocal.get() != null)
- {
- throw new IllegalStateException("There is already an instance stored for this thread.");
- }
- requestResponseThreadLocal.set(pair);
+ return threadLocal.get() != null;
}
/**
- * Releases the stored request/response pair for the current thread.
+ * Release the instance bound to the current thread
*/
- static void release()
+ void release()
{
- requestResponseThreadLocal.remove();
+ threadLocal.remove();
}
/**
- * Retrieves the request/response pair associated with the current thread.
+ * Retrieve the request/response bound to the current thread.
*
- * @return The request/response pair, never <code>null</code>
+ * @return instance bound to the thread
* @throws IllegalStateException
- * if no pair is associated with the thread
+ * if there is no instance bound to the thread
*/
- static RequestResponse get()
+ Type get()
{
- RequestResponse requestResponse = requestResponseThreadLocal.get();
- if (requestResponse == null)
+ Type instance = threadLocal.get();
+ if (instance == null)
{
throw new IllegalStateException("Attempt to access the request/response without an active HTTP request");
}
- return requestResponse;
+ return instance;
}
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/360a6946/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolderFilter.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolderFilter.java b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolderFilter.java
index 29ac2cb..f63e67d 100644
--- a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolderFilter.java
+++ b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolderFilter.java
@@ -44,14 +44,16 @@ public class RequestResponseHolderFilter implements Filter
ServletException
{
- RequestResponseHolder.bind(request, response);
+ RequestResponseHolder.REQUEST.bind(request);
+ RequestResponseHolder.RESPONSE.bind(response);
try
{
chain.doFilter(request, response);
}
finally
{
- RequestResponseHolder.release();
+ RequestResponseHolder.REQUEST.release();
+ RequestResponseHolder.RESPONSE.release();
}
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/360a6946/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/ServletObjectProducer.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/ServletObjectProducer.java b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/ServletObjectProducer.java
index f74f3f3..3f9ca66 100644
--- a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/ServletObjectProducer.java
+++ b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/ServletObjectProducer.java
@@ -62,7 +62,7 @@ public class ServletObjectProducer
@RequestScoped
public ServletRequest getServletRequest()
{
- return RequestResponseHolder.get().getRequest();
+ return RequestResponseHolder.REQUEST.get();
}
@Produces
@@ -71,7 +71,7 @@ public class ServletObjectProducer
@RequestScoped
public HttpServletRequest getHttpServletRequest()
{
- ServletRequest request = RequestResponseHolder.get().getRequest();
+ ServletRequest request = RequestResponseHolder.REQUEST.get();
if (request instanceof HttpServletRequest)
{
return (HttpServletRequest) request;
@@ -84,7 +84,7 @@ public class ServletObjectProducer
@RequestScoped
public ServletResponse getServletResponse()
{
- return RequestResponseHolder.get().getResponse();
+ return RequestResponseHolder.RESPONSE.get();
}
@Produces
@@ -93,7 +93,7 @@ public class ServletObjectProducer
@RequestScoped
public HttpServletResponse getHttpServletResponse()
{
- ServletResponse response = RequestResponseHolder.get().getResponse();
+ ServletResponse response = RequestResponseHolder.RESPONSE.get();
if (response instanceof HttpServletResponse)
{
return (HttpServletResponse) response;
@@ -106,7 +106,7 @@ public class ServletObjectProducer
@SessionScoped
public HttpSession getHttpSession()
{
- ServletRequest request = RequestResponseHolder.get().getRequest();
+ ServletRequest request = RequestResponseHolder.REQUEST.get();
if (request instanceof HttpServletRequest)
{
return ((HttpServletRequest) request).getSession(true);
[2/2] git commit: DELTASPIKE-414 Added a ServletRequestListener to
bind the request to the current thread
Posted by ch...@apache.org.
DELTASPIKE-414 Added a ServletRequestListener to bind the request to the current thread
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/6f37b12f
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/6f37b12f
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/6f37b12f
Branch: refs/heads/master
Commit: 6f37b12f0e4dc52cd6e4a57ff249c48a0ed59c59
Parents: 360a694
Author: Christian Kaltepoth <ch...@apache.org>
Authored: Mon Mar 10 17:26:28 2014 +0100
Committer: Christian Kaltepoth <ch...@apache.org>
Committed: Mon Mar 10 17:26:28 2014 +0100
----------------------------------------------------------------------
.../produce/RequestResponseHolderFilter.java | 30 +++++--
.../produce/RequestResponseHolderListener.java | 42 ++++++++++
.../main/resources/META-INF/web-fragment.xml | 5 ++
.../producer/EarlyRequestInjectionFilter.java | 69 ++++++++++++++++
.../producer/EarlyRequestInjectionTest.java | 87 ++++++++++++++++++++
5 files changed, 228 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/6f37b12f/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolderFilter.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolderFilter.java b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolderFilter.java
index f63e67d..9f55cb0 100644
--- a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolderFilter.java
+++ b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolderFilter.java
@@ -44,16 +44,36 @@ public class RequestResponseHolderFilter implements Filter
ServletException
{
- RequestResponseHolder.REQUEST.bind(request);
- RequestResponseHolder.RESPONSE.bind(response);
+ /*
+ * Typically the request is bound to the thread in RequestResponseHolderListener. But as this listener was added
+ * after the initial release of the Servlet module, the filter will also do it if necessary.
+ */
+ final boolean alreadyBound = RequestResponseHolder.REQUEST.isBound();
+ if (!alreadyBound)
+ {
+ RequestResponseHolder.REQUEST.bind(request);
+ }
+
try
{
- chain.doFilter(request, response);
+
+ RequestResponseHolder.RESPONSE.bind(response);
+ try
+ {
+ chain.doFilter(request, response);
+ }
+ finally
+ {
+ RequestResponseHolder.RESPONSE.release();
+ }
+
}
finally
{
- RequestResponseHolder.REQUEST.release();
- RequestResponseHolder.RESPONSE.release();
+ if (!alreadyBound)
+ {
+ RequestResponseHolder.REQUEST.release();
+ }
}
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/6f37b12f/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolderListener.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolderListener.java b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolderListener.java
new file mode 100644
index 0000000..a913436
--- /dev/null
+++ b/deltaspike/modules/servlet/impl/src/main/java/org/apache/deltaspike/servlet/impl/produce/RequestResponseHolderListener.java
@@ -0,0 +1,42 @@
+/*
+ * 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.deltaspike.servlet.impl.produce;
+
+import javax.servlet.ServletRequestEvent;
+import javax.servlet.ServletRequestListener;
+
+/**
+ * This class stores the ServletRequest in the {@link RequestResponseHolder}.
+ */
+public class RequestResponseHolderListener implements ServletRequestListener
+{
+
+ @Override
+ public void requestInitialized(ServletRequestEvent sre)
+ {
+ RequestResponseHolder.REQUEST.bind(sre.getServletRequest());
+ }
+
+ @Override
+ public void requestDestroyed(ServletRequestEvent sre)
+ {
+ RequestResponseHolder.REQUEST.release();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/6f37b12f/deltaspike/modules/servlet/impl/src/main/resources/META-INF/web-fragment.xml
----------------------------------------------------------------------
diff --git a/deltaspike/modules/servlet/impl/src/main/resources/META-INF/web-fragment.xml b/deltaspike/modules/servlet/impl/src/main/resources/META-INF/web-fragment.xml
index 4eff1d1..bffa282 100644
--- a/deltaspike/modules/servlet/impl/src/main/resources/META-INF/web-fragment.xml
+++ b/deltaspike/modules/servlet/impl/src/main/resources/META-INF/web-fragment.xml
@@ -45,6 +45,11 @@
<listener-class>org.apache.deltaspike.servlet.impl.produce.ServletContextHolderListener</listener-class>
</listener>
+ <listener>
+ <display-name>RequestResponseHolderListener</display-name>
+ <listener-class>org.apache.deltaspike.servlet.impl.produce.RequestResponseHolderListener</listener-class>
+ </listener>
+
<filter>
<display-name>RequestResponseHolderFilter</display-name>
<filter-name>RequestResponseHolderFilter</filter-name>
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/6f37b12f/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/producer/EarlyRequestInjectionFilter.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/producer/EarlyRequestInjectionFilter.java b/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/producer/EarlyRequestInjectionFilter.java
new file mode 100644
index 0000000..f60eecd
--- /dev/null
+++ b/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/producer/EarlyRequestInjectionFilter.java
@@ -0,0 +1,69 @@
+/*
+ * 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.deltaspike.test.servlet.impl.producer;
+
+import java.io.IOException;
+
+import javax.inject.Inject;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.deltaspike.core.api.common.DeltaSpike;
+
+public class EarlyRequestInjectionFilter implements Filter
+{
+
+ @Inject
+ @DeltaSpike
+ private HttpServletRequest injectedRequest;
+
+ @Override
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
+ ServletException
+ {
+
+ // check if the request has been injected
+ if (injectedRequest != null && injectedRequest.getContextPath() != null)
+ {
+ ((HttpServletResponse) response).setHeader("X-DS-Request-Injected", "true");
+ }
+
+ chain.doFilter(request, response);
+
+ }
+
+ @Override
+ public void init(FilterConfig filterConfig) throws ServletException
+ {
+ // nothing to do
+ }
+
+ @Override
+ public void destroy()
+ {
+ // nothing to do
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/6f37b12f/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/producer/EarlyRequestInjectionTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/producer/EarlyRequestInjectionTest.java b/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/producer/EarlyRequestInjectionTest.java
new file mode 100644
index 0000000..274a8e0
--- /dev/null
+++ b/deltaspike/modules/servlet/impl/src/test/java/org/apache/deltaspike/test/servlet/impl/producer/EarlyRequestInjectionTest.java
@@ -0,0 +1,87 @@
+/*
+ * 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.deltaspike.test.servlet.impl.producer;
+
+import static org.junit.Assert.assertEquals;
+
+import java.net.URL;
+
+import org.apache.deltaspike.test.category.WebProfileCategory;
+import org.apache.deltaspike.test.servlet.impl.util.ArchiveUtils;
+import org.apache.http.Header;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.test.api.ArquillianResource;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.shrinkwrap.descriptor.api.Descriptors;
+import org.jboss.shrinkwrap.descriptor.api.spec.servlet.web.WebAppDescriptor;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
+/**
+ * Verifies that request injection into filters work as expected.
+ *
+ * @see https://issues.apache.org/jira/browse/DELTASPIKE-414
+ */
+@RunWith(Arquillian.class)
+@Category(WebProfileCategory.class)
+public class EarlyRequestInjectionTest
+{
+
+ @Deployment(testable = false)
+ public static WebArchive getDeployment()
+ {
+ return ShrinkWrap.create(WebArchive.class, EarlyRequestInjectionTest.class.getSimpleName() + ".war")
+ .addAsLibraries(ArchiveUtils.getDeltaSpikeCoreAndServletModuleArchive())
+ .addAsResource("META-INF/web-fragment.xml", "META-INF/web-fragment.xml")
+ .addAsWebInfResource(new StringAsset("<beans/>"), "beans.xml")
+ .addClass(EarlyRequestInjectionFilter.class)
+ .addAsWebResource(new StringAsset("foobar"), "foobar.txt")
+ .setWebXML(new StringAsset(
+ Descriptors.create(WebAppDescriptor.class)
+ .filter(EarlyRequestInjectionFilter.class, "/*")
+ .exportAsString()));
+
+ }
+
+ @ArquillianResource
+ private URL contextPath;
+
+ @Test
+ public void shouldInjectRequestIntoFilters() throws Exception
+ {
+
+ String url = new URL(contextPath, "foobar.txt").toString();
+ HttpResponse response = new DefaultHttpClient().execute(new HttpGet(url));
+
+ assertEquals(200, response.getStatusLine().getStatusCode());
+
+ Header[] verificationHeader = response.getHeaders("X-DS-Request-Injected");
+ assertEquals(1, verificationHeader.length);
+ assertEquals("true", verificationHeader[0].getValue());
+
+ }
+
+}