Я успешно использовал эту установку в предыдущих методах с надзором, поэтому я, вероятно, сейчас что-то не так. В основном я использую 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();
обоих вызовов работать.
Добавление в лог ошибок, вероятно, поможет некоторым – J2B
Там нет ошибки. Он просто не регистрируется. Я могу хорошо управлять банкой. Я просто не могу получить доступ к API. Он говорит, что 404 не найден. – Paagalpan
Я все еще добавлял вывод, который я получаю при запуске банки. – Paagalpan