【问题标题】:HK2 service reification failed Warning in logs for javax.ws.rs.core.UriInfo with exception: Could not find a suitable constructor in UriInfo classHK2 服务具体化失败 javax.ws.rs.core.UriInfo 日志中的警告异常:在 UriInfo 类中找不到合适的构造函数
【发布时间】: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


【解决方案1】:

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

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

下面是新代码:

public class CustomFactory implements Supplier<Search>
{

@Context
 UriInfo uriInfo;


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

【讨论】:

    猜你喜欢
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 2020-10-01
    相关资源
    最近更新 更多