aries-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Carlos Sierra Andrés (Jira) <j...@apache.org>
Subject [jira] [Commented] (ARIES-1966) JAX-RS MediaType annotation is not correctly evaluated
Date Mon, 27 Jan 2020 17:34:00 GMT

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

Carlos Sierra Andrés commented on ARIES-1966:
---------------------------------------------

hey [~maggu2810] ,

I believe the expected usage of those OSGi properties on the extension service is for application
services to be able to require those extensions using {{osgi.jaxrs.extension.select}} so the
application would not be started without having these extensions ready.

I am afraid those properties will not affect the registration of the extension into the JAX-RS
application. In order to instruct the JAX-RS runtime that your reader or writer should only
be registered for a specific media type you can use {{@Provides}} / {{@Consumes}} annotation
on the extension implementations or via the {{isWritable/isReadable}} methods.

I hope this matches your expectations.

Carlos.

> JAX-RS MediaType annotation is not correctly evaluated
> ------------------------------------------------------
>
>                 Key: ARIES-1966
>                 URL: https://issues.apache.org/jira/browse/ARIES-1966
>             Project: Aries
>          Issue Type: Bug
>          Components: jax-rs-whiteboard
>    Affects Versions: jax-rs-whiteboard-1.0.5, jax-rs-whiteboard-1.0.6
>            Reporter: Markus Rathgeb
>            Assignee: Carlos Sierra Andrés
>            Priority: Major
>
> I realized that my _JaxrsExtension_ for _JaxrsMediaType_ _APPLICATION_JSON_ is not only
used for endpoints that produces JSON (marked by annotation) but also for endpoints that produces
plain text (marked by annotation)
>  
> For testing purposed I used a message body reader and writer implementation for the JSON
media type that is using GSON.
>  
> The annotations and class declaration looks like:
>  
> {code:java}
> @Component(scope = PROTOTYPE)
> @JaxrsApplicationSelect("(osgi.jaxrs.name=*)")
> @JaxrsExtension
> @JaxrsMediaType(APPLICATION_JSON)
> public class GsonMessageBodyReaderWriter<T> implements MessageBodyReader<T>,
MessageBodyWriter<T> { ... }{code}
>  
> I see that this class is used for media type JSON and PLAIN_TEXT.
>  
> So I created another message body reader for media type plain text and a higher service
ranking (just for testing).
>  
> {code:java}
> @Component(scope = PROTOTYPE)
> @ServiceRanking(100)
> @JaxrsApplicationSelect("(" + JaxrsWhiteboardConstants.JAX_RS_NAME + "=*)")
> @JaxrsExtension
> @JaxrsMediaType(MediaType.TEXT_PLAIN)
> public class PlainTextMediaTypeExtension<T> implements MessageBodyReader<T>,
MessageBodyWriter<T> { ... }{code}
>  
> If both components are available I would assume the PlainTextMediaTypeExtension is used
for the media type plain text and the GsonMessageBodyReaderWriter is used for media type json
(because of the JaxrsMediaType annotation.
>  
> But now PlainTextMediaTypeExtension is used for plain text AND JSON.
>  
> I would expect that the message body writer provided by 
> {code:java}
> @JaxrsExtension
> @JaxrsMediaType(MediaType.TEXT_PLAIN){code}
> is used for
> {code:java}
> @Produces(MediaType.TEXT_PLAIN){code}
> and the message body writer provided by
> {code:java}
> @JaxrsExtension
> @JaxrsMediaType(APPLICATION_JSON){code}
> is used for
> {code:java}
> @Produces(MediaType.APPLICATION_JSON){code}
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Mime
View raw message