1

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

4

1 回答 1

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());
}
}
于 2019-10-01T04:34:44.147 回答