Warum ist mein Jersey JAX-RS-server wirft eine IllegalStateException nicht in RequestScope?
Habe ich diese für zu lang und haben die Lösung gefunden und wollte mal um feedback für andere unerschrockene JAX-RS Abenteurer, die Folgen.
Fehler:
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)
....
Seine eine einfache Ressource markiert als @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();
}
....
- Ich habe Problem java.net/jira/browse/JERSEY-2241 für diese.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist die Antwort, die
@Context
auf dieURIInfo
. Es werden wie:oder
Scheint offensichtlich, nicht wahr! Die Ausnahme erwähnt URIInfo was war also mein problem? Ich weiß nicht, ich kann nur denken, dass ich etwas sah genau, wie dieser Fehler durch etwas anderes verursacht, und ich änderte die Dinge um falsch zu sein (wie in der big-block-code, den Sie siehe oben). Die Ausnahme schien das gleiche zu sein, und es hat nicht auf, dass ich eigentlich verursacht einen anderen Fehler.
Sowieso, ich bin zu Fuß entfernt, mit dem Schwanz zwischen den Beinen und das Gefühl, etwas glücklich, dass ich arbeitete die Ursache des Problems und die Lösung. Es gab nichts auf der 'net, so dass ich dachte, ich würde mit Ihnen teilen 'alle.