On Wed, Jul 21, 2010 at 9:44 AM, Felix Meschberger <[email protected]> wrote:
> ...So we have to have functionality to
> (a) create
> SlingHttpServletRequest/Response objects out of regular HTTP objects

> and
> (b) create SlingHttpSeervletRequest/Response objects "out of nothing".
>
> For (a) we can of course reuse the real HTTP request/response objects
> for (b) we can't...

Agreed, and those "synthetic" request/response objects also need to be
available to the client for wrapping.

For example, if you want to save the output of a background request,
including (some) HTTP headers, you'd need to wrap the synthetic
request in a custom wrapper to catch addHeader() calls.

So I agree that we need a "synthetic request factory" that's exposed,
that cannot just happen in the SlingServlet service.

>
> Thus by defining two simple builders to setup a
> SlingHttpServeltRequest/Response object which is at the heart of all
> Sling processing, we can handle both cases transparently without special
> casing again...

I like your suggested API for those builders, but can't they be
services instead of just public classes?

i.e. instead of

SlingHttpServletRequest = new SlingHttpServletRequestBuilder(
       resolver)
       .addAttribute(name,value)
       ...

use

@Reference
private SlingHttpServletRequestBuilder b;

...
SlingHttpServletRequest = b.createRequest(resolver)
       .addAttribute(name,value)
       ...


>
> Please remember my other proposal: Separate SlingMainServlet
> functionality from the SlingServlet service implementation. The
> SlingServlet.process method will take SlingHttpServletRequest/Response
> objects, which can (but are not required to be) built with the builder
> helpers....

That's probably good but I see it as in implementation detail, it's
more important that we agree on the API.

-Bertrand

Reply via email to