On 5/23/08, Lars Trieloff <[EMAIL PROTECTED]> wrote:
> Hi,
>
>  I am planning to add support for additional content types to the
> SlingPostServlet that would allow processing Web Forms 2.0, JSON (allowing
> an effective-round-tripping from Sling.js), XML (in JCR document notation),
> ATOM (in terms of the Atom publishing protocol). To do this I would like to
> propose a small API change: extracting a ResponseBuilder interface from our
> current HtmlResponse and renaming HtmlResponse subsequently to
> HtmlResponseBuilder. This would allow us to create a doPost method that
> would start like this (I think we should OSGi-ify this later to make content
> type handling pluggable)
>
>  protected void doPost(SlingHttpServletRequest request,
>             SlingHttpServletResponse response) throws IOException {
>
>         log.info("content-type: " + request.getContentType());
>         String responseType;
>         //try to determine the request content type and set the response
> accordingly. Ordinary
>         //web forms (multipart/form-data or
> application/x-www-form-urlencoded) are getting HTML
>         //response
>         if
> (request.getContentType().equals("application/x-www-form+xml"))
> {
>                 responseType = "application/x-www-form+xml";
>
>                 //TODO: handle Web Forms 2.0 POST
>         } else if
> (request.getContentType().equals("application/json")||request.getContentType().equals("text/x-json"))
> {
>                 responseType = "application/json";
>
>                 //TODO: handle JSON POST
>         } else if
> (request.getContentType().equals("text/xml")) {
>                 responseType = "text/xml";
>
>                 //TODO: handle XML POST
>         } else if
> (request.getContentType().equals("application/atom+xml"))
> {
>                 responseType = "application/atom+xml";
>
>                 //TODO: handle Atom POST
>         } else {
>                 responseType = "text/html";
>         }
>
>         //check for user-specified override of response type
>         if
> (request.getHeader("Accept")!=null&&request.getHeader("Accept").length()!=0)
> {
>
>                 responseType = request.getHeader("Accept");
>         }
>
>         ResponseBuilder responseBuilder;
>         if (responseType.equals("application/json")) {
>                 responseBuilder = new JsonResponseBuilder();
>         } else if
> (responseType.equals("application/x-www-form+xml")) {
>                 responseBuilder = new WebForms20ResponseBuilder();
>         } else if (responseType.equals("text/xml")) {
>                 responseBuilder = new XmlResponseBuilder();
>         } else if
> (responseType.equals("application/atom+xml")) {
>                 responseBuilder = new AppResponseBuilder();
>         } else {
>                 responseBuilder = new HtmlResponseBuilder();
>         }
>
>  the general idea is not to break the current API, so that HtmlResponse
> stays the default, but that users sending a JSON request will get a JSON
> response, unless they explicitly request a different responseType using the
> Accept header.

does it really make sense to add all those types to the default post
servlet? can you reuse any code of the servlet? if it's just an
'import' i would go for the "import" operation as paul suggested.

if the code is very different from the default post servlet, i would
create individual ones, that decline service if the headers do not
match (felix: this is possible, right?)

regards, toby

Reply via email to