You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@aries.apache.org by "Carlos Sierra Andrés (Jira)" <ji...@apache.org> on 2020/01/27 15:55:00 UTC
[jira] [Commented] (ARIES-1966) JAX-RS MediaType annotation is not
correctly evaluated
[ https://issues.apache.org/jira/browse/ARIES-1966?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17024443#comment-17024443 ]
Carlos Sierra Andrés commented on ARIES-1966:
---------------------------------------------
hey [~maggu2810] ,
thx for reporting this.
If I remember correctly {{@JaxrsMediaType}} is a OSGi service property and is only understood by the OSGi layer. You can also annotate the {{MessageBodyReader}} and {{MessageBodyWriter}} with the {{@Produces(MediaType.TEXT_PLAIN)}} and/or {{@Produces(MediaType.APPLICATION_JSON)}} in order to instruct the JAX-RS layer on when apply each of the readers/writers.
You should also be able to govern this behavior by implementing {{isReadable}} or {{isWriteable}} on the reader/writer classes.
Would this match your expectation?
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
> 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)