This is an automated email from the ASF dual-hosted git repository.

reta pushed a commit to branch 3.2.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/3.2.x-fixes by this push:
     new 7f2dcc7  CXF-8171 Support multiple data fields in SSE client (#608)
7f2dcc7 is described below

commit 7f2dcc7265090baf3b9acdcd6598ffdaf246a6a9
Author: Alexander Onnikov <[email protected]>
AuthorDate: Wed Dec 4 11:19:14 2019 +0700

    CXF-8171 Support multiple data fields in SSE client (#608)
---
 .../cxf/jaxrs/sse/client/InboundSseEventImpl.java  |  4 +--
 .../jaxrs/sse/client/InboundSseEventProcessor.java |  2 +-
 .../jaxrs/sse/client/SseEventSourceImplTest.java   | 31 +++++++++++++++++++++-
 3 files changed, 33 insertions(+), 4 deletions(-)

diff --git 
a/rt/rs/sse/src/main/java/org/apache/cxf/jaxrs/sse/client/InboundSseEventImpl.java
 
b/rt/rs/sse/src/main/java/org/apache/cxf/jaxrs/sse/client/InboundSseEventImpl.java
index a13b591..efd1823 100644
--- 
a/rt/rs/sse/src/main/java/org/apache/cxf/jaxrs/sse/client/InboundSseEventImpl.java
+++ 
b/rt/rs/sse/src/main/java/org/apache/cxf/jaxrs/sse/client/InboundSseEventImpl.java
@@ -84,8 +84,8 @@ public final class InboundSseEventImpl implements 
InboundSseEvent {
             return this;
         }
         
-        Builder data(String d) {
-            this.data = d;
+        Builder appendData(String d) {
+            this.data = this.data == null ? d : this.data + '\n' + d;
             return this;
         }
 
diff --git 
a/rt/rs/sse/src/main/java/org/apache/cxf/jaxrs/sse/client/InboundSseEventProcessor.java
 
b/rt/rs/sse/src/main/java/org/apache/cxf/jaxrs/sse/client/InboundSseEventProcessor.java
index c5a2b0e..2412140 100644
--- 
a/rt/rs/sse/src/main/java/org/apache/cxf/jaxrs/sse/client/InboundSseEventProcessor.java
+++ 
b/rt/rs/sse/src/main/java/org/apache/cxf/jaxrs/sse/client/InboundSseEventProcessor.java
@@ -102,7 +102,7 @@ public class InboundSseEventProcessor {
                         } else if (line.startsWith(RETRY)) {
                             builder = 
getOrCreate(builder).reconnectDelay(line.substring(RETRY.length()));
                         } else if (line.startsWith(DATA)) {
-                            builder = 
getOrCreate(builder).data(line.substring(DATA.length()));
+                            builder = 
getOrCreate(builder).appendData(line.substring(DATA.length()));
                         }
                     }
                     line = reader.readLine();
diff --git 
a/rt/rs/sse/src/test/java/org/apache/cxf/jaxrs/sse/client/SseEventSourceImplTest.java
 
b/rt/rs/sse/src/test/java/org/apache/cxf/jaxrs/sse/client/SseEventSourceImplTest.java
index a06c650..70d5b46 100644
--- 
a/rt/rs/sse/src/test/java/org/apache/cxf/jaxrs/sse/client/SseEventSourceImplTest.java
+++ 
b/rt/rs/sse/src/test/java/org/apache/cxf/jaxrs/sse/client/SseEventSourceImplTest.java
@@ -76,7 +76,12 @@ public class SseEventSourceImplTest extends Assert {
     private static final String EVENT_JUST_DATA = "\n"
         + "data: just test data\n"
         + "\n";
-    
+
+    private static final String EVENT_MULTILINE_DATA = "\n"
+            + "data: just test data\n"
+            + "data: in multiple lines\n"
+            + "\n";
+
     private static final String EVENT_JUST_NAME = "\n"
         + "event: just name\n";
     
@@ -278,6 +283,30 @@ public class SseEventSourceImplTest extends Assert {
     }
     
     @Test
+    public void testNoReconnectAndMultilineDataEventIsReceived() throws 
InterruptedException, IOException {
+        try (InputStream is = new 
ByteArrayInputStream(EVENT_MULTILINE_DATA.getBytes(StandardCharsets.UTF_8))) {
+            when(response.getStatus()).thenReturn(200);
+            when(response.readEntity(InputStream.class)).thenReturn(is);
+            
+            final List<InboundSseEvent> events = new ArrayList<>();
+            try (SseEventSource eventSource = withNoReconnect()) {
+                eventSource.register(events::add);
+                eventSource.open();
+                
+                assertThat(eventSource.isOpen(), equalTo(true));
+                verify(response, times(1)).getStatus();
+                
+                // Allow the event processor to pull for events (150ms)
+                Thread.sleep(150);
+            }
+            
+            assertThat(events.size(), equalTo(1));
+            assertThat(events.get(0).getName(), nullValue());
+            assertThat(events.get(0).readData(), equalTo("just test data\nin 
multiple lines"));
+        }
+    }
+
+    @Test
     public void testNoReconnectAndJustEventNameIsReceived() throws 
InterruptedException, IOException {
         try (InputStream is = new 
ByteArrayInputStream(EVENT_JUST_NAME.getBytes(StandardCharsets.UTF_8))) {
             when(response.getStatus()).thenReturn(200);

Reply via email to