users@jersey.java.net

[Jersey] Re: Custom parameter type for _at_PathParam for a "sub-resource"

From: Behrooz Nobakht <nobeh5_at_gmail.com>
Date: Mon, 29 Sep 2014 09:15:55 +0200

On this topic, I reported the following issue:
https://java.net/jira/browse/JERSEY-2665

On Fri, Sep 26, 2014 at 4:50 PM, Behrooz Nobakht <nobeh5_at_gmail.com> wrote:

> Hi,
>
> Does Jersey 2.12 support having a custom parameter type for a @PathParam
> for a sub-resource?
>
> My show case is as follows:
>
> - A “singleton” root resource at /r.
> - The root resource is registered using
> ResourceConfig#registerInstances(Object).
> - A “per-request” sub-resource at /r/c/{name} for which in the root
> resource I have:
>
> @Path("c/{name}")
> public CResource getC(@PathParam("name") MyType param){
> // ...
> }
>
>
> - I have a MyTypeReaderWriterProvider<MyType> that reads from
> String.class and can write.
> - The message body worker above is registered using
> ResourceConfig#register(Class).
>
> When I try to reach at http://localhost:2000/r/c/myValue, I get the
> following exception:
>
> org.glassfish.jersey.server.model.ModelValidationException: Model validation error(s) found in sub resource returned by sub resource locator.
> [[FATAL] No injection source found for a parameter of type public com.x.resources.CResource com.x.resources.RootResource.getC(MyType) at index 0.; source='ResourceMethod{httpMethod=null, consumedTypes=[], producedTypes=[], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class com.x.resources.RootResource, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor_at_5ca3f8c7]}, definitionMethod=public com.x.resources.CResource com.x.RootResource.getc(MyType), parameters=[Parameter [type=class MyType, source=name, defaultValue=null]], responseType=class com.x.resources.CResource}, nameBindings=[]}']
> at org.glassfish.jersey.server.internal.routing.SubResourceLocatorRouter$1.run(SubResourceLocatorRouter.java:208)
> at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
> at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
> at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
> at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
> at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
> at org.glassfish.jersey.server.internal.routing.SubResourceLocatorRouter.validate(SubResourceLocatorRouter.java:201)
> at org.glassfish.jersey.server.internal.routing.SubResourceLocatorRouter.apply(SubResourceLocatorRouter.java:160)
> at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112)
> at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:115)
> at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:115)
> at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:115)
> at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:115)
> at org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:94)
> at org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:63)
> at org.glassfish.jersey.process.internal.Stages.process(Stages.java:197)
> at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:263)
> at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
> at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
> at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
> at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
> at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
> at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:297)
> at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:254)
> at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1030)
> at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:373)
> at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:381)
> at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:344)
> at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221)
> at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686)
> at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:501)
> at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
> at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
> at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
> at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
> at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
> at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
> at org.eclipse.jetty.server.Server.handle(Server.java:370)
> at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
> at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:949)
> at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1011)
> at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644)
> at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
> at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
> at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668)
> at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
> at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
> at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
> at java.lang.Thread.run(Thread.java:745)
>
> Would you please advise?
>
> Thanks,
> Behrooz
> ​
>



-- 
-- Behrooz Nobakht