aries-dev mailing list archives

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

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

Markus Rathgeb commented on ARIES-1966:
---------------------------------------

I worked around the problem already by using only one component that handles all the different
message types.

I don't fully understand your comment: Is my understanding of the specification wrong?

Assume there are two services for message body reader + writer, the one is marked as an JAX-RS
extension for the media type plain text, the other is marked as an JAX-RS extension for the
media type JSON. The services are marked by annotation in the code base that are reflected
by OSGi service properties at runtime (at build time the XML files for the services are generated
by taken the annotations into account). My understanding of the JAX-RS Whiteboard specification
has been that the service / extension for media type plain text will be used to handle read
/ write of media type plain text and the service / extension for media type JSON will be used
to handle read / write of media type JSON.

Is this wrong?

What is the use case for this annotations / service properties if not this one?

> 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