cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andre Juffer <andre.juf...@oulu.fi>
Subject Re: [cocoon3] @Context Request request
Date Mon, 31 Oct 2011 10:29:09 GMT
Steven,

thanks for the reply.

The purpose of the request is to upload an image file. With commons 
fileupload this is straightforward, but it requires direct access to 
HttpServletRequest. I did understand that HttpServletRequest is an 
interface of course.

With commons fileupload, one would do something like

FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);

Here, 'request' must be (an implementation of) HttpServletRequest. One 
of 'items' would contain the image.

If I use

public Response uploadImage(@Context Request request)

the type of 'request' is com.sun.jersey.spi.container.ContainerRequest, 
which will not work with 'upload.parseRequest(request)' above. The 
ContainerRequest does not implement HttpServletRequest. Following your 
email, one should see for 'request' a HttpServletRequest? I would agree 
with this, given the statement at the jersey website "When deploying a 
JAX-RS application using servlet then ServletConfig, ServletContext, 
HttpServletRequest and HttpServletResponse are available using @Context.".

With

public Response uploadImage(@Context HttpServletRequest request)

the type of request is some proxy (this is the name of an implementing 
class, something like $Proxy38).

In any case, i -did- use public Response uploadImage(@Context 
HttpServletRequest request) and noticed that the request is empty (that 
is, the List<FileItem>  above is empty). That is, no image file is 
available, although it was sent correctly (checked with Firebug).

So, my conclusion was that something is not working correctly and that's 
why I was wondering about the type of request. The POST request on the 
client was something like

http://localhost:8888/eap/rest/image

with jetty as the servlet engine. I cannot be sure what happens in 
between sending the request and the handling by 
'ImageResource.uploadImage(..)'.


One thing, though (just occurred to me while preparing this email): I 
did use

List<FileItem> items = upload.parseRequest(request);

which possibly should be

List items = upload.parseRequest(request);

(so no generics). The version of fileupload I use is 1.2.1 (if I 
correctly remember), but I will look into this this evening.

Thanks,
Andre



On 10/31/2011 11:44 AM, Steven Dolg wrote:
> Am 30.10.2011 18:35, schrieb Andre Juffer:
>> Hi,
>>
>> for processing a multipart/form-data request holding image data, I 
>> intend to use the commons imageupload [1]. In order to do so, I need 
>> to get access to the javax.servlet.http.HttpServletRequest object 
>> inside a REST resource. The @Context annotation injects information 
>> about the request, see e.g. [2] and also [3], but the request object 
>> should implement the javax.ws.rs.core.Request interface (I think).
>>
>> How can I get to the HttpServletRequest inside a REST resource. Is 
>> there a way to convert Request to 
>> javax.servlet.http.HttpServletRequest? According to [4],"When 
>> deploying a JAX-RS application using servlet then ServletConfig, 
>> ServletContext, HttpServletRequest and HttpServletResponse are 
>> available using @Context." But how?
>>
>> Right now, I assume
>>
>> @POST
>> public Response uploadImage(@Context HttpServletRequest request) {
>> .....
>> }
>>
>> but I do not believe this is actually correct.
>>
>> The actual type is com.sun.jersey.spi.container.ContainerRequest 
>> (implements Request), according to request.getClass().getName().
>>
>> There is nothing in the request itself, while I see with Firebug that 
>> the image file is sent to the server in the proper way.
>
> Hi André,
>
> the code fragment you posted appears to be correct and conform with 
> Jersey - the JAX-RS implementation used by Cocoon 3.
>
> If you receive a value in the parameter request, then it will be of 
> type HttpServletRequest. The JVM won't allow anything else.
> Of course you receive an actual implementation, since 
> HttpServletRequest is only an interface.
>
> So the question is:
> What do you want to do with the request and why do you believe it is 
> not working correctly?
>
> Cheers,
> Steven
>
>>
>> Thanks,
>> André
>>
>>
>> [1] http://commons.apache.org/fileupload/index.html
>> [2] http://cocoon.apache.org/3.0/reference/html/webapps.html
>> [3] 
>> http://jsr311.java.net/nonav/releases/1.1/javax/ws/rs/core/Context.html
>> [4] http://jersey.java.net/nonav/documentation/latest/jax-rs.html#d4e524
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
> For additional commands, e-mail: users-help@cocoon.apache.org
>


-- 
Andre H. Juffer              | Phone: +358-8-553 1161
Biocenter Oulu and           | Fax: +358-8-553-1141
Department of Biochemistry   | Email: andre.juffer@oulu.fi
University of Oulu, Finland  | WWW: www.biochem.oulu.fi/Biocomputing/
StrucBioCat                  | WWW: www.strucbiocat.oulu.fi
Triacle Biocomputing         | WWW: www.triacle-bc.com


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org


Mime
View raw message