繁体   English   中英

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

[英]HK2 service reification failed Warning in logs for javax.ws.rs.core.UriInfo with exception: Could not find a suitable constructor in UriInfo class

致电某些Rest服务时,出现HK2验证失败错误。 最近,我将应用程序从JDK 8迁移到Open jdk 12。

我将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类中使用它。

感谢Paul Samsotha在评论中的建议,该问题得以解决。

我使用@Context注释注入了UriInfo对象,此后,我可以通过调用uriInfo.getQueryParameters()获得所需的行为。

下面是新代码:

public class CustomFactory implements Supplier<Search>
{

@Context
 UriInfo uriInfo;


@Override
public Search get() {
   return this.getSearch(uriInfo.getQueryParameters());
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM