You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@olingo.apache.org by "Prashanth (JIRA)" <ji...@apache.org> on 2015/05/27 12:25:17 UTC
[jira] [Comment Edited] (OLINGO-662) Attachments support in olingo
[ https://issues.apache.org/jira/browse/OLINGO-662?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14560608#comment-14560608 ]
Prashanth edited comment on OLINGO-662 at 5/27/15 10:24 AM:
------------------------------------------------------------
Hi Christian,
Now i understand the design of olingo for media entities . I would like to make 2 points :
i) Regarding the validation of request content type :
As you mentioned, content type of request will not be validated as long as entity type is marked with hasStream()==true ( by annotating the property in entity pogo with EdmProperty in conjunction with the EdmMediaResourceContent annotation ). But here , in our case , we are generating the entity pogo ( ex: Issue ) at runtime and this entity doesn't have a property to be marked with required annotations (EdmMediaResourceContent ,EdmProperty ). Hence, marking entity type with hasStream is not possible in our case and i think the only choice we have is to override the method getCustomContentTypes() in processor for passing through validation of content type multipart/form-data , multipart/mixed etc. Do you have any other suggestion here ?
PS : Instead of annotating the property of entity with EdmMediaResourceContent and EdmProperty , if olingo in future allows to mark the entity pogo ( which doesn't have the property to be annotated in our case ) itself with annotations , it would be better .
ii) Regarding the readBinary() method of EntityProvider :
In our case, we want to allow the user to send a request ( either with attachment / issue details + attachment ) . So content type would be multipart/form-data or multipart/mixed etc. and content(inputstream) of createEntity() would be something like following:
------WebKitFormBoundaryg2ITcoVI9xOjORUq
Content-Disposition: form-data; name="issue_type"
other
------WebKitFormBoundaryg2ITcoVI9xOjORUq
Content-Disposition: form-data; name="issue_priority"
high
------WebKitFormBoundaryg2ITcoVI9xOjORUq
Content-Disposition: form-data; name="testfile.txt"; filename="testfile.txt"
Content-Type: text/plain
file with some content
------WebKitFormBoundaryg2ITcoVI9xOjORUq--
I have gone through the docs and source code of library and understood that readBinary() of EntityProvider is simply converting the given inputstream into byte[] and returning. But in our case, the InputStream ( content ) of createEntity would be having request body ( with some issue details + attachments ) and content type would be multipart/form-data or multipart/mixed etc. Since, readBinary() of EntityProvider doesn't suite for de-serialization of request body ( with some issue details + attachments ) and olingo doesn't provide any in-build de-serializer , i am trying to use some other utility ( like MultipartStream of Apache commons fileupload ) for parsing and getting the issue details and attachments separately. Do you have any better suggestion here ? Do you recommend any other de-serializer that we can use for our case ? We can use commons fileupload also if we can get request object ( HttpServletRequest type ) from olingo . Can we get httpServletRequest object from olingo context ?
PS : If olingo provides an in-built de-serializer in future updates, i think it will be useful. Just for example, REST implementations provides some api like MultipartBody and Attachment which gives us attachments directly from the request body.
Thanks
was (Author: prashanthpatha):
Hi Christian,
Now i understand the design of olingo for media entities . I would like to make 2 points :
i) Regarding the validation of request content type :
As you mentioned, content type of request will not be validated as long as entity type is marked with hasStream()==true ( by annotating the property in entity pogo with EdmProperty in conjunction with the EdmMediaResourceContent annotation ). But here , in our case , we are generating the entity pogo ( ex: Issue ) at runtime and this entity doesn't have a property to be marked with required annotations (EdmMediaResourceContent ,EdmProperty ). Hence, marking entity type with hasStream is not possible in our case and i think the only choice we have is to override the method getCustomContentTypes() in processor for passing through validation of content type multipart/form-data , multipart/mixed etc. Do you have any other suggestion here ?
PS : Instead of annotating the property of entity with EdmMediaResourceContent and EdmProperty , if olingo in future allows to mark the entity pogo ( which doesn't have the property to be annotated in our case ) itself with annotations , it would be better .
ii) Regarding the readBinary() method of EntityProvider :
In our case, we want to allow the user to send a request ( either with attachment / issue details + attachment ) . So content type would be multipart/form-data or multipart/mixed etc. and content(inputstream) of createEntity() would be something like following:
------WebKitFormBoundaryg2ITcoVI9xOjORUq
Content-Disposition: form-data; name="issue_type"
other
------WebKitFormBoundaryg2ITcoVI9xOjORUq
Content-Disposition: form-data; name="issue_priority"
high
------WebKitFormBoundaryg2ITcoVI9xOjORUq
Content-Disposition: form-data; name="testfile.txt"; filename="testfile.txt"
Content-Type: text/plain
file with some content
------WebKitFormBoundaryg2ITcoVI9xOjORUq--
I have gone through the docs and source code of library and understood that readBinary() of EntityProvider is simply converting the given inputstream into byte[] and returning. But in our case, the InputStream ( content ) of createEntity would be having request body ( with some issue details + attachments ) and content type would be multipart/form-data or multipart/mixed etc. Since, readBinary() of EntityProvider doesn't suite for de-serialization of request body ( with some issue details + attachments ) and olingo doesn't provide any in-build de-serializer , i am trying to use some other utility ( like MultipartStream of Apache commons fileupload ) for parsing and getting the issue details and attachments separately. Do you have any better suggestion here ? Do you recommend any other de-serializer that we can use for our case ?
PS : If olingo provides an in-built de-serializer in future updates, i think it will be useful. Just for example, REST implementations provides some api like MultipartBody and Attachment which gives us attachments directly from the request body.
Thanks
> Attachments support in olingo
> -----------------------------
>
> Key: OLINGO-662
> URL: https://issues.apache.org/jira/browse/OLINGO-662
> Project: Olingo
> Issue Type: Bug
> Components: MISC, odata2-annotation, odata2-core, odata4-server
> Affects Versions: V2 2.0.3
> Reporter: Prashanth
> Assignee: Christian Amend
> Priority: Blocker
> Labels: attachments
>
> This question is about the support for attachments uploading and downloading via Olingo Service ( Olingo V2 2.0.3 ). I have gone the olingo docs but didn't find any clue on how to provide support for uploading and downloading of attachments using olingo .
> Does olingo supports this functionality ? If olingo supports , how to implements this ?
> Following are some basics which i came to know by debugging the core library :
> -> Media type support : We can provide support for custom content types by overriding the method getCustomContentTypes() in processor class.
> -> Implementation : we can implement createEntity as following in processor class :
> @Override
> public ODataResponse createEntity(PostUriInfo uriInfo, InputStream content,
> String requestContentType, String contentType) throws ODataException { ... }
>
> But here content is giving the requestBody , not actual file/attachment.
> Note : Here the support for attachments means - ex : in case of Rest , CXF provides some api which can be seen in following snippet :
> @POST
> @Consumes( {MediaType.MULTIPART_FORM_DATA })
> @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
> public Response create(@Context HttpHeaders httpHeaders, @Context UriInfo uriInfo,
> MultipartBody multipartBody)
> Here @Consumes media type provides consumption of multipart formdata and MultipartBody parameter can give us the attachments.
> Similar to above , Does Olingo V2 2.0.3 provides any API ?How can we implement the support for attachments in Olingo V2 2.0.3 ? Please share us an example !
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)