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 {
>>>>
>>>>
>>>>
>>>
>>
>

Reply via email to