Hi Julian,
On Mon, 2019-09-30 at 21:40 +0200, Julian Sedding wrote:
> Hi Robert (again)
>
> I tried what I suggested and found exactly what you described: the
> extension of the forwarded request is not changed.
>
> However, there is a workaround. You can change the extension if you
> append one to the path passed into the RequestDispatcher, i.e. the
> path to your binary. The default GET servlet supports stream
> rendering
> (spooling binaries) for both the "null" extension and for ".res"[0].
> Therefore the following should work.
>
> String suffix = request.getRequestPathInfo().getSuffix();
> request
> .getRequestDispatcher("/content/maven" + suffix + ".res")
> .forward(request, response);
>
> Not particularly obvious or nice, so an API enhancement would still
> be
> a good thing.
That works, and without an API change, so that's extra nice :-) Thanks
for digging into this.
Robert
>
> Regards
> Julian
>
> [0]
> https://github.com/apache/sling-org-apache-sling-servlets-get/blob/master/src/main/java/org/apache/sling/servlets/get/impl/DefaultGetServlet.java#L223-L227
>
> On Fri, Sep 27, 2019 at 11:21 AM Julian Sedding <[email protected]>
> wrote:
> > Hi Robert
> >
> > Have you tried "forwarding" instead of "including"? AFAIK that
> > should
> > clear any previous reuest path info etc.
> >
> > Regards
> > Julian
> >
> > On Thu, Sep 26, 2019 at 4:54 PM Robert Munteanu <[email protected]
> > > wrote:
> > > On Thu, 2019-09-26 at 13:32 +0200, Radu Cotescu wrote:
> > > > Hi Robert,
> > > >
> > > > > On 26 Sep 2019, at 13:08, Robert Munteanu <[email protected]
> > > > > >
> > > > > wrote:
> > > > >
> > > > >
> > > > > My solution has two steps:
> > > > >
> > > > > 1. wrap the original request using a
> > > > > SlingHttpServletRequestWrapper
> > > > > and
> > > > > overriding getResource() to return the new resource. Also
> > > > > overriding
> > > > > getRequestPathInfo to return an object that points to the new
> > > > > resource
> > > > >
> > > > > 2. obtain a reference to the DefaultGetServlet via
> > > > >
> > > > > @Reference(target =
> > > > > "(component.name=org.apache.sling.servlets.get.DefaultGetServ
> > > > > let)")
> > > > > private Servlet getServlet;
> > > > >
> > > > > (I guess I could use the component pid as a slight
> > > > > improvement).
> > > > >
> > > > > and invoke its service() method with the altered request and
> > > > > the
> > > > > same response.
> > > > >
> > > >
> > > > Why can’t you use the RequestDispatcher in the second step
> > > > instead of
> > > > directly referencing the DefaultGetServlet?
> > >
> > > Good question :-) There are two answers to this:
> > >
> > > 1. I did not think of that
> > > 2. It does not allow me to override the extension. But that
> > > should be a
> > > simple change. So I filed
> > >
> > > https://issues.apache.org/jira/browse/SLING-8742
> > >
> > > to allow overriding the extension when including a resource.
> > >
> > > Thanks,
> > > Robert
> > >