[检索应用程序处理程序时为NPE

问题描述 投票:0回答:1

使用Dropwizard 1.3.17,我们这样检索ServiceLocator:

ServiceLocator serviceLocator = ((ServletContainer) environment.getJerseyServletContainer()).getApplicationHandler().getServiceLocator();

当我们迁移到Dropwizard 2时,它变成了:

ServletContainer servletContainer = (ServletContainer) Objects.requireNonNull(environment.getJerseyServletContainer());
ApplicationHandler applicationHandler = servletContainer.getApplicationHandler();
InjectionManager injectionManager = applicationHandler.getInjectionManager();
ServiceLocator serviceLocator;
if (injectionManager instanceof ImmediateHk2InjectionManager)
{
  serviceLocator = ((ImmediateHk2InjectionManager) injectionManager).getServiceLocator();
}
else if (injectionManager instanceof DelayedHk2InjectionManager)
{
  serviceLocator = ((DelayedHk2InjectionManager) injectionManager).getServiceLocator();
}
else
{
  throw new IllegalStateException("Expecting an HK2 injection manager");
}

但是,ApplicationHandler为null。有什么想法吗?

jersey dropwizard hk2
1个回答
0
投票

我们重构了代码,使其不依赖org.eclipse.jetty.server.Server.start之前的服务定位器。似乎正在工作。

© www.soinside.com 2019 - 2024. All rights reserved.