[ https://issues.apache.org/jira/browse/CXF-6194?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14278641#comment-14278641 ]
Sergey Beryozkin commented on CXF-6194: --------------------------------------- MultipartProvider accumulates multiple parts with the same name into a collection. The concrete use case arose few years back when a browser was submitting multiple files, typically one should have a 'files' part with multiple file parts embedded inside of that single 'files' part: http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2 (see the last example). However what was happening was that a browser was sending multiple 'files' part, one per each file. Therefore, by default, if a given part is expect to be read into a Collection then all the parts with a given name will be found and then read and added into a collection allocated by the provider. I've added a property, "single.multipart.is.collection", that can be set in jaxrs:properties. That will read the content of the individual part to the explicit collection, if applicable > [multipart] Server handle Collection argument as single element > --------------------------------------------------------------- > > Key: CXF-6194 > URL: https://issues.apache.org/jira/browse/CXF-6194 > Project: CXF > Issue Type: Bug > Components: JAX-RS > Affects Versions: 3.0.3 > Reporter: Alexey Markevich > > @POST > @Path("/model") > @Consumes(MediaType.MULTIPART_FORM_DATA) > void importModels(@Multipart(value = "workspace") String workspace, > @Multipart(value = "content", type = MediaType.APPLICATION_JSON) > Collection<Model> content) > Server error [1]. > JacksonJsonProvider called with following isReadable args: > 1 > type=java.util.Collection > genericType=java.util.Collection<Model> > mediaType=multipart/form-data;boundary="uuid:af1d3363-4fc9-408b-b5d3-c352c7f33a49" > 2 > INFO: type=Model > INFO: genericType=Model > INFO: mediaType=application/json > 1. > Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not > deserialize instance of org.talend.ipaas.web.common.bean.Flow out of > START_ARRAY token > at [Source: [{...}]; line: 1, column: 1] > at > com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164) > at > com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:749) > at > com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:745) > at > com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromArray(BeanDeserializerBase.java:1210) > at > com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:151) > at > com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:126) > at > com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:1232) > at > com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:676) > at > com.fasterxml.jackson.jaxrs.base.ProviderBase.readFrom(ProviderBase.java:800) > at > org.apache.cxf.jaxrs.provider.MultipartProvider.fromAttachment(MultipartProvider.java:238) > at > org.apache.cxf.jaxrs.provider.MultipartProvider.getAttachmentCollection(MultipartProvider.java:203) > at > org.apache.cxf.jaxrs.provider.MultipartProvider.readFrom(MultipartProvider.java:175) > at > org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1325) > at > org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1276) > at > org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:812) > at > org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:775) > at > org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:212) > ... 32 more -- This message was sent by Atlassian JIRA (v6.3.4#6332)