You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cxf.apache.org by GitBox <gi...@apache.org> on 2020/02/24 01:49:49 UTC

[GitHub] [cxf] reta opened a new pull request #643: CXF-8215: SSE breaks Pipeline Processing

reta opened a new pull request #643: CXF-8215: SSE breaks Pipeline Processing
URL: https://github.com/apache/cxf/pull/643
 
 
    The JAX-RS Specification 2.1 contains the chapter 9 for "Server-Sent Events", specifically section 9.5 "Pipeline Processing" states:
   
   > For compatibility purposes, implementations MUST initiate processing of an SSE response when either the first message is sent or when the resource method returns, whichever happens first. The initial SSE response, which may only include the HTTP headers, is processed using the standard JAX-RS pipeline as described in Appendix C. Each subsequent SSE event may include a different payload and thus require the use of a specific message body writer. Note that since this use case differs slightly from the normal JAX-RS pipeline, implementations SHOULD NOT call entity interceptors on each individual event (1).
   
   In case of SSE processing, the `JAXRSOutInterceptor` is not called and as such, the container response processing filters are also ignore.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [cxf] reta commented on a change in pull request #643: CXF-8215: SSE breaks Pipeline Processing

Posted by GitBox <gi...@apache.org>.
reta commented on a change in pull request #643: CXF-8215: SSE breaks Pipeline Processing
URL: https://github.com/apache/cxf/pull/643#discussion_r383840535
 
 

 ##########
 File path: rt/rs/sse/src/main/java/org/apache/cxf/jaxrs/sse/interceptor/SseInterceptor.java
 ##########
 @@ -0,0 +1,69 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.jaxrs.sse.interceptor;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.ws.rs.core.Response;
+
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.jaxrs.impl.ResponseImpl;
+import org.apache.cxf.jaxrs.model.OperationResourceInfo;
+import org.apache.cxf.jaxrs.provider.ServerProviderFactory;
+import org.apache.cxf.jaxrs.utils.JAXRSUtils;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+
+public class SseInterceptor extends AbstractPhaseInterceptor<Message> {
+    private static final Logger LOG = LogUtils.getL7dLogger(SseInterceptor.class);
+    
+    public SseInterceptor() {
+        super(Phase.POST_LOGICAL);
+    }
+    public SseInterceptor(String phase) {
+        super(phase);
+    }
+
+    public void handleMessage(Message message) {
+        if (!isRequestor(message) && message.get(SseInterceptor.class) == null) {
+            message.put(SseInterceptor.class, this);
 
 Review comment:
   Yes, it shouldn't be called twice, but it serves as a guard.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [cxf] maggu2810 commented on a change in pull request #643: CXF-8215: SSE breaks Pipeline Processing

Posted by GitBox <gi...@apache.org>.
maggu2810 commented on a change in pull request #643: CXF-8215: SSE breaks Pipeline Processing
URL: https://github.com/apache/cxf/pull/643#discussion_r383688353
 
 

 ##########
 File path: rt/rs/sse/src/main/java/org/apache/cxf/jaxrs/sse/interceptor/SseInterceptor.java
 ##########
 @@ -0,0 +1,69 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.jaxrs.sse.interceptor;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.ws.rs.core.Response;
+
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.jaxrs.impl.ResponseImpl;
+import org.apache.cxf.jaxrs.model.OperationResourceInfo;
+import org.apache.cxf.jaxrs.provider.ServerProviderFactory;
+import org.apache.cxf.jaxrs.utils.JAXRSUtils;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+
+public class SseInterceptor extends AbstractPhaseInterceptor<Message> {
+    private static final Logger LOG = LogUtils.getL7dLogger(SseInterceptor.class);
+    
+    public SseInterceptor() {
+        super(Phase.POST_LOGICAL);
+    }
+    public SseInterceptor(String phase) {
+        super(phase);
+    }
+
+    public void handleMessage(Message message) {
+        if (!isRequestor(message) && message.get(SseInterceptor.class) == null) {
+            message.put(SseInterceptor.class, this);
 
 Review comment:
   Is this `put` and the above check if `get` is equal to null responsible that it is not called twice?

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

[GitHub] [cxf] reta merged pull request #643: CXF-8215: SSE breaks Pipeline Processing

Posted by GitBox <gi...@apache.org>.
reta merged pull request #643: CXF-8215: SSE breaks Pipeline Processing
URL: https://github.com/apache/cxf/pull/643
 
 
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services