you may see a conflict on the next update, also applied to trunk and comitted
however should be identical.
Ian

On 2 Oct 2008, at 20:30, Brian Eaton wrote:

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.DataServiceServletFet cher; import org.apache.shindig.social.opensocial.service.HandlerProvider; -import org.apache.shindig.social.sample.service.SampleContainerHandlerPro vider; +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