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);