Skip to content

Commit 64f3cf4

Browse files
committed
Fixed NPE
1 parent ac37b00 commit 64f3cf4

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

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

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.lang.reflect.Method;
1313
import java.util.Collections;
1414
import java.util.Map;
15+
import java.util.Objects;
1516
import java.util.Optional;
1617
import java.util.StringJoiner;
1718
import org.reactivestreams.Publisher;
@@ -52,11 +53,11 @@ public ServiceMethodInvoker(
5253
ServiceMessageDataDecoder dataDecoder,
5354
Authenticator authenticator,
5455
PrincipalMapper<Object> principalMapper) {
55-
this.method = method;
56-
this.service = service;
57-
this.methodInfo = methodInfo;
58-
this.errorMapper = errorMapper;
59-
this.dataDecoder = dataDecoder;
56+
this.method = Objects.requireNonNull(method, "method");
57+
this.service = Objects.requireNonNull(service, "service");
58+
this.methodInfo = Objects.requireNonNull(methodInfo, "methodInfo");
59+
this.errorMapper = Objects.requireNonNull(errorMapper, "errorMapper");
60+
this.dataDecoder = Objects.requireNonNull(dataDecoder, "dataDecoder");
6061
this.authenticator = authenticator;
6162
this.principalMapper = principalMapper;
6263
}
@@ -105,18 +106,18 @@ public Flux<ServiceMessage> invokeBidirectional(Publisher<ServiceMessage> publis
105106

106107
private Mono<?> deferWithContextOne(ServiceMessage message, Map<String, String> authData) {
107108
return Mono.deferWithContext(context -> Mono.from(invoke(toRequest(message))))
108-
.subscriberContext(context -> newPrincipalContext(authData));
109+
.subscriberContext(context -> newPrincipalContext(authData, context));
109110
}
110111

111112
private Flux<?> deferWithContextMany(ServiceMessage message, Map<String, String> authData) {
112113
return Flux.deferWithContext(context -> Flux.from(invoke(toRequest(message))))
113-
.subscriberContext(context -> newPrincipalContext(authData));
114+
.subscriberContext(context -> newPrincipalContext(authData, context));
114115
}
115116

116117
private Flux<?> deferWithContextBidirectional(
117118
Flux<ServiceMessage> messages, Map<String, String> authData) {
118119
return Flux.deferWithContext(context -> messages.map(this::toRequest).transform(this::invoke))
119-
.subscriberContext(context -> newPrincipalContext(authData));
120+
.subscriberContext(context -> newPrincipalContext(authData, context));
120121
}
121122

122123
private Publisher<?> invoke(Object request) {
@@ -152,11 +153,9 @@ private Mono<Map<String, String>> authenticate(ServiceMessage message) {
152153
if (!methodInfo.isAuth()) {
153154
return Mono.just(Collections.emptyMap());
154155
}
155-
156156
if (authenticator == null) {
157157
throw new UnauthorizedException("Authenticator not found");
158158
}
159-
160159
return authenticator.authenticate(message.headers()).onErrorMap(this::toUnauthorizedException);
161160
}
162161

@@ -202,7 +201,10 @@ private ServiceMessage toResponse(Object response, String dataFormat) {
202201
.build();
203202
}
204203

205-
private Context newPrincipalContext(Map<String, String> authData) {
204+
private Context newPrincipalContext(Map<String, String> authData, Context context) {
205+
if (principalMapper == null) {
206+
return context;
207+
}
206208
Object value = principalMapper.map(authData);
207209
return Context.of(value.getClass(), value);
208210
}

0 commit comments

Comments
 (0)