I think we need an RFE on that utility, and it should be a standard part of
the Servlet extension.  The fact that there are a couple of messy and or
labor intensive ways to do it won't satisfy the large development community
that is VERY COMMITTED to the Servlet API.  I am thinking of folks like the
IBM Websphere and/or BEA community that have made a very strong commitment
to their J2EE application server environment and tend to express all their
APIs in terms of the Servlet API specifically.  The idiom
doSomething(HttpServletRequest request, HttpServletResponse response) is
canon -- following the Uniform interface using the tools at hand.
For those of us working in a broad device panorama that encompasses
embedded, standalone, OSGi, Servlet, and even cross-compiled (GWT) cases,
the idea of having to touch, say, an HttpServletRequest directly is just
sort of an annoyance associated with one of many deployment options.  For
others, tight Servlet API integration is a core part of the value
proposition.

The possibility that the relevant Servlet API objects are reachable through
contortions is not enough; it must be straightforward, easy, and
supportable.  So I'd like to see something like a ServletAPI utility class
with

  /** @deprecated */
  public static HttpServletRequest getHttpServletRequest(Request request);
  /** @deprecated */
  public static HttpServletResponse getHttpServletResponse(Response
response);
  public static HttpServletRequest createHttpServletRequest(Request
request);
  public static HttpServletResponse createHttpServletResponse(Response
response);

The first two methods would return the original and actual objects
associated with the call, if they exist, or null if the call did not
originate with a Servlet connector.  I would deprecate these because they
are almost certainly a bad idea to use for any non-trivial purpose -- due to
the likelihood of conflict between direct mutation and Restlet API
operations.

The last two methods would return a Restlet emulation wrapper object that
conforms to the HttpServletRequest and HttpServletResponse API, but
transforms the underlying methods into Restlet operations.  Obviously there
would need to be some limitations to this, especially at first -- I can
foresee a number of places where emulation is non-trivial.  But it would
seem easier and more supportable to expand and improve the behavior of such
wrappers over time if demand drives it, than to ask every Servlet developer
to implement and support their own independent workarounds.  And I do
believe that most of the time HttpServletRequest and HttpServletResponse are
just passed in APIs for convenience -- all the calling code really needs to
access is something trivial like a cookie setting, header, or request
parameter.  All easy to emulate.

This approach also has practical value for us "many container" developers,
because it would allow us to take certain existing APIs that are tightly
bound to the Servlet API, and integrate them in non Servlet container
environments by just supplying the servlet-api.jar and the Servlet
extension.

Want to beat up on this idea before I type in an RFE?

- R

On Wed, Jun 4, 2008 at 10:55 AM, Bruno Harbulot <
[EMAIL PROTECTED]> wrote:

> I am not sure how restlets can be useful if it cannot integrate with legacy
>> or existing systems.
>>
>
>
> If you're given some library which has an API of the form
> "authenticate(HttpServletRequest servletRequest)", then I think what Rob
> suggested in reply to your message is probably the cleanest solution:
> creating a "fake" HttpServletRequest, populated with the relevant
> information from the Restlet Request.
> Perhaps there could be some utility class to do this conversion. Feel free
> to contribute the code if you implement it...
>
>
> Best wishes,
>
> Bruno.
>
>

Reply via email to