Revision: 1550
Author: isaac.q.shum
Date: Mon May 23 15:08:31 2011
Log: Make the @RequestParameteters Map derive its values from the
existing
ServletRequest binding. This makes it easier to construct a seedMap for use
with
ServletScopes (one only needs to seed the request and response to override
the
map as well).
http://code.google.com/p/google-guice/source/detail?r=1550
Modified:
/trunk/extensions/servlet/src/com/google/inject/servlet/InternalServletModule.java
/trunk/extensions/servlet/test/com/google/inject/servlet/ServletTest.java
=======================================
---
/trunk/extensions/servlet/src/com/google/inject/servlet/InternalServletModule.java
Mon Jul 5 19:06:36 2010
+++
/trunk/extensions/servlet/src/com/google/inject/servlet/InternalServletModule.java
Mon May 23 15:08:31 2011
@@ -15,12 +15,17 @@
*/
package com.google.inject.servlet;
+import static com.google.inject.servlet.ServletScopes.REQUEST;
+import static com.google.inject.servlet.ServletScopes.SESSION;
+
import com.google.inject.AbstractModule;
import com.google.inject.Provider;
import com.google.inject.Provides;
import com.google.inject.Singleton;
+
import java.util.Map;
import java.util.logging.Logger;
+
import javax.servlet.ServletContext;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
@@ -28,9 +33,6 @@
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import static com.google.inject.servlet.ServletScopes.REQUEST;
-import static com.google.inject.servlet.ServletScopes.SESSION;
-
/**
* This is a left-factoring of all ServletModules installed in the system.
* In other words, this module contains the bindings common to all
ServletModules,
@@ -103,9 +105,10 @@
return GuiceFilter.getRequest().getSession();
}
- @SuppressWarnings({"unchecked"})
- @Provides @RequestScoped @RequestParameters Map<String, String[]>
provideRequestParameters() {
- return GuiceFilter.getRequest().getParameterMap();
+ @SuppressWarnings("unchecked") // defined by getParameterMap()
+ @Provides @RequestScoped @RequestParameters Map<String, String[]>
provideRequestParameters(
+ ServletRequest req) {
+ return req.getParameterMap();
}
@Override
=======================================
---
/trunk/extensions/servlet/test/com/google/inject/servlet/ServletTest.java
Sat Jul 3 08:51:31 2010
+++
/trunk/extensions/servlet/test/com/google/inject/servlet/ServletTest.java
Mon May 23 15:08:31 2011
@@ -16,46 +16,57 @@
package com.google.inject.servlet;
-import com.google.inject.AbstractModule;
import static com.google.inject.Asserts.reserialize;
+import static com.google.inject.servlet.ServletScopes.NullObject;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.isA;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+
+import com.google.inject.AbstractModule;
import com.google.inject.BindingAnnotation;
import com.google.inject.CreationException;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.internal.util.Maps;
-import static com.google.inject.servlet.ServletScopes.NullObject;
+import com.google.inject.servlet.RequestParameters;
import com.google.inject.util.Providers;
+
+import junit.framework.TestCase;
+
import java.io.IOException;
import java.io.Serializable;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
import java.lang.annotation.Retention;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Target;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Map;
+
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import junit.framework.TestCase;
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.isA;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
/**
* @author [email protected] (Bob Lee)
*/
public class ServletTest extends TestCase {
+ private static final Key<HttpServletRequest> HTTP_REQ_KEY =
Key.get(HttpServletRequest.class);
+ private static final Key<HttpServletResponse> HTTP_RESP_KEY =
Key.get(HttpServletResponse.class);
+ private static final Key<Map<String, String[]>> REQ_PARAMS_KEY
+ = new Key<Map<String, String[]>>(RequestParameters.class) {};
+
private static final Key<InRequest> IN_REQUEST_KEY =
Key.get(InRequest.class);
private static final Key<InRequest> IN_REQUEST_NULL_KEY =
Key.get(InRequest.class, Null.class);
private static final Key<InSession> IN_SESSION_KEY =
Key.get(InSession.class);
@@ -66,6 +77,52 @@
//we need to clear the reference to the pipeline every test =(
GuiceFilter.reset();
}
+
+ public void testRequestAndResponseBindings() throws Exception {
+ final Injector injector = createInjector();
+ final HttpServletRequest request =
createMock(HttpServletRequest.class);
+ final HttpServletResponse response =
createMock(HttpServletResponse.class);
+ final Map<String, String[]> params = Maps.newHashMap();
+ String httpReqKey = HTTP_REQ_KEY.toString();
+ expect(request.getAttribute(httpReqKey)).andReturn(null);
+ request.setAttribute(httpReqKey, request);
+ expect(request.getAttribute(httpReqKey)).andReturn(request).anyTimes();
+
+ String httpRespKey = HTTP_RESP_KEY.toString();
+ expect(request.getAttribute(httpRespKey)).andReturn(null);
+ request.setAttribute(httpRespKey, response);
+
expect(request.getAttribute(httpRespKey)).andReturn(response).anyTimes();
+
+ String reqParamsKey = REQ_PARAMS_KEY.toString();
+ expect(request.getAttribute(reqParamsKey)).andReturn(null);
+ expect(request.getParameterMap()).andStubReturn(params);
+ request.setAttribute(reqParamsKey, params);
+
expect(request.getAttribute(reqParamsKey)).andReturn(params).anyTimes();
+ replay(request, response);
+
+ final boolean[] invoked = new boolean[1];
+ GuiceFilter filter = new GuiceFilter();
+ FilterChain filterChain = new FilterChain() {
+ @Override public void doFilter(ServletRequest servletRequest,
+ ServletResponse servletResponse) {
+ invoked[0] = true;
+ assertSame(request, servletRequest);
+ assertSame(request, injector.getInstance(ServletRequest.class));
+ assertSame(request, injector.getInstance(HTTP_REQ_KEY));
+
+ assertSame(response, servletResponse);
+ assertSame(response, injector.getInstance(ServletResponse.class));
+ assertSame(response, injector.getInstance(HTTP_RESP_KEY));
+
+ assertSame(params, servletRequest.getParameterMap());
+ assertSame(params, injector.getInstance(REQ_PARAMS_KEY));
+ }
+ };
+ filter.doFilter(request, response, filterChain);
+
+ assertTrue(invoked[0]);
+ verify(request, response);
+ }
public void testNewRequestObject()
throws CreationException, IOException, ServletException {
@@ -88,7 +145,6 @@
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse) {
invoked[0] = true;
-// assertSame(request, servletRequest);
assertNotNull(injector.getInstance(InRequest.class));
assertNull(injector.getInstance(IN_REQUEST_NULL_KEY));
}
@@ -163,7 +219,6 @@
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse) {
invoked[0] = true;
-// assertSame(request, servletRequest);
assertNotNull(injector.getInstance(InSession.class));
assertNull(injector.getInstance(IN_SESSION_NULL_KEY));
}
@@ -200,7 +255,6 @@
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse) {
invoked[0] = true;
-// assertSame(request, servletRequest);
assertSame(inSession, injector.getInstance(InSession.class));
assertSame(inSession, injector.getInstance(InSession.class));
--
You received this message because you are subscribed to the Google Groups
"google-guice-dev" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-guice-dev?hl=en.