I have a JUnit test that uses Guice to @Inject various helpers into a 
Jersey REST resource - when I run it
using Eclipse's built-in JUnit runner, everything works:

public class MyResource {

@Inject

protected Helper1 helper1;


@Inject

protected Helper2 helper2;

 @POST

@Produces("application/json")

@Consumes("application/json")

public Result doSomething(MyRequest request) {

Result result = null;

try {

result = helper1.reallyDoSomething(helper2, request);

}

catch (Exception e) {

logger.error("Error doing something", e);

throw e;

}

return result;

}

}

...

    static Helper1 mockHelper1 = null;
    static Helper2 mockHelper2 = null;

  @BeforeClass

  public static void setUpTestServer()

      mockHelper1 = Mockito.mock(Helper1.class);

      mockHelper2 = Mockito.mock(Helper2.class);
      ... set up mock behaviour ...

      URI serverURI = UriBuilder.fromPath("/")

              .scheme("http")

              .host("0.0.0.0")

              .path(TEST_CONTEXT)

              .port(DEFAULT_PORT_NUMBER).build();

      Map<String, String> initParams = new HashMap<>();

      initParams.put(JAXRS_APPLICATION_CLASS, TestApplication.class
.getName());

      WebappContext webapp = new WebappContext("GrizzlyContext", 
serverURI.getPath());

      FilterRegistration filterRegistration = webapp.addFilter(GuiceFilter.
class.getSimpleName(),

          GuiceFilter.class);

      
filterRegistration.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.
class),

          DEFAULT_MAPPING);

      ServletRegistration registration  = webapp.addServlet("Jersey 
ServletContainer", ServletContainer.class);

      registration.addMapping(DEFAULT_MAPPING);

      registration.setInitParameters(initParams);

      HttpServer server = 
GrizzlyHttpServerFactory.createHttpServer(serverURI);

      server.getServerConfiguration().setHttpServerName(TEST_SIMPLE_NAME + 
"Server");

      webapp.deploy(server);

  }


  public static class CloudAccountResourceTestApplication extendsResourceConfig 
{

      @Inject

      public CloudAccountResourceTestApplication(ServiceLocator 
serviceLocator) {

          register(JacksonObjectMapperResolver.class);

          //resource under test

          register(MyResource.class);

          //configure guice bridge:

        
  GuiceBridge.getGuiceBridge().initializeGuiceBridge(serviceLocator);

          GuiceIntoHK2Bridge guiceBridge = 
serviceLocator.getService(GuiceIntoHK2Bridge.class);

          Injector injector = Guice.createInjector(new TestGuiceModule());

          guiceBridge.bridgeGuiceInjector(injector);

      }

  }


  public static class TestGuiceModule extends AbstractModule {

      @Override

      protected void configure() {

          install(new ServletModule() {

              @Override

              protected void configureServlets() {

                  //no-op

              }

              @Provides

              Helper1 provideMockHelper1() {

                  return mockHelper1;

              }

              @Provides

              Helper2 provideMockHelper2() {

                  return  mockHelper2;

              }

          });

      }

  }

However, when I run the same JUnit test from Ant's JUnit task, I get the 
following exception:

 [junit] MultiException stack 1 of 1

    [junit] java.lang.AssertionError: java.lang.IllegalAccessException: 
Class com.google.inject.DefaultConstructionProxyFactory$1 can not access a 
member of class com.google.inject.servlet.ManagedServletPipeline with 
modifiers "public"

    [junit] at 
com.google.inject.DefaultConstructionProxyFactory$1.newInstance(
DefaultConstructionProxyFactory.java:85)

    [junit] at com.google.inject.ConstructorInjector.construct(
ConstructorInjector.java:85)

    [junit] at com.google.inject.ConstructorBindingImpl$Factory.get(
ConstructorBindingImpl.java:111)

    [junit] at com.google.inject.ProviderToInternalFactoryAdapter$1.call(
ProviderToInternalFactoryAdapter.java:45)

  

I believer the error is referring to a default-permission class 
(ManagedServletPipeline) that has a public constructor.


Any help in figuring out why it works in one environment but not in another 
would be greatly appreciated!

---

Mike Norman


-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
For more options, visit https://groups.google.com/d/optout.

Reply via email to