I've attached a patch that fixes this to http://issues.apache.org/jira/browse/SHINDIG-638.
On Thu, Oct 2, 2008 at 11:58 AM, Adam Winer <[EMAIL PROTECTED]> wrote: > 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 { >>> >>> >>> >> >

