[
https://issues.jboss.org/browse/WFLY-10319?page=com.atlassian.jira.plugin...
]
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)