Skip to content

Commit 835b985

Browse files
committed
Cleanup, more clean contract on dataFormat
1 parent 8b1756e commit 835b985

File tree

4 files changed

+31
-42
lines changed

4 files changed

+31
-42
lines changed

services-api/src/main/java/io/scalecube/services/ServiceCall.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public class ServiceCall {
4545
private Router router;
4646
private ServiceClientErrorMapper errorMapper = DefaultErrorMapper.INSTANCE;
4747
private Map<String, String> credentials = Collections.emptyMap();
48-
private String contentType;
48+
private String contentType = ServiceMessage.DEFAULT_DATA_FORMAT;
4949

5050
public ServiceCall() {}
5151

@@ -429,24 +429,21 @@ private Address addressLookup(ServiceMessage request) {
429429
private ServiceMessage toServiceMessage(MethodInfo methodInfo, Object request) {
430430
final ServiceMessage.Builder builder;
431431
final Object data;
432-
final String dataFormat;
433432

434433
if (request instanceof ServiceMessage) {
435434
ServiceMessage message = (ServiceMessage) request;
436435
builder = ServiceMessage.from(message);
437436
data = message.data();
438-
dataFormat = Optional.ofNullable(message.dataFormat()).orElse(contentType);
439437
} else {
440438
builder = ServiceMessage.builder();
441439
data = request;
442-
dataFormat = contentType;
443440
}
444441

445442
return builder
446443
.qualifier(methodInfo.serviceName(), methodInfo.methodName())
447444
.headers(credentials)
448445
.data(data)
449-
.dataFormat(dataFormat)
446+
.dataFormat(contentType)
450447
.build();
451448
}
452449

@@ -486,15 +483,15 @@ private Optional<Object> toStringOrEqualsOrHashCode(
486483
}
487484

488485
private Function<Flux<ServiceMessage>, Flux<Object>> asFlux(boolean isReturnTypeServiceMessage) {
489-
return flux -> isReturnTypeServiceMessage ? flux.cast(Object.class) : flux.map(msgToResp());
486+
return flux -> isReturnTypeServiceMessage ? flux.cast(Object.class) : flux.map(toResponse());
490487
}
491488

492489
private Function<Mono<ServiceMessage>, Mono<Object>> asMono(boolean isReturnTypeServiceMessage) {
493-
return mono -> isReturnTypeServiceMessage ? mono.cast(Object.class) : mono.map(msgToResp());
490+
return mono -> isReturnTypeServiceMessage ? mono.cast(Object.class) : mono.map(toResponse());
494491
}
495492

496-
private Function<ServiceMessage, Object> msgToResp() {
497-
return sm -> sm.hasData() ? sm.data() : UNEXPECTED_EMPTY_RESPONSE;
493+
private Function<ServiceMessage, Object> toResponse() {
494+
return message -> message.hasData() ? message.data() : UNEXPECTED_EMPTY_RESPONSE;
498495
}
499496

500497
private ServiceMessage throwIfError(ServiceMessage message) {

services-api/src/main/java/io/scalecube/services/api/ServiceMessage.java

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,20 @@
99

1010
public final class ServiceMessage {
1111

12-
/** Default message data content type. */
13-
static final String DEFAULT_DATA_FORMAT = "application/json";
12+
/** Default data format. */
13+
public static final String DEFAULT_DATA_FORMAT = "application/json";
1414

15-
/**
16-
* This header is supposed to be used by application in case if same data type can be reused for
17-
* several messages so it will allow to qualify the specific message type.
18-
*/
19-
static final String HEADER_QUALIFIER = "q";
15+
/** Qualifier header. */
16+
public static final String HEADER_QUALIFIER = "q";
2017

2118
/**
2219
* This is a system header which used by transport for serialization and deserialization purpose.
2320
* It is not supposed to be used by application directly and it is subject to changes in future
2421
* releases.
2522
*/
26-
static final String HEADER_DATA_TYPE = "_type";
23+
public static final String HEADER_DATA_TYPE = "_type";
2724

28-
/**
29-
* Data format header. Json, Protostuff and etc. Note that default data format is defined at
30-
* {@link #DEFAULT_DATA_FORMAT}.
31-
*/
25+
/** Data format header. */
3226
public static final String HEADER_DATA_FORMAT = "_data_format";
3327

3428
private Map<String, String> headers = new HashMap<>(1);

services-api/src/main/java/io/scalecube/services/methods/ServiceMethodInvoker.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public ServiceMethodInvoker(
7070
public Mono<ServiceMessage> invokeOne(ServiceMessage message) {
7171
return Mono.deferWithContext(context -> authenticate(message, context))
7272
.flatMap(authData -> deferWithContextOne(message, authData))
73-
.map(response -> toResponse(response, message.qualifier(), message.dataFormatOrDefault()))
73+
.map(response -> toResponse(response, message))
7474
.onErrorResume(throwable -> Mono.just(errorMapper.toMessage(throwable)));
7575
}
7676

@@ -83,7 +83,7 @@ public Mono<ServiceMessage> invokeOne(ServiceMessage message) {
8383
public Flux<ServiceMessage> invokeMany(ServiceMessage message) {
8484
return Mono.deferWithContext(context -> authenticate(message, context))
8585
.flatMapMany(authData -> deferWithContextMany(message, authData))
86-
.map(response -> toResponse(response, message.qualifier(), message.dataFormatOrDefault()))
86+
.map(response -> toResponse(response, message))
8787
.onErrorResume(throwable -> Flux.just(errorMapper.toMessage(throwable)));
8888
}
8989

@@ -99,12 +99,7 @@ public Flux<ServiceMessage> invokeBidirectional(Publisher<ServiceMessage> publis
9999
(first, messages) ->
100100
Mono.deferWithContext(context -> authenticate(first.get(), context))
101101
.flatMapMany(authData -> deferWithContextBidirectional(messages, authData))
102-
.map(
103-
response ->
104-
toResponse(
105-
response,
106-
first.get().qualifier(),
107-
first.get().dataFormatOrDefault())))
102+
.map(response -> toResponse(response, first.get())))
108103
.onErrorResume(throwable -> Flux.just(errorMapper.toMessage(throwable)));
109104
}
110105

@@ -192,7 +187,7 @@ private Object toRequest(ServiceMessage message) {
192187
return methodInfo.isRequestTypeServiceMessage() ? request : request.data();
193188
}
194189

195-
private ServiceMessage toResponse(Object response, String qualifier, String dataFormat) {
190+
private ServiceMessage toResponse(Object response, ServiceMessage request) {
196191
final ServiceMessage.Builder builder;
197192
final Object data;
198193

@@ -205,7 +200,11 @@ private ServiceMessage toResponse(Object response, String qualifier, String data
205200
data = response;
206201
}
207202

208-
return builder.qualifier(qualifier).data(data).dataFormat(dataFormat).build();
203+
return builder
204+
.qualifier(request.qualifier())
205+
.data(data)
206+
.dataFormat(request.dataFormatOrDefault())
207+
.build();
209208
}
210209

211210
private Context newPrincipalContext(Object authData, Context context) {

services/src/main/java/io/scalecube/services/Microservices.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.scalecube.services;
22

33
import io.scalecube.net.Address;
4+
import io.scalecube.services.api.ServiceMessage;
45
import io.scalecube.services.auth.Authenticator;
56
import io.scalecube.services.auth.PrincipalMapper;
67
import io.scalecube.services.discovery.api.ServiceDiscovery;
@@ -28,6 +29,7 @@
2829
import java.util.HashMap;
2930
import java.util.List;
3031
import java.util.Map;
32+
import java.util.Objects;
3133
import java.util.Optional;
3234
import java.util.StringJoiner;
3335
import java.util.UUID;
@@ -320,7 +322,7 @@ public static final class Builder {
320322
private ServiceMessageDataDecoder dataDecoder =
321323
Optional.ofNullable(ServiceMessageDataDecoder.INSTANCE)
322324
.orElse((message, dataType) -> message);
323-
private String contentType = "application/json";
325+
private String contentType = ServiceMessage.DEFAULT_DATA_FORMAT;
324326
private PrincipalMapper<Object, Object> principalMapper = authData -> authData;
325327

326328
public Mono<Microservices> start() {
@@ -377,11 +379,9 @@ public Builder methodRegistry(ServiceMethodRegistry methodRegistry) {
377379
* @param authenticator authenticator
378380
* @return this builder with applied parameter
379381
*/
380-
@SuppressWarnings("unchecked")
381382
@Deprecated
382383
public <T> Builder authenticator(Authenticator<? extends T> authenticator) {
383-
this.authenticator = (Authenticator<Object>) authenticator;
384-
return this;
384+
return defaultAuthenticator(authenticator);
385385
}
386386

387387
public Builder discovery(Function<ServiceEndpoint, ServiceDiscovery> factory) {
@@ -405,7 +405,7 @@ public Builder gateway(Function<GatewayOptions, Gateway> factory) {
405405
}
406406

407407
/**
408-
* Setter for {@code errorMapper}.
408+
* Setter for default {@code errorMapper}.
409409
*
410410
* @param errorMapper error mapper
411411
* @return this builder with applied parameter
@@ -416,7 +416,7 @@ public Builder defaultErrorMapper(ServiceProviderErrorMapper errorMapper) {
416416
}
417417

418418
/**
419-
* Setter for {@code dataDecoder}.
419+
* Setter for default {@code dataDecoder}.
420420
*
421421
* @param dataDecoder data decoder
422422
* @return this builder with applied parameter
@@ -429,23 +429,22 @@ public Builder defaultDataDecoder(ServiceMessageDataDecoder dataDecoder) {
429429
/**
430430
* Setter for default {@code contentType}. Deprecated. Use {@link #defaultContentType(String)}.
431431
*
432-
* @param contentType contentType
432+
* @param contentType contentType; not null
433433
* @return this builder with applied parameter
434434
*/
435435
@Deprecated
436436
public Builder contentType(String contentType) {
437-
this.contentType = contentType;
438-
return this;
437+
return defaultContentType(contentType);
439438
}
440439

441440
/**
442441
* Setter for default {@code contentType}.
443442
*
444-
* @param contentType contentType
443+
* @param contentType contentType; not null
445444
* @return this builder with applied parameter
446445
*/
447446
public Builder defaultContentType(String contentType) {
448-
this.contentType = contentType;
447+
this.contentType = Objects.requireNonNull(contentType, "default contentType");
449448
return this;
450449
}
451450

0 commit comments

Comments
 (0)