Applied, thanks.
On Thu, Oct 2, 2008 at 12:10 PM, Adam Winer <[EMAIL PROTECTED]> wrote: > 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 { >>>> >>>> >>>> >>> >> >

