gpt4 book ai didi

java - HK2 服务具体化失败 javax.ws.rs.core.UriInfo 日志中出现警告,异常为 : Could not find a suitable constructor in UriInfo class

转载 作者:行者123 更新时间:2023-12-02 00:58:47 26 4
gpt4 key购买 nike

在调用某些 Rest 服务时,我收到 HK2 reification failed 错误。最近,我将应用程序从 JDK 8 迁移到 Open jdk 12。

我将 AbstractBinder 包从 org.glassfish.hk2.utilities.binding.AbstractBinder 替换为 org.glassfish.jersey.internal.inject.AbstractBinder。另外,我使用的自定义绑定(bind)工厂类之前实现了 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());
}
}

自定义绑定(bind)工厂用于其他一些操作,例如关闭连接等。我是否以正确的方式这样做,或者我应该使用不同的方法来定义我的自定义工厂并在 AppBinder 类中使用它。

最佳答案

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

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

以下是新代码:

public class CustomFactory implements Supplier<Search>
{

@Context
UriInfo uriInfo;


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

关于java - HK2 服务具体化失败 javax.ws.rs.core.UriInfo 日志中出现警告,异常为 : Could not find a suitable constructor in UriInfo class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57786900/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com