HK2服务修复失败javax.ws.rs.core.UriInfo的日志警告中出现以下异常:在UriInfo类中找不到合适的构造函数

时间:2019-09-04 10:53:31

标签: java jersey glassfish hk2 supplier

在致电某些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类中使用它。

1 个答案:

答案 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());
}
}