[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16709772#comment-16709772 ] Carlos Sierra commented on ARIES-1867: -- Happy to hear it is working for you :) > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Major > Attachments: CORSFilter.java, Server.java, TestService3.java, > make.out, make2.out > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16706915#comment-16706915 ] Tom Quarendon commented on ARIES-1867: -- In case you were worried ( :) ) my problem was the fact I had a configuration pid used in two places unexpectedly. One didn't have an @modified, which caused odd behaviour. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Major > Attachments: CORSFilter.java, Server.java, TestService3.java, > make.out, make2.out > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16703597#comment-16703597 ] Raymond Augé commented on ARIES-1867: - aries-user mail list would be the right place :) > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Major > Attachments: CORSFilter.java, Server.java, TestService3.java, > make.out, make2.out > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16703227#comment-16703227 ] Tom Quarendon commented on ARIES-1867: -- [~csierra], [~rotty3000], [~timothyjward] So, to explain. We have a custom authentication module that allows you to have a "local" user, or have a user authenticated by, say, LDAP or kerberos. It's configuration is controlled by ConfigAdmin. There is a REST API endpoint that allows you to change that configuration, so that we can implement a nice interface to it in the user interface. That REST API endpoint is exposed by a class that _purely_ relised on the ConfigAdmin service, nothing else. All it does is to get the configuration pid and change it. The service that implements the authentication has an @modified method on it. This authentication service is necessarily a required service of the the REST API resource that performs login. Despite the fact that we have an @modified method on the service, when we post the update to ConfigAdmin, the service is recycled. Curiously, it gets deactivated, reactivated again with the _original_ configuration, then the @modified method is called. Because it's reactivated the jaxrs whiteboard rewires things and we see a 404 from a subsequent request. So we're not deliberately changing the config of something that is a required service of the endpoint doing the configuration, if you see what I mean. So far I haven't had time to investigate why the service is being recycled in the way that it is. That's nothing to do with the jaxrs whiteboard. Then I need to do some experiments to establish what causes a rewiring of the jaxrs whiteboard. I suspect I'll then have to change some (all?) of the required service references in any REST API endpoints to "optional/dynamic" ones, and return a "service unavailable" if they aren't there. That way, hopefully, the actual REST API endpoints won't change, and, hopefully, jaxrs whiteboard won't decide that it needs to rewire and take everything offline. As I say, I need to do more experimentation, but haven't had time yet. When I do, this isn't the appropriate forum. What's a better one? What's the best forum for aries jaxrs whiteboard discussions? [u...@aries.apache.org|http://mail-archives.apache.org/mod_mbox/aries-user/]? > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Major > Attachments: CORSFilter.java, Server.java, TestService3.java, > make.out, make2.out > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16702024#comment-16702024 ] Timothy Ward commented on ARIES-1867: - {quote}That makes me nervous because we generally assume that changes in configuration are not part of the business logic of an application. Configuration is the deployers domain, not application domain. [~timothyjward] thoughts on this? {quote} I agree that this sounds like a bad idea - reconfiguring resources (and as a result unregistering/re-registering the resources) as part of a request made to those resources could have negative side effects (e.g. wiping the user session, re-injecting resource context properties, closing asynchronous responses before the response is made). > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Major > Attachments: CORSFilter.java, Server.java, TestService3.java, > make.out, make2.out > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16701022#comment-16701022 ] Raymond Augé commented on ARIES-1867: - [~tomq42] I have to say that I'm worried by your description that at runtime you make a request which triggers a change in configuration with the intention of affecting some other closely related request. That makes me nervous because we generally assume that changes in configuration are not part of the business logic of an application. Configuration is the deployers domain, not application domain. [~timothyjward] thoughts on this? > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Major > Attachments: CORSFilter.java, Server.java, TestService3.java, > make.out, make2.out > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16701004#comment-16701004 ] Carlos Sierra commented on ARIES-1867: -- I forgot to mention that, during the time of rewiring, it is likely that the underlying servlet will return 404. Carlos. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Major > Attachments: CORSFilter.java, Server.java, TestService3.java, > make.out, make2.out > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16700998#comment-16700998 ] Carlos Sierra commented on ARIES-1867: -- [~tomq42] {code:java} Can you explain to me the circumstances under which the JAX-RS whiteboard reconfigures?{code} it _rewires_ the application everytime a change is detected in a resource or an extension affecting an application. If the properties are modified and those properties affect the whiteboard it also _rewires_ the application. This is needed because JAX-RS has not dynamic update of applications. In the case of extensions, the whiteboard will request a new instance to the registry everytime an application is boostrapped. If the extension is not _PROTOTYPE_ scoped, the same instance will be used. Carlos. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Major > Attachments: CORSFilter.java, Server.java, TestService3.java, > make.out, make2.out > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16700756#comment-16700756 ] Tom Quarendon commented on ARIES-1867: -- [~csierra] I'll have to re-check the symptoms re SSE. What I was seeing was that the browser (in the devtools window) was complaining that then the event was received it didn't have the relevant CORS headers. I'll have to create a plain CXF example and raise it with them I think. Manually putting the relevant CORS headers into the response from within the resource method (via @Context HttpServletResponse) solved the issue for me. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Major > Attachments: CORSFilter.java, Server.java, TestService3.java, > make.out, make2.out > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16700754#comment-16700754 ] Tom Quarendon commented on ARIES-1867: -- [~csierra] Can you explain to me the circumstances under which the JAX-RS whiteboard reconfigures? I'm afraid I can't follow the code, it relies on a bunch of other Aries things that at the moment I can't delve into. Does it republish whenever it detects ANY service being deactivated or activated, regardless of whether the service is a resource of extension? (I've been printing out the list of classes in CxfJaxrsServiceRegistrator.rewire, and apparently seeing no changes sometimes). What happens to any requests that are received during the same time window as that republish operation occurs? Is there a window where the "old" endpoint is shutdown before the new one is created and wired in when requests that are received would return a 404? I'm trying to find an explanation for a 404 response I'm seeing when one of my endpoints briefly seems to go missing. When I print out the list of resources in that "rewire" method the resource class always seems to be there, so I'm trying to understand where it's going. Separately I'm trying to understand why some of my services are being deactivated and reactivated when their config changes, _despite_ having an @Modified method, which I think is contributing to the bouncing of the endpoints. Thanks. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Major > Attachments: CORSFilter.java, Server.java, TestService3.java, > make.out, make2.out > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16700736#comment-16700736 ] Carlos Sierra commented on ARIES-1867: -- Hi [~tomq42], {noformat} So the SSE example seems to be the special case, and I can (and have) worked round that as our use of that is limited and I've just manually added the CORS headers where necessary.{noformat} I have checked and it looks like CXF _suspends_ the response processing in the /_subscribe_ method and defers the headers until the first event is sent. I did not find anywhere saying this is not a proper behavior or that this does not work with CORS. In any case this would be a bug for CXF. If we find further evidence that this is a bug in either the whiteboard or CXF we can reopen this. Thx. Carlos. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Major > Attachments: CORSFilter.java, Server.java, TestService3.java, > make.out, make2.out > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16700473#comment-16700473 ] Carlos Sierra commented on ARIES-1867: -- indeed... this was not working on Windows. My bad Opening a new ticket and fixing. Thanks for reporting. Carlos. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Major > Attachments: CORSFilter.java, Server.java, TestService3.java, > make.out, make2.out > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16700186#comment-16700186 ] Tom Quarendon commented on ARIES-1867: -- If I manually run the jax-rs.itests directory, I get [^make2.out] > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Major > Attachments: CORSFilter.java, Server.java, TestService3.java, > make.out, make2.out > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16700185#comment-16700185 ] Tom Quarendon commented on ARIES-1867: -- I'm running Windows 10. If I just run "mvn clean install" from the root of the repository I get [^make.out] Those errors I can reproduce within eclipse, the test just seems a plain junit test. The "testResourceWithSubresource" failure, if I print out the "wrappers" list before the assert, I get: [\{"method":"GET", "consumingMimeType":null, "producingMimeType":["application/xml"], "nameBindings":null, "path":"/"}, \{"method":"POST", "consumingMimeType":["application/xml"], "producingMimeType":["text/plain","application/json"], "nameBindings":null, "path":"resourc...ce\\{path}"}, \{"method":"GET", "consumingMimeType":["application/json"], "producingMimeType":["application/json"], "nameBindings":null, "path":"resourc...ce\\{path}"}, \{"method":"POST", "consumingMimeType":["application/xml"], "producingMimeType":["text/plain","application/json"], "nameBindings":null, "path":"resourc...resource\\"}, \{"method":"GET", "consumingMimeType":["application/json"], "producingMimeType":["application/json"], "nameBindings":null, "path":"resourc...resource\\"}] The path values seem wrong, presumably because I'm on Windows? Printing just those values I get: \\resource\subresource\\{path} \\resource\subresource\\{path} \\resource\subresource\ \\resource\subresource\ In testPlainResourceSeveralOperationsWithDifferentPath, it seems the same, I get: [\{"method":"GET", "consumingMimeType":null, "producingMimeType":null, "nameBindings":null, "path":"/"}, \{"method":"POST", "consumingMimeType":null, "producingMimeType":null, "nameBindings":null, "path":"common\\different\\"}] / \\common\different\ for testPlainResourceSeveralOperationsWIthCommonPath I get: [\{"method":"GET", "consumingMimeType":null, "producingMimeType":null, "nameBindings":null, "path":"/"}, \{"method":"POST", "consumingMimeType":null, "producingMimeType":null, "nameBindings":null, "path":"/"}] > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Major > Attachments: CORSFilter.java, Server.java, TestService3.java, make.out > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16700165#comment-16700165 ] Carlos Sierra commented on ARIES-1867: -- hey [~tomq42], no need to apologise :), software is difficult. Your feedback has been very useful. Regarding the test failures, they always pass for me. Could you share what errors are you getting and your environment so I can try to reproduce? Bests. Carlos. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Major > Attachments: CORSFilter.java, Server.java, TestService3.java > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16699440#comment-16699440 ] Tom Quarendon commented on ARIES-1867: -- [~rotty3000] Yes, I just @Ignored things that didn't work. [~csierra] I must apologise. There's no general problem with the ContainerResponseFilter and void methods. I jumped to conclusions there. My problem is a bit more subtle. I am actually getting 404 from the endpoint, which is being reported as a CORS failure by the browser. The issue is that we have a case where two PUTs are made by our user interface, one after another. They both change some configuration. The first has the effect of modifying the configuration of a component that is then a required reference of the component providing the second endpoint. So the first request is made, and it has the effect of recycling the component providing the second endpoint, hence when the second request comes in it isn't there, hence 404. So our bad for the way we've coded things (no @Modified method, perhaps not using optional references etc to ensure that the jaxrs resource classes don't recycle). The reason we didn't see it before is that we'd coded a "recycle delay" into our jaxrs whiteboard. So to avoid churn, and poor performance, on startup, we had a delay such that it would only reconfigure the jaxrs servlet if there were no component activations/deactivations for, say, 150ms. Since on startup you get a storm of resource classes activating, it seemed unnecessary to completely reconfigure the jaxrs servlet with each one, and it was leading to a poor startup. Having added some System.out.printlns to the Aries jax-rs whiteboard code, it looks like you reconfigure with each component activation/deactivation, but it doesn't seem to cause performance problems. I'll have to do some code review to look for cases where there might be issues caused by this, but I don't consider this a bug in the jaxrs whiteboard, just a behaviour to understand. So the SSE example seems to be the special case, and I can (and have) worked round that as our use of that is limited and I've just manually added the CORS headers where necessary. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Blocker > Attachments: CORSFilter.java, Server.java, TestService3.java > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16699314#comment-16699314 ] Raymond Augé commented on ARIES-1867: - [~tomq42] I have also experienced a race condition on that one test from time to time. We should fix it. Otherwise, tests should all be passing. If that's not the specific test you care about you may just want to @Ignore it for the time being. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Blocker > Attachments: CORSFilter.java, Server.java, TestService3.java > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16699281#comment-16699281 ] Tom Quarendon commented on ARIES-1867: -- [~csierra] I've been experimenting with your testVoidResourceWithFilter test. Tomorrow I'll try and work out what's different for my case, or indeed whether I can reproduce the scenario I was seeing any more. I definitely had a simple @GET method that had a void return and wasn't having the CORS filter called. I'll try and translate that into a test case, now I have your framework test and can understand what it actually does. BTW, would I expect all the other tests to run cleanly? I can't run "mvn clean install" cleanly from the root directory, I get test case failures in the ClassIntrospectorTest (testResourceWithSubresource and testPlainResourceSeveralOperationsWithCommonPath). I also get a test case failure in one of the integration tests (TEST testApplicationEndpointExtensionRuntimeDTO(test.JaxrsTest) <<< ERROR: expected: but was:). Thanks. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Blocker > Attachments: CORSFilter.java, Server.java, TestService3.java > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16699249#comment-16699249 ] Carlos Sierra commented on ARIES-1867: -- Hi again [~tomq42], I have pushed a couple of tests to the whiteboard test suite showing the behaviour of the whiteboard w.r.t resources returning {{void}} results and {{ContainerResponseFilter}}. It seems that, in general, the whiteboard is properly registering the filters for the resources that return {{void}} but, as you found out, these filters are not invoked in the case of the SSE {{subscribe}} methods. Could you please verify these assumptions are correct? My current assumption is that CXF is not handling these properly. I will try and verify that for the 3.2.5 version, which is the one that the whiteboard is currently using. Thx for your report. Bests. Carlos. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Blocker > Attachments: CORSFilter.java, Server.java, TestService3.java > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16699184#comment-16699184 ] ASF subversion and git services commented on ARIES-1867: Commit 215e3821377ddfa22cc5682df47b1d334dd117e0 in aries-jax-rs-whiteboard's branch refs/heads/master from [~csierra] [ https://gitbox.apache.org/repos/asf?p=aries-jax-rs-whiteboard.git;h=215e382 ] [ARIES-1867] Add tests showing filter behaviour regarding void returning methods. This tests show there might be a bug when dealing with SSE subscribe methods because the ContainerResponseFilter is not invoked. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Blocker > Attachments: CORSFilter.java, Server.java, TestService3.java > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16699136#comment-16699136 ] Carlos Sierra commented on ARIES-1867: -- hey [~tomq42], in a short time I will push my test to upstream. It shows that, as well as CXF, the whiteboard is *also* invoking the filter for a void returning resource. On the other hand it also shows that, either the whiteboard or CXF, is not invoking the filter for the {{subscribe}} method. I would say the problem is on CXF code because, as you said, most of that logic resides on CXF. Maybe we can elaborate a bit more on top of the tests to find the discrepancies we are seeing. Carlos. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Blocker > Attachments: CORSFilter.java, Server.java, TestService3.java > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16699121#comment-16699121 ] Tom Quarendon commented on ARIES-1867: -- [~csierra], Although I didn't create an SSE example in cxf, I did create a simpler example not involving SSE where CXF was correctly invoking the filter. With the same kind of example within the aries jaxrs whiteboard, the filter was not invoked. I've been looking around the jaxrs whiteboard code, but haven't been able to understand any of it yet. I'm surprised that it's involved in any of this kind of logic, I would have expected the binding of URIs to resource methods and filters to be purely within the CXF code. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Blocker > Attachments: CORSFilter.java, Server.java, TestService3.java > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16699094#comment-16699094 ] Carlos Sierra commented on ARIES-1867: -- hey [~tomq42], I have created a test (not in upstream yet) that shows that the whiteboard is properly registering a filter for a resource method returning void. I have also confirmed that the ContainerRequestFilter is, indeed, not invoked for the usual {{subscribe}} method in the SSE resources. I believe it is CXF 3.2.5 which is causing this but I need to confirm on CXF codebase. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Blocker > Attachments: CORSFilter.java, Server.java, TestService3.java > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16698713#comment-16698713 ] Carlos Sierra commented on ARIES-1867: -- Thx... I have removed the link > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Affects Versions: jax-rs-whiteboard-1.0.2 >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Blocker > Attachments: CORSFilter.java, Server.java, TestService3.java > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16698709#comment-16698709 ] Tom Quarendon commented on ARIES-1867: -- I'm already using the snapshot. Without it I would get a NPE whenever I called resource methods that returned null. The snapshot fixed that issue, but this issue remains. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Blocker > Attachments: CORSFilter.java, Server.java, TestService3.java > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16698648#comment-16698648 ] Carlos Sierra commented on ARIES-1867: -- Hi Tom, thank you very much for your report. I believe this issue is related to ARIES-1852. Could you please verify if the latest snapshot that includes a fix works for you? Thx. Carlos. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Reporter: Tom Quarendon >Assignee: Carlos Sierra >Priority: Blocker > Attachments: CORSFilter.java, Server.java, TestService3.java > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16698620#comment-16698620 ] Tom Quarendon commented on ARIES-1867: -- This is a block issue for us. I can't proceed i adopting jaxrs-whiteboard without a fix for this. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Reporter: Tom Quarendon >Priority: Blocker > Attachments: CORSFilter.java, Server.java, TestService3.java > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16698619#comment-16698619 ] Tom Quarendon commented on ARIES-1867: -- Attached are my three source files (Server.java, TestService3.java and CORSFilter.java) for my plain cxf test. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Reporter: Tom Quarendon >Priority: Major > Attachments: CORSFilter.java, Server.java, TestService3.java > > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16698615#comment-16698615 ] Tom Quarendon commented on ARIES-1867: -- This appears to be a bug in the aries jaxrs whiteboard. I have created a plain CXF example where a ContainerResponseFilter is matched to a resource method returning void. Not knowing CXF I can't make any sense out of the jaxrs whiteboard code, so I've no idea where this kind of logic might reside. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Reporter: Tom Quarendon >Priority: Major > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ARIES-1867) ContainerResponseFilter not fired for SSE endpoint
[ https://issues.apache.org/jira/browse/ARIES-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16698603#comment-16698603 ] Tom Quarendon commented on ARIES-1867: -- I have other cases where the CORS filter isn't being bound. It appears to be that if the resource method has a void return type that the CORS filter (ContainerResponseFilter) isn't processed in the chain, so the response doesn't include the required CORS headers. I'll create a plain CXF example and see if that also has the same behaviour. > ContainerResponseFilter not fired for SSE endpoint > -- > > Key: ARIES-1867 > URL: https://issues.apache.org/jira/browse/ARIES-1867 > Project: Aries > Issue Type: Bug > Components: jax-rs-whiteboard >Reporter: Tom Quarendon >Priority: Major > > I have a resource class such as the following: > {code:java} > @Path("events") > @JaxrsResource > public class EventsResource { > private Sse sse; > private SseBroadcaster eventBroadcaster; > @Context > public void setSse(Sse sse) { > this.sse = sse; > this.eventBroadcaster = sse.newBroadcaster(); > } > @GET > @Produces(MediaType.SERVER_SENT_EVENTS) > public void suscribeToEvents(@Context SseEventSink eventSink) { > eventBroadcaster.register(eventSink); > } > } > {code} > > > In addition, I have a CORS filter: > > {code:java} > @Component(immediate=true) > @Provider > @JaxrsExtension > public class CORSFilter implements ContainerResponseFilter { > @Override > public void filter(ContainerRequestContext requestContext, > ContainerResponseContext responseContext) throws IOException { > System.out.println("CORSFilter for > "+requestContext.getUriInfo().getPath()); > MultivaluedMap headers = responseContext.getHeaders(); > headers.add("Access-Control-Allow-Origin", > requestContext.getHeaderString("Origin")); > ... > {code} > > The CORS filter gets fired on all requests as I expect, _except_ for ones to > the EventResource.subscribeToEvents method. Hence browsers complain when > receiving SSE events. > This used to work fine with jersey as the JAXRS implementation. CORS filter > got called for the EventsResource.subscribeToEvents call. > I've no idea whether this is a jaxrs-whiteboard level issue, or a CXF level > issue. I will try and come up with a plain CXF test of the same thing for > comparison. > -- This message was sent by Atlassian JIRA (v7.6.3#76005)