[jboss-jira] [JBoss JIRA] (WFLY-10319) NameBinding annotations on resources are ignored in subresources
Marek Kopecký (Jira)
issues at jboss.org
Thu Jan 31 03:00:03 EST 2019
[ https://issues.jboss.org/browse/WFLY-10319?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13689535#comment-13689535 ]
Marek Kopecký commented on WFLY-10319:
--------------------------------------
I'm looking to the spec:
Chapter 3.3 - Resource Methods:
{quote}
Resource methods are methods of a resource class annotated with a request method designator.
...
A request method designator is a runtime annotation that is annotated with the @HttpMethod annotation. JAX-RS defines a set of request method designators for the common HTTP methods: @GET , @POST , @PUT , @DELETE , @PATCH , @HEAD and @OPTIONS .
{quote}
Chapter 6.5.2 - Name Binding:
{quote}
Binding annotations that decorate resource classes apply to all resource methods defined in them.
{quote}
And I'm looking to the example in the description of this jira. In that example, getSubResource method is not a Resource Method (based on previous definition, because this method doesn't have request method designator), so it should not be handled by SomeFilter.
The same behaviour has Payara5 with Jersey (reference implementation of jax-rs).
[~ron_sigal], [~asoldano]: This said, I suggest to close this jira as rejected.
> NameBinding annotations on resources are ignored in subresources
> ----------------------------------------------------------------
>
> Key: WFLY-10319
> URL: https://issues.jboss.org/browse/WFLY-10319
> Project: WildFly
> Issue Type: Bug
> Components: REST
> Affects Versions: 12.0.0.Final
> Reporter: Javier Estevez Sanchez
> Assignee: Alessio Soldano
> Priority: Major
>
> The following JAX-RS resource exposes two resources via a GET operation: /demo and /demo/subresource. The first one via a sub-resource method, the latter via a sub-resource locator. Additionally, a response filter is binded to the JAX-RS resource class to modify the response. From the JAX-RS 2.0 spec, §6.5.2 Name Binding:
> {quote}
> Binding annotations that decorate resource classes apply to all resource methods defined in them.
> {quote}
> However, the binding annotation is not applying to the sub-resource locator method. This happens when the name binding annotation is on the resource class or on the sub-resource locator method. Annotating the sub-resource class or the method within works as expected, though.
> Below is the code needed to reproduce this issue:
> {code:java|title=The resource and subresource}
> @DemoNameBinding
> @Produces(MediaType.APPLICATION_JSON)
> @Path("/demo")
> public class DemoResource {
> @GET
> public String getDemoValue() {
> return "A value";
> }
> @Path("/subresource")
> public DemoSubResource getSubResource() {
> return new DemoSubResource();
> }
> public class DemoSubResource {
> @GET
> public String getDemoValue() {
> return "A value";
> }
> }
> }
> {code}
> {code:java|title=The filter}
> @Provider
> @DemoNameBinding
> public class SomeFilter implements ContainerResponseFilter {
> @Override
> public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
> responseContext.setEntity("A filtered value");
> }
> }
> {code}
> {code:java|title=The binding}
> @NameBinding
> @Target({ElementType.TYPE, ElementType.METHOD})
> @Retention(RetentionPolicy.RUNTIME)
> public @interface DemoNameBinding {
> }
> {code}
--
This message was sent by Atlassian Jira
(v7.12.1#712002)
More information about the jboss-jira
mailing list