Repro'd the problem, looking at it now.
On Thu, Oct 2, 2008 at 11:07 AM, Brian Eaton <[EMAIL PROTECTED]> wrote: > This patch appears to have confused Guice. Starting Shindig with mvn > -Prun and attempting to run the sample gadget gives this stack trace: > > 2008-10-02 10:17:28.374::WARN: /social/rest/samplecontainer/setstate > java.lang.RuntimeException: com.google.inject.ConfigurationException: > Tried proxying org.apache.shindig.social.opensocial.service.HandlerProvider > to support a circular dependency, but it is not an interface. > at > com.google.inject.InjectorImpl$SingleMethodInjector.inject(InjectorImpl.java:578) > at com.google.inject.InjectorImpl.injectMembers(InjectorImpl.java:674) > at com.google.inject.InjectorImpl$8.call(InjectorImpl.java:682) > at com.google.inject.InjectorImpl$8.call(InjectorImpl.java:681) > at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:747) > at com.google.inject.InjectorImpl.injectMembers(InjectorImpl.java:680) > at > org.apache.shindig.common.servlet.InjectedServlet.init(InjectedServlet.java:46) > at > org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:433) > at > org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:342) > at > org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:463) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093) > at > org.apache.shindig.auth.AuthenticationServletFilter.doFilter(AuthenticationServletFilter.java:66) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) > at > org.apache.shindig.auth.AuthenticationServletFilter.doFilter(AuthenticationServletFilter.java:66) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) > at > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) > at > org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) > at > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) > at > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726) > at > org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) > at > org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206) > at > org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) > at > org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) > at org.mortbay.jetty.Server.handle(Server.java:324) > at > org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) > at > org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:842) > at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648) > at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) > at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) > at > org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) > at > org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450) > Caused by: com.google.inject.ConfigurationException: Tried proxying > org.apache.shindig.social.opensocial.service.HandlerProvider to > support a circular dependency, but it is not an interface. > at > com.google.inject.ConstructionContext.createProxy(ConstructionContext.java:70) > at > com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:126) > at > com.google.inject.InjectorImpl$ImplicitBinding.get(InjectorImpl.java:1006) > at > com.google.inject.BoundProviderFactory.get(BoundProviderFactory.java:60) > at > com.google.inject.InjectorImpl$SingleParameterInjector.inject(InjectorImpl.java:640) > at com.google.inject.InjectorImpl.getParameters(InjectorImpl.java:666) > at > com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:140) > at > com.google.inject.InjectorImpl$ImplicitBinding.get(InjectorImpl.java:1006) > at > com.google.inject.BoundProviderFactory.get(BoundProviderFactory.java:60) > at > com.google.inject.InjectorImpl$SingleParameterInjector.inject(InjectorImpl.java:640) > at com.google.inject.InjectorImpl.getParameters(InjectorImpl.java:666) > at > com.google.inject.InjectorImpl$SingleMethodInjector.inject(InjectorImpl.java:575) > ... 30 more > > > On Thu, Oct 2, 2008 at 4:38 AM, <[EMAIL PROTECTED]> wrote: >> Author: ieb >> Date: Thu Oct 2 04:38:38 2008 >> New Revision: 701087 >> >> URL: http://svn.apache.org/viewvc?rev=701087&view=rev >> Log: >> SHINDIG-638 >> Patch from Adam Winer >> >> HandlerProvider gives Class<? extends DataRequestHandlers>, then ApiServlet >> uses Injector.getInstance(). >> >> It'd be cleaner if HandlerProvider gave Provider<? extends >> DataRequestHandler>, so ApiServlet didn't need to use the Injector at all. >> >> Thanks >> >> Removed: >> >> incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/service/SampleContainerHandlerProvider.java >> Modified: >> >> incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java >> >> incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java >> >> incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ApiServlet.java >> >> incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/HandlerProvider.java >> >> incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java >> >> incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java >> >> incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java >> >> Modified: >> incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java >> URL: >> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java?rev=701087&r1=701086&r2=701087&view=diff >> ============================================================================== >> --- >> incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java >> (original) >> +++ >> incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java >> Thu Oct 2 04:38:38 2008 >> @@ -59,7 +59,5 @@ >> >> bind(new TypeLiteral<List<AuthenticationHandler>>(){}).toProvider( >> AuthenticationHandlerProvider.class); >> - >> - >> bind(HandlerProvider.class).toInstance(HandlerProvider.defaultProviders()); >> } >> } >> >> Modified: >> incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java >> URL: >> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java?rev=701087&r1=701086&r2=701087&view=diff >> ============================================================================== >> --- >> incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java >> (original) >> +++ >> incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java >> Thu Oct 2 04:38:38 2008 >> @@ -28,9 +28,11 @@ >> import org.apache.shindig.social.opensocial.service.BeanConverter; >> import >> org.apache.shindig.social.opensocial.service.DataServiceServletFetcher; >> import org.apache.shindig.social.opensocial.service.HandlerProvider; >> -import >> org.apache.shindig.social.sample.service.SampleContainerHandlerProvider; >> +import org.apache.shindig.social.sample.service.SampleContainerHandler; >> >> import com.google.inject.AbstractModule; >> +import com.google.inject.Inject; >> +import com.google.inject.Provider; >> import com.google.inject.TypeLiteral; >> import com.google.inject.name.Names; >> >> @@ -47,7 +49,7 @@ >> /** [EMAIL PROTECTED] */ >> @Override >> protected void configure() { >> - bind(HandlerProvider.class).to(SampleContainerHandlerProvider.class); >> + bind(HandlerProvider.class).toProvider(HandlerProviderProvider.class); >> >> >> bind(ParameterFetcher.class).annotatedWith(Names.named("DataServiceServlet")) >> .to(DataServiceServletFetcher.class); >> @@ -69,4 +71,25 @@ >> bind(new TypeLiteral<List<AuthenticationHandler>>(){}).toProvider( >> AuthenticationHandlerProvider.class); >> } >> + >> + /** >> + * Provider for the HandlerProvider. Adds the sample container handler >> + * at "samplecontainer". >> + */ >> + static class HandlerProviderProvider implements Provider<HandlerProvider> >> { >> + private final HandlerProvider handlerProvider; >> + private final Provider<SampleContainerHandler> sampleHandler; >> + >> + @Inject >> + public HandlerProviderProvider(HandlerProvider handlerProvider, >> + Provider<SampleContainerHandler> sampleHandler) { >> + this.handlerProvider = handlerProvider; >> + this.sampleHandler = sampleHandler; >> + } >> + >> + public HandlerProvider get() { >> + handlerProvider.addHandler("samplecontainer", sampleHandler); >> + return handlerProvider; >> + } >> + } >> } >> >> Modified: >> incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ApiServlet.java >> URL: >> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ApiServlet.java?rev=701087&r1=701086&r2=701087&view=diff >> ============================================================================== >> --- >> incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ApiServlet.java >> (original) >> +++ >> incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ApiServlet.java >> Thu Oct 2 04:38:38 2008 >> @@ -26,7 +26,7 @@ >> import org.apache.shindig.social.opensocial.spi.SocialSpiException; >> >> import com.google.inject.Inject; >> -import com.google.inject.Injector; >> +import com.google.inject.Provider; >> import com.google.inject.name.Named; >> >> import java.io.IOException; >> @@ -43,7 +43,7 @@ >> public abstract class ApiServlet extends InjectedServlet { >> protected static final String DEFAULT_ENCODING = "UTF-8"; >> >> - private Map<String, Class<? extends DataRequestHandler>> handlers; >> + private Map<String, Provider<? extends DataRequestHandler>> handlers; >> protected BeanJsonConverter jsonConverter; >> protected BeanConverter xmlConverter; >> protected BeanConverter atomConverter; >> @@ -64,11 +64,6 @@ >> this.atomConverter = atomConverter; >> } >> >> - // Only for testing use. Do not override the injector. >> - public void setInjector(Injector injector) { >> - this.injector = injector; >> - } >> - >> protected SecurityToken getSecurityToken(HttpServletRequest >> servletRequest) { >> return new AuthInfo(servletRequest).getSecurityToken(); >> } >> @@ -85,15 +80,16 @@ >> /** >> * Delivers a request item to the appropriate DataRequestHandler. >> */ >> - protected Future<?> handleRequestItem(RequestItem requestItem, >> HttpServletRequest servletRequest) { >> - Class<? extends DataRequestHandler> handlerClass = >> handlers.get(requestItem.getService()); >> + protected Future<?> handleRequestItem(RequestItem requestItem, >> + HttpServletRequest servletRequest) { >> + Provider<? extends DataRequestHandler> handlerProvider = >> handlers.get(requestItem.getService()); >> >> - if (handlerClass == null) { >> + if (handlerProvider == null) { >> return ImmediateFuture.errorInstance(new >> SocialSpiException(ResponseError.NOT_IMPLEMENTED, >> "The service " + requestItem.getService() + " is not >> implemented")); >> } >> >> - DataRequestHandler handler = injector.getInstance(handlerClass); >> + DataRequestHandler handler = handlerProvider.get(); >> return handler.handleItem(requestItem); >> } >> >> >> Modified: >> incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/HandlerProvider.java >> URL: >> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/HandlerProvider.java?rev=701087&r1=701086&r2=701087&view=diff >> ============================================================================== >> --- >> incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/HandlerProvider.java >> (original) >> +++ >> incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/HandlerProvider.java >> Thu Oct 2 04:38:38 2008 >> @@ -18,9 +18,11 @@ >> >> package org.apache.shindig.social.opensocial.service; >> >> +import com.google.inject.Inject; >> import com.google.inject.Provider; >> import com.google.common.collect.Maps; >> >> +import java.util.Collections; >> import java.util.Map; >> >> /** >> @@ -33,34 +35,31 @@ >> * Provider<Map<String, Class<? extends DataRequestHandler>>> along >> * with a default set of handlers. >> */ >> -public class HandlerProvider implements Provider<Map<String, >> - Class<? extends DataRequestHandler>>> { >> - >> - private Map<String, Class<? extends DataRequestHandler>> handlers; >> - >> - private static Map<String, Class<? extends DataRequestHandler>> >> DEFAULT_HANDLERS = >> - Maps.immutableMap( >> - DataServiceServlet.PEOPLE_ROUTE, PersonHandler.class, >> - DataServiceServlet.ACTIVITY_ROUTE, ActivityHandler.class, >> - DataServiceServlet.APPDATA_ROUTE, AppDataHandler.class); >> - >> - protected HandlerProvider(boolean useDefaultProviders) { >> - handlers = Maps.newHashMap(useDefaultProviders ? DEFAULT_HANDLERS : >> null); >> - } >> - >> - public void addHandler(String path, Class<? extends DataRequestHandler> >> handler) { >> - handlers.put(path, handler); >> +public class HandlerProvider implements Provider<Map<String, Provider<? >> extends DataRequestHandler>>> { >> + private final Map<String, Provider<? extends DataRequestHandler>> >> handlers; >> + >> + /** >> + * Constructor for the default handlers. >> + */ >> + @Inject >> + public HandlerProvider(Provider<PersonHandler> personHandlerProvider, >> + Provider<ActivityHandler> activityHandlerProvider, >> + Provider<AppDataHandler> appDataHandlerProvider) { >> + this(Maps.immutableMap( >> + DataServiceServlet.PEOPLE_ROUTE, personHandlerProvider, >> + DataServiceServlet.ACTIVITY_ROUTE, activityHandlerProvider, >> + DataServiceServlet.APPDATA_ROUTE, appDataHandlerProvider)); >> } >> - >> - public HandlerProvider(Map<String,Class<? extends DataRequestHandler>> >> handlers) { >> + >> + public HandlerProvider(Map<String,Provider<? extends DataRequestHandler>> >> handlers) { >> this.handlers = Maps.newHashMap(handlers); >> } >> - >> - public Map<String, Class<? extends DataRequestHandler>> get() { >> - return handlers; >> + >> + public void addHandler(String path, Provider<? extends >> DataRequestHandler> handler) { >> + handlers.put(path, handler); >> } >> >> - public static HandlerProvider defaultProviders() { >> - return new HandlerProvider(DEFAULT_HANDLERS); >> + public Map<String, Provider<? extends DataRequestHandler>> get() { >> + return Collections.unmodifiableMap(handlers); >> } >> } >> >> Modified: >> incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java >> URL: >> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java?rev=701087&r1=701086&r2=701087&view=diff >> ============================================================================== >> --- >> incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java >> (original) >> +++ >> incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java >> Thu Oct 2 04:38:38 2008 >> @@ -31,6 +31,8 @@ >> >> import com.google.common.collect.Maps; >> import com.google.inject.Guice; >> +import com.google.inject.Injector; >> + >> import junit.framework.TestCase; >> import org.easymock.classextension.EasyMock; >> import org.json.JSONObject; >> @@ -63,13 +65,12 @@ >> >> @Override >> protected void setUp() throws Exception { >> - Map<String, Class<? extends DataRequestHandler>> handlers = >> Maps.newHashMap(); >> + Injector injector = Guice.createInjector(new >> SocialApiTestsGuiceModule()); >> >> servlet = new DataServiceServlet(); >> - servlet.setHandlers(HandlerProvider.defaultProviders()); >> - servlet.setInjector(Guice.createInjector(new >> SocialApiTestsGuiceModule())); >> - servlet.setBeanConverters(new BeanJsonConverter( >> - Guice.createInjector(new SocialApiTestsGuiceModule())), new >> BeanXmlConverter(), >> + >> + servlet.setHandlers(injector.getInstance(HandlerProvider.class)); >> + servlet.setBeanConverters(new BeanJsonConverter(injector), new >> BeanXmlConverter(), >> new BeanAtomConverter()); >> >> req = EasyMock.createMock(HttpServletRequest.class); >> >> Modified: >> incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java >> URL: >> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java?rev=701087&r1=701086&r2=701087&view=diff >> ============================================================================== >> --- >> incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java >> (original) >> +++ >> incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java >> Thu Oct 2 04:38:38 2008 >> @@ -29,7 +29,8 @@ >> >> import com.google.common.collect.Maps; >> import com.google.inject.Guice; >> -import com.google.inject.Injector; >> +import com.google.inject.Provider; >> + >> import junit.framework.TestCase; >> import org.easymock.classextension.EasyMock; >> >> @@ -52,7 +53,6 @@ >> private PersonHandler peopleHandler; >> private ActivityHandler activityHandler; >> private AppDataHandler appDataHandler; >> - private Injector injector; >> private BeanJsonConverter jsonConverter; >> >> private final ServletInputStream dummyPostData = new ServletInputStream() { >> @@ -72,18 +72,19 @@ >> activityHandler = EasyMock.createMock(ActivityHandler.class); >> appDataHandler = EasyMock.createMock(AppDataHandler.class); >> >> - injector = EasyMock.createMock(Injector.class); >> - servlet.setInjector(injector); >> - >> - servlet.setHandlers(HandlerProvider.defaultProviders()); >> + servlet.setHandlers(new HandlerProvider(constant(peopleHandler), >> + constant(activityHandler), constant(appDataHandler))); >> >> servlet.setBeanConverters(jsonConverter, xmlConverter, atomConverter); >> } >> >> - private void setupInjector() { >> - >> EasyMock.expect(injector.getInstance(PersonHandler.class)).andStubReturn(peopleHandler); >> - >> EasyMock.expect(injector.getInstance(ActivityHandler.class)).andStubReturn(activityHandler); >> - >> EasyMock.expect(injector.getInstance(AppDataHandler.class)).andStubReturn(appDataHandler); >> + // TODO: replace with Providers.of() when Guice version is upgraded >> + private static <T> Provider<T> constant(final T value) { >> + return new Provider<T>() { >> + public T get() { >> + return value; >> + } >> + }; >> } >> >> public void testPeopleUriRecognition() throws Exception { >> @@ -118,8 +119,6 @@ >> public void testFailedRequest() throws Exception { >> String route = '/' + DataServiceServlet.APPDATA_ROUTE; >> setupRequest(route, "GET", null); >> - >> EasyMock.expect(injector.getInstance(AppDataHandler.class)).andStubReturn(appDataHandler); >> - setupInjector(); >> >> >> EasyMock.expect(appDataHandler.handleItem(EasyMock.isA(RestfulRequestItem.class))); >> EasyMock.expectLastCall().andReturn( >> @@ -128,10 +127,10 @@ >> res.sendError(500, "FAILED"); >> res.setCharacterEncoding("UTF-8"); >> >> - EasyMock.replay(req, res, appDataHandler, injector, jsonConverter); >> + EasyMock.replay(req, res, appDataHandler, jsonConverter); >> servlet.service(req, res); >> - EasyMock.verify(req, res, appDataHandler, injector, jsonConverter); >> - EasyMock.reset(req, res, appDataHandler, injector, jsonConverter); >> + EasyMock.verify(req, res, appDataHandler, jsonConverter); >> + EasyMock.reset(req, res, appDataHandler, jsonConverter); >> } >> >> private void verifyHandlerWasFoundForPathInfo(String peoplePathInfo, >> DataRequestHandler handler) >> @@ -143,7 +142,6 @@ >> private void verifyHandlerWasFoundForPathInfo(String pathInfo, >> DataRequestHandler handler, >> String actualMethod, String overrideMethod, String expectedMethod) >> throws Exception { >> setupRequest(pathInfo, actualMethod, overrideMethod); >> - setupInjector(); >> >> String jsonObject = "my lovely json"; >> >> @@ -158,10 +156,10 @@ >> writerMock.write(jsonObject); >> res.setCharacterEncoding("UTF-8"); >> >> - EasyMock.replay(req, res, handler, injector, jsonConverter); >> + EasyMock.replay(req, res, handler, jsonConverter); >> servlet.service(req, res); >> - EasyMock.verify(req, res, handler, injector, jsonConverter); >> - EasyMock.reset(req, res, handler, injector, jsonConverter); >> + EasyMock.verify(req, res, handler, jsonConverter); >> + EasyMock.reset(req, res, handler, jsonConverter); >> } >> >> private void setupRequest(String pathInfo, String actualMethod, String >> overrideMethod) >> >> Modified: >> incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java >> URL: >> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java?rev=701087&r1=701086&r2=701087&view=diff >> ============================================================================== >> --- >> incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java >> (original) >> +++ >> incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java >> Thu Oct 2 04:38:38 2008 >> @@ -24,7 +24,8 @@ >> import org.apache.shindig.social.core.util.BeanXmlConverter; >> >> import com.google.common.collect.Maps; >> -import com.google.inject.Injector; >> +import com.google.inject.Provider; >> + >> import junit.framework.TestCase; >> import org.easymock.classextension.EasyMock; >> import org.json.JSONArray; >> @@ -55,8 +56,6 @@ >> private ActivityHandler activityHandler; >> private AppDataHandler appDataHandler; >> >> - private Injector injector; >> - >> private BeanJsonConverter jsonConverter; >> private BeanXmlConverter xmlConverter; >> >> @@ -72,18 +71,19 @@ >> activityHandler = EasyMock.createMock(ActivityHandler.class); >> appDataHandler = EasyMock.createMock(AppDataHandler.class); >> >> - injector = EasyMock.createMock(Injector.class); >> - servlet.setInjector(injector); >> - >> - servlet.setHandlers(HandlerProvider.defaultProviders()); >> + servlet.setHandlers(new HandlerProvider(constant(peopleHandler), >> constant(activityHandler), >> + constant(appDataHandler))); >> >> servlet.setBeanConverters(jsonConverter, xmlConverter, atomConverter); >> } >> >> - private void setupInjector() { >> - >> EasyMock.expect(injector.getInstance(PersonHandler.class)).andStubReturn(peopleHandler); >> - >> EasyMock.expect(injector.getInstance(ActivityHandler.class)).andStubReturn(activityHandler); >> - >> EasyMock.expect(injector.getInstance(AppDataHandler.class)).andStubReturn(appDataHandler); >> + // TODO: replace with Providers.of() when Guice version is upgraded >> + private static <T> Provider<T> constant(final T value) { >> + return new Provider<T>() { >> + public T get() { >> + return value; >> + } >> + }; >> } >> >> public void testPeopleMethodRecognition() throws Exception { >> @@ -104,7 +104,6 @@ >> public void testInvalidService() throws Exception { >> String json = "{method:junk.get,id:id,params:{userId:5,groupId:@self}}"; >> setupRequest(json); >> - setupInjector(); >> >> JSONObject err = new JSONObject( >> "{id:id,error:{message:'notImplemented: The service junk is not >> implemented',code:501}}"); >> @@ -114,10 +113,10 @@ >> writerMock.write(EasyMock.eq(err.toString())); >> EasyMock.expectLastCall(); >> >> - EasyMock.replay(req, res, injector, jsonConverter, writerMock); >> + EasyMock.replay(req, res, jsonConverter, writerMock); >> servlet.service(req, res); >> - EasyMock.verify(req, res, injector, jsonConverter, writerMock); >> - EasyMock.reset(req, res, injector, jsonConverter); >> + EasyMock.verify(req, res, jsonConverter, writerMock); >> + EasyMock.reset(req, res, jsonConverter); >> } >> >> >> @@ -127,9 +126,6 @@ >> */ >> public void testFailedRequest() throws Exception { >> setupRequest("{id:id,method:appdata.get}"); >> - >> EasyMock.expect(injector.getInstance(AppDataHandler.class)).andStubReturn(appDataHandler); >> - setupInjector(); >> - >> >> EasyMock.expect(appDataHandler.handleItem(EasyMock.isA(RpcRequestItem.class))); >> EasyMock.expectLastCall().andReturn( >> ImmediateFuture.errorInstance(new RuntimeException("FAILED"))); >> @@ -142,16 +138,15 @@ >> writerMock.write(EasyMock.eq(err.toString())); >> EasyMock.expectLastCall(); >> >> - EasyMock.replay(req, res, appDataHandler, injector, jsonConverter, >> writerMock); >> + EasyMock.replay(req, res, appDataHandler, jsonConverter, writerMock); >> servlet.service(req, res); >> - EasyMock.verify(req, res, appDataHandler, injector, jsonConverter, >> writerMock); >> - EasyMock.reset(req, res, appDataHandler, injector, jsonConverter); >> + EasyMock.verify(req, res, appDataHandler, jsonConverter, writerMock); >> + EasyMock.reset(req, res, appDataHandler, jsonConverter); >> } >> >> private void verifyHandlerWasFoundForMethod(String json, >> DataRequestHandler handler) >> throws Exception { >> setupRequest(json); >> - setupInjector(); >> >> String resultObject = "my lovely json"; >> >> @@ -169,17 +164,16 @@ >> writerMock.write(EasyMock.eq(result.toString())); >> EasyMock.expectLastCall(); >> >> - EasyMock.replay(req, res, handler, injector, jsonConverter, writerMock); >> + EasyMock.replay(req, res, handler, jsonConverter, writerMock); >> servlet.service(req, res); >> - EasyMock.verify(req, res, handler, injector, jsonConverter, writerMock); >> - EasyMock.reset(req, res, handler, injector, jsonConverter); >> + EasyMock.verify(req, res, handler, jsonConverter, writerMock); >> + EasyMock.reset(req, res, handler, jsonConverter); >> } >> >> public void testBasicBatch() throws Exception { >> String batchJson = >> "[{method:people.get,id:'1'},{method:activities.get,id:'2'}]"; >> setupRequest(batchJson); >> - setupInjector(); >> >> String resultObject = "my lovely json"; >> Future<?> responseItemFuture = ImmediateFuture.newInstance(resultObject); >> @@ -197,10 +191,10 @@ >> writerMock.write(EasyMock.eq(result.toString())); >> EasyMock.expectLastCall(); >> >> - EasyMock.replay(req, res, peopleHandler, activityHandler, injector, >> jsonConverter, writerMock); >> + EasyMock.replay(req, res, peopleHandler, activityHandler, >> jsonConverter, writerMock); >> servlet.service(req, res); >> - EasyMock.verify(req, res, peopleHandler, activityHandler, injector, >> jsonConverter, writerMock); >> - EasyMock.reset(req, res, peopleHandler, activityHandler, injector, >> jsonConverter); >> + EasyMock.verify(req, res, peopleHandler, activityHandler, >> jsonConverter, writerMock); >> + EasyMock.reset(req, res, peopleHandler, activityHandler, jsonConverter); >> } >> >> public void testGetExecution() throws Exception { >> @@ -210,7 +204,6 @@ >> >> EasyMock.expect(req.getAttribute(EasyMock.isA(String.class))).andReturn(FAKE_GADGET_TOKEN); >> EasyMock.expect(req.getCharacterEncoding()).andStubReturn("UTF-8"); >> res.setCharacterEncoding("UTF-8"); >> - setupInjector(); >> >> String resultObject = "my lovely json"; >> >> @@ -227,10 +220,10 @@ >> writerMock.write(EasyMock.eq(result.toString())); >> EasyMock.expectLastCall(); >> >> - EasyMock.replay(req, res, peopleHandler, activityHandler, injector, >> jsonConverter, writerMock); >> + EasyMock.replay(req, res, peopleHandler, activityHandler, >> jsonConverter, writerMock); >> servlet.service(req, res); >> - EasyMock.verify(req, res, peopleHandler, activityHandler, injector, >> jsonConverter, writerMock); >> - EasyMock.reset(req, res, peopleHandler, activityHandler, injector, >> jsonConverter); >> + EasyMock.verify(req, res, peopleHandler, activityHandler, >> jsonConverter, writerMock); >> + EasyMock.reset(req, res, peopleHandler, activityHandler, jsonConverter); >> } >> >> private void setupRequest(String json) throws IOException { >> >> >> >

