Hmmm. You're right - I conflated extension with suffix.
On 4/9/10 3:10 PM, Luca Masini wrote:
> Great, I never considered RequestDispatcherOptions and I think it's a
> good idea.
>
> But with replaceSuffix I go into an infinity cycle, because the servlet
> is choosen by the "jsonp" extension and not as a suffix:
>
> req.getRequestDispatcher(req.getResource().getPath(), new
> RequestDispatcherOptions("replaceSuffix=json")).include(req, resp);
>
>
> What is wrong with me ???
>
> Also, how can I associate a script like the one you showed to an
> extension ??
Create it at /apps/sling/servlet/default/jsonp.esp
It doesn't look like there's a way to override the extension via
RequestDispatcherOptions. I guess what you can do is just hack the last
letter off the path (assuming you're using jsonp as the extension). But
now I have a bad taste...
I can't think of a good reason why this is the case. It seems like there
should be a replaceExtension=json option.
Justin
>
> Thank you for your help.
>
> On Fri, Apr 9, 2010 at 8:05 PM, Justin Edelson <[email protected]
> <mailto:[email protected]>> wrote:
>
> These two servlets are used in different contexts, so it makes sense
> that you'd use different patterns for each of them. Your approach to the
> JsonQueryServlet looks fine to me. For the renderer servlet, I would be
> more inclined to create a script registered with the "jsonp" extension
> which is basically this:
>
> <%= request.getParameter("jsonp") %>(<%
> sling.include(resource.getPath(), "replaceSuffix=json") %>)
>
> Justin
>
> On 4/7/10 4:52 PM, Luca Masini wrote:
> > Yes, that can be great, but I don't want to change Sling sources, only
> > reuse them, that's why I asked about best practices.
> >
> > On Wed, Apr 7, 2010 at 9:58 PM, Justin Edelson
> <[email protected] <mailto:[email protected]>
> > <mailto:[email protected] <mailto:[email protected]>>>
> wrote:
> >
> > We should probably just support jsonp natively in these servlets.
> >
> >
> > On 4/7/10 2:05 PM, Luca Masini wrote:
> > > Hi guys, I need an advice from Sling experts.
> > >
> > > I need a JSONP renderer for Sling, initially I thought I had to
> > develop only
> > > one, but after I discovered that in effect Sling has two
> renderer
> > for JSON,
> > > one for plain resources and one for query.
> > >
> > > These two renderer are in private packages in a Sling
> Bundle, and
> > because
> > > JSONP and JSON are quite equals and I wanted to reuse as much as
> > possible, I
> > > started thinking about strategies to call them.
> > >
> > > The JsonQueryServlet is deployed as an OSGi Component, so I was
> > able to
> > > inject it using Felix SCR Annotation (querying for his
> > properties), and then
> > > I called his service() method inside my doGet:
> > >
> > > servlet.service(req, resp);
> > >
> > > For the JsonRendererServlet instead I used another strategy.
> > >
> > > I extracted the RequestPathInfo from the SlingHttpServletRequest
> > and the I
> > > included it using RequestDispatcher:
> > >
> > > String jsonPath = calculateIt(req);
> > >
> > > req.getRequestDispatcher(jsonPath).include(req, resp);
> > >
> > > Now both of these two are working, but I have a bad taste.
> > >
> > > Which of this is the best approach ?? The first ?? The second ??
> > None of
> > > them ???
> > >
> > >
> >
> >
> >
> >
> > --
> > ****************************************
> > http://www.lucamasini.net
> > http://twitter.com/lmasini
> > http://www.linkedin.com/pub/luca-masini/7/10/2b9
> > ****************************************
>
>
>
>
> --
> ****************************************
> http://www.lucamasini.net
> http://twitter.com/lmasini
> http://www.linkedin.com/pub/luca-masini/7/10/2b9
> ****************************************