在致电某些Rest服务时,我收到HK2验证失败错误。 最近,我将应用程序从JDK 8迁移到Open jdk12。
我将org.glassfish.hk2.utilities.binding.AbstractBinder的AbstractBinder包替换为org.glassfish.jersey.internal.inject.AbstractBinder。另外,我正在使用的自定义绑定工厂类是较早实现的org.glassfish.hk2.api.Factory,但现在我对其进行了修改,以实现java.util.function.Supplier。这给了我提到的错误。 请看一下代码:
import org.glassfish.jersey.internal.inject.AbstractBinder;
import org.glassfish.jersey.process.internal.RequestScoped;
public class AppBinder extends AbstractBinder
{
@Override
protected void configure() {
bindFactory(CustomFactory.class).to(Search.class).in(RequestScoped.class);
}
}
import org.glassfish.hk2.api.ServiceLocator;
import java.util.function.Supplier;
import javax.ws.rs.core.UriInfo;
public class CustomFactory implements Supplier<Search>
{
@Inject
private ServiceLocator serviceLocator;
public CustomFactory() {
}
@Override
public Search get() {
return this.getSearch(serviceLocator.getAllServices(UriInfo.class).get(0).getQueryParameters());
}
}
自定义绑定工厂用于其他一些操作,例如关闭连接等。 我是用正确的方式做的还是应该使用其他方法定义自定义工厂并在AppBinder类中使用它。
答案 0 :(得分:0)
多亏了保罗·萨姆索塔(Paul Samsotha)在评论中的建议,问题才得以解决。
我使用@Context注释注入了UriInfo对象,此后,我可以通过调用uriInfo.getQueryParameters()获得所需的行为。
下面是新代码:
public class CustomFactory implements Supplier<Search>
{
@Context
UriInfo uriInfo;
@Override
public Search get() {
return this.getSearch(uriInfo.getQueryParameters());
}
}