【发布时间】:2019-09-04 10:53:31
【问题描述】:
在调用某些 Rest 服务时,我收到 HK2 reification failed 错误。 最近我将我的应用程序从 JDK 8 迁移到 Open jdk 12。
我将 AbstractBinder 包从 org.glassfish.hk2.utilities.binding.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 类中使用它。
【问题讨论】:
-
我们能看到异常吗?另外,我不确定供应商是否会正常工作
-
@jwells131313 我正在研究 UriInfo 之前的工作方式。较早的 serviceLocator.getAllServices(UriInfo.class).get(0).getQueryParameters() 返回两个查询参数(“off”和“max”)。但是,该方法不返回任何查询参数。异常如下:19:50:56,055 W - 检测到以下警告:警告:[javax.ws.rs.core.UriInfo] 的 HK2 服务具体化失败,异常:MultiException stack 1 of 2 java.lang。 NoSuchMethodException: 在 javax.ws.rs.core.UriInfo 类中找不到合适的构造函数。
-
尝试只注入它而不是通过ServiceLocator
-
谢谢@PaulSamsotha,我一定会试试的。我想知道您的建议背后的想法。 ServiceLocator 有什么问题吗?
标签: java jersey glassfish hk2 supplier