[ 
https://issues.apache.org/jira/browse/CXF-3987?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13173589#comment-13173589
 ] 

Sergey Beryozkin commented on CXF-3987:
---------------------------------------

Benson, I removed some of the code which made it into 2.5.1 to minimize the 
confusion but either way I think it's Not A Problem issue. When we have 
multipart/form-data payloads, we do expect Content-Disposition with the 
"form-data" type; if we relax it then we can capture by mistake the data meant 
to be processed by MultipartProvider.

If you disagree then let me know please what do you think can be improved 
                
> incompatible change in JAX-RS from 2.5.0 to 2.5.1
> -------------------------------------------------
>
>                 Key: CXF-3987
>                 URL: https://issues.apache.org/jira/browse/CXF-3987
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>    Affects Versions: 2.5.1
>            Reporter: Benson Margulies
>
> One of my multipart tests is now failing with a 400. The 400 is thrown from 
> FormUtils in the runtime. It runs just fine in 2.5.0.
> My function looks like:
> {code}
>     @Produces("text/html")
>     @Consumes("multipart/form-data")
>     @Path("/processFormTextToJson")
>     @Descriptions({ 
>         @Description(value = "Accepts text from an HTML form, returns 
> analysis results in JSON.", target = DocTarget.METHOD),
>         @Description(value = "Json containing all of the analysis results", 
> target = DocTarget.RETURN)
>      })
>     public Response processFormTextToJson(@Description(value = "Json 
> specification of the processing options.", target = DocTarget.PARAM)
>                                           @Multipart(value = "options") 
> String optionsString,
>                                           @Description(value = "Input text", 
> target = DocTarget.PARAM)
>                                           @Multipart(value = "data") 
> InputStream data) {
> {code}
> and the code leading to the exception in CXF is:
> {code}
>  public static void populateMapFromMultipart(MultivaluedMap<String, String> 
> params,
>                                                 Annotation[] anns,
>                                                 MultipartBody body, 
>                                                 boolean decode) {
>  
>        List<Attachment> atts = body.getAllAttachments();
>         for (Attachment a : atts) {
>             ContentDisposition cd = a.getContentDisposition();
>             if (cd == null || 
> !MULTIPART_FORM_DATA_TYPE.equalsIgnoreCase(cd.getType())
>                 || cd.getParameter("name") == null) {
>                 Multipart id = AnnotationUtils.getAnnotation(anns, 
> Multipart.class);
>                 
>                 if (id == null || id.required()) {
>                     throw new WebApplicationException(400);
>                 } else {
>                     return;
>                 }
>             }
> {code}
> The annotations present are:
> {noformat}
> [@org.apache.cxf.jaxrs.model.wadl.Description(title=, target=param, 
> value=Json specification of the processing options., lang=, docuri=), 
> @org.apache.cxf.jaxrs.ext.multipart.Multipart(value=options, required=true, 
> type=*/*)]
> {noformat}
> Note that the required flag is on. cd is null. In other words, even if the 
> names match, if there is no content disposition, we get a 400. Is that really 
> right? Why require a cd? What's wrong with the plain old name field of the 
> part?

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to