Uploaded image for project: 'CXF'
  1. CXF
  2. CXF-8249

SSE client refuses to accept valid stream

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 3.3.5, 3.2.12
    • Fix Version/s: 3.3.6, 3.2.13, 3.4.0
    • Component/s: JAX-RS
    • Labels:
      None
    • Estimated Complexity:
      Unknown

      Description

      The standard (https://www.w3.org/TR/eventsource/#parsing-an-event-stream) defines that in the stream event fields (data, event, id etc.) a space after the colon is optional, i.e. both options are valid:

      data:test
      data: test

      But SSE client does not accept stream events where format without a space after the colon (data:test).

      In the class org.apache.cxf.jaxrs.sse.client.InboundSseEventProcessor line parsing is performed as

      if (StringUtils.isEmpty(line) && builder != null) {
        ...
      } else if (line.startsWith("event: ")) {
        ...
      } else if (line.startsWith("id: ")) {
        ...
      } else if (line.startsWith(": ")) {
        ...
      } else if (line.startsWith("retry: ")) {
        ...
      } else if (line.startsWith("data: ")) {
        ...
      }

      Why?

       

      I use Spring with the SseEmitter class to generate an event stream, something like 

      SseEmitter emitter = new SseEmitter ();
      emitter.send ("test");

      This class generate event using format "data:test", and I can't read this events in a client application where the SSE client is used.

      If I change the line by adding a space, SSE client accept event....

      emitter.send (" test");  // adding a space to get "data: test"

       

      The SSE client in the client application: 

      try (SseEventSource source = SseEventSource.target(someurl).build()) {
         source.register(
            (inboundSseEvent) -> System.out.println(inboundSseEvent.readData()
         );
         source.open();
      } catch (Exception ex) {
      }

      Dependency in pom.xml 

      <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-rs-client</artifactId>
        <version>3.3.5</version>
      </dependency>
      <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-rs-sse</artifactId>
        <version>3.3.5</version>
      </dependency>

       

        Attachments

          Activity

            People

            • Assignee:
              reta Andriy Redko
              Reporter:
              ihorvlad Ihor Zahoruiko
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: