Skip to content

Commit 6808004

Browse files
authored
Merge pull request quarkusio#36442 from geoand/sse-client-no-header
Use default content type when X-SSE header not set
2 parents 01240b9 + 1814717 commit 6808004

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed

independent-projects/resteasy-reactive/client/runtime/src/main/java/org/jboss/resteasy/reactive/client/impl/MultiInvoker.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,9 @@ public <R> Multi<R> method(String name, Entity<?> entity, GenericType<R> respons
125125
if (!emitter.isCancelled()) {
126126
if (response.getStatus() == 200
127127
&& MediaType.SERVER_SENT_EVENTS_TYPE.isCompatible(response.getMediaType())) {
128-
registerForSse(multiRequest, responseType, response, vertxResponse);
128+
registerForSse(multiRequest, responseType, response, vertxResponse,
129+
(String) restClientRequestContext.getProperties()
130+
.get(RestClientRequestContext.DEFAULT_CONTENT_TYPE_PROP));
129131
} else if (response.getStatus() == 200
130132
&& RestMediaType.APPLICATION_STREAM_JSON_TYPE.isCompatible(response.getMediaType())) {
131133
registerForJsonStream(multiRequest, restClientRequestContext, responseType, response,
@@ -152,12 +154,12 @@ private boolean isNewlineDelimited(ResponseImpl response) {
152154
private <R> void registerForSse(MultiRequest<? super R> multiRequest,
153155
GenericType<R> responseType,
154156
Response response,
155-
HttpClientResponse vertxResponse) {
157+
HttpClientResponse vertxResponse, String defaultContentType) {
156158
// honestly, isn't reconnect contradictory with completion?
157159
// FIXME: Reconnect settings?
158160
// For now we don't want multi to reconnect
159161
SseEventSourceImpl sseSource = new SseEventSourceImpl(invocationBuilder.getTarget(),
160-
invocationBuilder, Integer.MAX_VALUE, TimeUnit.SECONDS);
162+
invocationBuilder, Integer.MAX_VALUE, TimeUnit.SECONDS, defaultContentType);
161163

162164
multiRequest.onCancel(sseSource::close);
163165
sseSource.register(event -> {

independent-projects/resteasy-reactive/client/runtime/src/main/java/org/jboss/resteasy/reactive/client/impl/SseEventSourceImpl.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,19 @@ public class SseEventSourceImpl implements SseEventSource, Handler<Long> {
4242

4343
public SseEventSourceImpl(WebTargetImpl webTarget, Invocation.Builder invocationBuilder,
4444
long reconnectDelay, TimeUnit reconnectUnit) {
45+
this(webTarget, invocationBuilder, reconnectDelay, reconnectUnit, null);
46+
}
47+
48+
public SseEventSourceImpl(WebTargetImpl webTarget, Invocation.Builder invocationBuilder,
49+
long reconnectDelay, TimeUnit reconnectUnit, String defaultContentType) {
4550
// tests set a null endpoint
4651
Objects.requireNonNull(reconnectUnit);
4752
if (reconnectDelay <= 0)
4853
throw new IllegalArgumentException("Delay must be > 0: " + reconnectDelay);
4954
this.webTarget = webTarget;
5055
this.reconnectDelay = reconnectDelay;
5156
this.reconnectUnit = reconnectUnit;
52-
this.sseParser = new SseParser(this);
57+
this.sseParser = new SseParser(this, defaultContentType);
5358
this.invocationBuilder = invocationBuilder;
5459
}
5560

@@ -136,7 +141,9 @@ private void registerOnClient(HttpClientResponse vertxClientResponse) {
136141
vertxClientResponse.request().exceptionHandler(null);
137142
connection = vertxClientResponse.request().connection();
138143
String sseContentTypeHeader = vertxClientResponse.getHeader(CommonSseUtil.SSE_CONTENT_TYPE);
139-
sseParser.setSseContentTypeHeader(sseContentTypeHeader);
144+
if ((sseContentTypeHeader != null) && !sseContentTypeHeader.isEmpty()) {
145+
sseParser.setSseContentTypeHeader(sseContentTypeHeader);
146+
}
140147
// we don't add a closeHandler handler on the connection as it can race with this handler
141148
// and close before the emitter emits anything
142149
// see: https://github.com/quarkusio/quarkus/pull/16438

independent-projects/resteasy-reactive/client/runtime/src/main/java/org/jboss/resteasy/reactive/client/impl/SseParser.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ public class SseParser implements Handler<Buffer> {
5050
*/
5151
private String contentType;
5252
/**
53-
* The content type we're reading. Defaults to the X-Sse-Element-Type header
53+
* The content type we're reading. If the X-Sse-Element-Type header is not set, then it defaults to the declared @Produces
54+
* (if any)
5455
*/
5556
private String contentTypeHeader;
5657
/**
@@ -67,8 +68,9 @@ public class SseParser implements Handler<Buffer> {
6768
private long eventReconnectTime = SseEvent.RECONNECT_NOT_SET;
6869
private SseEventSourceImpl sseEventSource;
6970

70-
public SseParser(SseEventSourceImpl sseEventSource) {
71+
public SseParser(SseEventSourceImpl sseEventSource, String defaultContentType) {
7172
this.sseEventSource = sseEventSource;
73+
this.contentTypeHeader = defaultContentType;
7274
}
7375

7476
public void setSseContentTypeHeader(String sseContentTypeHeader) {

0 commit comments

Comments
 (0)