Fix overridden methods nullability
Issue: SPR-15869
This commit is contained in:
@@ -167,11 +167,13 @@ public abstract class AbstractMessageConverter implements SmartMessageConverter
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public final Object fromMessage(Message<?> message, Class<?> targetClass) {
|
||||
return fromMessage(message, targetClass, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public final Object fromMessage(Message<?> message, Class<?> targetClass, @Nullable Object conversionHint) {
|
||||
if (!canConvertFrom(message, targetClass)) {
|
||||
return null;
|
||||
@@ -184,11 +186,13 @@ public abstract class AbstractMessageConverter implements SmartMessageConverter
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public final Message<?> toMessage(Object payload, @Nullable MessageHeaders headers) {
|
||||
return toMessage(payload, headers, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public final Message<?> toMessage(Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint) {
|
||||
if (!canConvertTo(payload, headers)) {
|
||||
return null;
|
||||
|
||||
@@ -51,6 +51,7 @@ public class CompositeMessageConverter implements SmartMessageConverter {
|
||||
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Object fromMessage(Message<?> message, Class<?> targetClass) {
|
||||
for (MessageConverter converter : getConverters()) {
|
||||
Object result = converter.fromMessage(message, targetClass);
|
||||
@@ -62,6 +63,7 @@ public class CompositeMessageConverter implements SmartMessageConverter {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Object fromMessage(Message<?> message, Class<?> targetClass, @Nullable Object conversionHint) {
|
||||
for (MessageConverter converter : getConverters()) {
|
||||
Object result = (converter instanceof SmartMessageConverter ?
|
||||
@@ -75,6 +77,7 @@ public class CompositeMessageConverter implements SmartMessageConverter {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Message<?> toMessage(Object payload, @Nullable MessageHeaders headers) {
|
||||
for (MessageConverter converter : getConverters()) {
|
||||
Message<?> result = converter.toMessage(payload, headers);
|
||||
@@ -86,6 +89,7 @@ public class CompositeMessageConverter implements SmartMessageConverter {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Message<?> toMessage(Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint) {
|
||||
for (MessageConverter converter : getConverters()) {
|
||||
Message<?> result = (converter instanceof SmartMessageConverter ?
|
||||
|
||||
@@ -56,6 +56,7 @@ public class DefaultContentTypeResolver implements ContentTypeResolver {
|
||||
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public MimeType resolve(@Nullable MessageHeaders headers) {
|
||||
if (headers == null || headers.get(MessageHeaders.CONTENT_TYPE) == null) {
|
||||
return this.defaultMimeType;
|
||||
|
||||
@@ -19,6 +19,7 @@ package org.springframework.messaging.converter;
|
||||
import org.springframework.core.convert.ConversionException;
|
||||
import org.springframework.core.convert.ConversionService;
|
||||
import org.springframework.core.convert.support.DefaultConversionService;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.ClassUtils;
|
||||
@@ -57,6 +58,7 @@ public class GenericMessageConverter extends SimpleMessageConverter {
|
||||
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Object fromMessage(Message<?> message, Class<?> targetClass) {
|
||||
Object payload = message.getPayload();
|
||||
if (this.conversionService.canConvert(payload.getClass(), targetClass)) {
|
||||
|
||||
@@ -205,6 +205,7 @@ public class MappingJackson2MessageConverter extends AbstractMessageConverter {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected Object convertFromInternal(Message<?> message, Class<?> targetClass, @Nullable Object conversionHint) {
|
||||
JavaType javaType = this.objectMapper.constructType(targetClass);
|
||||
Object payload = message.getPayload();
|
||||
|
||||
@@ -36,6 +36,7 @@ import org.springframework.util.ClassUtils;
|
||||
public class SimpleMessageConverter implements MessageConverter {
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Object fromMessage(Message<?> message, Class<?> targetClass) {
|
||||
Object payload = message.getPayload();
|
||||
return (ClassUtils.isAssignableValue(targetClass, payload) ? payload : null);
|
||||
|
||||
@@ -61,6 +61,7 @@ public class StringMessageConverter extends AbstractMessageConverter {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected Object convertToInternal(
|
||||
Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint) {
|
||||
|
||||
|
||||
@@ -100,30 +100,35 @@ public abstract class AbstractDestinationResolvingMessagingTemplate<D> extends A
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Message<?> receive(String destinationName) {
|
||||
D destination = resolveDestination(destinationName);
|
||||
return super.receive(destination);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public <T> T receiveAndConvert(String destinationName, Class<T> targetClass) {
|
||||
D destination = resolveDestination(destinationName);
|
||||
return super.receiveAndConvert(destination, targetClass);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Message<?> sendAndReceive(String destinationName, Message<?> requestMessage) {
|
||||
D destination = resolveDestination(destinationName);
|
||||
return super.sendAndReceive(destination, requestMessage);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public <T> T convertSendAndReceive(String destinationName, Object request, Class<T> targetClass) {
|
||||
D destination = resolveDestination(destinationName);
|
||||
return super.convertSendAndReceive(destination, request, targetClass);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public <T> T convertSendAndReceive(String destinationName, Object request,
|
||||
@Nullable Map<String, Object> headers, Class<T> targetClass) {
|
||||
|
||||
@@ -132,6 +137,7 @@ public abstract class AbstractDestinationResolvingMessagingTemplate<D> extends A
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public <T> T convertSendAndReceive(String destinationName, Object request, Class<T> targetClass,
|
||||
@Nullable MessagePostProcessor postProcessor) {
|
||||
|
||||
@@ -140,6 +146,7 @@ public abstract class AbstractDestinationResolvingMessagingTemplate<D> extends A
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public <T> T convertSendAndReceive(String destinationName, Object request,
|
||||
@Nullable Map<String, Object> headers, Class<T> targetClass,
|
||||
@Nullable MessagePostProcessor postProcessor) {
|
||||
|
||||
@@ -34,11 +34,13 @@ public abstract class AbstractMessageReceivingTemplate<D> extends AbstractMessag
|
||||
implements MessageReceivingOperations<D> {
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Message<?> receive() {
|
||||
return doReceive(getRequiredDefaultDestination());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Message<?> receive(D destination) {
|
||||
return doReceive(destination);
|
||||
}
|
||||
@@ -54,11 +56,13 @@ public abstract class AbstractMessageReceivingTemplate<D> extends AbstractMessag
|
||||
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public <T> T receiveAndConvert(Class<T> targetClass) {
|
||||
return receiveAndConvert(getRequiredDefaultDestination(), targetClass);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public <T> T receiveAndConvert(D destination, Class<T> targetClass) {
|
||||
Message<?> message = doReceive(destination);
|
||||
if (message != null) {
|
||||
|
||||
@@ -34,11 +34,13 @@ public abstract class AbstractMessagingTemplate<D> extends AbstractMessageReceiv
|
||||
implements MessageRequestReplyOperations<D> {
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Message<?> sendAndReceive(Message<?> requestMessage) {
|
||||
return sendAndReceive(getRequiredDefaultDestination(), requestMessage);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Message<?> sendAndReceive(D destination, Message<?> requestMessage) {
|
||||
return doSendAndReceive(destination, requestMessage);
|
||||
}
|
||||
@@ -48,16 +50,19 @@ public abstract class AbstractMessagingTemplate<D> extends AbstractMessageReceiv
|
||||
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public <T> T convertSendAndReceive(Object request, Class<T> targetClass) {
|
||||
return convertSendAndReceive(getRequiredDefaultDestination(), request, targetClass);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public <T> T convertSendAndReceive(D destination, Object request, Class<T> targetClass) {
|
||||
return convertSendAndReceive(destination, request, null, targetClass);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public <T> T convertSendAndReceive(
|
||||
D destination, Object request, @Nullable Map<String, Object> headers, Class<T> targetClass) {
|
||||
|
||||
@@ -65,6 +70,7 @@ public abstract class AbstractMessagingTemplate<D> extends AbstractMessageReceiv
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public <T> T convertSendAndReceive(
|
||||
Object request, Class<T> targetClass, @Nullable MessagePostProcessor postProcessor) {
|
||||
|
||||
@@ -72,6 +78,7 @@ public abstract class AbstractMessagingTemplate<D> extends AbstractMessageReceiv
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public <T> T convertSendAndReceive(D destination, Object request, Class<T> targetClass,
|
||||
@Nullable MessagePostProcessor postProcessor) {
|
||||
|
||||
@@ -80,6 +87,7 @@ public abstract class AbstractMessagingTemplate<D> extends AbstractMessageReceiv
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
@Nullable
|
||||
public <T> T convertSendAndReceive(D destination, Object request, @Nullable Map<String, Object> headers,
|
||||
Class<T> targetClass, @Nullable MessagePostProcessor postProcessor) {
|
||||
|
||||
|
||||
@@ -189,6 +189,7 @@ public class GenericMessagingTemplate extends AbstractDestinationResolvingMessag
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected final Message<?> doReceive(MessageChannel channel) {
|
||||
return doReceive(channel, this.receiveTimeout);
|
||||
}
|
||||
@@ -209,6 +210,7 @@ public class GenericMessagingTemplate extends AbstractDestinationResolvingMessag
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected final Message<?> doSendAndReceive(MessageChannel channel, Message<?> requestMessage) {
|
||||
Assert.notNull(channel, "'channel' is required");
|
||||
Object originalReplyChannelHeader = requestMessage.getHeaders().getReplyChannel();
|
||||
@@ -294,11 +296,13 @@ public class GenericMessagingTemplate extends AbstractDestinationResolvingMessag
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Message<?> receive() {
|
||||
return this.receive(-1);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Message<?> receive(long timeout) {
|
||||
try {
|
||||
if (timeout < 0) {
|
||||
|
||||
@@ -145,6 +145,7 @@ public class DestinationPatternsMessageCondition extends AbstractMessageConditio
|
||||
* or {@code null} either if a destination can not be extracted or there is no match
|
||||
*/
|
||||
@Override
|
||||
@Nullable
|
||||
public DestinationPatternsMessageCondition getMatchingCondition(Message<?> message) {
|
||||
String destination = (String) message.getHeaders().get(LOOKUP_DESTINATION_HEADER);
|
||||
if (destination == null) {
|
||||
|
||||
@@ -84,6 +84,7 @@ public abstract class AbstractNamedValueMethodArgumentResolver implements Handle
|
||||
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Object resolveArgument(MethodParameter parameter, Message<?> message) throws Exception {
|
||||
NamedValueInfo namedValueInfo = getNamedValueInfo(parameter);
|
||||
MethodParameter nestedParameter = parameter.nestedIfOptional();
|
||||
|
||||
@@ -20,6 +20,7 @@ import java.util.Map;
|
||||
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.core.convert.ConversionService;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.messaging.MessageHandlingException;
|
||||
import org.springframework.messaging.handler.annotation.DestinationVariable;
|
||||
@@ -55,6 +56,7 @@ public class DestinationVariableMethodArgumentResolver extends AbstractNamedValu
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected Object resolveArgumentInternal(MethodParameter parameter, Message<?> message, String name)
|
||||
throws Exception {
|
||||
|
||||
|
||||
@@ -59,6 +59,7 @@ public class HeaderMethodArgumentResolver extends AbstractNamedValueMethodArgume
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected Object resolveArgumentInternal(MethodParameter parameter, Message<?> message, String name)
|
||||
throws Exception {
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ import java.lang.reflect.Method;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.messaging.MessageHeaders;
|
||||
import org.springframework.messaging.handler.annotation.Headers;
|
||||
@@ -50,6 +51,7 @@ public class HeadersMethodArgumentResolver implements HandlerMethodArgumentResol
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Object resolveArgument(MethodParameter parameter, Message<?> message) throws Exception {
|
||||
|
||||
Class<?> paramType = parameter.getParameterType();
|
||||
|
||||
@@ -105,6 +105,7 @@ public class PayloadArgumentResolver implements HandlerMethodArgumentResolver {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Object resolveArgument(MethodParameter parameter, Message<?> message) throws Exception {
|
||||
Payload ann = parameter.getParameterAnnotation(Payload.class);
|
||||
if (ann != null && StringUtils.hasText(ann.expression())) {
|
||||
|
||||
@@ -106,6 +106,7 @@ public class HandlerMethodArgumentResolverComposite implements HandlerMethodArgu
|
||||
* @exception IllegalStateException if no suitable {@link HandlerMethodArgumentResolver} is found.
|
||||
*/
|
||||
@Override
|
||||
@Nullable
|
||||
public Object resolveArgument(MethodParameter parameter, Message<?> message) throws Exception {
|
||||
|
||||
HandlerMethodArgumentResolver resolver = getArgumentResolver(parameter);
|
||||
|
||||
@@ -115,6 +115,7 @@ public class HandlerMethodReturnValueHandlerComposite implements AsyncHandlerMet
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public ListenableFuture<?> toListenableFuture(Object returnValue, MethodParameter returnType) {
|
||||
HandlerMethodReturnValueHandler handler = getReturnValueHandler(returnType);
|
||||
Assert.state(handler instanceof AsyncHandlerMethodReturnValueHandler,
|
||||
|
||||
@@ -65,6 +65,7 @@ public class SimpMessageMappingInfo implements MessageCondition<SimpMessageMappi
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public SimpMessageMappingInfo getMatchingCondition(Message<?> message) {
|
||||
SimpMessageTypeMessageCondition typeCond = this.messageTypeMessageCondition.getMatchingCondition(message);
|
||||
if (typeCond == null) {
|
||||
|
||||
@@ -19,6 +19,7 @@ package org.springframework.messaging.simp;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.messaging.handler.AbstractMessageCondition;
|
||||
import org.springframework.util.Assert;
|
||||
@@ -71,6 +72,7 @@ public class SimpMessageTypeMessageCondition extends AbstractMessageCondition<Si
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public SimpMessageTypeMessageCondition getMatchingCondition(Message<?> message) {
|
||||
Object actualMessageType = SimpMessageHeaderAccessor.getMessageType(message.getHeaders());
|
||||
if (actualMessageType == null) {
|
||||
|
||||
@@ -18,6 +18,7 @@ package org.springframework.messaging.simp;
|
||||
|
||||
import org.springframework.beans.factory.ObjectFactory;
|
||||
import org.springframework.beans.factory.config.Scope;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
@@ -51,6 +52,7 @@ public class SimpSessionScope implements Scope {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Object remove(String name) {
|
||||
SimpAttributes simpAttributes = SimpAttributesContextHolder.currentAttributes();
|
||||
synchronized (simpAttributes.getSessionMutex()) {
|
||||
@@ -71,6 +73,7 @@ public class SimpSessionScope implements Scope {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Object resolveContextualObject(String key) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -285,6 +285,7 @@ public class SendToMethodReturnValueHandler implements HandlerMethodReturnValueH
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public String resolvePlaceholder(String placeholderName) {
|
||||
return (this.vars != null ? this.vars.get(placeholderName) : null);
|
||||
}
|
||||
|
||||
@@ -366,6 +366,7 @@ public class SimpAnnotationMethodMessageHandler extends AbstractMethodMessageHan
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected SimpMessageMappingInfo getMappingForMethod(Method method, Class<?> handlerType) {
|
||||
MessageMapping messageAnn = AnnotatedElementUtils.findMergedAnnotation(method, MessageMapping.class);
|
||||
if (messageAnn != null) {
|
||||
@@ -438,6 +439,7 @@ public class SimpAnnotationMethodMessageHandler extends AbstractMethodMessageHan
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected String getDestination(Message<?> message) {
|
||||
return SimpMessageHeaderAccessor.getDestination(message.getHeaders());
|
||||
}
|
||||
@@ -464,6 +466,7 @@ public class SimpAnnotationMethodMessageHandler extends AbstractMethodMessageHan
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected SimpMessageMappingInfo getMatchingMapping(SimpMessageMappingInfo mapping, Message<?> message) {
|
||||
return mapping.getMatchingCondition(message);
|
||||
|
||||
|
||||
@@ -632,6 +632,7 @@ public class DefaultStompSession implements ConnectionHandlingStompSession {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public String getSubscriptionId() {
|
||||
return this.headers.getId();
|
||||
}
|
||||
|
||||
@@ -181,6 +181,8 @@ public class StompHeaderAccessor extends SimpMessageHeaderAccessor {
|
||||
}
|
||||
|
||||
// Redeclared for visibility within simp.stomp
|
||||
@Override
|
||||
@Nullable
|
||||
protected Map<String, List<String>> getNativeHeaders() {
|
||||
return super.getNativeHeaders();
|
||||
}
|
||||
|
||||
@@ -399,6 +399,7 @@ public class StompHeaders implements MultiValueMap<String, String>, Serializable
|
||||
* @return the first header value, or {@code null} if none
|
||||
*/
|
||||
@Override
|
||||
@Nullable
|
||||
public String getFirst(String headerName) {
|
||||
List<String> headerValues = headers.get(headerName);
|
||||
return headerValues != null ? headerValues.get(0) : null;
|
||||
|
||||
@@ -120,6 +120,7 @@ public class DefaultUserDestinationResolver implements UserDestinationResolver {
|
||||
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public UserDestinationResult resolveDestination(Message<?> message) {
|
||||
ParseResult parseResult = parse(message);
|
||||
if (parseResult == null) {
|
||||
|
||||
@@ -115,6 +115,7 @@ public class MultiServerUserRegistry implements SimpUserRegistry, SmartApplicati
|
||||
// SimpUserRegistry methods
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public SimpUser getUser(String userName) {
|
||||
// Prefer remote registries due to cross-server SessionLookup
|
||||
for (UserRegistrySnapshot registry : this.remoteRegistries.values()) {
|
||||
@@ -321,6 +322,7 @@ public class MultiServerUserRegistry implements SimpUserRegistry, SmartApplicati
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public SimpSession getSession(String sessionId) {
|
||||
if (this.sessionLookup != null) {
|
||||
return this.sessionLookup.findSessions(getName()).get(sessionId);
|
||||
|
||||
@@ -35,6 +35,7 @@ class MonoToListenableFutureAdapter<T> extends AbstractMonoToListenableFutureAda
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected T adapt(@Nullable T result) {
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user