You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Sergey Beryozkin (JIRA)" <ji...@apache.org> on 2015/01/15 13:50:34 UTC
[jira] [Commented] (CXF-6194) [multipart] Server handle Collection
argument as single element
[ 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)