gpt4 book ai didi

java - 在不在 Activity 的 Jersey 错误范围内运行的代码中检测到 HK2 故障

转载 作者:行者123 更新时间:2023-12-01 21:37:20 25 4
gpt4 key购买 nike

目前我正在开发一个基于 Jersey 的 RESTful 应用程序,并希望在我的资源中使用 DPI。(注:jersey版本为2.23.1,servlet容器为tomcat 8.5.3。)

因此我按照教程 Chapter 23. Custom Injection and Lifecycle Management 进行操作在 Jersey 文档中创建了一个资源、一个工厂并将工厂绑定(bind)到一个类,如下所示:

资源:

@Path("/{project}/catalogs")
public class ProjectsResource {

@Inject
Project project;

...
}

工厂:

public class ProjectFactory extends Factory<Project> {

private final Cache cache = cache.getInstance();

@PathParam("project")
private String project;

private HttpServletRequest request;

@Inject
public ProjectFactory(HttpServletRequest request) {
this.request = request;
}

@Override
public Project provide() {
return cache.get(project, Project.class);
}

@Override
public void dispose(Project instance) {}

}

我还有一个功能,它注册一个 AbstractBinder,它将我的 ProjectFactory 绑定(bind)到我的 Project 类。

@Provider
public class ProjectFeature implements Feature {

@Override
public boolean configure(FeatureContext context) {

context.register(new AbstractBinder() {
@Override
protected void configure() {
bindFactory(ProjectFactory.class)
.to(Project.class)
.proxy(false)
.proxyForSameScope(true)
.in(RequestScoped.class);
});

return true;
}

}

实际的问题是,当我调用我的资源时,一切都很好,我可以访问我的项目实例,但在我的 tomcat catalina 日志中,我得到以下堆栈跟踪:

22-Jul-2016 16:29:46.510 WARNING [pool-24-thread-1] org.glassfish.jersey.internal.Errors.logErrors The following warnings have been detected: WARNING: HK2 failure has been detected in a code that does not run in an active Jersey Error scope.WARNING: Unknown HK2 failure detected:MultiException stack 1 of 3java.lang.IllegalStateException: Not inside a request scope.    at jersey.repackaged.com.google.common.base.Preconditions.checkState(Preconditions.java:173)    at org.glassfish.jersey.process.internal.RequestScope.current(RequestScope.java:233)    at org.glassfish.jersey.process.internal.RequestScope.findOrCreate(RequestScope.java:158)    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2022)    at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:765)    at org.jvnet.hk2.internal.ServiceLocatorImpl.getUnqualifiedService(ServiceLocatorImpl.java:772)    at org.jvnet.hk2.internal.IterableProviderImpl.get(IterableProviderImpl.java:111)    at org.glassfish.jersey.server.internal.inject.AbstractContainerRequestValueFactory.getContainerRequest(AbstractContainerRequestValueFactory.java:71)    at org.glassfish.jersey.server.internal.inject.PathParamValueFactoryProvider$PathParamValueFactory.provide(PathParamValueFactoryProvider.java:93)    at org.glassfish.jersey.server.internal.inject.ParamInjectionResolver.resolve(ParamInjectionResolver.java:134)    at org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator.java:211)    at org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:234)    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:357)    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)    at org.jvnet.hk2.internal.PerLookupContext.findOrCreate(PerLookupContext.java:70)    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2022)    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:114)    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:88)    at org.jvnet.hk2.internal.FactoryCreator.dispose(FactoryCreator.java:175)    at org.jvnet.hk2.internal.SystemDescriptor.dispose(SystemDescriptor.java:526)    at org.glassfish.jersey.process.internal.RequestScope$Instance.remove(RequestScope.java:532)    at org.glassfish.jersey.process.internal.RequestScope$Instance.release(RequestScope.java:549)    at org.glassfish.jersey.server.ServerRuntime$AsyncResponder.resume(ServerRuntime.java:968)    at org.glassfish.jersey.server.ServerRuntime$AsyncResponder.resume(ServerRuntime.java:922)    at de.moss.ems.rest.resource.AbstractBaseResource.send(AbstractBaseResource.java:118)    at de.moss.ems.rest.resource.AbstractBaseResource.resume(AbstractBaseResource.java:165)    at de.moss.ems.rest.resource.catalog.CatalogsResource.handleGet(CatalogsResource.java:49)    at de.moss.ems.rest.resource.catalog.AbstractCatalogResource.lambda$asyncGetRequest$0(AbstractCatalogResource.java:44)    at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1626)    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)    at java.lang.Thread.run(Thread.java:745)MultiException stack 2 of 3java.lang.IllegalArgumentException: While attempting to resolve the dependencies of de.moss.ems.rest.factory.ProjectFactory errors were found    at org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:246)    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:357)    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)    at org.jvnet.hk2.internal.PerLookupContext.findOrCreate(PerLookupContext.java:70)    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2022)    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:114)    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:88)    at org.jvnet.hk2.internal.FactoryCreator.dispose(FactoryCreator.java:175)    at org.jvnet.hk2.internal.SystemDescriptor.dispose(SystemDescriptor.java:526)    at org.glassfish.jersey.process.internal.RequestScope$Instance.remove(RequestScope.java:532)    at org.glassfish.jersey.process.internal.RequestScope$Instance.release(RequestScope.java:549)    at org.glassfish.jersey.server.ServerRuntime$AsyncResponder.resume(ServerRuntime.java:968)    at org.glassfish.jersey.server.ServerRuntime$AsyncResponder.resume(ServerRuntime.java:922)    at de.moss.ems.rest.resource.AbstractBaseResource.send(AbstractBaseResource.java:118)    at de.moss.ems.rest.resource.AbstractBaseResource.resume(AbstractBaseResource.java:165)    at de.moss.ems.rest.resource.catalog.CatalogsResource.handleGet(CatalogsResource.java:49)    at de.moss.ems.rest.resource.catalog.AbstractCatalogResource.lambda$asyncGetRequest$0(AbstractCatalogResource.java:44)    at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1626)    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)    at java.lang.Thread.run(Thread.java:745)MultiException stack 3 of 3java.lang.IllegalStateException: Unable to perform operation: resolve on de.moss.ems.rest.factory.ProjectFactory    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:386)    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)    at org.jvnet.hk2.internal.PerLookupContext.findOrCreate(PerLookupContext.java:70)    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2022)    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:114)    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:88)    at org.jvnet.hk2.internal.FactoryCreator.dispose(FactoryCreator.java:175)    at org.jvnet.hk2.internal.SystemDescriptor.dispose(SystemDescriptor.java:526)    at org.glassfish.jersey.process.internal.RequestScope$Instance.remove(RequestScope.java:532)    at org.glassfish.jersey.process.internal.RequestScope$Instance.release(RequestScope.java:549)    at org.glassfish.jersey.server.ServerRuntime$AsyncResponder.resume(ServerRuntime.java:968)    at org.glassfish.jersey.server.ServerRuntime$AsyncResponder.resume(ServerRuntime.java:922)    at de.moss.ems.rest.resource.AbstractBaseResource.send(AbstractBaseResource.java:118)    at de.moss.ems.rest.resource.AbstractBaseResource.resume(AbstractBaseResource.java:165)    at de.moss.ems.rest.resource.catalog.CatalogsResource.handleGet(CatalogsResource.java:49)    at de.moss.ems.rest.resource.catalog.AbstractCatalogResource.lambda$asyncGetRequest$0(AbstractCatalogResource.java:44)    at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1626)    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)    at java.lang.Thread.run(Thread.java:745)

有什么想法可以解决这个警告吗?

最佳答案

我能够通过使用 HK2 的 org.glassfish.hk2.api.PerLookup Annotation 而不是 Jerseys org.glassfish.jersey.process.internal.RequestScoped 来解决这个问题> 当我将工厂绑定(bind)到接口(interface)时,AbstractBinder 类中的注释。

import org.glassfish.hk2.api.PerLookup;

@Provider
public class ProjectFeature implements Feature {

@Override
public boolean configure(FeatureContext context) {

context.register(new AbstractBinder() {
@Override
protected void configure() {
bindFactory(ProjectFactory.class)
.to(Project.class)
.proxy(false)
.proxyForSameScope(true)
.in(PerLookup.class);
});

return true;
}

}

关于java - 在不在 Activity 的 Jersey 错误范围内运行的代码中检测到 HK2 故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38530282/

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