2016-04-01 5 views
0

Я успешно использовал эту установку в предыдущих методах с надзором, поэтому я, вероятно, сейчас что-то не так. В основном я использую Guice для своей части AOP.Dropwizard - Не удается зарегистрировать ресурс джерси с помощью Guice Injector.getIntance()

Соответствующие разделы pom.xml:

<dependency> 
     <groupId>io.dropwizard</groupId> 
     <artifactId>dropwizard-core</artifactId> 
     <version>0.7.0</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.jboss.logging</groupId> 
       <artifactId>jboss-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>com.google.inject</groupId> 
     <artifactId>guice</artifactId> 
     <version>4.0</version> 
    </dependency> 

    <dependency> 
     <groupId>aopalliance</groupId> 
     <artifactId>aopalliance</artifactId> 
     <version>1.0</version> 
    </dependency> 

    <dependency> 
     <groupId>org.projectlombok</groupId> 
     <artifactId>lombok</artifactId> 
     <version>1.16.6</version> 
     <scope>provided</scope> 
    </dependency> 

BaseBindingModule:

public class BaseBindingModule extends AbstractModule{ 

    @Override 
    protected void configure() { 
     bindInterceptor(any(), annotatedWith(SendCrashReport.class), new CrashReport());  
     bind(CabManager.class).to(CabManagerImpl.class); 
    } 
} 

Файл, где регистрируются ресурсы:

public class BucService extends Application<BucConfiguration> { 
    public static void main(String[] args) throws Exception { 
     new BucService().run(args); 
    } 

    @Override 
    public void initialize(Bootstrap<BucConfiguration> bootstrap) { 
     //bootstrap.setName("hello-world"); 
    } 

    @Override 
    public void run(BucConfiguration configuration, 
        Environment environment) { 
     final String template = configuration.getTemplate(); 
     final String defaultName = configuration.getDefaultName(); 
     environment.jersey().register(new HelloWorldResource(template, defaultName)); 

     Injector injector = Guice.createInjector(new BaseBindingModule()); 
     environment.jersey().register(injector.getInstance(CabResource.class)); // this does not work 
     // environment.jersey().register(new CabResource()); // this works 
    } 
} 

Фактический файл ресурсов:

@Path("/cabs") 
@Produces(MediaType.APPLICATION_JSON) 
public class CabResource { 

    @Inject 
    CabManager manager; 


    public CabResource() { 
    } 

    @GET 
    @Path("price") 
    @Produces(MediaType.APPLICATION_JSON) 
    public List<PriceEstimate> getCheapestCabs() { 

     return manager.callB(); 
    } 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    @SendCrashReport 
    public List<PriceEstimate> getNearestCabs(@Context UriInfo uriInfo) { 

     return manager.callA(); 
     } 

} 

Когда я пытаюсь зарегистрировать ресурс с помощью Guice Injector.getInstance(), он не регистрируется и я не могу получить доступ к любому из REST API.

Однако, если я просто зарегистрирую ресурс как новый CabResource(), API-интерфейсы видны. Но в этом случае я не смогу сделать GUICE AOP для работы в соответствии с этим ответом: https://stackoverflow.com/a/8862599/1443801

Что мне не хватает?

Спасибо.

Редактировать: Это показывает, когда я запускаю файл jar. Обратите внимание, что API-интерфейсы нет.

INFO [2016-04-01 13:26:14,785] io.dropwizard.server.ServerFactory: Starting BucService 
INFO [2016-04-01 13:26:14,876] org.eclipse.jetty.setuid.SetUIDListener: Opened [email protected]{HTTP/1.1}{0.0.0.0:9000} 
INFO [2016-04-01 13:26:14,876] org.eclipse.jetty.setuid.SetUIDListener: Opened [email protected]{HTTP/1.1}{0.0.0.0:9001} 
INFO [2016-04-01 13:26:14,877] org.eclipse.jetty.server.Server: jetty-9.0.z-SNAPSHOT 
INFO [2016-04-01 13:26:14,965] com.sun.jersey.server.impl.application.WebApplicationImpl: Initiating Jersey application, version 'Jersey: 1.18.1 02/19/2014 03:28 AM' 
INFO [2016-04-01 13:26:15,060] io.dropwizard.jersey.DropwizardResourceConfig: The following paths were found for the configured resources: 

    GET  /hello-world (com.buc.resources.HelloWorldResource) 

INFO [2016-04-01 13:26:15,262] org.eclipse.jetty.server.handler.ContextHandler: Started [email protected]{/,null,AVAILABLE} 
INFO [2016-04-01 13:26:15,263] io.dropwizard.setup.AdminEnvironment: tasks = 

    POST /tasks/gc (io.dropwizard.servlets.tasks.GarbageCollectionTask) 

WARN [2016-04-01 13:26:15,264] io.dropwizard.setup.AdminEnvironment: 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
! THIS APPLICATION HAS NO HEALTHCHECKS. THIS MEANS YOU WILL NEVER KNOW  ! 
!  IF IT DIES IN PRODUCTION, WHICH MEANS YOU WILL NEVER KNOW IF YOU'RE  ! 
! LETTING YOUR USERS DOWN. YOU SHOULD ADD A HEALTHCHECK FOR EACH OF YOUR ! 
!   APPLICATION'S DEPENDENCIES WHICH FULLY (BUT LIGHTLY) TESTS IT.  ! 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
INFO [2016-04-01 13:26:15,269] org.eclipse.jetty.server.handler.ContextHandler: Started [email protected]{/,null,AVAILABLE} 
INFO [2016-04-01 13:26:15,279] org.eclipse.jetty.server.ServerConnector: Started [email protected]{HTTP/1.1}{0.0.0.0:9000} 
INFO [2016-04-01 13:26:15,280] org.eclipse.jetty.server.ServerConnector: Started [email protected]{HTTP/1.1}{0.0.0.0:9001} 

Дальнейшее уточнение на основе комментариев:

я получить экземпляр, используя injector.getInstance (CabResource.class).

Например:

CabResource a = new CabResource(); 
CabResource b = injector.getInstance(CabResource.class); 

a.getCheapestCabs(); 
b.getCheapestCabs(); 

обоих вызовов работать.

+0

Добавление в лог ошибок, вероятно, поможет некоторым – J2B

+0

Там нет ошибки. Он просто не регистрируется. Я могу хорошо управлять банкой. Я просто не могу получить доступ к API. Он говорит, что 404 не найден. – Paagalpan

+0

Я все еще добавлял вывод, который я получаю при запуске банки. – Paagalpan

ответ

0

Считаете ли вы использование https://github.com/HubSpot/dropwizard-guice?

<dependency> 
    <groupId>com.hubspot.dropwizard</groupId> 
    <artifactId>dropwizard-guice</artifactId> 
    <version>${dropwizard.guice.version}</version> 
</dependency> 

Такие, как этот парень сделал https://gitlab.com/michael-lloyd-lee/dropwizard-guice-example/tree/master

+0

Посмотрите на него. Благодарю. Несмотря на то, что я находился под наблюдением на другом задании, я успешно выполнил эту настройку без необходимости в этих библиотеках. Поэтому мне бы очень хотелось решить проблему, не используя другую внешнюю библиотеку, и выяснить проблему с текущим кодом. – Paagalpan