users@jersey.java.net

[Jersey] Re: dinamyc content type

From: Jose Antonio Illescas Del Olmo <jantonio.illescas_at_rbcdexia-is.es>
Date: Tue, 16 Aug 2011 18:31:29 +0200

Paul, apologize for any inconvenience on my expressions (English is not
my native language).

    Sorry...


Let me explain my idea: now, my rest framework works:

   1. Request -> Java -> XML (with XStream) -> Transformation (XSL/STX)
      -> Response => Yes, internally only works with XML and transform
      with XSL/STX to any format (at moment any object can output as:
      XHTML, JSON, CSV or PDF)
   2. Any Request can controlled (MVC point of view) as:

    * Transformation: any GET request generates a Java response that
      "serialize" Objects to XML and "transformed" with XSL/STX
    * Redirect: any POST, PUT, DELETE request redirect to some (static
      or dynamic) url after process
          o static: redirect to static configured URL
          o dynamic: redirect to programatic generated URL
    * Error: any error redirect to previous URL (form with submit
      button) with current parameters (filling any input with submited
      values) and a new one "error" with a message error (showing the
      error at top)

Well, on JAX-RS any custom Response requires programatic actions. But...
Can exits any "static" (annotated alternative)?

    My idea is annotate services with "static" headers (and response
codes) per mediaType:

    @GET
    @Output { contentType="text/html", link="html.xsl" } => custom
provider serialize result object to XML and transforms with "html.xsl"
when contentType = text/html
    public Object find(...)


    @PUT
    @Output { contentType="*", location="/some-resource-url" } =>
redirect to "/some-resource-url" after processing to any Request
     public Object post(...)

    @POST
    @Output { contentType="*", status = 202 } => responds with 202 -
Accepted but not processed to any Request
     public Object acceptedButNotPrecessed(...)

Of course, I say per media type, you can annotated multiples mediatypes:

    @GET
    @Outputs {
       @Output { contentType="text/html", link="html.xsl" } , => custom
provider serialize result object to XML and transforms with "html.xsl"
       @Output { contentType="application/json", link="json.xsl" } , =>
custom provider serialize result object to XML and transforms to html
with "html.xsl"
       @Output { contentType="text/csv", link="csv.xsl" } , => custom
provider serialize result object to XML and transforms to json with
"json.xsl"
       @Output { contentType="application/pdf", link="xsl-fo.xsl" } , =>
custom provider serialize result object to XML and transforms to xsl-fo
with "xsl-fo.xsl"
     }
    public Object find(...)

@Output annotation allows "simple alternatives" without programming.

    Your opinion?



On 16/08/2011 17:30, Pavel Bucek wrote:
> well, you have your "ugly" solution. Currently I don't see the way how
> you could obtain result of content negotiation process (I think this
> was here some time back and result was basically the same).
>
> Btw, how many content types (approx) are you supporting per resource?
>
> On 8/16/11 5:12 PM, Jose Antonio Illescas Del Olmo wrote:
>> Please any suggestion?
>>
>> I needed the "default contentType" after jersey
>> content-type-negotiation? (I need on my REST method, annotated with
>> @POST, @PUT)
>>
>>
>> On 11/08/2011 16:04, Jose Antonio Illescas Del Olmo wrote:
>>> Can get the "default" contentType selected by Jersey on my method?
>>>
>>> Please note that Jersey (and any JAX-RS implementation)
>>> calculates the content type to invoke the method with valid media
>>> type...
>>
>>
>
>