users@jersey.java.net

Re: [Jersey] multipart/form-data error consuming error <was> Re: [Jersey] Variable changes do not happen

From: Paul Sandoz <Paul.Sandoz_at_Sun.COM>
Date: Fri, 11 Jun 2010 09:52:20 +0200

On Jun 11, 2010, at 7:41 AM, Paul Sandoz wrote:

> Hi,
>
> What version of Jersey are you using?
>
> On Jun 10, 2010, at 11:54 PM, Muhra Daniel wrote:
>
>> Hi,
>>
>> So I finally managed to do some logging. Strange enough, the logger
>> seems to put it into the file only after doing the upload request
>> twice.
>> Anyhow, I attached the file.
>
> I think the log output may be merging with some other output,
> printing out an XML document.
>

Doh, i see now you are using the XML logging output with the messages
embedded as XML content.

Also can you share you server-side code, specifically the method
signature of the resource method that consumes the message?

Paul.

> In the log i see a 400 response for a first request.
>
> Then i see a second POST request.
>
> 2 &gt; POST http://localhost:8080/de.wewall.first/rest/wewall
> 2 &gt; host: localhost:8080
> 2 &gt; password: toor
> 2 &gt; login: root
> 2 &gt; user-agent: RESTApplication 1.0 rv:1 (Macintosh; Mac OS X
> 10.6.3; de_DE)
> 2 &gt; accept-encoding: gzip
> 2 &gt; content-type: multipart/form-data; charset=utf-8;
> boundary=0xKhTmLbOuNdArY
> 2 &gt; content-length: 742865
> 2 &gt; connection: keep-alive
> 2 &gt;
> --0xKhTmLbOuNdArY^M
> Content-Disposition: form-data; name="image"; filename="file"^M
> Content-Type: application/octet-stream^M
>
> ...
>
>
> --0xKhTmLbOuNdArY--^M
>
> and a response of:
>
> 2 &lt; 400
> 2 &lt;
>
> To the naked eye the client data looks correct.
>
>
>> Btw, I mentioned smaller pictures are being accepted, but the file
>> was corrupted. Well, it seems like Jersey puts not only the payload
>> into the file, but also the desciptive part of the form-data. In
>> this case I would have:
>>
>> Content-Disposition: form-data; name="image"; filename="file"
>> Content-Type: application/octet-stream
>>
>> Why is that the case?
>
> Jersey is not doing that, the client is. Those are the headers
> related to MIME body parts of a the multipart/form-data message.
>
>
>> And why do some images fail to upload (at least if I don't parse
>> them manually)?
>
> I really do not know.
>
> Some sort of parsing exception may be occurring.
>
> I am not sure what version of Jersey you are using. If you are using
> Jersey 1.2 you can enable tracing and Jersey should log exceptions
> it is mapping to responses. Add the following init-param:
>
> <init-param>
> <param-name>com.sun.jersey.config.feature.Trace"</param-name>
> <param-value>true</param-value>
> </init-param>
>
> If not using Jersey 1.2 then you will need to register an
> ExceptionMapper<WebApplicationException> to log the exception.
>
> Paul.
>
>
>> And thanks for all the effort. I really appreciate your help.
>>
>> Cheers,
>> Daniel
>> <test.log>
>> Am 09.06.2010 um 06:34 schrieb Paul Sandoz:
>>
>>> Hi Daniel,
>>>
>>> JDK logging is utilized. The logger name is the same name as the
>>> class:
>>>
>>> com.sun.jersey.api.container.filter.LoggingFilter
>>>
>>> so you could configure JDK logging to redirect that output to a
>>> file. JDK logging is a bit of a pain to configure though.
>>>
>>> What web/app server are you using? usually they log output to a
>>> file.
>>>
>>>
>>> Another approach is to declare a ResourceConfig for the
>>> application and explicitly register an of LoggingFilter by adding
>>> it to the following:
>>>
>>> https://jersey.dev.java.net/nonav/apidocs/latest/jersey/com/sun/jersey/api/core/ResourceConfig.html
>>> #getContainerRequestFilters%28%29
>>>
>>> https://jersey.dev.java.net/nonav/apidocs/latest/jersey/com/sun/jersey/api/core/ResourceConfig.html
>>> #getContainerResponseFilters%28%29
>>>
>>> that instance can be created with it's own logging filter that
>>> redirects to a file.
>>>
>>> Paul.
>>>
>>> On Jun 9, 2010, at 1:15 AM, Muhra Daniel wrote:
>>>
>>>> Hi,
>>>>
>>>> Sorry for the late reply, but currently I'm very busy.
>>>> I tried to invoke the logger, but I haven'T found out, how to
>>>> redirect the output to a file. For the console, the output is
>>>> currently too much.
>>>>
>>>> I also noticed that smaller images (4Kb gif converted to TIF)
>>>> seem to be acceptable for the server. But still the File
>>>> representation seems to be invalid.
>>>> Bigger files trigger an error on the server side, saying the
>>>> request is syntactically incorrect.
>>>>
>>>> But for now, can someone tell me how to redirect the logger
>>>> output to a file. I invoked it by:
>>>>
>>>> <init-param>
>>>> <param-
>>>> name>com.sun.jersey.spi.container.ContainerRequestFilters</param-
>>>> name>
>>>> <param-
>>>> value>com.sun.jersey.api.container.filter.LoggingFilter</param-
>>>> value>
>>>> </init-param>
>>>> <init-param>
>>>> <param-
>>>> name>com.sun.jersey.spi.container.ContainerResponseFilters</param-
>>>> name>
>>>> <param-
>>>> value>com.sun.jersey.api.container.filter.LoggingFilter</param-
>>>> value>
>>>> </init-param>
>>>>
>>>> Cheers,
>>>> Daniel
>>>>
>>>> Am 07.06.2010 um 13:32 schrieb Paul Sandoz:
>>>>
>>>>> Hi Daniel,
>>>>>
>>>>> Can you enable server-side logging:
>>>>>
>>>>> https://jersey.dev.java.net/nonav/apidocs/latest/jersey/com/sun/jersey/api/container/filter/LoggingFilter.html
>>>>>
>>>>> I would like to see the all of the client request, including the
>>>>> headers.
>>>>>
>>>>> What version of Jersey are you using?
>>>>>
>>>>> What is the log output from the server side?
>>>>>
>>>>> Paul.
>>>>>
>>>>> On Jun 7, 2010, at 1:16 AM, Muhra Daniel wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> Currently I'm trying to upload an image to my server.
>>>>>> Unfortunately the server denies to accept the request, claiming
>>>>>> it's syntactically incorrect.
>>>>>> A usual request would look like this:
>>>>>>
>>>>>>
>>>>>> --0xKhTmLbOuNdArY
>>>>>> Content-Disposition: form-data; name="login"
>>>>>>
>>>>>> peer
>>>>>> --0xKhTmLbOuNdArY
>>>>>> Content-Disposition: form-data; name="password"
>>>>>>
>>>>>> reep
>>>>>> --0xKhTmLbOuNdArY
>>>>>> Content-Disposition: form-data; name="image"; filename="file"
>>>>>> Content-Type: application/octet-stream
>>>>>>
>>>>>> MM
>>>>>> $ннн
>>>>>> ...
>>>>>> н
>>>>>> 
>>>>>> --0xKhTmLbOuNdArY--
>>>>>>
>>>>>> The service which is invoked is defined as follows:
>>>>>>
>>>>>> @POST
>>>>>> @Consumes( MediaType.MULTIPART_FORM_DATA )
>>>>>> @Produces(MediaType.TEXT_PLAIN)
>>>>>> public String uploadImage(@FormParam("login") String login,
>>>>>> @FormParam("password") String password, @FormParam("image")
>>>>>> File image) {
>>>>>> ... process file...
>>>>>> }
>>>>>>
>>>>>>
>>>>>> The question now is, where the error lies. Is my service wrong
>>>>>> (most likely), or is the POST request somehow incorrect. The
>>>>>> request is made using a framework called ASIHTTPRequest. I also
>>>>>> tried to use byte[] instead of file, but that doesn't work
>>>>>> either.
>>>>>> Every help is appreciated.
>>>>>>
>>>>>> Cheers,
>>>>>> Daniel
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>>>>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>>>>
>>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>