Nullability fine-tuning around declaration inconsistencies

Issue: SPR-15720
Issue: SPR-15792
This commit is contained in:
Juergen Hoeller
2017-07-19 22:22:14 +02:00
parent 68e6b148cb
commit 46eba3dbfa
186 changed files with 986 additions and 619 deletions

View File

@@ -31,7 +31,6 @@ import org.springframework.jms.support.JmsUtils;
import org.springframework.jms.support.QosSettings;
import org.springframework.jms.support.converter.MessageConverter;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.ErrorHandler;
/**
@@ -506,6 +505,7 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen
}
@Override
@Nullable
public QosSettings getReplyQosSettings() {
return this.replyQosSettings;
}
@@ -514,11 +514,12 @@ public abstract class AbstractMessageListenerContainer extends AbstractJmsListen
* Set the {@link MessageConverter} strategy for converting JMS Messages.
* @since 4.1
*/
public void setMessageConverter(MessageConverter messageConverter) {
public void setMessageConverter(@Nullable MessageConverter messageConverter) {
this.messageConverter = messageConverter;
}
@Override
@Nullable
public MessageConverter getMessageConverter() {
return this.messageConverter;
}

View File

@@ -144,7 +144,8 @@ public class MessageListenerAdapter extends AbstractAdaptableMessageListener imp
* @param delegate the delegate object
*/
public MessageListenerAdapter(Object delegate) {
setDelegate(delegate);
Assert.notNull(delegate, "Delegate must not be null");
this.delegate = delegate;
}
@@ -196,12 +197,13 @@ public class MessageListenerAdapter extends AbstractAdaptableMessageListener imp
*/
@Override
@SuppressWarnings("unchecked")
public void onMessage(Message message, Session session) throws JMSException {
public void onMessage(Message message, @Nullable Session session) throws JMSException {
// Check whether the delegate is a MessageListener impl itself.
// In that case, the adapter will simply act as a pass-through.
Object delegate = getDelegate();
if (delegate != this) {
if (delegate instanceof SessionAwareMessageListener) {
Assert.state(session != null, "Session is required for SessionAwareMessageListener");
((SessionAwareMessageListener<Message>) delegate).onMessage(message, session);
return;
}

View File

@@ -28,6 +28,7 @@ import org.springframework.messaging.MessagingException;
import org.springframework.messaging.core.AbstractMessageSendingTemplate;
import org.springframework.messaging.handler.invocation.InvocableHandlerMethod;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.util.Assert;
/**
* A {@link javax.jms.MessageListener} adapter that invokes a configurable
@@ -49,6 +50,7 @@ import org.springframework.messaging.support.MessageBuilder;
*/
public class MessagingMessageListenerAdapter extends AbstractAdaptableMessageListener {
@Nullable
private InvocableHandlerMethod handlerMethod;
@@ -60,9 +62,14 @@ public class MessagingMessageListenerAdapter extends AbstractAdaptableMessageLis
this.handlerMethod = handlerMethod;
}
private InvocableHandlerMethod getHandlerMethod() {
Assert.state(this.handlerMethod != null, "No HandlerMethod set");
return this.handlerMethod;
}
@Override
public void onMessage(javax.jms.Message jmsMessage, Session session) throws JMSException {
public void onMessage(javax.jms.Message jmsMessage, @Nullable Session session) throws JMSException {
Message<?> message = toMessagingMessage(jmsMessage);
if (logger.isDebugEnabled()) {
logger.debug("Processing [" + message + "]");
@@ -78,7 +85,7 @@ public class MessagingMessageListenerAdapter extends AbstractAdaptableMessageLis
@Override
protected Object preProcessResponse(Object result) {
MethodParameter returnType = this.handlerMethod.getReturnType();
MethodParameter returnType = getHandlerMethod().getReturnType();
if (result instanceof Message) {
return MessageBuilder.fromMessage((Message<?>) result)
.setHeader(AbstractMessageSendingTemplate.CONVERSION_HINT_HEADER, returnType).build();
@@ -101,9 +108,10 @@ public class MessagingMessageListenerAdapter extends AbstractAdaptableMessageLis
* with a dedicated error message.
*/
@Nullable
private Object invokeHandler(javax.jms.Message jmsMessage, Session session, Message<?> message) {
private Object invokeHandler(javax.jms.Message jmsMessage, @Nullable Session session, Message<?> message) {
InvocableHandlerMethod handlerMethod = getHandlerMethod();
try {
return this.handlerMethod.invoke(message, jmsMessage, session);
return handlerMethod.invoke(message, jmsMessage, session);
}
catch (MessagingException ex) {
throw new ListenerExecutionFailedException(
@@ -111,15 +119,16 @@ public class MessagingMessageListenerAdapter extends AbstractAdaptableMessageLis
}
catch (Exception ex) {
throw new ListenerExecutionFailedException("Listener method '" +
this.handlerMethod.getMethod().toGenericString() + "' threw exception", ex);
handlerMethod.getMethod().toGenericString() + "' threw exception", ex);
}
}
private String createMessagingErrorMessage(String description) {
InvocableHandlerMethod handlerMethod = getHandlerMethod();
StringBuilder sb = new StringBuilder(description).append("\n")
.append("Endpoint handler details:\n")
.append("Method [").append(this.handlerMethod.getMethod()).append("]\n")
.append("Bean [").append(this.handlerMethod.getBean()).append("]\n");
.append("Method [").append(handlerMethod.getMethod()).append("]\n")
.append("Bean [").append(handlerMethod.getBean()).append("]\n");
return sb.toString();
}

View File

@@ -22,6 +22,8 @@ import javax.resource.ResourceException;
import javax.resource.spi.UnavailableException;
import org.springframework.jca.endpoint.AbstractMessageEndpointFactory;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
/**
* JMS-specific implementation of the JCA 1.7
@@ -47,6 +49,7 @@ import org.springframework.jca.endpoint.AbstractMessageEndpointFactory;
*/
public class JmsMessageEndpointFactory extends AbstractMessageEndpointFactory {
@Nullable
private MessageListener messageListener;
@@ -61,6 +64,7 @@ public class JmsMessageEndpointFactory extends AbstractMessageEndpointFactory {
* Return the JMS MessageListener for this endpoint.
*/
protected MessageListener getMessageListener() {
Assert.state(messageListener != null, "No MessageListener set");
return this.messageListener;
}
@@ -90,16 +94,12 @@ public class JmsMessageEndpointFactory extends AbstractMessageEndpointFactory {
}
}
try {
messageListener.onMessage(message);
getMessageListener().onMessage(message);
}
catch (RuntimeException ex) {
catch (RuntimeException | Error ex) {
onEndpointException(ex);
throw ex;
}
catch (Error err) {
onEndpointException(err);
throw err;
}
finally {
if (applyDeliveryCalls) {
try {
@@ -114,7 +114,7 @@ public class JmsMessageEndpointFactory extends AbstractMessageEndpointFactory {
@Override
protected ClassLoader getEndpointClassLoader() {
return messageListener.getClass().getClassLoader();
return getMessageListener().getClass().getClassLoader();
}
}

View File

@@ -59,6 +59,7 @@ public class JmsInvokerServiceExporter extends RemoteInvocationBasedExporter
private boolean ignoreInvalidRequests = true;
@Nullable
private Object proxy;

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@ import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.lang.Nullable;
import org.springframework.oxm.Marshaller;
import org.springframework.oxm.Unmarshaller;
import org.springframework.oxm.XmlMappingException;
@@ -51,8 +52,10 @@ import org.springframework.util.Assert;
*/
public class MarshallingMessageConverter implements MessageConverter, InitializingBean {
@Nullable
private Marshaller marshaller;
@Nullable
private Unmarshaller unmarshaller;
private MessageType targetType = MessageType.BYTES;
@@ -108,6 +111,7 @@ public class MarshallingMessageConverter implements MessageConverter, Initializi
* Set the {@link Marshaller} to be used by this message converter.
*/
public void setMarshaller(Marshaller marshaller) {
Assert.notNull(marshaller, "Marshaller must not be null");
this.marshaller = marshaller;
}
@@ -115,6 +119,7 @@ public class MarshallingMessageConverter implements MessageConverter, Initializi
* Set the {@link Unmarshaller} to be used by this message converter.
*/
public void setUnmarshaller(Unmarshaller unmarshaller) {
Assert.notNull(unmarshaller, "Unmarshaller must not be null");
this.unmarshaller = unmarshaller;
}
@@ -148,6 +153,7 @@ public class MarshallingMessageConverter implements MessageConverter, Initializi
*/
@Override
public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {
Assert.state(this.marshaller != null, "No Marshaller set");
try {
switch (this.targetType) {
case TEXT:
@@ -158,10 +164,7 @@ public class MarshallingMessageConverter implements MessageConverter, Initializi
return marshalToMessage(object, session, this.marshaller, this.targetType);
}
}
catch (XmlMappingException ex) {
throw new MessageConversionException("Could not marshal [" + object + "]", ex);
}
catch (IOException ex) {
catch (XmlMappingException | IOException ex) {
throw new MessageConversionException("Could not marshal [" + object + "]", ex);
}
}
@@ -173,6 +176,7 @@ public class MarshallingMessageConverter implements MessageConverter, Initializi
*/
@Override
public Object fromMessage(Message message) throws JMSException, MessageConversionException {
Assert.state(this.unmarshaller != null, "No Unmarshaller set");
try {
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;