我已经研究这个问题太久了,找到了解决方案,并希望为后续任何其他勇敢的 JAX-RS 冒险家提供反馈。
Error:
java.lang.IllegalStateException: Not inside a request scope.
at com.google.common.base.Preconditions.checkState(Preconditions.java:149)
at org.glassfish.jersey.process.internal.RequestScope.current(RequestScope.java:226)
at org.glassfish.jersey.process.internal.RequestScope.findOrCreate(RequestScope.java:154)
at org.jvnet.hk2.internal.MethodInterceptorImpl.intercept(MethodInterceptorImpl.java:80)
at org.glassfish.jersey.internal.inject.UriInfoInjectee$$EnhancerByCGLIB$$4cfd1aab.toString(<generated>)
at java.lang.String.valueOf(String.java:2854)
at java.lang.StringBuilder.append(StringBuilder.java:128)
at au.csiro.esa.authrest.rest.resource.PingResource.setUriInfo(PingResource.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.glassfish.hk2.utilities.reflection.ReflectionHelper.invoke(ReflectionHelper.java:1011)
at org.jvnet.hk2.internal.Utilities.justInject(Utilities.java:816)
at org.jvnet.hk2.internal.ServiceLocatorImpl.inject(ServiceLocatorImpl.java:801)
at org.glassfish.jersey.gf.cdi.CdiComponentProvider$1.inject(CdiComponentProvider.java:316)
at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:158)
at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:103)
at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:93)
at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:79)
at au.csiro.esa.authrest.rest.resource.PingResource$Proxy$_$$_WeldClientProxy.ping(Unknown Source)
....
它是一个简单的资源,标记为@RequestScoped
@Path("ping")
@RequestScoped
public class PingResource {
protected UriInfo uriInfo;
@Context
public void setUriInfo(UriInfo uriInfo) {
System.out.println("UserResource - set uriInfo:"+uriInfo);
this.uriInfo = uriInfo;
}
@Inject
@PropertiesFile(name = "app")
Properties properties;
@PermitAll
@GET
@Produces({ MediaType.TEXT_PLAIN })
public Response ping() {
System.out.println("Hit ping");
return Response.ok().entity("Running version " + properties.getProperty("application.version")).build();
// return Response.ok().entity("Running version 10").build();
}
....
答案是@Context
on the URIInfo
。它必须是这样的:
public void setUriInfo(@Context UriInfo uriInfo) {
System.out.println("UserResource - set uriInfo:"+uriInfo);
this.uriInfo = uriInfo;
}
or
@Context
protected UriInfo uriInfo;
看起来很明显不是吗!异常提到了 URIInfo 那么我的问题是什么?我不知道,我只能认为我看到了与此错误完全相同的内容,这是由其他原因引起的,并且我将一些内容更改为不正确的(就像您在顶部看到的大代码块中一样)。异常似乎是相同的,但并没有表明我实际上导致了不同的错误。
不管怎样,我夹着尾巴走开,并为我找到了问题的原因和解决方案而感到有些高兴。网上什么也没有,所以我想我会和大家分享这个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)