From 67d6cd0c89ecb6e948887fd25de6f86705eac0e9 Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Fri, 28 Oct 2016 12:07:06 -0400 Subject: [PATCH] Lambdas for Remaining Modules JPA -> ZK Polishing - PR Comments and Closeable Warnings Eclipse emits bogus warnings with exceptions in lambdas. Even though the lambda might run on another thread, elipse thinks it could cause the context to not be closed. SPR-14854: MessageChannel is now a @FunctionalInterface * Additional Lambda polishing and some code style fixes --- .../config/AmqpInboundGatewayParserTests.java | 1 - .../AmqpOutboundGatewayParserTests.java | 7 +- .../handler/MessageHandlerChain.java | 26 +- ...bstractCorrelatingMessageHandlerTests.java | 66 +-- ...ventOutboundChannelAdapterParserTests.java | 1 + .../file/remote/RemoteFileTemplate.java | 1 + .../ExceptionHandlingSiConsumerTests.java | 2 + ...eplyScenariosWithTempReplyQueuesTests.java | 1 + .../BeanPropertyParameterSourceFactory.java | 2 +- .../JpaOutboundGatewayIntegrationTests.java | 32 +- .../mail/AbstractMailReceiver.java | 2 +- .../mail/ImapIdleChannelAdapter.java | 50 ++- .../integration/mail/ImapMailReceiver.java | 13 + .../mail/ImapMailReceiverTests.java | 395 +++++------------- .../mail/MailReceivingMessageSourceTests.java | 4 + .../mail/config/ImapIdleIntegrationTests.java | 29 +- .../mongodb/store/MongoDbMessageStore.java | 38 +- .../AbstractMongoDbMessageStoreTests.java | 6 +- ...stractMqttMessageDrivenChannelAdapter.java | 2 +- .../MqttPahoMessageDrivenChannelAdapter.java | 23 +- .../mqtt/BackToBackAdapterTests.java | 4 + .../mqtt/DownstreamExceptionTests.java | 14 +- .../integration/mqtt/MqttAdapterTests.java | 134 ++---- .../channel/SubscribableRedisChannel.java | 7 +- .../inbound/RedisInboundChannelAdapter.java | 4 + .../inbound/RedisQueueInboundGateway.java | 4 + .../RedisQueueMessageDrivenEndpoint.java | 4 + .../redis/outbound/RedisOutboundGateway.java | 16 +- .../RedisStoreWritingMessageHandler.java | 50 +-- .../RedisChannelPriorityMessageStore.java | 9 +- .../redis/util/RedisLockRegistry.java | 74 ++-- .../SubscribableRedisChannelTests.java | 10 +- .../redis/config/RedisChannelParserTests.java | 11 +- .../RedisQueueMessageDrivenEndpointTests.java | 27 +- ...InboundChannelAdapterIntegrationTests.java | 14 +- .../RedisPublishingMessageHandlerTests.java | 2 +- .../store/RedisMessageGroupStoreTests.java | 30 +- .../util/AggregatorWithRedisLocksTests.java | 34 +- .../redis/util/RedisLockRegistryTests.java | 135 +++--- .../rmi/RmiOutboundGatewayTests.java | 18 +- .../config/jsr223/Jsr223RefreshTests.java | 11 +- .../session/DefaultSftpSessionFactory.java | 4 + .../stomp/AbstractStompSessionManager.java | 13 +- .../inbound/StompInboundChannelAdapter.java | 36 +- .../stomp/outbound/StompMessageHandler.java | 44 +- ...annelAdapterWebSocketIntegrationTests.java | 23 +- .../ByteStreamWritingMessageHandlerTests.java | 7 +- ...acterStreamWritingMessageHandlerTests.java | 10 +- .../UdpSyslogReceivingChannelAdapter.java | 12 +- .../SyslogReceivingChannelAdapterTests.java | 55 +-- .../test/reactive/TestSubscriber.java | 8 +- .../integration/test/util/TestUtils.java | 31 +- .../inbound/AbstractTwitterMessageSource.java | 4 + .../TwitterSearchOutboundGatewayTests.java | 90 ++-- .../websocket/ClientWebSocketContainer.java | 2 +- .../IntegrationWebSocketContainer.java | 4 + .../WebSocketInboundChannelAdapter.java | 19 +- .../client/StompIntegrationTests.java | 22 +- .../server/WebSocketServerTests.java | 4 + .../MarshallingWebServiceOutboundGateway.java | 7 +- .../ws/SimpleWebServiceInboundGateway.java | 5 + .../ws/SimpleWebServiceOutboundGateway.java | 8 +- .../SimpleWebServiceInboundGatewayTests.java | 12 +- .../SimpleWebServiceOutboundGatewayTests.java | 27 +- .../ws/config/UriVariableTests.java | 20 +- ...eOutboundGatewayWithHeaderMapperTests.java | 57 +-- .../integration/xml/router/XPathRouter.java | 4 + .../xml/splitter/XPathMessageSplitter.java | 2 +- .../xml/DefaultXmlPayloadConverterTests.java | 4 + .../MarshallingTransformerTests.java | 8 +- .../transformer/XPathTransformerTests.java | 14 +- .../config/XmppConnectionFactoryBean.java | 4 + .../inbound/ChatMessageListeningEndpoint.java | 4 + .../inbound/PresenceListeningEndpoint.java | 12 +- ...sageOutboundChannelAdapterParserTests.java | 39 +- .../config/XmppHeaderEnricherParserTests.java | 19 +- .../ChatMessageListeningEndpointTests.java | 50 +-- .../PresenceListeningEndpointTests.java | 41 +- .../zookeeper/leader/LeaderInitiator.java | 4 + .../zookeeper/lock/ZookeeperLockRegistry.java | 9 +- .../metadata/ZookeeperMetadataStore.java | 6 +- .../LeaderInitiatorFactoryBeanTests.java | 13 +- .../zookeeper/lock/ZkLockRegistryTests.java | 124 +++--- 83 files changed, 870 insertions(+), 1324 deletions(-) diff --git a/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/config/AmqpInboundGatewayParserTests.java b/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/config/AmqpInboundGatewayParserTests.java index 505d093a39..fbeb0576b9 100644 --- a/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/config/AmqpInboundGatewayParserTests.java +++ b/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/config/AmqpInboundGatewayParserTests.java @@ -96,7 +96,6 @@ public class AmqpInboundGatewayParserTests { assertEquals(expected, defaultReplyTo); } - @SuppressWarnings("rawtypes") @Test public void verifyUsageWithHeaderMapper() throws Exception { DirectChannel requestChannel = context.getBean("requestChannel", DirectChannel.class); diff --git a/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/config/AmqpOutboundGatewayParserTests.java b/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/config/AmqpOutboundGatewayParserTests.java index 0776523530..f62602d083 100644 --- a/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/config/AmqpOutboundGatewayParserTests.java +++ b/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/config/AmqpOutboundGatewayParserTests.java @@ -97,7 +97,7 @@ public class AmqpOutboundGatewayParserTests { .getExpressionString()); } - @SuppressWarnings("rawtypes") + @SuppressWarnings({ "resource" }) @Test public void withHeaderMapperCustomRequestResponse() { ConfigurableApplicationContext context = new ClassPathXmlApplicationContext( @@ -166,7 +166,7 @@ public class AmqpOutboundGatewayParserTests { context.close(); } - @SuppressWarnings("rawtypes") + @SuppressWarnings({ "resource" }) @Test public void withHeaderMapperCustomAndStandardResponse() { ConfigurableApplicationContext context = new ClassPathXmlApplicationContext( @@ -220,7 +220,7 @@ public class AmqpOutboundGatewayParserTests { context.close(); } - @SuppressWarnings("rawtypes") + @SuppressWarnings({ "resource" }) @Test public void withHeaderMapperNothingToMap() { ConfigurableApplicationContext context = new ClassPathXmlApplicationContext( @@ -272,6 +272,7 @@ public class AmqpOutboundGatewayParserTests { context.close(); } + @SuppressWarnings("resource") @Test //INT-1029 public void amqpOutboundGatewayWithinChain() { ConfigurableApplicationContext context = new ClassPathXmlApplicationContext( diff --git a/spring-integration-core/src/main/java/org/springframework/integration/handler/MessageHandlerChain.java b/spring-integration-core/src/main/java/org/springframework/integration/handler/MessageHandlerChain.java index ae31ee71c8..82f3fc8983 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/handler/MessageHandlerChain.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/handler/MessageHandlerChain.java @@ -118,18 +118,13 @@ public class MessageHandlerChain extends AbstractMessageProducingHandler impleme if (i < this.handlers.size() - 1) { // not the last handler Assert.isInstanceOf(MessageProducer.class, handler, "All handlers except for " + "the last one in the chain must implement the MessageProducer interface."); - final MessageHandler nextHandler = this.handlers.get(i + 1); - final MessageChannel nextChannel = new MessageChannel() { - @Override - public boolean send(Message message, long timeout) { - return this.send(message); - } - @Override - public boolean send(Message message) { - nextHandler.handleMessage(message); - return true; - } + + MessageHandler nextHandler = this.handlers.get(i + 1); + MessageChannel nextChannel = (message, timeout) -> { + nextHandler.handleMessage(message); + return true; }; + ((MessageProducer) handler).setOutputChannel(nextChannel); // If this 'handler' is a nested non-last <chain>, it is necessary @@ -146,7 +141,7 @@ public class MessageHandlerChain extends AbstractMessageProducingHandler impleme else { Assert.isNull(getOutputChannel(), "An output channel was provided, but the final handler in " + - "the chain does not implement the MessageProducer interface."); + "the chain does not implement the MessageProducer interface."); } } } @@ -239,16 +234,11 @@ public class MessageHandlerChain extends AbstractMessageProducingHandler impleme } @Override - public boolean send(Message message) { + public boolean send(Message message, long timeout) { produceOutput(message, message); return true; } - @Override - public boolean send(Message message, long timeout) { - return send(message); - } - } } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/aggregator/AbstractCorrelatingMessageHandlerTests.java b/spring-integration-core/src/test/java/org/springframework/integration/aggregator/AbstractCorrelatingMessageHandlerTests.java index 8639b121af..82ad134b74 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/aggregator/AbstractCorrelatingMessageHandlerTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/aggregator/AbstractCorrelatingMessageHandlerTests.java @@ -46,7 +46,6 @@ import org.springframework.integration.store.SimpleMessageStore; import org.springframework.integration.support.MessageBuilder; import org.springframework.integration.test.util.TestUtils; import org.springframework.messaging.Message; -import org.springframework.messaging.MessageChannel; import org.springframework.messaging.support.GenericMessage; /** @@ -94,33 +93,24 @@ public class AbstractCorrelatingMessageHandlerTests { }); final List> outputMessages = new ArrayList>(); - handler.setOutputChannel(new MessageChannel() { - + handler.setOutputChannel((message, timeout) -> { /* * Executes when group 'bar' completes normally */ - @Override - public boolean send(Message message, long timeout) { - outputMessages.add(message); - // wake reaper - waitReapStartLatch.countDown(); - try { - waitForSendLatch.await(10, TimeUnit.SECONDS); - // wait a little longer for reaper to grab groups - Thread.sleep(2000); - // simulate tx commit - groupStore.removeMessageGroup("bar"); - } - catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - return true; + outputMessages.add(message); + // wake reaper + waitReapStartLatch.countDown(); + try { + waitForSendLatch.await(10, TimeUnit.SECONDS); + // wait a little longer for reaper to grab groups + Thread.sleep(2000); + // simulate tx commit + groupStore.removeMessageGroup("bar"); } - - @Override - public boolean send(Message message) { - return this.send(message, 0); + catch (InterruptedException e) { + Thread.currentThread().interrupt(); } + return true; }); handler.setReleaseStrategy(group -> group.size() == 2); @@ -160,21 +150,12 @@ public class AbstractCorrelatingMessageHandlerTests { AggregatingMessageHandler handler = new AggregatingMessageHandler(group -> group, groupStore); final List> outputMessages = new ArrayList>(); - handler.setOutputChannel(new MessageChannel() { - + handler.setOutputChannel((message, timeout) -> { /* * Executes when group 'bar' completes normally */ - @Override - public boolean send(Message message, long timeout) { - outputMessages.add(message); - return true; - } - - @Override - public boolean send(Message message) { - return this.send(message, 0); - } + outputMessages.add(message); + return true; }); handler.setReleaseStrategy(group -> group.size() == 1); @@ -196,21 +177,12 @@ public class AbstractCorrelatingMessageHandlerTests { AggregatingMessageHandler handler = new AggregatingMessageHandler(group -> group, groupStore); final List> outputMessages = new ArrayList>(); - handler.setOutputChannel(new MessageChannel() { - + handler.setOutputChannel((message, timeout) -> { /* * Executes when group 'bar' completes normally */ - @Override - public boolean send(Message message, long timeout) { - outputMessages.add(message); - return true; - } - - @Override - public boolean send(Message message) { - return this.send(message, 0); - } + outputMessages.add(message); + return true; }); handler.setReleaseStrategy(group -> group.size() == 1); diff --git a/spring-integration-event/src/test/java/org/springframework/integration/event/config/EventOutboundChannelAdapterParserTests.java b/spring-integration-event/src/test/java/org/springframework/integration/event/config/EventOutboundChannelAdapterParserTests.java index ef0014fc2f..ecb5fb52e5 100644 --- a/spring-integration-event/src/test/java/org/springframework/integration/event/config/EventOutboundChannelAdapterParserTests.java +++ b/spring-integration-event/src/test/java/org/springframework/integration/event/config/EventOutboundChannelAdapterParserTests.java @@ -130,6 +130,7 @@ public class EventOutboundChannelAdapterParserTests { new ClassPathXmlApplicationContext("EventOutboundChannelAdapterParserTestsWithPollable-context.xml", EventOutboundChannelAdapterParserTests.class); final CyclicBarrier barrier = new CyclicBarrier(2); + @SuppressWarnings("resource") ApplicationListener listener = event -> { Object source = event.getSource(); if (source instanceof Message) { diff --git a/spring-integration-file/src/main/java/org/springframework/integration/file/remote/RemoteFileTemplate.java b/spring-integration-file/src/main/java/org/springframework/integration/file/remote/RemoteFileTemplate.java index b95f071851..dae3315115 100644 --- a/spring-integration-file/src/main/java/org/springframework/integration/file/remote/RemoteFileTemplate.java +++ b/spring-integration-file/src/main/java/org/springframework/integration/file/remote/RemoteFileTemplate.java @@ -399,6 +399,7 @@ public class RemoteFileTemplate implements RemoteFileOperations, Initializ return this.sessionFactory.getSession(); } + @SuppressWarnings("rawtypes") @Override public T execute(SessionCallback callback) { Session session = null; diff --git a/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/ExceptionHandlingSiConsumerTests.java b/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/ExceptionHandlingSiConsumerTests.java index 3322ac7860..efd2ac6600 100644 --- a/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/ExceptionHandlingSiConsumerTests.java +++ b/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/ExceptionHandlingSiConsumerTests.java @@ -37,6 +37,7 @@ import org.springframework.jms.core.MessageCreator; */ public class ExceptionHandlingSiConsumerTests { + @SuppressWarnings("resource") @Test public void nonSiProducer_siConsumer_sync_withReturn() throws Exception { ActiveMqTestUtils.prepare(); @@ -55,6 +56,7 @@ public class ExceptionHandlingSiConsumerTests { applicationContext.close(); } + @SuppressWarnings("resource") @Test public void nonSiProducer_siConsumer_sync_withReturnNoException() throws Exception { ActiveMqTestUtils.prepare(); diff --git a/spring-integration-jms/src/test/java/org/springframework/integration/jms/request_reply/RequestReplyScenariosWithTempReplyQueuesTests.java b/spring-integration-jms/src/test/java/org/springframework/integration/jms/request_reply/RequestReplyScenariosWithTempReplyQueuesTests.java index 3dd345baa4..fdb8f4b597 100644 --- a/spring-integration-jms/src/test/java/org/springframework/integration/jms/request_reply/RequestReplyScenariosWithTempReplyQueuesTests.java +++ b/spring-integration-jms/src/test/java/org/springframework/integration/jms/request_reply/RequestReplyScenariosWithTempReplyQueuesTests.java @@ -67,6 +67,7 @@ public class RequestReplyScenariosWithTempReplyQueuesTests extends ActiveMQMulti @Rule public LongRunningIntegrationTest longTests = new LongRunningIntegrationTest(); + @SuppressWarnings("resource") @Test public void messageCorrelationBasedOnRequestMessageId() throws Exception { ActiveMqTestUtils.prepare(); diff --git a/spring-integration-jpa/src/main/java/org/springframework/integration/jpa/support/parametersource/BeanPropertyParameterSourceFactory.java b/spring-integration-jpa/src/main/java/org/springframework/integration/jpa/support/parametersource/BeanPropertyParameterSourceFactory.java index d01eefb4e8..28479e34cb 100644 --- a/spring-integration-jpa/src/main/java/org/springframework/integration/jpa/support/parametersource/BeanPropertyParameterSourceFactory.java +++ b/spring-integration-jpa/src/main/java/org/springframework/integration/jpa/support/parametersource/BeanPropertyParameterSourceFactory.java @@ -58,7 +58,7 @@ public class BeanPropertyParameterSourceFactory implements ParameterSourceFactor private final Map staticParameters; - private StaticBeanPropertyParameterSource(Object input, Map staticParameters) { + StaticBeanPropertyParameterSource(Object input, Map staticParameters) { this.input = new BeanPropertyParameterSource(input); this.staticParameters = staticParameters; } diff --git a/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/JpaOutboundGatewayIntegrationTests.java b/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/JpaOutboundGatewayIntegrationTests.java index 81555e6237..fb8a8e0bd7 100644 --- a/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/JpaOutboundGatewayIntegrationTests.java +++ b/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/JpaOutboundGatewayIntegrationTests.java @@ -39,7 +39,6 @@ import org.springframework.integration.support.MessageBuilder; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHandler; import org.springframework.messaging.MessageHandlingException; -import org.springframework.messaging.MessagingException; import org.springframework.messaging.PollableChannel; import org.springframework.messaging.SubscribableChannel; import org.springframework.test.annotation.DirtiesContext; @@ -108,12 +107,9 @@ public class JpaOutboundGatewayIntegrationTests { */ @Test public void retrieveFromSecondRecordAndMaximumOneRecord() throws Exception { - this.handler = new MessageHandler() { - @Override - public void handleMessage(Message message) throws MessagingException { - assertEquals(2, ((List) message.getPayload()).size()); - assertEquals(1, entityManager.createQuery("from Student").getResultList().size()); - } + this.handler = message -> { + assertEquals(2, ((List) message.getPayload()).size()); + assertEquals(1, entityManager.createQuery("from Student").getResultList().size()); }; this.responseChannel.subscribe(this.handler); @@ -126,13 +122,10 @@ public class JpaOutboundGatewayIntegrationTests { @Test public void testFindByEntityClass() throws Exception { - this.handler = new MessageHandler() { - @Override - public void handleMessage(Message message) throws MessagingException { - assertThat(message.getPayload(), Matchers.instanceOf(StudentDomain.class)); - StudentDomain student = (StudentDomain) message.getPayload(); - assertEquals("First One", student.getFirstName()); - } + this.handler = message -> { + assertThat(message.getPayload(), Matchers.instanceOf(StudentDomain.class)); + StudentDomain student = (StudentDomain) message.getPayload(); + assertEquals("First One", student.getFirstName()); }; this.responseChannel.subscribe(this.handler); @@ -142,13 +135,10 @@ public class JpaOutboundGatewayIntegrationTests { @Test public void testFindByPayloadType() throws Exception { - this.handler = new MessageHandler() { - @Override - public void handleMessage(Message message) throws MessagingException { - assertThat(message.getPayload(), Matchers.instanceOf(StudentDomain.class)); - StudentDomain student = (StudentDomain) message.getPayload(); - assertEquals("First Two", student.getFirstName()); - } + this.handler = message -> { + assertThat(message.getPayload(), Matchers.instanceOf(StudentDomain.class)); + StudentDomain student = (StudentDomain) message.getPayload(); + assertEquals("First Two", student.getFirstName()); }; this.responseChannel.subscribe(this.handler); diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/AbstractMailReceiver.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/AbstractMailReceiver.java index 5e10cb0d76..6aa93f1939 100755 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/AbstractMailReceiver.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/AbstractMailReceiver.java @@ -597,7 +597,7 @@ public abstract class AbstractMailReceiver extends IntegrationObjectSupport impl private final Object content; - private IntegrationMimeMessage(MimeMessage source) throws MessagingException { + IntegrationMimeMessage(MimeMessage source) throws MessagingException { super(source); this.source = source; if (AbstractMailReceiver.this.simpleContent) { diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/ImapIdleChannelAdapter.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/ImapIdleChannelAdapter.java index 45e09d7eb6..c6b6538836 100755 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/ImapIdleChannelAdapter.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/ImapIdleChannelAdapter.java @@ -183,30 +183,27 @@ public class ImapIdleChannelAdapter extends MessageProducerSupport implements Be } private Runnable createMessageSendingTask(final Object mailMessage) { - Runnable sendingTask = new Runnable() { - @Override - public void run() { - @SuppressWarnings("unchecked") - org.springframework.messaging.Message message = - mailMessage instanceof Message - ? ImapIdleChannelAdapter.this.getMessageBuilderFactory().withPayload(mailMessage).build() - : (org.springframework.messaging.Message) mailMessage; + Runnable sendingTask = () -> { + @SuppressWarnings("unchecked") + org.springframework.messaging.Message message = + mailMessage instanceof Message + ? ImapIdleChannelAdapter.this.getMessageBuilderFactory().withPayload(mailMessage).build() + : (org.springframework.messaging.Message) mailMessage; - if (TransactionSynchronizationManager.isActualTransactionActive()) { - if (ImapIdleChannelAdapter.this.transactionSynchronizationFactory != null) { - TransactionSynchronization synchronization = - ImapIdleChannelAdapter.this.transactionSynchronizationFactory - .create(ImapIdleChannelAdapter.this); - TransactionSynchronizationManager.registerSynchronization(synchronization); - if (synchronization instanceof IntegrationResourceHolderSynchronization) { - IntegrationResourceHolder holder = - ((IntegrationResourceHolderSynchronization) synchronization).getResourceHolder(); - holder.setMessage(message); - } + if (TransactionSynchronizationManager.isActualTransactionActive()) { + if (ImapIdleChannelAdapter.this.transactionSynchronizationFactory != null) { + TransactionSynchronization synchronization = + ImapIdleChannelAdapter.this.transactionSynchronizationFactory + .create(ImapIdleChannelAdapter.this); + TransactionSynchronizationManager.registerSynchronization(synchronization); + if (synchronization instanceof IntegrationResourceHolderSynchronization) { + IntegrationResourceHolder holder = + ((IntegrationResourceHolderSynchronization) synchronization).getResourceHolder(); + holder.setMessage(message); } } - sendMessage(message); } + sendMessage(message); }; // wrap in the TX proxy if necessary @@ -235,6 +232,11 @@ public class ImapIdleChannelAdapter extends MessageProducerSupport implements Be private class ReceivingTask implements Runnable { + + ReceivingTask() { + super(); + } + @Override public void run() { try { @@ -254,6 +256,10 @@ public class ImapIdleChannelAdapter extends MessageProducerSupport implements Be private class IdleTask implements Runnable { + IdleTask() { + super(); + } + @Override public void run() { final TaskScheduler scheduler = getTaskScheduler(); @@ -303,6 +309,10 @@ public class ImapIdleChannelAdapter extends MessageProducerSupport implements Be private volatile boolean delayNextExecution; + ExceptionAwarePeriodicTrigger() { + super(); + } + @Override public Date nextExecutionTime(TriggerContext triggerContext) { if (this.delayNextExecution) { diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/ImapMailReceiver.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/ImapMailReceiver.java index 8a7b8123b4..e09de65bfa 100755 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/ImapMailReceiver.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/ImapMailReceiver.java @@ -240,6 +240,11 @@ public class ImapMailReceiver extends AbstractMailReceiver { } private class IdleCanceler implements Runnable { + + IdleCanceler() { + super(); + } + @Override public void run() { try { @@ -259,6 +264,10 @@ public class ImapMailReceiver extends AbstractMailReceiver { */ private class SimpleMessageCountListener extends MessageCountAdapter { + SimpleMessageCountListener() { + super(); + } + @Override public void messagesAdded(MessageCountEvent event) { Message[] messages = event.getMessages(); @@ -271,6 +280,10 @@ public class ImapMailReceiver extends AbstractMailReceiver { private class DefaultSearchTermStrategy implements SearchTermStrategy { + DefaultSearchTermStrategy() { + super(); + } + @Override public SearchTerm generateSearchTerm(Flags supportedFlags, Folder folder) { SearchTerm searchTerm = null; diff --git a/spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverTests.java b/spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverTests.java index 4ea44b85ca..e8ed387c36 100644 --- a/spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverTests.java +++ b/spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverTests.java @@ -64,13 +64,9 @@ import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.mockito.Mockito; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; import org.springframework.beans.DirectFieldAccessor; import org.springframework.beans.factory.BeanFactory; -import org.springframework.context.ApplicationEvent; -import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.io.ClassPathResource; @@ -127,17 +123,13 @@ public class ImapMailReceiverTests { public void testIdleWithServerCustomSearch() throws Exception { ImapMailReceiver receiver = new ImapMailReceiver("imap://user:pw@localhost:" + imapIdleServer.getPort() + "/INBOX"); - receiver.setSearchTermStrategy(new SearchTermStrategy() { - - @Override - public SearchTerm generateSearchTerm(Flags supportedFlags, Folder folder) { - try { - FromTerm fromTerm = new FromTerm(new InternetAddress("bar@baz")); - return new AndTerm(fromTerm, new FlagTerm(new Flags(Flag.SEEN), false)); - } - catch (AddressException e) { - throw new RuntimeException(e); - } + receiver.setSearchTermStrategy((supportedFlags, folder) -> { + try { + FromTerm fromTerm = new FromTerm(new InternetAddress("bar@baz")); + return new AndTerm(fromTerm, new FlagTerm(new Flags(Flag.SEEN), false)); + } + catch (AddressException e) { + throw new RuntimeException(e); } }); testIdleWithServerGuts(receiver, false); @@ -268,35 +260,19 @@ public class ImapMailReceiverTests { final Message[] messages = new Message[] { msg1, msg2 }; - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - DirectFieldAccessor accessor = new DirectFieldAccessor(invocation.getMock()); - int folderOpenMode = (Integer) accessor.getPropertyValue("folderOpenMode"); - if (folderOpenMode != Folder.READ_WRITE) { - throw new IllegalArgumentException("Folder had to be open in READ_WRITE mode"); - } - - return null; + doAnswer(invocation -> { + DirectFieldAccessor accessor = new DirectFieldAccessor(invocation.getMock()); + int folderOpenMode = (Integer) accessor.getPropertyValue("folderOpenMode"); + if (folderOpenMode != Folder.READ_WRITE) { + throw new IllegalArgumentException("Folder had to be open in READ_WRITE mode"); } + + return null; }).when(receiver).openFolder(); - doAnswer(new Answer() { + doAnswer(invocation -> messages).when(receiver).searchForNewMessages(); - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return messages; - } - }).when(receiver).searchForNewMessages(); - - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return null; - } - }).when(receiver).fetchMessages(messages); + doAnswer(invocation -> null).when(receiver).fetchMessages(messages); receiver.receive(); return receiver; } @@ -348,34 +324,18 @@ public class ImapMailReceiverTests { Message msg1 = mock(MimeMessage.class); Message msg2 = mock(MimeMessage.class); final Message[] messages = new Message[] { msg1, msg2 }; - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - DirectFieldAccessor accessor = new DirectFieldAccessor(invocation.getMock()); - int folderOpenMode = (Integer) accessor.getPropertyValue("folderOpenMode"); - if (folderOpenMode != Folder.READ_WRITE) { - throw new IllegalArgumentException("Folder had to be open in READ_WRITE mode"); - } - return null; + doAnswer(invocation -> { + DirectFieldAccessor accessor = new DirectFieldAccessor(invocation.getMock()); + int folderOpenMode = (Integer) accessor.getPropertyValue("folderOpenMode"); + if (folderOpenMode != Folder.READ_WRITE) { + throw new IllegalArgumentException("Folder had to be open in READ_WRITE mode"); } + return null; }).when(receiver).openFolder(); - doAnswer(new Answer() { + doAnswer(invocation -> messages).when(receiver).searchForNewMessages(); - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return messages; - } - }).when(receiver).searchForNewMessages(); - - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return null; - } - }).when(receiver).fetchMessages(messages); + doAnswer(invocation -> null).when(receiver).fetchMessages(messages); receiver.receive(); verify(msg1, times(1)).setFlag(Flag.SEEN, true); verify(msg2, times(1)).setFlag(Flag.SEEN, true); @@ -400,29 +360,11 @@ public class ImapMailReceiverTests { Message msg1 = mock(MimeMessage.class); Message msg2 = mock(MimeMessage.class); final Message[] messages = new Message[] { msg1, msg2 }; - doAnswer(new Answer() { + doAnswer(invocation -> null).when(receiver).openFolder(); - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return null; - } - }).when(receiver).openFolder(); + doAnswer(invocation -> messages).when(receiver).searchForNewMessages(); - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return messages; - } - }).when(receiver).searchForNewMessages(); - - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return null; - } - }).when(receiver).fetchMessages(messages); + doAnswer(invocation -> null).when(receiver).fetchMessages(messages); receiver.afterPropertiesSet(); receiver.receive(); verify(msg1, times(0)).setFlag(Flag.SEEN, true); @@ -432,7 +374,7 @@ public class ImapMailReceiverTests { @Test public void receiveAndDontMarkAsReadButDelete() throws Exception { AbstractMailReceiver receiver = new ImapMailReceiver(); - ((ImapMailReceiver) receiver).setShouldDeleteMessages(true); + receiver.setShouldDeleteMessages(true); ((ImapMailReceiver) receiver).setShouldMarkMessagesAsRead(false); receiver = spy(receiver); receiver.setBeanFactory(mock(BeanFactory.class)); @@ -447,34 +389,18 @@ public class ImapMailReceiverTests { Message msg1 = mock(MimeMessage.class); Message msg2 = mock(MimeMessage.class); final Message[] messages = new Message[] { msg1, msg2 }; - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - DirectFieldAccessor accessor = new DirectFieldAccessor(invocation.getMock()); - int folderOpenMode = (Integer) accessor.getPropertyValue("folderOpenMode"); - if (folderOpenMode != Folder.READ_WRITE) { - throw new IllegalArgumentException("Folder had to be open in READ_WRITE mode"); - } - return null; + doAnswer(invocation -> { + DirectFieldAccessor accessor = new DirectFieldAccessor(invocation.getMock()); + int folderOpenMode = (Integer) accessor.getPropertyValue("folderOpenMode"); + if (folderOpenMode != Folder.READ_WRITE) { + throw new IllegalArgumentException("Folder had to be open in READ_WRITE mode"); } + return null; }).when(receiver).openFolder(); - doAnswer(new Answer() { + doAnswer(invocation -> messages).when(receiver).searchForNewMessages(); - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return messages; - } - }).when(receiver).searchForNewMessages(); - - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return null; - } - }).when(receiver).fetchMessages(messages); + doAnswer(invocation -> null).when(receiver).fetchMessages(messages); receiver.afterPropertiesSet(); receiver.receive(); verify(msg1, times(0)).setFlag(Flag.SEEN, true); @@ -499,40 +425,25 @@ public class ImapMailReceiverTests { Message msg1 = mock(MimeMessage.class); Message msg2 = mock(MimeMessage.class); final Message[] messages = new Message[] { msg1, msg2 }; - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - DirectFieldAccessor accessor = new DirectFieldAccessor(invocation.getMock()); - int folderOpenMode = (Integer) accessor.getPropertyValue("folderOpenMode"); - if (folderOpenMode != Folder.READ_WRITE) { - throw new IllegalArgumentException("Folder had to be open in READ_WRITE mode"); - } - return null; + doAnswer(invocation -> { + DirectFieldAccessor accessor = new DirectFieldAccessor(invocation.getMock()); + int folderOpenMode = (Integer) accessor.getPropertyValue("folderOpenMode"); + if (folderOpenMode != Folder.READ_WRITE) { + throw new IllegalArgumentException("Folder had to be open in READ_WRITE mode"); } + return null; }).when(receiver).openFolder(); - doAnswer(new Answer() { + doAnswer(invocation -> messages).when(receiver).searchForNewMessages(); - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return messages; - } - }).when(receiver).searchForNewMessages(); - - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return null; - } - }).when(receiver).fetchMessages(messages); + doAnswer(invocation -> null).when(receiver).fetchMessages(messages); receiver.receive(); verify(msg1, times(1)).setFlag(Flag.SEEN, true); verify(msg2, times(1)).setFlag(Flag.SEEN, true); verify(receiver, times(0)).deleteMessages((Message[]) Mockito.any()); } + @SuppressWarnings("resource") @Test @Ignore public void testMessageHistory() throws Exception { @@ -553,33 +464,17 @@ public class ImapMailReceiverTests { when(mailMessage.getFlags()).thenReturn(flags); final Message[] messages = new Message[] { mailMessage }; - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - DirectFieldAccessor accessor = new DirectFieldAccessor((invocation.getMock())); - IMAPFolder folder = mock(IMAPFolder.class); - accessor.setPropertyValue("folder", folder); - when(folder.hasNewMessages()).thenReturn(true); - return null; - } + doAnswer(invocation -> { + DirectFieldAccessor accessor = new DirectFieldAccessor((invocation.getMock())); + IMAPFolder folder = mock(IMAPFolder.class); + accessor.setPropertyValue("folder", folder); + when(folder.hasNewMessages()).thenReturn(true); + return null; }).when(receiver).openFolder(); - doAnswer(new Answer() { + doAnswer(invocation -> messages).when(receiver).searchForNewMessages(); - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return messages; - } - }).when(receiver).searchForNewMessages(); - - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return null; - } - }).when(receiver).fetchMessages(messages); + doAnswer(invocation -> null).when(receiver).fetchMessages(messages); PollableChannel channel = context.getBean("channel", PollableChannel.class); @@ -626,21 +521,9 @@ public class ImapMailReceiverTests { when(folder.getPermanentFlags()).thenReturn(new Flags(Flags.Flag.USER)); folderField.set(receiver, folder); - doAnswer(new Answer() { + doAnswer(invocation -> true).when(folder).isOpen(); - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return true; - } - }).when(folder).isOpen(); - - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return null; - } - }).when(receiver).openFolder(); + doAnswer(invocation -> null).when(receiver).openFolder(); DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter); adapterAccessor.setPropertyValue("mailReceiver", receiver); @@ -650,21 +533,9 @@ public class ImapMailReceiverTests { when(mailMessage.getFlags()).thenReturn(flags); final Message[] messages = new Message[] { mailMessage }; - doAnswer(new Answer() { + doAnswer(invocation -> messages).when(receiver).searchForNewMessages(); - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return messages; - } - }).when(receiver).searchForNewMessages(); - - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return null; - } - }).when(receiver).fetchMessages(messages); + doAnswer(invocation -> null).when(receiver).fetchMessages(messages); adapter.start(); org.springframework.messaging.Message replMessage = errorChannel.receive(10000); @@ -674,6 +545,7 @@ public class ImapMailReceiverTests { context.close(); } + @SuppressWarnings("resource") @Test public void testNoInitialIdleDelayWhenRecentNotSupported() throws Exception { ConfigurableApplicationContext context = @@ -703,13 +575,7 @@ public class ImapMailReceiverTests { when(store.getFolder(Mockito.any(URLName.class))).thenReturn(folder); storeField.set(receiver, store); - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return folder; - } - }).when(receiver).getFolder(); + doAnswer(invocation -> folder).when(receiver).getFolder(); MimeMessage mailMessage = mock(MimeMessage.class); Flags flags = mock(Flags.class); @@ -717,41 +583,27 @@ public class ImapMailReceiverTests { final Message[] messages = new Message[] { mailMessage }; final AtomicInteger shouldFindMessagesCounter = new AtomicInteger(2); - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - /* - * Return the message from first invocation of waitForMessages() - * and in receive(); then return false in the next call to - * waitForMessages() so we enter idle(); counter will be reset - * to 1 in the mocked idle(). - */ - if (shouldFindMessagesCounter.decrementAndGet() >= 0) { - return messages; - } - else { - return new Message[0]; - } + doAnswer(invocation -> { + /* + * Return the message from first invocation of waitForMessages() + * and in receive(); then return false in the next call to + * waitForMessages() so we enter idle(); counter will be reset + * to 1 in the mocked idle(). + */ + if (shouldFindMessagesCounter.decrementAndGet() >= 0) { + return messages; + } + else { + return new Message[0]; } }).when(receiver).searchForNewMessages(); - doAnswer(new Answer() { + doAnswer(invocation -> null).when(receiver).fetchMessages(messages); - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return null; - } - }).when(receiver).fetchMessages(messages); - - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - Thread.sleep(5000); - shouldFindMessagesCounter.set(1); - return null; - } + doAnswer(invocation -> { + Thread.sleep(5000); + shouldFindMessagesCounter.set(1); + return null; }).when(folder).idle(); adapter.start(); @@ -768,6 +620,7 @@ public class ImapMailReceiverTests { context.close(); } + @SuppressWarnings("resource") @Test public void testInitialIdleDelayWhenRecentIsSupported() throws Exception { ConfigurableApplicationContext context = @@ -797,44 +650,22 @@ public class ImapMailReceiverTests { when(store.getFolder(Mockito.any(URLName.class))).thenReturn(folder); storeField.set(receiver, store); - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return folder; - } - }).when(receiver).getFolder(); + doAnswer(invocation -> folder).when(receiver).getFolder(); MimeMessage mailMessage = mock(MimeMessage.class); Flags flags = mock(Flags.class); when(mailMessage.getFlags()).thenReturn(flags); final Message[] messages = new Message[] { mailMessage }; - doAnswer(new Answer() { + doAnswer(invocation -> messages).when(receiver).searchForNewMessages(); - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return messages; - } - }).when(receiver).searchForNewMessages(); - - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - return null; - } - }).when(receiver).fetchMessages(messages); + doAnswer(invocation -> null).when(receiver).fetchMessages(messages); final CountDownLatch idles = new CountDownLatch(2); - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - idles.countDown(); - Thread.sleep(5000); - return null; - } + doAnswer(invocation -> { + idles.countDown(); + Thread.sleep(5000); + return null; }).when(folder).idle(); adapter.start(); @@ -856,20 +687,10 @@ public class ImapMailReceiverTests { ImapIdleChannelAdapter adapter = new ImapIdleChannelAdapter(mailReceiver); final AtomicReference theEvent = new AtomicReference(); final CountDownLatch latch = new CountDownLatch(1); - adapter.setApplicationEventPublisher(new ApplicationEventPublisher() { - - @Override - public void publishEvent(ApplicationEvent event) { - assertNull("only one event expected", theEvent.get()); - theEvent.set((ImapIdleExceptionEvent) event); - latch.countDown(); - } - - @Override - public void publishEvent(Object event) { - - } - + adapter.setApplicationEventPublisher(event -> { + assertNull("only one event expected", theEvent.get()); + theEvent.set((ImapIdleExceptionEvent) event); + latch.countDown(); }); ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); taskScheduler.initialize(); @@ -898,34 +719,24 @@ public class ImapMailReceiverTests { receiver.setBeanFactory(mock(BeanFactory.class)); receiver.afterPropertiesSet(); - new Thread(new Runnable() { - - @Override - public void run() { - try { - receiver.receive(); - } - catch (javax.mail.MessagingException e) { - if (e.getCause() instanceof NullPointerException) { - e.printStackTrace(); - failed.getAndIncrement(); - } - } - + new Thread(() -> { + try { + receiver.receive(); } + catch (javax.mail.MessagingException e) { + if (e.getCause() instanceof NullPointerException) { + failed.getAndIncrement(); + } + } + }).start(); - new Thread(new Runnable() { - - @Override - public void run() { - try { - receiver.destroy(); - } - catch (Exception ignore) { - // ignore - ignore.printStackTrace(); - } + new Thread(() -> { + try { + receiver.destroy(); + } + catch (Exception ignore) { + // ignore } }).start(); } diff --git a/spring-integration-mail/src/test/java/org/springframework/integration/mail/MailReceivingMessageSourceTests.java b/spring-integration-mail/src/test/java/org/springframework/integration/mail/MailReceivingMessageSourceTests.java index 8919c5ef2f..8b877c6724 100644 --- a/spring-integration-mail/src/test/java/org/springframework/integration/mail/MailReceivingMessageSourceTests.java +++ b/spring-integration-mail/src/test/java/org/springframework/integration/mail/MailReceivingMessageSourceTests.java @@ -60,6 +60,10 @@ public class MailReceivingMessageSourceTests { private final ConcurrentLinkedQueue messages = new ConcurrentLinkedQueue(); + StubMailReceiver() { + super(); + } + @Override public javax.mail.Message[] receive() { return messages.poll(); diff --git a/spring-integration-mail/src/test/java/org/springframework/integration/mail/config/ImapIdleIntegrationTests.java b/spring-integration-mail/src/test/java/org/springframework/integration/mail/config/ImapIdleIntegrationTests.java index 49eae536df..658e14de2c 100644 --- a/spring-integration-mail/src/test/java/org/springframework/integration/mail/config/ImapIdleIntegrationTests.java +++ b/spring-integration-mail/src/test/java/org/springframework/integration/mail/config/ImapIdleIntegrationTests.java @@ -34,8 +34,6 @@ import javax.mail.Folder; import javax.mail.Message; import org.junit.Test; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.integration.mail.ImapIdleChannelAdapter; @@ -49,6 +47,7 @@ import org.springframework.util.ReflectionUtils; */ public class ImapIdleIntegrationTests { + @SuppressWarnings("resource") @Test public void testWithTransactionSynchronization() throws Exception { final AtomicBoolean block = new AtomicBoolean(false); @@ -62,17 +61,14 @@ public class ImapIdleIntegrationTests { // setup mock scenario receiver = spy(receiver); - doAnswer(new Answer() { // ensures that waitFornewMessages call blocks after a first execution + doAnswer(invocation -> { + // ensures that waitFornewMessages call blocks after a first execution // to emulate the behavior of IDLE - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - if (block.get()) { - Thread.sleep(5000); - } - block.set(true); - return null; + if (block.get()) { + Thread.sleep(5000); } + block.set(true); + return null; }).when(receiver).waitForNewMessages(); Message m1 = mock(Message.class); @@ -90,14 +86,9 @@ public class ImapIdleIntegrationTests { // end mock setup final CountDownLatch txProcessorLatch = new CountDownLatch(1); - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - txProcessorLatch.countDown(); - return null; - } - + doAnswer(invocation -> { + txProcessorLatch.countDown(); + return null; }).when(processor).process(any(Message.class)); adapter.start(); diff --git a/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/MongoDbMessageStore.java b/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/MongoDbMessageStore.java index 5c34b373c0..09b9f57941 100644 --- a/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/MongoDbMessageStore.java +++ b/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/MongoDbMessageStore.java @@ -212,6 +212,7 @@ public class MongoDbMessageStore extends AbstractMessageGroupStore return (messageWrapper != null) ? messageWrapper.getMessage() : null; } + @Override public MessageMetadata getMessageMetadata(UUID id) { Assert.notNull(id, "'id' must not be null"); MessageWrapper messageWrapper = @@ -474,7 +475,7 @@ public class MongoDbMessageStore extends AbstractMessageGroupStore */ private final class MessageReadingMongoConverter extends MappingMongoConverter { - private MessageReadingMongoConverter(MongoDbFactory mongoDbFactory, + MessageReadingMongoConverter(MongoDbFactory mongoDbFactory, MappingContext, MongoPersistentProperty> mappingContext) { super(new DefaultDbRefResolver(mongoDbFactory), mappingContext); } @@ -603,6 +604,10 @@ public class MongoDbMessageStore extends AbstractMessageGroupStore private static class UuidToDBObjectConverter implements Converter { + UuidToDBObjectConverter() { + super(); + } + @Override public DBObject convert(UUID source) { BasicDBObject dbObject = new BasicDBObject(); @@ -614,6 +619,10 @@ public class MongoDbMessageStore extends AbstractMessageGroupStore private static class DBObjectToUUIDConverter implements Converter { + DBObjectToUUIDConverter() { + super(); + } + @Override public UUID convert(DBObject source) { return UUID.fromString((String) source.get("_value")); @@ -623,6 +632,10 @@ public class MongoDbMessageStore extends AbstractMessageGroupStore private static class MessageHistoryToDBObjectConverter implements Converter { + MessageHistoryToDBObjectConverter() { + super(); + } + @Override public DBObject convert(MessageHistory source) { BasicDBObject obj = new BasicDBObject(); @@ -642,8 +655,11 @@ public class MongoDbMessageStore extends AbstractMessageGroupStore private class DBObjectToGenericMessageConverter implements Converter> { - @Override + DBObjectToGenericMessageConverter() { + super(); + } + @Override public GenericMessage convert(DBObject source) { @SuppressWarnings("unchecked") Map headers = @@ -660,6 +676,10 @@ public class MongoDbMessageStore extends AbstractMessageGroupStore private final class DBObjectToMutableMessageConverter implements Converter> { + DBObjectToMutableMessageConverter() { + super(); + } + @Override public MutableMessage convert(DBObject source) { @SuppressWarnings("unchecked") @@ -676,6 +696,10 @@ public class MongoDbMessageStore extends AbstractMessageGroupStore private class DBObjectToAdviceMessageConverter implements Converter> { + DBObjectToAdviceMessageConverter() { + super(); + } + @Override public AdviceMessage convert(DBObject source) { @SuppressWarnings("unchecked") @@ -711,6 +735,10 @@ public class MongoDbMessageStore extends AbstractMessageGroupStore private final Converter deserializingConverter = new DeserializingConverter(); + DBObjectToErrorMessageConverter() { + super(); + } + @Override public ErrorMessage convert(DBObject source) { @SuppressWarnings("unchecked") @@ -731,6 +759,10 @@ public class MongoDbMessageStore extends AbstractMessageGroupStore private final Converter serializingConverter = new SerializingConverter(); + ThrowableToBytesConverter() { + super(); + } + @Override public byte[] convert(Throwable source) { return this.serializingConverter.convert(source); @@ -783,7 +815,7 @@ public class MongoDbMessageStore extends AbstractMessageGroupStore @SuppressWarnings("unused") private int sequence; - private MessageWrapper(Message message) { + MessageWrapper(Message message) { Assert.notNull(message, "'message' must not be null"); this.message = message; this._messageType = message.getClass().getName(); diff --git a/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/AbstractMongoDbMessageStoreTests.java b/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/AbstractMongoDbMessageStoreTests.java index 2a08271fa3..812a0509a0 100644 --- a/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/AbstractMongoDbMessageStoreTests.java +++ b/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/AbstractMongoDbMessageStoreTests.java @@ -326,11 +326,12 @@ public abstract class AbstractMongoDbMessageStoreTests extends MongoDbAvailableT private final String name = "abx"; - private Abc() { } + Abc() { } public String getName() { return name; } + } public static class Xyz implements Serializable { @@ -342,7 +343,8 @@ public abstract class AbstractMongoDbMessageStoreTests extends MongoDbAvailableT @SuppressWarnings("unused") private final String name = "xyz"; - private Xyz() { } + Xyz() { } + } diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/AbstractMqttMessageDrivenChannelAdapter.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/AbstractMqttMessageDrivenChannelAdapter.java index 3a1a877d55..689a9f6486 100644 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/AbstractMqttMessageDrivenChannelAdapter.java +++ b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/AbstractMqttMessageDrivenChannelAdapter.java @@ -258,7 +258,7 @@ public abstract class AbstractMqttMessageDrivenChannelAdapter extends MessagePro private volatile int qos; - private Topic(String topic, int qos) { + Topic(String topic, int qos) { this.topic = topic; this.qos = qos; } diff --git a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/MqttPahoMessageDrivenChannelAdapter.java b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/MqttPahoMessageDrivenChannelAdapter.java index b297f4f09e..00be38c522 100644 --- a/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/MqttPahoMessageDrivenChannelAdapter.java +++ b/spring-integration-mqtt/src/main/java/org/springframework/integration/mqtt/inbound/MqttPahoMessageDrivenChannelAdapter.java @@ -275,23 +275,18 @@ public class MqttPahoMessageDrivenChannelAdapter extends AbstractMqttMessageDriv private void scheduleReconnect() { try { - this.reconnectFuture = this.getTaskScheduler().scheduleWithFixedDelay(new Runnable() { - - @Override - public void run() { - try { - if (logger.isDebugEnabled()) { - logger.debug("Attempting reconnect"); - } - if (!MqttPahoMessageDrivenChannelAdapter.this.connected) { - connectAndSubscribe(); - } + this.reconnectFuture = this.getTaskScheduler().scheduleWithFixedDelay(() -> { + try { + if (logger.isDebugEnabled()) { + logger.debug("Attempting reconnect"); } - catch (MqttException e) { - logger.error("Exception while connecting and subscribing", e); + if (!MqttPahoMessageDrivenChannelAdapter.this.connected) { + connectAndSubscribe(); } } - + catch (MqttException e) { + logger.error("Exception while connecting and subscribing", e); + } }, this.recoveryInterval); } catch (Exception e) { diff --git a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/BackToBackAdapterTests.java b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/BackToBackAdapterTests.java index d2d09aeae8..3774294fab 100644 --- a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/BackToBackAdapterTests.java +++ b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/BackToBackAdapterTests.java @@ -335,6 +335,10 @@ public class BackToBackAdapterTests { private final CountDownLatch latch = new CountDownLatch(2); + EventPublisher() { + super(); + } + @Override public void publishEvent(ApplicationEvent event) { if (event instanceof MqttMessageSentEvent) { diff --git a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/DownstreamExceptionTests.java b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/DownstreamExceptionTests.java index 8a7a4ddcbf..318d0645c4 100644 --- a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/DownstreamExceptionTests.java +++ b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/DownstreamExceptionTests.java @@ -35,8 +35,6 @@ import org.apache.commons.logging.Log; import org.junit.ClassRule; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; import org.springframework.beans.DirectFieldAccessor; import org.springframework.beans.factory.BeanFactory; @@ -80,15 +78,11 @@ public class DownstreamExceptionTests { service.n = 0; Log logger = spy(TestUtils.getPropertyValue(noErrorChannel, "logger", Log.class)); final CountDownLatch latch = new CountDownLatch(1); - doAnswer(new Answer() { - - @Override - public Void answer(InvocationOnMock invocation) throws Throwable { - if ((invocation.getArgumentAt(0, String.class)).contains("Unhandled")) { - latch.countDown(); - } - return null; + doAnswer(invocation -> { + if ((invocation.getArgumentAt(0, String.class)).contains("Unhandled")) { + latch.countDown(); } + return null; }).when(logger).error(anyString(), any(Throwable.class)); new DirectFieldAccessor(noErrorChannel).setPropertyValue("logger", logger); MqttPahoMessageHandler adapter = new MqttPahoMessageHandler("tcp://localhost:1883", "si-test-out"); diff --git a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/MqttAdapterTests.java b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/MqttAdapterTests.java index f1cad6bd96..df39ab9b7e 100644 --- a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/MqttAdapterTests.java +++ b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/MqttAdapterTests.java @@ -44,7 +44,6 @@ import java.util.concurrent.atomic.AtomicReference; import javax.net.SocketFactory; import org.aopalliance.intercept.MethodInterceptor; -import org.aopalliance.intercept.MethodInvocation; import org.eclipse.paho.client.mqttv3.IMqttToken; import org.eclipse.paho.client.mqttv3.MqttAsyncClient; import org.eclipse.paho.client.mqttv3.MqttCallback; @@ -56,8 +55,6 @@ import org.eclipse.paho.client.mqttv3.MqttSecurityException; import org.eclipse.paho.client.mqttv3.MqttToken; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import org.junit.Test; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; import org.springframework.aop.framework.ProxyFactoryBean; import org.springframework.beans.factory.BeanFactory; @@ -87,14 +84,7 @@ public class MqttAdapterTests { { ProxyFactoryBean pfb = new ProxyFactoryBean(); - pfb.addAdvice(new MethodInterceptor() { - - @Override - public Object invoke(MethodInvocation invocation) throws Throwable { - return null; - } - - }); + pfb.addAdvice((MethodInterceptor) invocation -> null); pfb.setInterfaces(IMqttToken.class); this.alwaysComplete = (IMqttToken) pfb.getObject(); } @@ -147,13 +137,7 @@ public class MqttAdapterTests { factory = spy(factory); final MqttAsyncClient client = mock(MqttAsyncClient.class); - doAnswer(new Answer() { - - @Override - public MqttAsyncClient answer(InvocationOnMock invocation) throws Throwable { - return client; - } - }).when(factory).getAsyncClientInstance(anyString(), anyString()); + doAnswer(invocation -> client).when(factory).getAsyncClientInstance(anyString(), anyString()); MqttPahoMessageHandler handler = new MqttPahoMessageHandler("foo", "bar", factory); handler.setDefaultTopic("mqtt-foo"); @@ -163,38 +147,30 @@ public class MqttAdapterTests { final MqttToken token = mock(MqttToken.class); final AtomicBoolean connectCalled = new AtomicBoolean(); - doAnswer(new Answer() { - - @Override - public MqttToken answer(InvocationOnMock invocation) throws Throwable { - MqttConnectOptions options = invocation.getArgumentAt(0, MqttConnectOptions.class); - assertEquals(23, options.getConnectionTimeout()); - assertEquals(45, options.getKeepAliveInterval()); - assertEquals("pass", new String(options.getPassword())); - assertSame(socketFactory, options.getSocketFactory()); - assertSame(props, options.getSSLProperties()); - assertEquals("user", options.getUserName()); - assertEquals("foo", options.getWillDestination()); - assertEquals("bar", new String(options.getWillMessage().getPayload())); - assertEquals(2, options.getWillMessage().getQos()); - connectCalled.set(true); - return token; - } + doAnswer(invocation -> { + MqttConnectOptions options = invocation.getArgumentAt(0, MqttConnectOptions.class); + assertEquals(23, options.getConnectionTimeout()); + assertEquals(45, options.getKeepAliveInterval()); + assertEquals("pass", new String(options.getPassword())); + assertSame(socketFactory, options.getSocketFactory()); + assertSame(props, options.getSSLProperties()); + assertEquals("user", options.getUserName()); + assertEquals("foo", options.getWillDestination()); + assertEquals("bar", new String(options.getWillMessage().getPayload())); + assertEquals(2, options.getWillMessage().getQos()); + connectCalled.set(true); + return token; }).when(client).connect(any(MqttConnectOptions.class)); doReturn(token).when(client).subscribe(any(String[].class), any(int[].class)); final MqttDeliveryToken deliveryToken = mock(MqttDeliveryToken.class); final AtomicBoolean publishCalled = new AtomicBoolean(); - doAnswer(new Answer() { - - @Override - public MqttDeliveryToken answer(InvocationOnMock invocation) throws Throwable { - assertEquals("mqtt-foo", invocation.getArguments()[0]); - MqttMessage message = invocation.getArgumentAt(1, MqttMessage.class); - assertEquals("Hello, world!", new String(message.getPayload())); - publishCalled.set(true); - return deliveryToken; - } + doAnswer(invocation -> { + assertEquals("mqtt-foo", invocation.getArguments()[0]); + MqttMessage message = invocation.getArgumentAt(1, MqttMessage.class); + assertEquals("Hello, world!", new String(message.getPayload())); + publishCalled.set(true); + return deliveryToken; }).when(client).publish(anyString(), any(MqttMessage.class)); handler.handleMessage(new GenericMessage("Hello, world!")); @@ -222,13 +198,7 @@ public class MqttAdapterTests { factory = spy(factory); final MqttAsyncClient client = mock(MqttAsyncClient.class); - doAnswer(new Answer() { - - @Override - public MqttAsyncClient answer(InvocationOnMock invocation) throws Throwable { - return client; - } - }).when(factory).getAsyncClientInstance(anyString(), anyString()); + doAnswer(invocation -> client).when(factory).getAsyncClientInstance(anyString(), anyString()); final MqttToken token = mock(MqttToken.class); final AtomicBoolean connectCalled = new AtomicBoolean(); @@ -237,41 +207,33 @@ public class MqttAdapterTests { final CountDownLatch failInProcess = new CountDownLatch(1); final CountDownLatch goodConnection = new CountDownLatch(2); final MqttException reconnectException = new MqttException(MqttException.REASON_CODE_SERVER_CONNECT_ERROR); - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - if (failConnection.get()) { - failInProcess.countDown(); - waitToFail.await(10, TimeUnit.SECONDS); - throw reconnectException; - } - MqttConnectOptions options = invocation.getArgumentAt(0, MqttConnectOptions.class); - assertEquals(23, options.getConnectionTimeout()); - assertEquals(45, options.getKeepAliveInterval()); - assertEquals("pass", new String(options.getPassword())); - assertSame(socketFactory, options.getSocketFactory()); - assertSame(props, options.getSSLProperties()); - assertEquals("user", options.getUserName()); - assertEquals("foo", options.getWillDestination()); - assertEquals("bar", new String(options.getWillMessage().getPayload())); - assertEquals(2, options.getWillMessage().getQos()); - connectCalled.set(true); - goodConnection.countDown(); - return token; + doAnswer(invocation -> { + if (failConnection.get()) { + failInProcess.countDown(); + waitToFail.await(10, TimeUnit.SECONDS); + throw reconnectException; } + MqttConnectOptions options = invocation.getArgumentAt(0, MqttConnectOptions.class); + assertEquals(23, options.getConnectionTimeout()); + assertEquals(45, options.getKeepAliveInterval()); + assertEquals("pass", new String(options.getPassword())); + assertSame(socketFactory, options.getSocketFactory()); + assertSame(props, options.getSSLProperties()); + assertEquals("user", options.getUserName()); + assertEquals("foo", options.getWillDestination()); + assertEquals("bar", new String(options.getWillMessage().getPayload())); + assertEquals(2, options.getWillMessage().getQos()); + connectCalled.set(true); + goodConnection.countDown(); + return token; }).when(client).connect(any(MqttConnectOptions.class)); doReturn(token).when(client).subscribe(any(String[].class), any(int[].class)); doReturn(token).when(client).disconnect(); final AtomicReference callback = new AtomicReference(); - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - callback.set(invocation.getArgumentAt(0, MqttCallback.class)); - return null; - } + doAnswer(invocation -> { + callback.set(invocation.getArgumentAt(0, MqttCallback.class)); + return null; }).when(client).setCallback(any(MqttCallback.class)); when(client.isConnected()).thenReturn(true); @@ -286,13 +248,9 @@ public class MqttAdapterTests { adapter.setBeanFactory(mock(BeanFactory.class)); ApplicationEventPublisher applicationEventPublisher = mock(ApplicationEventPublisher.class); final BlockingQueue events = new LinkedBlockingQueue(); - doAnswer(new Answer() { - - @Override - public Void answer(InvocationOnMock invocation) throws Throwable { - events.add(invocation.getArgumentAt(0, MqttIntegrationEvent.class)); - return null; - } + doAnswer(invocation -> { + events.add(invocation.getArgumentAt(0, MqttIntegrationEvent.class)); + return null; }).when(applicationEventPublisher).publishEvent(any(MqttIntegrationEvent.class)); adapter.setApplicationEventPublisher(applicationEventPublisher); adapter.setRecoveryInterval(500); diff --git a/spring-integration-redis/src/main/java/org/springframework/integration/redis/channel/SubscribableRedisChannel.java b/spring-integration-redis/src/main/java/org/springframework/integration/redis/channel/SubscribableRedisChannel.java index b3b55a5aab..887fab1642 100644 --- a/spring-integration-redis/src/main/java/org/springframework/integration/redis/channel/SubscribableRedisChannel.java +++ b/spring-integration-redis/src/main/java/org/springframework/integration/redis/channel/SubscribableRedisChannel.java @@ -123,7 +123,6 @@ public class SubscribableRedisChannel extends AbstractMessageChannel return this.dispatcher.removeHandler(handler); } - @SuppressWarnings("unchecked") @Override protected boolean doSend(Message message, long arg1) { this.redisTemplate.convertAndSend(this.topicName, this.messageConverter.fromMessage(message, Object.class)); @@ -212,7 +211,11 @@ public class SubscribableRedisChannel extends AbstractMessageChannel private class MessageListenerDelegate { - @SuppressWarnings({ "unused", "unchecked" }) + MessageListenerDelegate() { + super(); + } + + @SuppressWarnings({ "unused" }) public void handleMessage(Object payload) { Message siMessage = SubscribableRedisChannel.this.messageConverter.toMessage(payload, null); try { diff --git a/spring-integration-redis/src/main/java/org/springframework/integration/redis/inbound/RedisInboundChannelAdapter.java b/spring-integration-redis/src/main/java/org/springframework/integration/redis/inbound/RedisInboundChannelAdapter.java index 58773ebdff..3775962003 100644 --- a/spring-integration-redis/src/main/java/org/springframework/integration/redis/inbound/RedisInboundChannelAdapter.java +++ b/spring-integration-redis/src/main/java/org/springframework/integration/redis/inbound/RedisInboundChannelAdapter.java @@ -138,6 +138,10 @@ public class RedisInboundChannelAdapter extends MessageProducerSupport { private class MessageListenerDelegate { + MessageListenerDelegate() { + super(); + } + @SuppressWarnings("unused") public void handleMessage(Object object) { sendMessage(convertMessage(object)); diff --git a/spring-integration-redis/src/main/java/org/springframework/integration/redis/inbound/RedisQueueInboundGateway.java b/spring-integration-redis/src/main/java/org/springframework/integration/redis/inbound/RedisQueueInboundGateway.java index d11ac5c3d1..21859925e2 100644 --- a/spring-integration-redis/src/main/java/org/springframework/integration/redis/inbound/RedisQueueInboundGateway.java +++ b/spring-integration-redis/src/main/java/org/springframework/integration/redis/inbound/RedisQueueInboundGateway.java @@ -332,6 +332,10 @@ public class RedisQueueInboundGateway extends MessagingGatewaySupport implements private class ListenerTask implements SchedulingAwareRunnable { + ListenerTask() { + super(); + } + @Override public boolean isLongLived() { return true; diff --git a/spring-integration-redis/src/main/java/org/springframework/integration/redis/inbound/RedisQueueMessageDrivenEndpoint.java b/spring-integration-redis/src/main/java/org/springframework/integration/redis/inbound/RedisQueueMessageDrivenEndpoint.java index d91bfb14fb..825b09a356 100644 --- a/spring-integration-redis/src/main/java/org/springframework/integration/redis/inbound/RedisQueueMessageDrivenEndpoint.java +++ b/spring-integration-redis/src/main/java/org/springframework/integration/redis/inbound/RedisQueueMessageDrivenEndpoint.java @@ -321,6 +321,10 @@ public class RedisQueueMessageDrivenEndpoint extends MessageProducerSupport impl private class ListenerTask implements SchedulingAwareRunnable { + ListenerTask() { + super(); + } + @Override public boolean isLongLived() { return true; diff --git a/spring-integration-redis/src/main/java/org/springframework/integration/redis/outbound/RedisOutboundGateway.java b/spring-integration-redis/src/main/java/org/springframework/integration/redis/outbound/RedisOutboundGateway.java index fda5cc522e..8e9f58004c 100644 --- a/spring-integration-redis/src/main/java/org/springframework/integration/redis/outbound/RedisOutboundGateway.java +++ b/spring-integration-redis/src/main/java/org/springframework/integration/redis/outbound/RedisOutboundGateway.java @@ -16,8 +16,6 @@ package org.springframework.integration.redis.outbound; -import org.springframework.dao.DataAccessException; -import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisTemplate; @@ -135,18 +133,16 @@ public class RedisOutboundGateway extends AbstractReplyProducingMessageHandler { final byte[][] actualArgs = args; - return this.redisTemplate.execute(new RedisCallback() { - - @Override - public Object doInRedis(RedisConnection connection) throws DataAccessException { - return connection.execute(command, actualArgs); - } - - }); + return this.redisTemplate.execute( + (RedisCallback) connection -> connection.execute(command, actualArgs)); } private class PayloadArgumentsStrategy implements ArgumentsStrategy { + PayloadArgumentsStrategy() { + super(); + } + @Override public Object[] resolve(String command, Message message) { Object payload = message.getPayload(); diff --git a/spring-integration-redis/src/main/java/org/springframework/integration/redis/outbound/RedisStoreWritingMessageHandler.java b/spring-integration-redis/src/main/java/org/springframework/integration/redis/outbound/RedisStoreWritingMessageHandler.java index b73c7144cd..24f384fe4c 100644 --- a/spring-integration-redis/src/main/java/org/springframework/integration/redis/outbound/RedisStoreWritingMessageHandler.java +++ b/spring-integration-redis/src/main/java/org/springframework/integration/redis/outbound/RedisStoreWritingMessageHandler.java @@ -288,26 +288,20 @@ public class RedisStoreWritingMessageHandler extends AbstractMessageHandler { if (this.extractPayloadElements) { if ((payload instanceof Map && this.verifyAllMapValuesOfTypeNumber((Map) payload))) { final Map payloadAsMap = (Map) payload; - this.processInPipeline(new PipelineCallback() { - @Override - public void process() { - for (Entry entry : payloadAsMap.entrySet()) { - Number d = entry.getValue(); - incrementOrOverwrite(ops, entry.getKey(), d == null ? - determineScore(message) : - NumberUtils.convertNumberToTargetClass(d, Double.class), - zsetIncrementHeader); - } + this.processInPipeline(() -> { + for (Entry entry : payloadAsMap.entrySet()) { + Number d = entry.getValue(); + incrementOrOverwrite(ops, entry.getKey(), d == null ? + determineScore(message) : + NumberUtils.convertNumberToTargetClass(d, Double.class), + zsetIncrementHeader); } }); } else if (payload instanceof Collection) { - this.processInPipeline(new PipelineCallback() { - @Override - public void process() { - for (Object object : ((Collection) payload)) { - incrementOrOverwrite(ops, object, determineScore(message), zsetIncrementHeader); - } + this.processInPipeline(() -> { + for (Object object : ((Collection) payload)) { + incrementOrOverwrite(ops, object, determineScore(message), zsetIncrementHeader); } }); } @@ -350,12 +344,9 @@ public class RedisStoreWritingMessageHandler extends AbstractMessageHandler { final BoundSetOperations ops = (BoundSetOperations) this.redisTemplate.boundSetOps(set.getKey()); - this.processInPipeline(new PipelineCallback() { - @Override - public void process() { - for (Object object : ((Collection) payload)) { - ops.add(object); - } + this.processInPipeline(() -> { + for (Object object : ((Collection) payload)) { + ops.add(object); } }); } @@ -368,12 +359,7 @@ public class RedisStoreWritingMessageHandler extends AbstractMessageHandler { private void writeToMap(final RedisMap map, Message message) { final Object payload = message.getPayload(); if (this.extractPayloadElements && payload instanceof Map) { - this.processInPipeline(new PipelineCallback() { - @Override - public void process() { - map.putAll((Map) payload); - } - }); + this.processInPipeline(() -> map.putAll((Map) payload)); } else { Object key = this.determineMapKey(message, false); @@ -384,12 +370,7 @@ public class RedisStoreWritingMessageHandler extends AbstractMessageHandler { private void writeToProperties(final RedisProperties properties, Message message) { final Object payload = message.getPayload(); if (this.extractPayloadElements && payload instanceof Properties) { - this.processInPipeline(new PipelineCallback() { - @Override - public void process() { - properties.putAll((Properties) payload); - } - }); + this.processInPipeline(() -> properties.putAll((Properties) payload)); } else { Assert.isInstanceOf(String.class, payload, "For property, payload must be a String."); @@ -482,4 +463,5 @@ public class RedisStoreWritingMessageHandler extends AbstractMessageHandler { private interface PipelineCallback { void process(); } + } diff --git a/spring-integration-redis/src/main/java/org/springframework/integration/redis/store/RedisChannelPriorityMessageStore.java b/spring-integration-redis/src/main/java/org/springframework/integration/redis/store/RedisChannelPriorityMessageStore.java index 0a36b2b7a5..4d19bed227 100644 --- a/spring-integration-redis/src/main/java/org/springframework/integration/redis/store/RedisChannelPriorityMessageStore.java +++ b/spring-integration-redis/src/main/java/org/springframework/integration/redis/store/RedisChannelPriorityMessageStore.java @@ -47,14 +47,7 @@ import org.springframework.util.Assert; public class RedisChannelPriorityMessageStore extends RedisChannelMessageStore implements PriorityCapableChannelMessageStore { - private final Comparator keysComparator = new Comparator() { - - @Override - public int compare(String s1, String s2) { - return s2.compareTo(s1); - } - - }; + private final Comparator keysComparator = (s1, s2) -> s2.compareTo(s1); public RedisChannelPriorityMessageStore(RedisConnectionFactory connectionFactory) { super(connectionFactory); diff --git a/spring-integration-redis/src/main/java/org/springframework/integration/redis/util/RedisLockRegistry.java b/spring-integration-redis/src/main/java/org/springframework/integration/redis/util/RedisLockRegistry.java index a83349cdba..b0ce9b6821 100644 --- a/spring-integration-redis/src/main/java/org/springframework/integration/redis/util/RedisLockRegistry.java +++ b/spring-integration-redis/src/main/java/org/springframework/integration/redis/util/RedisLockRegistry.java @@ -20,7 +20,6 @@ import java.net.InetAddress; import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -32,13 +31,12 @@ import java.util.WeakHashMap; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; +import java.util.stream.Collectors; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.dao.CannotAcquireLockException; -import org.springframework.dao.DataAccessException; -import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisTemplate; @@ -153,7 +151,7 @@ public final class RedisLockRegistry implements LockRegistry { Assert.notNull(connectionFactory, "'connectionFactory' cannot be null"); Assert.notNull(registryKey, "'registryKey' cannot be null"); Assert.notNull(localRegistry, "'localRegistry' cannot be null"); - this.redisTemplate = new RedisTemplate(); + this.redisTemplate = new RedisTemplate<>(); this.redisTemplate.setConnectionFactory(connectionFactory); this.redisTemplate.setKeySerializer(new StringRedisSerializer()); this.redisTemplate.setValueSerializer(this.lockSerializer); @@ -198,7 +196,7 @@ public final class RedisLockRegistry implements LockRegistry { private Collection getHardThreadLocks() { List locks = this.hardThreadLocks.get(); if (locks == null) { - locks = new LinkedList(); + locks = new LinkedList<>(); this.hardThreadLocks.set(locks); } return locks; @@ -293,20 +291,15 @@ public final class RedisLockRegistry implements LockRegistry { } public Collection listLocks() { - return this.redisTemplate.execute(new RedisCallback>() { - - @Override - public Collection doInRedis(RedisConnection connection) throws DataAccessException { - Set keys = connection.keys((RedisLockRegistry.this.registryKey + ":*").getBytes()); - ArrayList list = new ArrayList(keys.size()); - if (keys.size() > 0) { - List locks = connection.mGet(keys.toArray(new byte[keys.size()][])); - for (byte[] lock : locks) { - list.add(RedisLockRegistry.this.lockSerializer.deserialize(lock)); - } - } - return list; + return this.redisTemplate.execute((RedisCallback>) connection -> { + Set keys = connection.keys((RedisLockRegistry.this.registryKey + ":*").getBytes()); + if (keys.size() > 0) { + List locks = connection.mGet(keys.toArray(new byte[keys.size()][])); + return locks.stream() + .map(RedisLockRegistry.this.lockSerializer::deserialize) + .collect(Collectors.toList()); } + return Collections.emptyList(); }); } @@ -324,7 +317,7 @@ public final class RedisLockRegistry implements LockRegistry { private int reLock; - private RedisLock(String lockKey) { + RedisLock(String lockKey) { this.lockKey = lockKey; this.lockHost = RedisLockRegistry.hostName; } @@ -420,30 +413,25 @@ public final class RedisLockRegistry implements LockRegistry { Boolean success = false; try { - success = RedisLockRegistry.this.redisTemplate.execute(new RedisCallback() { + success = RedisLockRegistry.this.redisTemplate.execute((RedisCallback) connection -> { - @Override - public Boolean doInRedis(RedisConnection connection) throws DataAccessException { - - /* - Perform Redis command 'SET resource-name anystring NX EX max-lock-time' directly. - As it is recommended by Redis: http://redis.io/commands/set. - This command isn't supported directly by RedisTemplate. - */ - long expireAfter = TimeoutUtils.toSeconds(RedisLockRegistry.this.expireAfter, - TimeUnit.MILLISECONDS); - RedisSerializer serializer = RedisLockRegistry.this.redisTemplate.getStringSerializer(); - byte[][] actualArgs = new byte[][] { - serializer.serialize(constructLockKey()), - RedisLockRegistry.this.lockSerializer.serialize(RedisLock.this), - serializer.serialize("NX"), - serializer.serialize("EX"), - serializer.serialize(String.valueOf(expireAfter)) - }; - - return connection.execute("SET", actualArgs) != null; - } + /* + Perform Redis command 'SET resource-name anystring NX EX max-lock-time' directly. + As it is recommended by Redis: http://redis.io/commands/set. + This command isn't supported directly by RedisTemplate. + */ + long expireAfter = TimeoutUtils.toSeconds(RedisLockRegistry.this.expireAfter, + TimeUnit.MILLISECONDS); + RedisSerializer serializer = RedisLockRegistry.this.redisTemplate.getStringSerializer(); + byte[][] actualArgs = new byte[][] { + serializer.serialize(constructLockKey()), + RedisLockRegistry.this.lockSerializer.serialize(RedisLock.this), + serializer.serialize("NX"), + serializer.serialize("EX"), + serializer.serialize(String.valueOf(expireAfter)) + }; + return connection.execute("SET", actualArgs) != null; }); } finally { @@ -603,6 +591,10 @@ public final class RedisLockRegistry implements LockRegistry { private class LockSerializer implements RedisSerializer { + LockSerializer() { + super(); + } + @Override public byte[] serialize(RedisLock t) throws SerializationException { int hostLength = t.lockHost.length; diff --git a/spring-integration-redis/src/test/java/org/springframework/integration/redis/channel/SubscribableRedisChannelTests.java b/spring-integration-redis/src/test/java/org/springframework/integration/redis/channel/SubscribableRedisChannelTests.java index 3913fd2535..12b9805238 100644 --- a/spring-integration-redis/src/test/java/org/springframework/integration/redis/channel/SubscribableRedisChannelTests.java +++ b/spring-integration-redis/src/test/java/org/springframework/integration/redis/channel/SubscribableRedisChannelTests.java @@ -38,9 +38,7 @@ import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; import org.springframework.integration.redis.rules.RedisAvailable; import org.springframework.integration.redis.rules.RedisAvailableTests; import org.springframework.integration.test.util.TestUtils; -import org.springframework.messaging.Message; import org.springframework.messaging.MessageHandler; -import org.springframework.messaging.MessagingException; import org.springframework.messaging.support.GenericMessage; import org.springframework.util.ReflectionUtils; /** @@ -66,13 +64,7 @@ public class SubscribableRedisChannelTests extends RedisAvailableTests { RedisMessageListenerContainer.class)); final CountDownLatch latch = new CountDownLatch(3); - MessageHandler handler = new MessageHandler() { - - @Override - public void handleMessage(Message message) throws MessagingException { - latch.countDown(); - } - }; + MessageHandler handler = message -> latch.countDown(); channel.subscribe(handler); channel.send(new GenericMessage("1")); diff --git a/spring-integration-redis/src/test/java/org/springframework/integration/redis/config/RedisChannelParserTests.java b/spring-integration-redis/src/test/java/org/springframework/integration/redis/config/RedisChannelParserTests.java index 39b8ca6403..c66d49297d 100644 --- a/spring-integration-redis/src/test/java/org/springframework/integration/redis/config/RedisChannelParserTests.java +++ b/spring-integration-redis/src/test/java/org/springframework/integration/redis/config/RedisChannelParserTests.java @@ -34,8 +34,6 @@ import org.springframework.integration.redis.rules.RedisAvailableTests; import org.springframework.integration.support.utils.IntegrationUtils; import org.springframework.integration.test.util.TestUtils; import org.springframework.messaging.Message; -import org.springframework.messaging.MessageHandler; -import org.springframework.messaging.MessagingException; import org.springframework.messaging.SubscribableChannel; import org.springframework.messaging.support.GenericMessage; @@ -81,12 +79,9 @@ public class RedisChannelParserTests extends RedisAvailableTests { final Message m = new GenericMessage("Hello Redis"); final CountDownLatch latch = new CountDownLatch(1); - redisChannel.subscribe(new MessageHandler() { - @Override - public void handleMessage(Message message) throws MessagingException { - assertEquals(m.getPayload(), message.getPayload()); - latch.countDown(); - } + redisChannel.subscribe(message -> { + assertEquals(m.getPayload(), message.getPayload()); + latch.countDown(); }); redisChannel.send(m); diff --git a/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/RedisQueueMessageDrivenEndpointTests.java b/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/RedisQueueMessageDrivenEndpointTests.java index 25f2ef1f43..910d2787aa 100644 --- a/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/RedisQueueMessageDrivenEndpointTests.java +++ b/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/RedisQueueMessageDrivenEndpointTests.java @@ -45,7 +45,6 @@ import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEvent; -import org.springframework.context.ApplicationEventPublisher; import org.springframework.data.redis.RedisConnectionFailureException; import org.springframework.data.redis.RedisSystemException; import org.springframework.data.redis.connection.RedisConnectionFactory; @@ -262,14 +261,7 @@ public class RedisQueueMessageDrivenEndpointTests extends RedisAvailableTests { final CountDownLatch stopLatch = new CountDownLatch(1); - endpoint.stop(new Runnable() { - - @Override - public void run() { - stopLatch.countDown(); - } - - }); + endpoint.stop(() -> stopLatch.countDown()); executorService.shutdown(); assertTrue(executorService.awaitTermination(10, TimeUnit.SECONDS)); @@ -282,7 +274,6 @@ public class RedisQueueMessageDrivenEndpointTests extends RedisAvailableTests { @Test @RedisAvailable - @SuppressWarnings("unchecked") @Ignore("JedisConnectionFactory doesn't support proper 'destroy()' and allows to create new fresh Redis connection") public void testInt3196Recovery() throws Exception { String queueName = "test.si.Int3196Recovery"; @@ -294,19 +285,9 @@ public class RedisQueueMessageDrivenEndpointTests extends RedisAvailableTests { RedisQueueMessageDrivenEndpoint endpoint = new RedisQueueMessageDrivenEndpoint(queueName, this.connectionFactory); endpoint.setBeanFactory(Mockito.mock(BeanFactory.class)); - endpoint.setApplicationEventPublisher(new ApplicationEventPublisher() { - - @Override - public void publishEvent(ApplicationEvent event) { - exceptionEvents.add(event); - exceptionsLatch.countDown(); - } - - @Override - public void publishEvent(Object event) { - - } - + endpoint.setApplicationEventPublisher(event -> { + exceptionEvents.add((ApplicationEvent) event); + exceptionsLatch.countDown(); }); endpoint.setOutputChannel(channel); endpoint.setReceiveTimeout(100); diff --git a/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/RedisStoreInboundChannelAdapterIntegrationTests.java b/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/RedisStoreInboundChannelAdapterIntegrationTests.java index e78775f35d..fd4a49e68a 100644 --- a/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/RedisStoreInboundChannelAdapterIntegrationTests.java +++ b/spring-integration-redis/src/test/java/org/springframework/integration/redis/inbound/RedisStoreInboundChannelAdapterIntegrationTests.java @@ -35,8 +35,6 @@ import org.springframework.integration.endpoint.SourcePollingChannelAdapter; import org.springframework.integration.redis.rules.RedisAvailable; import org.springframework.integration.redis.rules.RedisAvailableTests; import org.springframework.messaging.Message; -import org.springframework.messaging.MessageHandler; -import org.springframework.messaging.MessagingException; import org.springframework.messaging.SubscribableChannel; /** @@ -108,6 +106,7 @@ public class RedisStoreInboundChannelAdapterIntegrationTests extends RedisAvaila context.close(); } + @SuppressWarnings("resource") @Test @RedisAvailable // synchronization rollback renames the list @@ -120,14 +119,9 @@ public class RedisStoreInboundChannelAdapterIntegrationTests extends RedisAvaila this.getClass()); SubscribableChannel fail = context.getBean("redisFailChannel", SubscribableChannel.class); final CountDownLatch latch = new CountDownLatch(1); - fail.subscribe(new MessageHandler() { - - @Override - public void handleMessage(Message message) throws MessagingException { - latch.countDown(); - throw new RuntimeException("Test Rollback"); - } - + fail.subscribe(message -> { + latch.countDown(); + throw new RuntimeException("Test Rollback"); }); SourcePollingChannelAdapter spca = context.getBean("listAdapterWithSynchronizationAndRollback", SourcePollingChannelAdapter.class); diff --git a/spring-integration-redis/src/test/java/org/springframework/integration/redis/outbound/RedisPublishingMessageHandlerTests.java b/spring-integration-redis/src/test/java/org/springframework/integration/redis/outbound/RedisPublishingMessageHandlerTests.java index 4ca823f299..5a00d388d1 100644 --- a/spring-integration-redis/src/test/java/org/springframework/integration/redis/outbound/RedisPublishingMessageHandlerTests.java +++ b/spring-integration-redis/src/test/java/org/springframework/integration/redis/outbound/RedisPublishingMessageHandlerTests.java @@ -83,7 +83,7 @@ public class RedisPublishingMessageHandlerTests extends RedisAvailableTests { private final CountDownLatch latch; - private Listener(CountDownLatch latch) { + Listener(CountDownLatch latch) { this.latch = latch; } diff --git a/spring-integration-redis/src/test/java/org/springframework/integration/redis/store/RedisMessageGroupStoreTests.java b/spring-integration-redis/src/test/java/org/springframework/integration/redis/store/RedisMessageGroupStoreTests.java index d0f1e711a2..87a8ba0f71 100644 --- a/spring-integration-redis/src/test/java/org/springframework/integration/redis/store/RedisMessageGroupStoreTests.java +++ b/spring-integration-redis/src/test/java/org/springframework/integration/redis/store/RedisMessageGroupStoreTests.java @@ -327,27 +327,19 @@ public class RedisMessageGroupStoreTests extends RedisAvailableTests { for (int i = 0; i < 100; i++) { executor = Executors.newCachedThreadPool(); - executor.execute(new Runnable() { - - @Override - public void run() { - MessageGroup group = store1.addMessageToGroup(1, message); - if (group.getMessages().size() != 1) { - failures.add("ADD"); - throw new AssertionFailedError("Failed on ADD"); - } + executor.execute(() -> { + MessageGroup group = store1.addMessageToGroup(1, message); + if (group.getMessages().size() != 1) { + failures.add("ADD"); + throw new AssertionFailedError("Failed on ADD"); } }); - executor.execute(new Runnable() { - - @Override - public void run() { - store2.removeMessagesFromGroup(1, message); - MessageGroup group = store2.getMessageGroup(1); - if (group.getMessages().size() != 0) { - failures.add("REMOVE"); - throw new AssertionFailedError("Failed on Remove"); - } + executor.execute(() -> { + store2.removeMessagesFromGroup(1, message); + MessageGroup group = store2.getMessageGroup(1); + if (group.getMessages().size() != 0) { + failures.add("REMOVE"); + throw new AssertionFailedError("Failed on Remove"); } }); diff --git a/spring-integration-redis/src/test/java/org/springframework/integration/redis/util/AggregatorWithRedisLocksTests.java b/spring-integration-redis/src/test/java/org/springframework/integration/redis/util/AggregatorWithRedisLocksTests.java index 76cb10998c..55f8185dbf 100644 --- a/spring-integration-redis/src/test/java/org/springframework/integration/redis/util/AggregatorWithRedisLocksTests.java +++ b/spring-integration-redis/src/test/java/org/springframework/integration/redis/util/AggregatorWithRedisLocksTests.java @@ -131,17 +131,12 @@ public class AggregatorWithRedisLocksTests extends RedisAvailableTests { public void testDistributedAggregator() throws Exception { this.releaseStrategy.reset(1); Executors.newSingleThreadExecutor().execute(asyncSend("foo", 1, 1)); - Executors.newSingleThreadExecutor().execute(new Runnable() { - - @Override - public void run() { - try { - in2.send(new GenericMessage("bar", stubHeaders(2, 2, 1))); - } - catch (Exception e) { - e.printStackTrace(); - exception = e; - } + Executors.newSingleThreadExecutor().execute(() -> { + try { + in2.send(new GenericMessage("bar", stubHeaders(2, 2, 1))); + } + catch (Exception e) { + exception = e; } }); assertTrue(this.releaseStrategy.latch2.await(10, TimeUnit.SECONDS)); @@ -162,17 +157,12 @@ public class AggregatorWithRedisLocksTests extends RedisAvailableTests { } private Runnable asyncSend(final String payload, final int sequence, final int correlation) { - return new Runnable() { - - @Override - public void run() { - try { - in.send(new GenericMessage(payload, stubHeaders(sequence, 2, correlation))); - } - catch (Exception e) { - e.printStackTrace(); - exception = e; - } + return () -> { + try { + in.send(new GenericMessage(payload, stubHeaders(sequence, 2, correlation))); + } + catch (Exception e) { + exception = e; } }; } diff --git a/spring-integration-redis/src/test/java/org/springframework/integration/redis/util/RedisLockRegistryTests.java b/spring-integration-redis/src/test/java/org/springframework/integration/redis/util/RedisLockRegistryTests.java index 3dd32f4380..cc156a93e8 100644 --- a/spring-integration-redis/src/test/java/org/springframework/integration/redis/util/RedisLockRegistryTests.java +++ b/spring-integration-redis/src/test/java/org/springframework/integration/redis/util/RedisLockRegistryTests.java @@ -31,7 +31,6 @@ import static org.junit.Assert.fail; import java.util.Collection; import java.util.UUID; -import java.util.concurrent.Callable; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executors; import java.util.concurrent.Future; @@ -82,7 +81,7 @@ public class RedisLockRegistryTests extends RedisAvailableTests { } private RedisTemplate createTemplate() { - RedisTemplate template = new RedisTemplate(); + RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(this.getConnectionFactoryForTest()); template.setKeySerializer(new StringRedisSerializer()); template.afterPropertiesSet(); @@ -206,21 +205,17 @@ public class RedisLockRegistryTests extends RedisAvailableTests { lock1.lockInterruptibly(); final AtomicBoolean locked = new AtomicBoolean(); final CountDownLatch latch = new CountDownLatch(1); - Future result = Executors.newSingleThreadExecutor().submit(new Callable() { - - @Override - public Object call() throws Exception { - Lock lock2 = registry.obtain("foo"); - locked.set(lock2.tryLock(200, TimeUnit.MILLISECONDS)); - latch.countDown(); - try { - lock2.unlock(); - } - catch (IllegalStateException ise) { - return ise; - } - return null; + Future result = Executors.newSingleThreadExecutor().submit(() -> { + Lock lock2 = registry.obtain("foo"); + locked.set(lock2.tryLock(200, TimeUnit.MILLISECONDS)); + latch.countDown(); + try { + lock2.unlock(); } + catch (IllegalStateException ise) { + return ise; + } + return null; }); assertTrue(latch.await(10, TimeUnit.SECONDS)); assertFalse(locked.get()); @@ -242,25 +237,21 @@ public class RedisLockRegistryTests extends RedisAvailableTests { final CountDownLatch latch3 = new CountDownLatch(1); lock1.lockInterruptibly(); assertNotNull(TestUtils.getPropertyValue(registry, "hardThreadLocks", ThreadLocal.class).get()); - Executors.newSingleThreadExecutor().execute(new Runnable() { - - @Override - public void run() { - Lock lock2 = registry.obtain("foo"); - try { - latch1.countDown(); - lock2.lockInterruptibly(); - assertNotNull(TestUtils.getPropertyValue(registry, "hardThreadLocks", ThreadLocal.class).get()); - latch2.await(10, TimeUnit.SECONDS); - locked.set(true); - } - catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - finally { - lock2.unlock(); - latch3.countDown(); - } + Executors.newSingleThreadExecutor().execute(() -> { + Lock lock2 = registry.obtain("foo"); + try { + latch1.countDown(); + lock2.lockInterruptibly(); + assertNotNull(TestUtils.getPropertyValue(registry, "hardThreadLocks", ThreadLocal.class).get()); + latch2.await(10, TimeUnit.SECONDS); + locked.set(true); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + finally { + lock2.unlock(); + latch3.countDown(); } }); assertTrue(latch1.await(10, TimeUnit.SECONDS)); @@ -284,31 +275,26 @@ public class RedisLockRegistryTests extends RedisAvailableTests { final CountDownLatch latch3 = new CountDownLatch(1); lock1.lockInterruptibly(); assertNotNull(TestUtils.getPropertyValue(registry1, "hardThreadLocks", ThreadLocal.class).get()); - Executors.newSingleThreadExecutor().execute(new Runnable() { - - @Override - public void run() { - Lock lock2 = registry2.obtain("foo"); + Executors.newSingleThreadExecutor().execute(() -> { + Lock lock2 = registry2.obtain("foo"); + try { + latch1.countDown(); + lock2.lockInterruptibly(); + assertNotNull(TestUtils.getPropertyValue(registry2, "hardThreadLocks", ThreadLocal.class).get()); + latch2.await(10, TimeUnit.SECONDS); + locked.set(true); + } + catch (InterruptedException e1) { + Thread.currentThread().interrupt(); + logger.error("Interrupted while locking: " + lock2, e1); + } + finally { try { - latch1.countDown(); - lock2.lockInterruptibly(); - assertNotNull(TestUtils.getPropertyValue(registry2, "hardThreadLocks", ThreadLocal.class).get()); - latch2.await(10, TimeUnit.SECONDS); - locked.set(true); - logger.debug("Locks in store: " + registry2.listLocks()); + lock2.unlock(); + latch3.countDown(); } - catch (InterruptedException e) { - Thread.currentThread().interrupt(); - logger.error("Interrupted while locking: " + lock2, e); - } - finally { - try { - lock2.unlock(); - latch3.countDown(); - } - catch (IllegalStateException e) { - logger.error("Failed to unlock: " + lock2, e); - } + catch (IllegalStateException e2) { + logger.error("Failed to unlock: " + lock2, e2); } } }); @@ -330,19 +316,15 @@ public class RedisLockRegistryTests extends RedisAvailableTests { lock.lockInterruptibly(); final AtomicBoolean locked = new AtomicBoolean(); final CountDownLatch latch = new CountDownLatch(1); - Future result = Executors.newSingleThreadExecutor().submit(new Callable() { - - @Override - public Object call() throws Exception { - try { - lock.unlock(); - } - catch (IllegalStateException ise) { - latch.countDown(); - return ise; - } - return null; + Future result = Executors.newSingleThreadExecutor().submit(() -> { + try { + lock.unlock(); } + catch (IllegalStateException ise) { + latch.countDown(); + return ise; + } + return null; }); assertTrue(latch.await(10, TimeUnit.SECONDS)); assertFalse(locked.get()); @@ -500,15 +482,10 @@ public class RedisLockRegistryTests extends RedisAvailableTests { Long expire = getExpire(registry, "foo"); - Future result = Executors.newSingleThreadExecutor().submit(new Callable() { - - @Override - public Object call() throws Exception { - Lock lock2 = registry.obtain("foo"); - assertFalse(lock2.tryLock()); - return null; - } - + Future result = Executors.newSingleThreadExecutor().submit(() -> { + Lock lock2 = registry.obtain("foo"); + assertFalse(lock2.tryLock()); + return null; }); result.get(); assertEquals(expire, getExpire(registry, "foo")); diff --git a/spring-integration-rmi/src/test/java/org/springframework/integration/rmi/RmiOutboundGatewayTests.java b/spring-integration-rmi/src/test/java/org/springframework/integration/rmi/RmiOutboundGatewayTests.java index 68af9d0528..3cd9914507 100644 --- a/spring-integration-rmi/src/test/java/org/springframework/integration/rmi/RmiOutboundGatewayTests.java +++ b/spring-integration-rmi/src/test/java/org/springframework/integration/rmi/RmiOutboundGatewayTests.java @@ -27,15 +27,15 @@ import java.rmi.RemoteException; import org.junit.Before; import org.junit.Test; -import org.springframework.messaging.Message; -import org.springframework.messaging.MessageHandlingException; -import org.springframework.messaging.MessagingException; import org.springframework.integration.channel.QueueChannel; import org.springframework.integration.gateway.RequestReplyExchanger; import org.springframework.integration.handler.AbstractReplyProducingMessageHandler; -import org.springframework.messaging.support.GenericMessage; import org.springframework.integration.support.MessageBuilder; import org.springframework.integration.test.util.SocketUtils; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageHandlingException; +import org.springframework.messaging.MessagingException; +import org.springframework.messaging.support.GenericMessage; import org.springframework.remoting.RemoteLookupFailureException; import org.springframework.remoting.rmi.RmiServiceExporter; @@ -160,6 +160,11 @@ public class RmiOutboundGatewayTests { private static class TestExchanger implements RequestReplyExchanger { + TestExchanger() { + super(); + } + + @Override public Message exchange(Message message) { if (message.getPayload().equals("fail")) { new AbstractReplyProducingMessageHandler() { @@ -176,6 +181,11 @@ public class RmiOutboundGatewayTests { private static class NonSerializableTestObject { + + NonSerializableTestObject() { + super(); + } + } } diff --git a/spring-integration-scripting/src/test/java/org/springframework/integration/scripting/config/jsr223/Jsr223RefreshTests.java b/spring-integration-scripting/src/test/java/org/springframework/integration/scripting/config/jsr223/Jsr223RefreshTests.java index d9c5dac5a9..a4c46eabed 100644 --- a/spring-integration-scripting/src/test/java/org/springframework/integration/scripting/config/jsr223/Jsr223RefreshTests.java +++ b/spring-integration-scripting/src/test/java/org/springframework/integration/scripting/config/jsr223/Jsr223RefreshTests.java @@ -26,11 +26,12 @@ import java.io.InputStream; import org.junit.Test; import org.junit.runner.RunWith; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.AbstractResource; -import org.springframework.messaging.MessageChannel; import org.springframework.integration.channel.QueueChannel; import org.springframework.integration.support.MessageBuilder; +import org.springframework.messaging.MessageChannel; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -67,8 +68,13 @@ public class Jsr223RefreshTests { private static class CycleResource extends AbstractResource { private int count = -1; - private String[] scripts = {"\"ruby-#{payload}-0\"", "\"ruby-#{payload}-1\""}; + private final String[] scripts = {"\"ruby-#{payload}-0\"", "\"ruby-#{payload}-1\""}; + CycleResource() { + super(); + } + + @Override public String getDescription() { return "CycleResource"; } @@ -83,6 +89,7 @@ public class Jsr223RefreshTests { return -1; } + @Override public InputStream getInputStream() throws IOException { if (++count > scripts.length - 1) { count = 0; diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/DefaultSftpSessionFactory.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/DefaultSftpSessionFactory.java index 800c86220c..6863426621 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/DefaultSftpSessionFactory.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/DefaultSftpSessionFactory.java @@ -469,6 +469,10 @@ public class DefaultSftpSessionFactory implements SessionFactory, Share */ private class UserInfoWrapper implements UserInfo, UIKeyboardInteractive { + UserInfoWrapper() { + super(); + } + /** * Convenience to check whether enclosing factory's UserInfo is configured. * @return true if there's a delegate. diff --git a/spring-integration-stomp/src/main/java/org/springframework/integration/stomp/AbstractStompSessionManager.java b/spring-integration-stomp/src/main/java/org/springframework/integration/stomp/AbstractStompSessionManager.java index f699a07d2b..f65341243a 100644 --- a/spring-integration-stomp/src/main/java/org/springframework/integration/stomp/AbstractStompSessionManager.java +++ b/spring-integration-stomp/src/main/java/org/springframework/integration/stomp/AbstractStompSessionManager.java @@ -261,14 +261,7 @@ public abstract class AbstractStompSessionManager implements StompSessionManager if (this.stompClient.getTaskScheduler() != null) { this.reconnectFuture = this.stompClient.getTaskScheduler() - .schedule(new Runnable() { - - @Override - public void run() { - connect(); - } - - }, new Date(System.currentTimeMillis() + this.recoveryInterval)); + .schedule((Runnable) () -> connect(), new Date(System.currentTimeMillis() + this.recoveryInterval)); } else { this.logger.info("For automatic reconnection the 'stompClient' should be configured with a TaskScheduler."); @@ -376,6 +369,10 @@ public abstract class AbstractStompSessionManager implements StompSessionManager private volatile StompSession session; + CompositeStompSessionHandler() { + super(); + } + void addHandler(StompSessionHandler delegate) { if (this.session != null) { delegate.afterConnected(this.session, getConnectHeaders()); diff --git a/spring-integration-stomp/src/main/java/org/springframework/integration/stomp/inbound/StompInboundChannelAdapter.java b/spring-integration-stomp/src/main/java/org/springframework/integration/stomp/inbound/StompInboundChannelAdapter.java index 08a6756b7b..7a182465ec 100644 --- a/spring-integration-stomp/src/main/java/org/springframework/integration/stomp/inbound/StompInboundChannelAdapter.java +++ b/spring-integration-stomp/src/main/java/org/springframework/integration/stomp/inbound/StompInboundChannelAdapter.java @@ -240,32 +240,22 @@ public class StompInboundChannelAdapter extends MessageProducerSupport implement if (this.stompSessionManager.isAutoReceiptEnabled()) { final ApplicationEventPublisher applicationEventPublisher = this.applicationEventPublisher; if (applicationEventPublisher != null) { - subscription.addReceiptTask(new Runnable() { - - @Override - public void run() { - StompReceiptEvent event = new StompReceiptEvent(StompInboundChannelAdapter.this, - destination, subscription.getReceiptId(), StompCommand.SUBSCRIBE, false); - applicationEventPublisher.publishEvent(event); - } - + subscription.addReceiptTask(() -> { + StompReceiptEvent event = new StompReceiptEvent(StompInboundChannelAdapter.this, + destination, subscription.getReceiptId(), StompCommand.SUBSCRIBE, false); + applicationEventPublisher.publishEvent(event); }); } - subscription.addReceiptLostTask(new Runnable() { - - @Override - public void run() { - if (applicationEventPublisher != null) { - StompReceiptEvent event = new StompReceiptEvent(StompInboundChannelAdapter.this, - destination, subscription.getReceiptId(), StompCommand.SUBSCRIBE, true); - applicationEventPublisher.publishEvent(event); - } - else { - logger.error("The receipt [" + subscription.getReceiptId() + "] is lost for [" + - subscription.getSubscriptionId() + "] on destination [" + destination + "]"); - } + subscription.addReceiptLostTask(() -> { + if (applicationEventPublisher != null) { + StompReceiptEvent event = new StompReceiptEvent(StompInboundChannelAdapter.this, + destination, subscription.getReceiptId(), StompCommand.SUBSCRIBE, true); + applicationEventPublisher.publishEvent(event); + } + else { + logger.error("The receipt [" + subscription.getReceiptId() + "] is lost for [" + + subscription.getSubscriptionId() + "] on destination [" + destination + "]"); } - }); } this.subscriptions.put(destination, subscription); diff --git a/spring-integration-stomp/src/main/java/org/springframework/integration/stomp/outbound/StompMessageHandler.java b/spring-integration-stomp/src/main/java/org/springframework/integration/stomp/outbound/StompMessageHandler.java index 5f40a0f0b3..9bea8b6501 100644 --- a/spring-integration-stomp/src/main/java/org/springframework/integration/stomp/outbound/StompMessageHandler.java +++ b/spring-integration-stomp/src/main/java/org/springframework/integration/stomp/outbound/StompMessageHandler.java @@ -149,34 +149,24 @@ public class StompMessageHandler extends AbstractMessageHandler implements Appli final String destination = stompHeaders.getDestination(); final ApplicationEventPublisher applicationEventPublisher = this.applicationEventPublisher; if (applicationEventPublisher != null) { - receiptable.addReceiptTask(new Runnable() { - - @Override - public void run() { - StompReceiptEvent event = new StompReceiptEvent(StompMessageHandler.this, - destination, receiptable.getReceiptId(), StompCommand.SEND, false); - event.setMessage(message); - applicationEventPublisher.publishEvent(event); - } - + receiptable.addReceiptTask(() -> { + StompReceiptEvent event = new StompReceiptEvent(StompMessageHandler.this, + destination, receiptable.getReceiptId(), StompCommand.SEND, false); + event.setMessage(message); + applicationEventPublisher.publishEvent(event); }); } - receiptable.addReceiptLostTask(new Runnable() { - - @Override - public void run() { - if (applicationEventPublisher != null) { - StompReceiptEvent event = new StompReceiptEvent(StompMessageHandler.this, - destination, receiptable.getReceiptId(), StompCommand.SEND, true); - event.setMessage(message); - applicationEventPublisher.publishEvent(event); - } - else { - logger.error("The receipt [" + receiptable.getReceiptId() + "] is lost for [" + - message + "] on destination [" + destination + "]"); - } + receiptable.addReceiptLostTask(() -> { + if (applicationEventPublisher != null) { + StompReceiptEvent event = new StompReceiptEvent(StompMessageHandler.this, + destination, receiptable.getReceiptId(), StompCommand.SEND, true); + event.setMessage(message); + applicationEventPublisher.publishEvent(event); + } + else { + logger.error("The receipt [" + receiptable.getReceiptId() + "] is lost for [" + + message + "] on destination [" + destination + "]"); } - }); } } @@ -224,6 +214,10 @@ public class StompMessageHandler extends AbstractMessageHandler implements Appli private class IntegrationOutboundStompSessionHandler extends StompSessionHandlerAdapter { + IntegrationOutboundStompSessionHandler() { + super(); + } + @Override public void afterConnected(StompSession session, StompHeaders connectedHeaders) { StompMessageHandler.this.transportError = null; diff --git a/spring-integration-stomp/src/test/java/org/springframework/integration/stomp/inbound/StompInboundChannelAdapterWebSocketIntegrationTests.java b/spring-integration-stomp/src/test/java/org/springframework/integration/stomp/inbound/StompInboundChannelAdapterWebSocketIntegrationTests.java index 07cfa6c1b6..3080a0ae2f 100644 --- a/spring-integration-stomp/src/test/java/org/springframework/integration/stomp/inbound/StompInboundChannelAdapterWebSocketIntegrationTests.java +++ b/spring-integration-stomp/src/test/java/org/springframework/integration/stomp/inbound/StompInboundChannelAdapterWebSocketIntegrationTests.java @@ -303,7 +303,6 @@ public class StompInboundChannelAdapterWebSocketIntegrationTests extends LogAdju } @Bean - @SuppressWarnings("unchecked") public ApplicationListener stompEventListener() { ApplicationEventListeningMessageProducer producer = new ApplicationEventListeningMessageProducer(); producer.setEventTypes(StompIntegrationEvent.class); @@ -355,23 +354,17 @@ public class StompInboundChannelAdapterWebSocketIntegrationTests extends LogAdju //TODO SimpleBrokerMessageHandler doesn't support RECEIPT frame, hence we emulate it this way @Bean - @SuppressWarnings("unchecked") public ApplicationListener webSocketEventListener( final AbstractSubscribableChannel clientOutboundChannel) { - return new ApplicationListener() { - - @Override - public void onApplicationEvent(SessionSubscribeEvent event) { - Message message = event.getMessage(); - StompHeaderAccessor stompHeaderAccessor = StompHeaderAccessor.wrap(message); - if (stompHeaderAccessor.getReceipt() != null) { - stompHeaderAccessor.setHeader("stompCommand", StompCommand.RECEIPT); - stompHeaderAccessor.setReceiptId(stompHeaderAccessor.getReceipt()); - clientOutboundChannel.send( - MessageBuilder.createMessage(new byte[0], stompHeaderAccessor.getMessageHeaders())); - } + return event -> { + Message message = event.getMessage(); + StompHeaderAccessor stompHeaderAccessor = StompHeaderAccessor.wrap(message); + if (stompHeaderAccessor.getReceipt() != null) { + stompHeaderAccessor.setHeader("stompCommand", StompCommand.RECEIPT); + stompHeaderAccessor.setReceiptId(stompHeaderAccessor.getReceipt()); + clientOutboundChannel.send( + MessageBuilder.createMessage(new byte[0], stompHeaderAccessor.getMessageHeaders())); } - }; } diff --git a/spring-integration-stream/src/test/java/org/springframework/integration/stream/ByteStreamWritingMessageHandlerTests.java b/spring-integration-stream/src/test/java/org/springframework/integration/stream/ByteStreamWritingMessageHandlerTests.java index e41c68305e..4493ed272c 100644 --- a/spring-integration-stream/src/test/java/org/springframework/integration/stream/ByteStreamWritingMessageHandlerTests.java +++ b/spring-integration-stream/src/test/java/org/springframework/integration/stream/ByteStreamWritingMessageHandlerTests.java @@ -51,7 +51,7 @@ public class ByteStreamWritingMessageHandlerTests { private PollingConsumer endpoint; - private TestTrigger trigger = new TestTrigger(); + private final TestTrigger trigger = new TestTrigger(); private ThreadPoolTaskScheduler scheduler; @@ -244,6 +244,11 @@ public class ByteStreamWritingMessageHandlerTests { private volatile CountDownLatch latch = new CountDownLatch(1); + TestTrigger() { + super(); + } + + @Override public Date nextExecutionTime(TriggerContext triggerContext) { if (!hasRun.getAndSet(true)) { return new Date(); diff --git a/spring-integration-stream/src/test/java/org/springframework/integration/stream/CharacterStreamWritingMessageHandlerTests.java b/spring-integration-stream/src/test/java/org/springframework/integration/stream/CharacterStreamWritingMessageHandlerTests.java index bb30a05661..8bbfa8a9a4 100644 --- a/spring-integration-stream/src/test/java/org/springframework/integration/stream/CharacterStreamWritingMessageHandlerTests.java +++ b/spring-integration-stream/src/test/java/org/springframework/integration/stream/CharacterStreamWritingMessageHandlerTests.java @@ -50,7 +50,7 @@ public class CharacterStreamWritingMessageHandlerTests { private PollingConsumer endpoint; - private TestTrigger trigger = new TestTrigger(); + private final TestTrigger trigger = new TestTrigger(); private ThreadPoolTaskScheduler scheduler; @@ -192,12 +192,13 @@ public class CharacterStreamWritingMessageHandlerTests { private static class TestObject { - private String text; + private final String text; TestObject(String text) { this.text = text; } + @Override public String toString() { return this.text; } @@ -211,6 +212,11 @@ public class CharacterStreamWritingMessageHandlerTests { private volatile CountDownLatch latch = new CountDownLatch(1); + TestTrigger() { + super(); + } + + @Override public Date nextExecutionTime(TriggerContext triggerContext) { if (!hasRun.getAndSet(true)) { return new Date(); diff --git a/spring-integration-syslog/src/main/java/org/springframework/integration/syslog/inbound/UdpSyslogReceivingChannelAdapter.java b/spring-integration-syslog/src/main/java/org/springframework/integration/syslog/inbound/UdpSyslogReceivingChannelAdapter.java index 659f91a406..6816f260ac 100644 --- a/spring-integration-syslog/src/main/java/org/springframework/integration/syslog/inbound/UdpSyslogReceivingChannelAdapter.java +++ b/spring-integration-syslog/src/main/java/org/springframework/integration/syslog/inbound/UdpSyslogReceivingChannelAdapter.java @@ -18,9 +18,6 @@ package org.springframework.integration.syslog.inbound; import org.springframework.integration.channel.FixedSubscriberChannel; import org.springframework.integration.ip.udp.UnicastReceivingChannelAdapter; -import org.springframework.messaging.Message; -import org.springframework.messaging.MessageHandler; -import org.springframework.messaging.MessagingException; /** * UDP implementation of a syslog inbound channel adapter. @@ -58,14 +55,7 @@ public class UdpSyslogReceivingChannelAdapter extends SyslogReceivingChannelAdap "of the provided 'UnicastReceivingChannelAdapter' to support Syslog conversion " + "for the incoming UDP packets"); } - this.udpAdapter.setOutputChannel(new FixedSubscriberChannel(new MessageHandler() { - - @Override - public void handleMessage(Message message) throws MessagingException { - convertAndSend(message); - } - - })); + this.udpAdapter.setOutputChannel(new FixedSubscriberChannel(message -> convertAndSend(message))); if (!this.udpAdapterSet) { this.udpAdapter.afterPropertiesSet(); } diff --git a/spring-integration-syslog/src/test/java/org/springframework/integration/syslog/inbound/SyslogReceivingChannelAdapterTests.java b/spring-integration-syslog/src/test/java/org/springframework/integration/syslog/inbound/SyslogReceivingChannelAdapterTests.java index 5141b6c21b..506bc4d9fb 100644 --- a/spring-integration-syslog/src/test/java/org/springframework/integration/syslog/inbound/SyslogReceivingChannelAdapterTests.java +++ b/spring-integration-syslog/src/test/java/org/springframework/integration/syslog/inbound/SyslogReceivingChannelAdapterTests.java @@ -38,8 +38,6 @@ import javax.net.SocketFactory; import org.apache.commons.logging.Log; import org.junit.Test; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; import org.springframework.beans.DirectFieldAccessor; import org.springframework.beans.factory.BeanFactory; @@ -76,7 +74,6 @@ public class SyslogReceivingChannelAdapterTests { factory.afterPropertiesSet(); factory.start(); UdpSyslogReceivingChannelAdapter adapter = (UdpSyslogReceivingChannelAdapter) factory.getObject(); - Thread.sleep(1000); byte[] buf = "<157>JUL 26 22:08:35 WEBERN TESTING[70729]: TEST SYSLOG MESSAGE".getBytes("UTF-8"); DatagramPacket packet = new DatagramPacket(buf, buf.length, new InetSocketAddress("localhost", port)); DatagramSocket socket = new DatagramSocket(); @@ -98,13 +95,9 @@ public class SyslogReceivingChannelAdapterTests { factory.setOutputChannel(outputChannel); ApplicationEventPublisher publisher = mock(ApplicationEventPublisher.class); final CountDownLatch latch = new CountDownLatch(2); - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - latch.countDown(); - return null; - } + doAnswer(invocation -> { + latch.countDown(); + return null; }).when(publisher).publishEvent(any(ApplicationEvent.class)); factory.setApplicationEventPublisher(publisher); factory.setBeanFactory(mock(BeanFactory.class)); @@ -114,19 +107,14 @@ public class SyslogReceivingChannelAdapterTests { Log logger = spy(TestUtils.getPropertyValue(adapter, "logger", Log.class)); doReturn(true).when(logger).isDebugEnabled(); final CountDownLatch sawLog = new CountDownLatch(1); - doAnswer(new Answer() { - - @Override - public Void answer(InvocationOnMock invocation) throws Throwable { - if ((invocation.getArgumentAt(0, String.class)).contains("Error on syslog socket")) { - sawLog.countDown(); - } - invocation.callRealMethod(); - return null; + doAnswer(invocation -> { + if ((invocation.getArgumentAt(0, String.class)).contains("Error on syslog socket")) { + sawLog.countDown(); } + invocation.callRealMethod(); + return null; }).when(logger).debug(anyString()); new DirectFieldAccessor(adapter).setPropertyValue("logger", logger); - Thread.sleep(1000); byte[] buf = "<157>JUL 26 22:08:35 WEBERN TESTING[70729]: TEST SYSLOG MESSAGE\n".getBytes("UTF-8"); Socket socket = SocketFactory.getDefault().createSocket("localhost", port); socket.getOutputStream().write(buf); @@ -154,7 +142,6 @@ public class SyslogReceivingChannelAdapterTests { DefaultMessageConverter defaultMessageConverter = new DefaultMessageConverter(); defaultMessageConverter.setAsMap(false); adapter.setConverter(defaultMessageConverter); - Thread.sleep(1000); byte[] buf = "<157>JUL 26 22:08:35 WEBERN TESTING[70729]: TEST SYSLOG MESSAGE".getBytes("UTF-8"); DatagramPacket packet = new DatagramPacket(buf, buf.length, new InetSocketAddress("localhost", port)); DatagramSocket socket = new DatagramSocket(); @@ -177,13 +164,9 @@ public class SyslogReceivingChannelAdapterTests { factory.setOutputChannel(outputChannel); ApplicationEventPublisher publisher = mock(ApplicationEventPublisher.class); final CountDownLatch latch = new CountDownLatch(2); - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - latch.countDown(); - return null; - } + doAnswer(invocation -> { + latch.countDown(); + return null; }).when(publisher).publishEvent(any(ApplicationEvent.class)); factory.setBeanFactory(mock(BeanFactory.class)); AbstractServerConnectionFactory connectionFactory = new TcpNioServerConnectionFactory(port); @@ -197,19 +180,14 @@ public class SyslogReceivingChannelAdapterTests { Log logger = spy(TestUtils.getPropertyValue(adapter, "logger", Log.class)); doReturn(true).when(logger).isDebugEnabled(); final CountDownLatch sawLog = new CountDownLatch(1); - doAnswer(new Answer() { - - @Override - public Void answer(InvocationOnMock invocation) throws Throwable { - if ((invocation.getArgumentAt(0, String.class)).contains("Error on syslog socket")) { - sawLog.countDown(); - } - invocation.callRealMethod(); - return null; + doAnswer(invocation -> { + if ((invocation.getArgumentAt(0, String.class)).contains("Error on syslog socket")) { + sawLog.countDown(); } + invocation.callRealMethod(); + return null; }).when(logger).debug(anyString()); new DirectFieldAccessor(adapter).setPropertyValue("logger", logger); - Thread.sleep(1000); byte[] buf = ("253 <14>1 2014-06-20T09:14:07+00:00 loggregator d0602076-b14a-4c55-852a-981e7afeed38 DEA - " + "[exampleSDID@32473 iut=\\\"3\\\" eventSource=\\\"Application\\\" eventID=\\\"1011\\\"]" + "[exampleSDID@32473 iut=\\\"3\\\" eventSource=\\\"Application\\\" eventID=\\\"1011\\\"] Removing instance") @@ -239,7 +217,6 @@ public class SyslogReceivingChannelAdapterTests { factory.afterPropertiesSet(); factory.start(); UdpSyslogReceivingChannelAdapter adapter = (UdpSyslogReceivingChannelAdapter) factory.getObject(); - Thread.sleep(1000); byte[] buf = ("<14>1 2014-06-20T09:14:07+00:00 loggregator d0602076-b14a-4c55-852a-981e7afeed38 DEA - " + "[exampleSDID@32473 iut=\\\"3\\\" eventSource=\\\"Application\\\" eventID=\\\"1011\\\"]" + "[exampleSDID@32473 iut=\\\"3\\\" eventSource=\\\"Application\\\" eventID=\\\"1011\\\"] Removing instance") diff --git a/spring-integration-test/src/main/java/org/springframework/integration/test/reactive/TestSubscriber.java b/spring-integration-test/src/main/java/org/springframework/integration/test/reactive/TestSubscriber.java index 8d027cbd78..c6af316c6e 100644 --- a/spring-integration-test/src/main/java/org/springframework/integration/test/reactive/TestSubscriber.java +++ b/spring-integration-test/src/main/java/org/springframework/integration/test/reactive/TestSubscriber.java @@ -194,13 +194,7 @@ public class TestSubscriber public static void await(Duration timeout, final String errorMessage, BooleanSupplier conditionSupplier) { - await(timeout, new Supplier() { - - @Override - public String get() { - return errorMessage; - } - }, conditionSupplier); + await(timeout, () -> errorMessage, conditionSupplier); } /** diff --git a/spring-integration-test/src/main/java/org/springframework/integration/test/util/TestUtils.java b/spring-integration-test/src/main/java/org/springframework/integration/test/util/TestUtils.java index b89997a048..7d3aa1e7f5 100644 --- a/spring-integration-test/src/main/java/org/springframework/integration/test/util/TestUtils.java +++ b/spring-integration-test/src/main/java/org/springframework/integration/test/util/TestUtils.java @@ -18,7 +18,6 @@ package org.springframework.integration.test.util; import java.io.File; import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.util.List; import java.util.Properties; import java.util.Set; @@ -45,8 +44,6 @@ import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.util.ErrorHandler; import org.springframework.util.ReflectionUtils; -import org.springframework.util.ReflectionUtils.MethodCallback; -import org.springframework.util.ReflectionUtils.MethodFilter; import org.springframework.util.StringUtils; /** @@ -133,7 +130,7 @@ public abstract class TestUtils { public static class TestApplicationContext extends GenericApplicationContext { - private TestApplicationContext() { + TestApplicationContext() { super(); } @@ -156,26 +153,14 @@ public abstract class TestUtils { final AtomicReference componentName = new AtomicReference(); for (Class intface : interfaces) { if ("org.springframework.integration.support.context.NamedComponent".equals(intface.getName())) { - ReflectionUtils.doWithMethods(channel.getClass(), new MethodCallback() { - - @Override - public void doWith(Method method) throws IllegalArgumentException, IllegalAccessException { - try { - componentName.set((String) method.invoke(channel, new Object[0])); - } - catch (InvocationTargetException e) { - throw new IllegalArgumentException(e); - } + ReflectionUtils.doWithMethods(channel.getClass(), method -> { + try { + componentName.set((String) method.invoke(channel, new Object[0])); } - - }, new MethodFilter() { - - @Override - public boolean matches(Method method) { - return method.getName().equals("getComponentName"); + catch (InvocationTargetException e) { + throw new IllegalArgumentException(e); } - - }); + }, method -> method.getName().equals("getComponentName")); break; } } @@ -229,7 +214,7 @@ public abstract class TestUtils { private final TestApplicationContext context; - private MessagePublishingErrorHandler(TestApplicationContext ctx) { + MessagePublishingErrorHandler(TestApplicationContext ctx) { this.context = ctx; } diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractTwitterMessageSource.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractTwitterMessageSource.java index a2adf95b68..0809d3c410 100644 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractTwitterMessageSource.java +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractTwitterMessageSource.java @@ -240,6 +240,10 @@ abstract class AbstractTwitterMessageSource extends IntegrationObjectSupport private class TweetComparator implements Comparator { + TweetComparator() { + super(); + } + @Override public int compare(T tweet1, T tweet2) { // hopefully temporary logic. Will suggest that SpringSocial use a common base class for DM and Tweet diff --git a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/outbound/TwitterSearchOutboundGatewayTests.java b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/outbound/TwitterSearchOutboundGatewayTests.java index e93fc01ac0..0bdd9fc886 100644 --- a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/outbound/TwitterSearchOutboundGatewayTests.java +++ b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/outbound/TwitterSearchOutboundGatewayTests.java @@ -30,8 +30,6 @@ import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Matchers; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; @@ -80,15 +78,11 @@ public class TwitterSearchOutboundGatewayTests { Tweet tweet = mock(Tweet.class); SearchMetadata searchMetadata = mock(SearchMetadata.class); final SearchResults searchResults = new SearchResults(Collections.singletonList(tweet), searchMetadata); - doAnswer(new Answer() { - - @Override - public SearchResults answer(InvocationOnMock invocation) throws Throwable { - SearchParameters searchParameters = invocation.getArgumentAt(0, SearchParameters.class); - assertEquals("foo", searchParameters.getQuery()); - assertEquals(Integer.valueOf(20), searchParameters.getCount()); - return searchResults; - } + doAnswer(invocation -> { + SearchParameters searchParameters = invocation.getArgumentAt(0, SearchParameters.class); + assertEquals("foo", searchParameters.getQuery()); + assertEquals(Integer.valueOf(20), searchParameters.getCount()); + return searchResults; }).when(this.searchOps).search(Matchers.any(SearchParameters.class)); this.gateway.handleMessage(new GenericMessage("foo")); Message reply = this.outputChannel.receive(0); @@ -107,15 +101,11 @@ public class TwitterSearchOutboundGatewayTests { Tweet tweet = mock(Tweet.class); SearchMetadata searchMetadata = mock(SearchMetadata.class); final SearchResults searchResults = new SearchResults(Collections.singletonList(tweet), searchMetadata); - doAnswer(new Answer() { - - @Override - public SearchResults answer(InvocationOnMock invocation) throws Throwable { - SearchParameters searchParameters = invocation.getArgumentAt(0, SearchParameters.class); - assertEquals("foo", searchParameters.getQuery()); - assertEquals(Integer.valueOf(30), searchParameters.getCount()); - return searchResults; - } + doAnswer(invocation -> { + SearchParameters searchParameters = invocation.getArgumentAt(0, SearchParameters.class); + assertEquals("foo", searchParameters.getQuery()); + assertEquals(Integer.valueOf(30), searchParameters.getCount()); + return searchResults; }).when(this.searchOps).search(Matchers.any(SearchParameters.class)); this.gateway.handleMessage(new GenericMessage("foo")); Message reply = this.outputChannel.receive(0); @@ -134,17 +124,13 @@ public class TwitterSearchOutboundGatewayTests { Tweet tweet = mock(Tweet.class); SearchMetadata searchMetadata = mock(SearchMetadata.class); final SearchResults searchResults = new SearchResults(Collections.singletonList(tweet), searchMetadata); - doAnswer(new Answer() { - - @Override - public SearchResults answer(InvocationOnMock invocation) throws Throwable { - SearchParameters searchParameters = invocation.getArgumentAt(0, SearchParameters.class); - assertEquals("bar", searchParameters.getQuery()); - assertEquals(Integer.valueOf(1), searchParameters.getCount()); - assertEquals(Long.valueOf(2), searchParameters.getSinceId()); - assertEquals(Long.valueOf(3), searchParameters.getMaxId()); - return searchResults; - } + doAnswer(invocation -> { + SearchParameters searchParameters = invocation.getArgumentAt(0, SearchParameters.class); + assertEquals("bar", searchParameters.getQuery()); + assertEquals(Integer.valueOf(1), searchParameters.getCount()); + assertEquals(Long.valueOf(2), searchParameters.getSinceId()); + assertEquals(Long.valueOf(3), searchParameters.getMaxId()); + return searchResults; }).when(this.searchOps).search(Matchers.any(SearchParameters.class)); this.gateway.handleMessage(new GenericMessage("foo")); Message reply = this.outputChannel.receive(0); @@ -162,14 +148,10 @@ public class TwitterSearchOutboundGatewayTests { SearchMetadata searchMetadata = mock(SearchMetadata.class); final SearchResults searchResults = new SearchResults(Collections.singletonList(tweet), searchMetadata); final SearchParameters parameters = new SearchParameters("bar"); - doAnswer(new Answer() { - - @Override - public SearchResults answer(InvocationOnMock invocation) throws Throwable { - SearchParameters searchParameters = invocation.getArgumentAt(0, SearchParameters.class); - assertSame(parameters, searchParameters); - return searchResults; - } + doAnswer(invocation -> { + SearchParameters searchParameters = invocation.getArgumentAt(0, SearchParameters.class); + assertSame(parameters, searchParameters); + return searchResults; }).when(this.searchOps).search(Matchers.any(SearchParameters.class)); this.gateway.handleMessage(new GenericMessage(parameters)); Message reply = this.outputChannel.receive(0); @@ -188,16 +170,12 @@ public class TwitterSearchOutboundGatewayTests { Tweet tweet = mock(Tweet.class); SearchMetadata searchMetadata = mock(SearchMetadata.class); final SearchResults searchResults = new SearchResults(Collections.singletonList(tweet), searchMetadata); - doAnswer(new Answer() { - - @Override - public SearchResults answer(InvocationOnMock invocation) throws Throwable { - SearchParameters searchParameters = invocation.getArgumentAt(0, SearchParameters.class); - assertEquals("foobar", searchParameters.getQuery()); - assertEquals(Integer.valueOf(5), searchParameters.getCount()); - assertEquals(Long.valueOf(11), searchParameters.getSinceId()); - return searchResults; - } + doAnswer(invocation -> { + SearchParameters searchParameters = invocation.getArgumentAt(0, SearchParameters.class); + assertEquals("foobar", searchParameters.getQuery()); + assertEquals(Integer.valueOf(5), searchParameters.getCount()); + assertEquals(Long.valueOf(11), searchParameters.getSinceId()); + return searchResults; }).when(this.searchOps).search(Matchers.any(SearchParameters.class)); this.gateway.handleMessage(new GenericMessage("bar")); Message reply = this.outputChannel.receive(0); @@ -214,15 +192,11 @@ public class TwitterSearchOutboundGatewayTests { SearchMetadata searchMetadata = mock(SearchMetadata.class); List empty = new ArrayList(0); final SearchResults searchResults = new SearchResults(empty, searchMetadata); - doAnswer(new Answer() { - - @Override - public SearchResults answer(InvocationOnMock invocation) throws Throwable { - SearchParameters searchParameters = invocation.getArgumentAt(0, SearchParameters.class); - assertEquals("foo", searchParameters.getQuery()); - assertEquals(Integer.valueOf(20), searchParameters.getCount()); - return searchResults; - } + doAnswer(invocation -> { + SearchParameters searchParameters = invocation.getArgumentAt(0, SearchParameters.class); + assertEquals("foo", searchParameters.getQuery()); + assertEquals(Integer.valueOf(20), searchParameters.getCount()); + return searchResults; }).when(this.searchOps).search(Matchers.any(SearchParameters.class)); this.gateway.handleMessage(new GenericMessage("foo")); Message reply = this.outputChannel.receive(0); diff --git a/spring-integration-websocket/src/main/java/org/springframework/integration/websocket/ClientWebSocketContainer.java b/spring-integration-websocket/src/main/java/org/springframework/integration/websocket/ClientWebSocketContainer.java index 9d576db206..6540d15c9b 100644 --- a/spring-integration-websocket/src/main/java/org/springframework/integration/websocket/ClientWebSocketContainer.java +++ b/spring-integration-websocket/src/main/java/org/springframework/integration/websocket/ClientWebSocketContainer.java @@ -204,7 +204,7 @@ public final class ClientWebSocketContainer extends IntegrationWebSocketContaine private final boolean syncClientLifecycle; - private IntegrationWebSocketConnectionManager(WebSocketClient client, String uriTemplate, + IntegrationWebSocketConnectionManager(WebSocketClient client, String uriTemplate, Object... uriVariables) { super(uriTemplate, uriVariables); this.client = client; diff --git a/spring-integration-websocket/src/main/java/org/springframework/integration/websocket/IntegrationWebSocketContainer.java b/spring-integration-websocket/src/main/java/org/springframework/integration/websocket/IntegrationWebSocketContainer.java index 51c4c8c584..08e85afe40 100644 --- a/spring-integration-websocket/src/main/java/org/springframework/integration/websocket/IntegrationWebSocketContainer.java +++ b/spring-integration-websocket/src/main/java/org/springframework/integration/websocket/IntegrationWebSocketContainer.java @@ -148,6 +148,10 @@ public abstract class IntegrationWebSocketContainer implements DisposableBean { */ private class IntegrationWebSocketHandler implements WebSocketHandler, SubProtocolCapable { + IntegrationWebSocketHandler() { + super(); + } + @Override public List getSubProtocols() { return IntegrationWebSocketContainer.this.getSubProtocols(); diff --git a/spring-integration-websocket/src/main/java/org/springframework/integration/websocket/inbound/WebSocketInboundChannelAdapter.java b/spring-integration-websocket/src/main/java/org/springframework/integration/websocket/inbound/WebSocketInboundChannelAdapter.java index 20bc4d0eec..0aa9aed58e 100644 --- a/spring-integration-websocket/src/main/java/org/springframework/integration/websocket/inbound/WebSocketInboundChannelAdapter.java +++ b/spring-integration-websocket/src/main/java/org/springframework/integration/websocket/inbound/WebSocketInboundChannelAdapter.java @@ -37,9 +37,7 @@ import org.springframework.integration.websocket.support.PassThruSubProtocolHand import org.springframework.integration.websocket.support.SubProtocolHandlerRegistry; import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; -import org.springframework.messaging.MessageHandler; import org.springframework.messaging.MessageHandlingException; -import org.springframework.messaging.MessagingException; import org.springframework.messaging.converter.ByteArrayMessageConverter; import org.springframework.messaging.converter.CompositeMessageConverter; import org.springframework.messaging.converter.DefaultContentTypeResolver; @@ -119,18 +117,13 @@ public class WebSocketInboundChannelAdapter extends MessageProducerSupport this.webSocketContainer = webSocketContainer; this.server = this.webSocketContainer instanceof ServerWebSocketContainer; this.subProtocolHandlerRegistry = protocolHandlerRegistry; - this.subProtocolHandlerChannel = new FixedSubscriberChannel(new MessageHandler() { - - @Override - public void handleMessage(Message message) throws MessagingException { - try { - handleMessageAndSend(message); - } - catch (Exception e) { - throw new MessageHandlingException(message, e); - } + this.subProtocolHandlerChannel = new FixedSubscriberChannel(message -> { + try { + handleMessageAndSend(message); + } + catch (Exception e) { + throw new MessageHandlingException(message, e); } - }); } diff --git a/spring-integration-websocket/src/test/java/org/springframework/integration/websocket/client/StompIntegrationTests.java b/spring-integration-websocket/src/test/java/org/springframework/integration/websocket/client/StompIntegrationTests.java index 7a91500044..de43456814 100644 --- a/spring-integration-websocket/src/test/java/org/springframework/integration/websocket/client/StompIntegrationTests.java +++ b/spring-integration-websocket/src/test/java/org/springframework/integration/websocket/client/StompIntegrationTests.java @@ -489,23 +489,17 @@ public class StompIntegrationTests extends LogAdjustingTestSupport { //TODO SimpleBrokerMessageHandler doesn't support RECEIPT frame, hence we emulate it this way @Bean - @SuppressWarnings("unchecked") public ApplicationListener webSocketEventListener( final AbstractSubscribableChannel clientOutboundChannel) { - return new ApplicationListener() { - - @Override - public void onApplicationEvent(SessionSubscribeEvent event) { - Message message = event.getMessage(); - StompHeaderAccessor stompHeaderAccessor = StompHeaderAccessor.wrap(message); - if (stompHeaderAccessor.getReceipt() != null) { - stompHeaderAccessor.setHeader("stompCommand", StompCommand.RECEIPT); - stompHeaderAccessor.setReceiptId(stompHeaderAccessor.getReceipt()); - clientOutboundChannel.send( - MessageBuilder.createMessage(new byte[0], stompHeaderAccessor.getMessageHeaders())); - } + return event -> { + Message message = event.getMessage(); + StompHeaderAccessor stompHeaderAccessor = StompHeaderAccessor.wrap(message); + if (stompHeaderAccessor.getReceipt() != null) { + stompHeaderAccessor.setHeader("stompCommand", StompCommand.RECEIPT); + stompHeaderAccessor.setReceiptId(stompHeaderAccessor.getReceipt()); + clientOutboundChannel.send( + MessageBuilder.createMessage(new byte[0], stompHeaderAccessor.getMessageHeaders())); } - }; } diff --git a/spring-integration-websocket/src/test/java/org/springframework/integration/websocket/server/WebSocketServerTests.java b/spring-integration-websocket/src/test/java/org/springframework/integration/websocket/server/WebSocketServerTests.java index 7b6f9cf53a..9414f8d7f2 100644 --- a/spring-integration-websocket/src/test/java/org/springframework/integration/websocket/server/WebSocketServerTests.java +++ b/spring-integration-websocket/src/test/java/org/springframework/integration/websocket/server/WebSocketServerTests.java @@ -318,6 +318,10 @@ public class WebSocketServerTests { private ApplicationEventPublisher applicationEventPublisher; + TestWebSocketHandlerDecoratorFactory() { + super(); + } + @Override public WebSocketHandler decorate(WebSocketHandler handler) { return new TestWebSocketHandler(handler); diff --git a/spring-integration-ws/src/main/java/org/springframework/integration/ws/MarshallingWebServiceOutboundGateway.java b/spring-integration-ws/src/main/java/org/springframework/integration/ws/MarshallingWebServiceOutboundGateway.java index 8ff8be1818..8378b57e99 100644 --- a/spring-integration-ws/src/main/java/org/springframework/integration/ws/MarshallingWebServiceOutboundGateway.java +++ b/spring-integration-ws/src/main/java/org/springframework/integration/ws/MarshallingWebServiceOutboundGateway.java @@ -119,7 +119,7 @@ public class MarshallingWebServiceOutboundGateway extends AbstractWebServiceOutb private final class MarshallingRequestMessageCallback extends RequestMessageCallback { - private MarshallingRequestMessageCallback(WebServiceMessageCallback requestCallback, + MarshallingRequestMessageCallback(WebServiceMessageCallback requestCallback, Message requestMessage) { super(requestCallback, requestMessage); } @@ -132,9 +132,14 @@ public class MarshallingWebServiceOutboundGateway extends AbstractWebServiceOutb private class MarshallingResponseMessageExtractor extends ResponseMessageExtractor { + MarshallingResponseMessageExtractor() { + super(); + } + @Override public Object doExtractData(WebServiceMessage message) throws IOException { return MarshallingUtils.unmarshal(MarshallingWebServiceOutboundGateway.this.unmarshaller, message); } } + } diff --git a/spring-integration-ws/src/main/java/org/springframework/integration/ws/SimpleWebServiceInboundGateway.java b/spring-integration-ws/src/main/java/org/springframework/integration/ws/SimpleWebServiceInboundGateway.java index 397202aed8..4187a8d175 100644 --- a/spring-integration-ws/src/main/java/org/springframework/integration/ws/SimpleWebServiceInboundGateway.java +++ b/spring-integration-ws/src/main/java/org/springframework/integration/ws/SimpleWebServiceInboundGateway.java @@ -87,6 +87,11 @@ public class SimpleWebServiceInboundGateway extends AbstractWebServiceInboundGat private static class TransformerSupportDelegate extends TransformerObjectSupport { + + TransformerSupportDelegate() { + super(); + } + void transformSourceToResult(Source source, Result result) throws TransformerException { this.transform(source, result); } diff --git a/spring-integration-ws/src/main/java/org/springframework/integration/ws/SimpleWebServiceOutboundGateway.java b/spring-integration-ws/src/main/java/org/springframework/integration/ws/SimpleWebServiceOutboundGateway.java index c62d74e369..b025f9b18f 100644 --- a/spring-integration-ws/src/main/java/org/springframework/integration/ws/SimpleWebServiceOutboundGateway.java +++ b/spring-integration-ws/src/main/java/org/springframework/integration/ws/SimpleWebServiceOutboundGateway.java @@ -102,7 +102,7 @@ public class SimpleWebServiceOutboundGateway extends AbstractWebServiceOutboundG private final class SimpleRequestMessageCallback extends RequestMessageCallback { - private SimpleRequestMessageCallback(WebServiceMessageCallback requestCallback, Message requestMessage) { + SimpleRequestMessageCallback(WebServiceMessageCallback requestCallback, Message requestMessage) { super(requestCallback, requestMessage); } @@ -145,7 +145,7 @@ public class SimpleWebServiceOutboundGateway extends AbstractWebServiceOutboundG private final Result result; - private SimpleResponseMessageExtractor(Result result) { + SimpleResponseMessageExtractor(Result result) { super(); this.result = result; } @@ -175,6 +175,10 @@ public class SimpleWebServiceOutboundGateway extends AbstractWebServiceOutboundG private static class DefaultSourceExtractor extends TransformerObjectSupport implements SourceExtractor { + DefaultSourceExtractor() { + super(); + } + @Override public DOMSource extractData(Source source) throws IOException, TransformerException { if (source instanceof DOMSource) { diff --git a/spring-integration-ws/src/test/java/org/springframework/integration/ws/SimpleWebServiceInboundGatewayTests.java b/spring-integration-ws/src/test/java/org/springframework/integration/ws/SimpleWebServiceInboundGatewayTests.java index 59a483830b..4930eb82b1 100644 --- a/spring-integration-ws/src/test/java/org/springframework/integration/ws/SimpleWebServiceInboundGatewayTests.java +++ b/spring-integration-ws/src/test/java/org/springframework/integration/ws/SimpleWebServiceInboundGatewayTests.java @@ -39,7 +39,6 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.invocation.InvocationOnMock; import org.mockito.runners.MockitoJUnitRunner; import org.mockito.stubbing.Answer; @@ -131,14 +130,9 @@ public class SimpleWebServiceInboundGatewayTests { } private Answer withReplyTo(final MessageChannel replyChannel) { - return new Answer() { - - @Override - public Boolean answer(InvocationOnMock invocation) throws Throwable { - replyChannel.send((Message) invocation.getArguments()[0]); - return true; - } - + return invocation -> { + replyChannel.send((Message) invocation.getArguments()[0]); + return true; }; } diff --git a/spring-integration-ws/src/test/java/org/springframework/integration/ws/SimpleWebServiceOutboundGatewayTests.java b/spring-integration-ws/src/test/java/org/springframework/integration/ws/SimpleWebServiceOutboundGatewayTests.java index b33b1aceb6..c64f9db887 100644 --- a/spring-integration-ws/src/test/java/org/springframework/integration/ws/SimpleWebServiceOutboundGatewayTests.java +++ b/spring-integration-ws/src/test/java/org/springframework/integration/ws/SimpleWebServiceOutboundGatewayTests.java @@ -22,17 +22,12 @@ import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import java.io.ByteArrayInputStream; -import java.io.IOException; import java.net.URI; import java.util.concurrent.atomic.AtomicReference; -import javax.xml.transform.TransformerException; - import org.hamcrest.Matchers; import org.junit.Test; import org.mockito.Mockito; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; @@ -42,9 +37,7 @@ import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.PollableChannel; import org.springframework.messaging.support.GenericMessage; -import org.springframework.ws.WebServiceMessage; import org.springframework.ws.WebServiceMessageFactory; -import org.springframework.ws.client.core.WebServiceMessageCallback; import org.springframework.ws.client.support.destination.DestinationProvider; import org.springframework.ws.soap.SoapMessage; import org.springframework.ws.transport.WebServiceConnection; @@ -76,12 +69,9 @@ public class SimpleWebServiceOutboundGatewayTests { String uri = "http://www.example.org"; SimpleWebServiceOutboundGateway gateway = new SimpleWebServiceOutboundGateway(new TestDestinationProvider(uri)); final AtomicReference soapActionFromCallback = new AtomicReference(); - gateway.setRequestCallback(new WebServiceMessageCallback() { - @Override - public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException { - SoapMessage soapMessage = (SoapMessage) message; - soapActionFromCallback.set(soapMessage.getSoapAction()); - } + gateway.setRequestCallback(message -> { + SoapMessage soapMessage = (SoapMessage) message; + soapActionFromCallback.set(soapMessage.getSoapAction()); }); gateway.setBeanFactory(mock(BeanFactory.class)); gateway.afterPropertiesSet(); @@ -127,13 +117,10 @@ public class SimpleWebServiceOutboundGatewayTests { Mockito.when(messageSender.createConnection(Mockito.any(URI.class))).thenReturn(wsConnection); Mockito.when(messageSender.supports(Mockito.any(URI.class))).thenReturn(true); - Mockito.doAnswer(new Answer() { - @Override - public Object answer(InvocationOnMock invocation) throws Exception { - Object[] args = invocation.getArguments(); - WebServiceMessageFactory factory = (WebServiceMessageFactory) args[0]; - return factory.createWebServiceMessage(new ByteArrayInputStream(mockResponseMessage.getBytes())); - } + Mockito.doAnswer(invocation -> { + Object[] args = invocation.getArguments(); + WebServiceMessageFactory factory = (WebServiceMessageFactory) args[0]; + return factory.createWebServiceMessage(new ByteArrayInputStream(mockResponseMessage.getBytes())); }).when(wsConnection).receive(Mockito.any(WebServiceMessageFactory.class)); return messageSender; diff --git a/spring-integration-ws/src/test/java/org/springframework/integration/ws/config/UriVariableTests.java b/spring-integration-ws/src/test/java/org/springframework/integration/ws/config/UriVariableTests.java index ed6f3551b9..f786a7f081 100644 --- a/spring-integration-ws/src/test/java/org/springframework/integration/ws/config/UriVariableTests.java +++ b/spring-integration-ws/src/test/java/org/springframework/integration/ws/config/UriVariableTests.java @@ -19,6 +19,7 @@ package org.springframework.integration.ws.config; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.doAnswer; import java.io.IOException; import java.net.URI; @@ -42,8 +43,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; import org.springframework.beans.DirectFieldAccessor; import org.springframework.beans.factory.annotation.Autowired; @@ -116,12 +115,9 @@ public class UriVariableTests { WebServiceTemplate webServiceTemplate = TestUtils.getPropertyValue(this.httpOutboundGateway, "webServiceTemplate", WebServiceTemplate.class); webServiceTemplate = Mockito.spy(webServiceTemplate); final AtomicReference uri = new AtomicReference(); - Mockito.doAnswer(new Answer() { - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - uri.set(invocation.getArgumentAt(0, String.class)); - throw new WebServiceIOException("intentional"); - } + doAnswer(invocation -> { + uri.set(invocation.getArgumentAt(0, String.class)); + throw new WebServiceIOException("intentional"); }).when(webServiceTemplate) .sendAndReceive(Mockito.anyString(), Mockito.any(WebServiceMessageCallback.class), @@ -235,10 +231,15 @@ public class UriVariableTests { private volatile URI lastUri; + TestClientInterceptor() { + super(); + } + public URI getLastUri() { return this.lastUri; } + @Override public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException { TransportContext tc = TransportContextHolder.getTransportContext(); if (tc != null) { @@ -255,14 +256,17 @@ public class UriVariableTests { return true; } + @Override public boolean handleResponse(MessageContext messageContext) throws WebServiceClientException { return false; } + @Override public boolean handleFault(MessageContext messageContext) throws WebServiceClientException { return false; } + @Override public void afterCompletion(MessageContext messageContext, Exception ex) throws WebServiceClientException { } diff --git a/spring-integration-ws/src/test/java/org/springframework/integration/ws/config/WebServiceOutboundGatewayWithHeaderMapperTests.java b/spring-integration-ws/src/test/java/org/springframework/integration/ws/config/WebServiceOutboundGatewayWithHeaderMapperTests.java index 97fcef87fc..8eda4920f3 100644 --- a/spring-integration-ws/src/test/java/org/springframework/integration/ws/config/WebServiceOutboundGatewayWithHeaderMapperTests.java +++ b/spring-integration-ws/src/test/java/org/springframework/integration/ws/config/WebServiceOutboundGatewayWithHeaderMapperTests.java @@ -35,8 +35,6 @@ import javax.xml.transform.dom.DOMSource; import org.junit.Test; import org.mockito.Mockito; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -83,7 +81,6 @@ public class WebServiceOutboundGatewayWithHeaderMapperTests { String responseNonSoapMessage = " " + "oleg"; - @SuppressWarnings("unchecked") @Test public void headerMapperParserTest() throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( @@ -184,7 +181,7 @@ public class WebServiceOutboundGatewayWithHeaderMapperTests { assertNull(replyMessage.getHeaders().get("baz")); } - @SuppressWarnings("rawtypes") + @SuppressWarnings({ "resource" }) public Message process(Object payload, String gatewayName, String channelName, final boolean soap) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "ws-outbound-gateway-with-headermappers.xml", this.getClass()); @@ -201,12 +198,9 @@ public class WebServiceOutboundGatewayWithHeaderMapperTests { Mockito.when(messageSender.createConnection(Mockito.any(URI.class))).thenReturn(wsConnection); Mockito.when(messageSender.supports(Mockito.any(URI.class))).thenReturn(true); - Mockito.doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) { - Object[] args = invocation.getArguments(); - WebServiceMessage wsMessage = (WebServiceMessage) args[0]; + Mockito.doAnswer(invocation -> { + Object[] args = invocation.getArguments(); + WebServiceMessage wsMessage = (WebServiceMessage) args[0]; // try { // uncomment if you want to see a pretty-print of SOAP message // Transformer transformer = TransformerFactory.newInstance().newTransformer(); // transformer.setOutputProperty(OutputKeys.INDENT, "yes"); @@ -215,32 +209,28 @@ public class WebServiceOutboundGatewayWithHeaderMapperTests { // catch (Exception e) { // // ignore // } - if (soap) { - SoapHeader soapHeader = ((SoapMessage) wsMessage).getSoapHeader(); - assertNotNull(soapHeader.getAttributeValue(QNameUtils.parseQNameString("foo"))); - assertNotNull(soapHeader.getAttributeValue(QNameUtils.parseQNameString("foobar"))); - assertNotNull(soapHeader.getAttributeValue(QNameUtils.parseQNameString("abaz"))); - assertNull(soapHeader.getAttributeValue(QNameUtils.parseQNameString("bar"))); - } - return null; + if (soap) { + SoapHeader soapHeader = ((SoapMessage) wsMessage).getSoapHeader(); + assertNotNull(soapHeader.getAttributeValue(QNameUtils.parseQNameString("foo"))); + assertNotNull(soapHeader.getAttributeValue(QNameUtils.parseQNameString("foobar"))); + assertNotNull(soapHeader.getAttributeValue(QNameUtils.parseQNameString("abaz"))); + assertNull(soapHeader.getAttributeValue(QNameUtils.parseQNameString("bar"))); } + return null; }).when(wsConnection).send(Mockito.any(WebServiceMessage.class)); - Mockito.doAnswer(new Answer() { + Mockito.doAnswer(invocation -> { + Object[] args = invocation.getArguments(); + WebServiceMessageFactory factory = (WebServiceMessageFactory) args[0]; + String responseMessage = factory instanceof SoapMessageFactory ? responseSoapMessage + : responseNonSoapMessage; + WebServiceMessage wsMessage = factory + .createWebServiceMessage(new ByteArrayInputStream(responseMessage.getBytes())); + if (soap) { - @Override - public Object answer(InvocationOnMock invocation) throws Exception { - Object[] args = invocation.getArguments(); - WebServiceMessageFactory factory = (WebServiceMessageFactory) args[0]; - String responseMessage = factory instanceof SoapMessageFactory ? responseSoapMessage - : responseNonSoapMessage; - WebServiceMessage wsMessage = factory - .createWebServiceMessage(new ByteArrayInputStream(responseMessage.getBytes())); - if (soap) { - - ((SoapMessage) wsMessage).getSoapHeader().addAttribute(QNameUtils.parseQNameString("bar"), "bar"); - ((SoapMessage) wsMessage).getSoapHeader().addAttribute(QNameUtils.parseQNameString("baz"), "baz"); - } + ((SoapMessage) wsMessage).getSoapHeader().addAttribute(QNameUtils.parseQNameString("bar"), "bar"); + ((SoapMessage) wsMessage).getSoapHeader().addAttribute(QNameUtils.parseQNameString("baz"), "baz"); + } // try { // uncomment if you want to see a pretty-print of SOAP message // Transformer transformer = TransformerFactory.newInstance().newTransformer(); @@ -250,8 +240,7 @@ public class WebServiceOutboundGatewayWithHeaderMapperTests { // catch (Exception e) { // // ignore // } - return wsMessage; - } + return wsMessage; }).when(wsConnection).receive(Mockito.any(WebServiceMessageFactory.class)); gateway.setMessageSender(messageSender); diff --git a/spring-integration-xml/src/main/java/org/springframework/integration/xml/router/XPathRouter.java b/spring-integration-xml/src/main/java/org/springframework/integration/xml/router/XPathRouter.java index 34c0a30823..d36bfb1e7e 100644 --- a/spring-integration-xml/src/main/java/org/springframework/integration/xml/router/XPathRouter.java +++ b/spring-integration-xml/src/main/java/org/springframework/integration/xml/router/XPathRouter.java @@ -130,6 +130,10 @@ public class XPathRouter extends AbstractMappingMessageRouter { private static class TextContentNodeMapper implements NodeMapper { + TextContentNodeMapper() { + super(); + } + @Override public Object mapNode(Node node, int nodeNum) throws DOMException { return node.getTextContent(); diff --git a/spring-integration-xml/src/main/java/org/springframework/integration/xml/splitter/XPathMessageSplitter.java b/spring-integration-xml/src/main/java/org/springframework/integration/xml/splitter/XPathMessageSplitter.java index 8d44fd109c..aa1e79256f 100644 --- a/spring-integration-xml/src/main/java/org/springframework/integration/xml/splitter/XPathMessageSplitter.java +++ b/spring-integration-xml/src/main/java/org/springframework/integration/xml/splitter/XPathMessageSplitter.java @@ -271,7 +271,7 @@ public class XPathMessageSplitter extends AbstractMessageSplitter { private int index; - private NodeListIterator(NodeList nodeList) throws ParserConfigurationException { + NodeListIterator(NodeList nodeList) throws ParserConfigurationException { this.nodeList = nodeList; if (XPathMessageSplitter.this.createDocuments) { this.documentBuilder = getNewDocumentBuilder(); diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/DefaultXmlPayloadConverterTests.java b/spring-integration-xml/src/test/java/org/springframework/integration/xml/DefaultXmlPayloadConverterTests.java index 7d63dffd7d..0f5529ffc7 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/DefaultXmlPayloadConverterTests.java +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/DefaultXmlPayloadConverterTests.java @@ -185,6 +185,10 @@ public class DefaultXmlPayloadConverterTests { private static class MySource implements Source { + MySource() { + super(); + } + @Override public void setSystemId(String systemId) { } diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/MarshallingTransformerTests.java b/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/MarshallingTransformerTests.java index eec9aa3909..8f264715e9 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/MarshallingTransformerTests.java +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/MarshallingTransformerTests.java @@ -28,9 +28,9 @@ import javax.xml.transform.dom.DOMResult; import org.junit.Test; +import org.springframework.integration.xml.result.StringResultFactory; import org.springframework.messaging.Message; import org.springframework.messaging.support.GenericMessage; -import org.springframework.integration.xml.result.StringResultFactory; import org.springframework.oxm.Marshaller; import org.springframework.oxm.XmlMappingException; import org.springframework.xml.transform.StringResult; @@ -81,10 +81,16 @@ public class MarshallingTransformerTests { private final List payloads = new ArrayList(); + TestMarshaller() { + super(); + } + + @Override public boolean supports(Class clazz) { return true; } + @Override public void marshal(Object source, Result result) throws XmlMappingException, IOException { if (source instanceof Message) { this.messages.add((Message) source); diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/XPathTransformerTests.java b/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/XPathTransformerTests.java index 24b8708385..f09e4e4b68 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/XPathTransformerTests.java +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/XPathTransformerTests.java @@ -32,10 +32,10 @@ import org.w3c.dom.Document; import org.w3c.dom.Node; import org.xml.sax.InputSource; -import org.springframework.messaging.Message; import org.springframework.integration.support.MessageBuilder; import org.springframework.integration.xml.XmlPayloadConverter; import org.springframework.integration.xml.xpath.XPathEvaluationType; +import org.springframework.messaging.Message; import org.springframework.xml.xpath.NodeMapper; import org.springframework.xml.xpath.XPathExpression; import org.springframework.xml.xpath.XPathExpressionFactory; @@ -139,6 +139,11 @@ public class XPathTransformerTests { private static class TestNodeMapper implements NodeMapper { + TestNodeMapper() { + super(); + } + + @Override public Object mapNode(Node node, int nodeNum) throws DOMException { return node.getTextContent() + "-mapped"; } @@ -147,10 +152,16 @@ public class XPathTransformerTests { private static class TestXmlPayloadConverter implements XmlPayloadConverter { + TestXmlPayloadConverter() { + super(); + } + + @Override public Source convertToSource(Object object) { throw new UnsupportedOperationException(); } + @Override public Node convertToNode(Object object) { try { return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse( @@ -161,6 +172,7 @@ public class XPathTransformerTests { } } + @Override public Document convertToDocument(Object object) { throw new UnsupportedOperationException(); } diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/XmppConnectionFactoryBean.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/XmppConnectionFactoryBean.java index 24172e1736..7c27126aa3 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/XmppConnectionFactoryBean.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/XmppConnectionFactoryBean.java @@ -212,6 +212,10 @@ public class XmppConnectionFactoryBean extends AbstractFactoryBean entries) { if (logger.isDebugEnabled()) { logger.debug("entries added: " + StringUtils.collectionToCommaDelimitedString(entries)); } } + @Override public void entriesUpdated(Collection entries) { if (logger.isDebugEnabled()) { logger.debug("entries updated: " + StringUtils.collectionToCommaDelimitedString(entries)); } } + @Override public void entriesDeleted(Collection entries) { if (logger.isDebugEnabled()) { logger.debug("entries deleted: " + StringUtils.collectionToCommaDelimitedString(entries)); } } + @Override public void presenceChanged(Presence presence) { if (presence != null) { if (logger.isDebugEnabled()) { diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageOutboundChannelAdapterParserTests.java b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageOutboundChannelAdapterParserTests.java index 7993882186..ee0e2e5e4c 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageOutboundChannelAdapterParserTests.java +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/ChatMessageOutboundChannelAdapterParserTests.java @@ -20,6 +20,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -29,8 +30,6 @@ import org.jivesoftware.smackx.jiveproperties.JivePropertiesManager; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; @@ -96,7 +95,6 @@ public class ChatMessageOutboundChannelAdapterParserTests { assertEquals(1, adviceCalled); } - @SuppressWarnings("unchecked") @Test public void testEventConsumer() { Object eventConsumer = context.getBean("outboundEventAdapter"); @@ -130,17 +128,13 @@ public class ChatMessageOutboundChannelAdapterParserTests { setHeader("foobar", "foobar").build(); XMPPConnection connection = context.getBean("testConnection", XMPPConnection.class); - Mockito.doAnswer(new Answer() { - - public Object answer(InvocationOnMock invocation) { - Object[] args = invocation.getArguments(); - org.jivesoftware.smack.packet.Message xmppMessage = (org.jivesoftware.smack.packet.Message) args[0]; - assertEquals("oleg", xmppMessage.getTo()); - assertEquals("foobar", JivePropertiesManager.getProperty(xmppMessage, "foobar")); - return null; - } - }) - .when(connection).sendStanza(Mockito.any(org.jivesoftware.smack.packet.Message.class)); + doAnswer(invocation -> { + Object[] args = invocation.getArguments(); + org.jivesoftware.smack.packet.Message xmppMessage = (org.jivesoftware.smack.packet.Message) args[0]; + assertEquals("oleg", xmppMessage.getTo()); + assertEquals("foobar", JivePropertiesManager.getProperty(xmppMessage, "foobar")); + return null; + }).when(connection).sendStanza(Mockito.any(org.jivesoftware.smack.packet.Message.class)); channel.send(message); @@ -148,22 +142,17 @@ public class ChatMessageOutboundChannelAdapterParserTests { Mockito.reset(connection); } - @SuppressWarnings("rawtypes") @Test //INT-2275 public void testOutboundChannelAdapterInsideChain() throws Exception { MessageChannel channel = context.getBean("outboundChainChannel", MessageChannel.class); Message message = MessageBuilder.withPayload("hello").setHeader(XmppHeaders.TO, "artem").build(); XMPPConnection connection = context.getBean("testConnection", XMPPConnection.class); - Mockito.doAnswer(new Answer() { - - public Object answer(InvocationOnMock invocation) { - Object[] args = invocation.getArguments(); - org.jivesoftware.smack.packet.Message xmppMessage = (org.jivesoftware.smack.packet.Message) args[0]; - assertEquals("artem", xmppMessage.getTo()); - assertEquals("hello", xmppMessage.getBody()); - return null; - } - + doAnswer(invocation -> { + Object[] args = invocation.getArguments(); + org.jivesoftware.smack.packet.Message xmppMessage = (org.jivesoftware.smack.packet.Message) args[0]; + assertEquals("artem", xmppMessage.getTo()); + assertEquals("hello", xmppMessage.getBody()); + return null; }).when(connection).sendStanza(Mockito.any(org.jivesoftware.smack.packet.Message.class)); channel.send(message); diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppHeaderEnricherParserTests.java b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppHeaderEnricherParserTests.java index 87d09191ce..3a61e565c5 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppHeaderEnricherParserTests.java +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/config/XmppHeaderEnricherParserTests.java @@ -26,15 +26,14 @@ import static org.mockito.Mockito.verify; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; + import org.springframework.beans.factory.annotation.Value; import org.springframework.integration.channel.DirectChannel; +import org.springframework.integration.core.MessagingTemplate; import org.springframework.integration.support.MessageBuilder; import org.springframework.integration.xmpp.XmppHeaders; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHandler; -import org.springframework.integration.core.MessagingTemplate; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -59,14 +58,12 @@ public class XmppHeaderEnricherParserTests { public void to() { MessagingTemplate messagingTemplate = new MessagingTemplate(); MessageHandler handler = mock(MessageHandler.class); - doAnswer(new Answer() { - public Object answer(InvocationOnMock invocation) throws Throwable { - Message message = invocation.getArgumentAt(0, Message.class); - String chatToUser = (String) message.getHeaders().get(XmppHeaders.TO); - assertNotNull(chatToUser); - assertEquals("test1@example.org", chatToUser); - return null; - } + doAnswer(invocation -> { + Message message = invocation.getArgumentAt(0, Message.class); + String chatToUser = (String) message.getHeaders().get(XmppHeaders.TO); + assertNotNull(chatToUser); + assertEquals("test1@example.org", chatToUser); + return null; }).when(handler).handleMessage(Mockito.any(Message.class)); output.subscribe(handler); messagingTemplate.send(input, MessageBuilder.withPayload("foo").build()); diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/inbound/ChatMessageListeningEndpointTests.java b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/inbound/ChatMessageListeningEndpointTests.java index 5bf6962b9d..2ad0acf3d0 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/inbound/ChatMessageListeningEndpointTests.java +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/inbound/ChatMessageListeningEndpointTests.java @@ -45,8 +45,6 @@ import org.jivesoftware.smackx.gcm.packet.GcmPacketExtension; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; import org.xmlpull.v1.XmlPullParser; import org.springframework.beans.DirectFieldAccessor; @@ -58,7 +56,6 @@ import org.springframework.integration.channel.DirectChannel; import org.springframework.integration.channel.QueueChannel; import org.springframework.integration.test.util.TestUtils; import org.springframework.integration.xmpp.core.XmppContextUtils; -import org.springframework.messaging.MessageHandler; import org.springframework.messaging.MessagingException; import org.springframework.messaging.PollableChannel; import org.springframework.messaging.support.ErrorMessage; @@ -81,25 +78,15 @@ public class ChatMessageListeningEndpointTests { XMPPConnection connection = mock(XMPPConnection.class); ChatMessageListeningEndpoint endpoint = new ChatMessageListeningEndpoint(connection); - willAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - packetListSet.add(invocation.getArgumentAt(0, StanzaListener.class)); - return null; - } - + willAnswer(invocation -> { + packetListSet.add(invocation.getArgumentAt(0, StanzaListener.class)); + return null; }).given(connection) .addAsyncStanzaListener(Mockito.any(StanzaListener.class), Mockito.any(StanzaFilter.class)); - willAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - packetListSet.remove(invocation.getArguments()[0]); - return null; - } - + willAnswer(invocation -> { + packetListSet.remove(invocation.getArguments()[0]); + return null; }).given(connection) .removeAsyncStanzaListener(Mockito.any(StanzaListener.class)); @@ -146,14 +133,8 @@ public class ChatMessageListeningEndpointTests { ChatMessageListeningEndpoint endpoint = new ChatMessageListeningEndpoint(); DirectChannel outChannel = new DirectChannel(); - outChannel.subscribe(new MessageHandler() { - - @Override - public void handleMessage(org.springframework.messaging.Message message) - throws MessagingException { - throw new RuntimeException("ooops"); - } - + outChannel.subscribe(message -> { + throw new RuntimeException("ooops"); }); PollableChannel errorChannel = new QueueChannel(); endpoint.setBeanFactory(bf); @@ -203,15 +184,10 @@ public class ChatMessageListeningEndpointTests { Log logger = Mockito.spy(TestUtils.getPropertyValue(endpoint, "logger", Log.class)); given(logger.isInfoEnabled()).willReturn(true); final CountDownLatch logLatch = new CountDownLatch(1); - willAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - Object result = invocation.callRealMethod(); - logLatch.countDown(); - return result; - } - + willAnswer(invocation -> { + Object result = invocation.callRealMethod(); + logLatch.countDown(); + return result; }).given(logger).info(anyString()); new DirectFieldAccessor(endpoint).setPropertyValue("logger", logger); @@ -276,7 +252,7 @@ public class ChatMessageListeningEndpointTests { private static class TestXMPPConnection extends XMPPTCPConnection { - private TestXMPPConnection() { + TestXMPPConnection() { super(null); } diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/inbound/PresenceListeningEndpointTests.java b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/inbound/PresenceListeningEndpointTests.java index 95bd019f36..b4a4a20030 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/inbound/PresenceListeningEndpointTests.java +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/inbound/PresenceListeningEndpointTests.java @@ -19,6 +19,7 @@ package org.springframework.integration.xmpp.inbound; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; +import static org.mockito.Matchers.any; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; @@ -33,9 +34,6 @@ import org.jivesoftware.smack.packet.Presence.Type; import org.jivesoftware.smack.roster.Roster; import org.jivesoftware.smack.roster.RosterListener; import org.junit.Test; -import org.mockito.Mockito; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.support.DefaultListableBeanFactory; @@ -44,7 +42,6 @@ import org.springframework.integration.channel.QueueChannel; import org.springframework.integration.test.util.TestUtils; import org.springframework.integration.xmpp.core.XmppContextUtils; import org.springframework.messaging.Message; -import org.springframework.messaging.MessageHandler; import org.springframework.messaging.MessagingException; import org.springframework.messaging.PollableChannel; import org.springframework.messaging.support.ErrorMessage; @@ -66,25 +63,15 @@ public class PresenceListeningEndpointTests { Map instances = TestUtils.getPropertyValue(roster, "INSTANCES", Map.class); instances.put(connection, roster); - doAnswer(new Answer() { + doAnswer(invocation -> { + rosterSet.add(invocation.getArgumentAt(0, RosterListener.class)); + return null; + }).when(roster).addRosterListener(any(RosterListener.class)); - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - rosterSet.add(invocation.getArgumentAt(0, RosterListener.class)); - return null; - } - - }).when(roster).addRosterListener(Mockito.any(RosterListener.class)); - - doAnswer(new Answer() { - - @Override - public Object answer(InvocationOnMock invocation) throws Throwable { - rosterSet.remove(invocation.getArgumentAt(0, RosterListener.class)); - return null; - } - - }).when(roster).removeRosterListener(Mockito.any(RosterListener.class)); + doAnswer(invocation -> { + rosterSet.remove(invocation.getArgumentAt(0, RosterListener.class)); + return null; + }).when(roster).removeRosterListener(any(RosterListener.class)); PresenceListeningEndpoint rosterEndpoint = new PresenceListeningEndpoint(connection); rosterEndpoint.setOutputChannel(new QueueChannel()); rosterEndpoint.setBeanFactory(mock(BeanFactory.class)); @@ -149,14 +136,8 @@ public class PresenceListeningEndpointTests { PresenceListeningEndpoint endpoint = new PresenceListeningEndpoint(); DirectChannel outChannel = new DirectChannel(); - outChannel.subscribe(new MessageHandler() { - - @Override - public void handleMessage(org.springframework.messaging.Message message) - throws MessagingException { - throw new RuntimeException("ooops"); - } - + outChannel.subscribe(message -> { + throw new RuntimeException("ooops"); }); PollableChannel errorChannel = new QueueChannel(); endpoint.setBeanFactory(bf); diff --git a/spring-integration-zookeeper/src/main/java/org/springframework/integration/zookeeper/leader/LeaderInitiator.java b/spring-integration-zookeeper/src/main/java/org/springframework/integration/zookeeper/leader/LeaderInitiator.java index 95fd3f2db8..8a4854f3a5 100644 --- a/spring-integration-zookeeper/src/main/java/org/springframework/integration/zookeeper/leader/LeaderInitiator.java +++ b/spring-integration-zookeeper/src/main/java/org/springframework/integration/zookeeper/leader/LeaderInitiator.java @@ -252,6 +252,10 @@ public class LeaderInitiator implements SmartLifecycle { */ private class CuratorContext implements Context { + CuratorContext() { + super(); + } + @Override public boolean isLeader() { return LeaderInitiator.this.leaderSelector.hasLeadership(); diff --git a/spring-integration-zookeeper/src/main/java/org/springframework/integration/zookeeper/lock/ZookeeperLockRegistry.java b/spring-integration-zookeeper/src/main/java/org/springframework/integration/zookeeper/lock/ZookeeperLockRegistry.java index 2807aa92e5..c634fc2d16 100644 --- a/spring-integration-zookeeper/src/main/java/org/springframework/integration/zookeeper/lock/ZookeeperLockRegistry.java +++ b/spring-integration-zookeeper/src/main/java/org/springframework/integration/zookeeper/lock/ZookeeperLockRegistry.java @@ -178,6 +178,7 @@ public class ZookeeperLockRegistry implements ExpirableLockRegistry, DisposableB * Zookeeper path. * */ + @FunctionalInterface public interface KeyToPathStrategy { /** @@ -191,7 +192,9 @@ public class ZookeeperLockRegistry implements ExpirableLockRegistry, DisposableB * @return true if this strategy returns a bounded number of locks, removing * the need for removing LRU locks. */ - boolean bounded(); + default boolean bounded() { + return true; + } } @@ -199,7 +202,7 @@ public class ZookeeperLockRegistry implements ExpirableLockRegistry, DisposableB private final String root; - private DefaultKeyToPathStrategy(String rootPath) { + DefaultKeyToPathStrategy(String rootPath) { Assert.notNull(rootPath, "'rootPath' cannot be null"); if (!rootPath.endsWith("/")) { this.root = rootPath + "/"; @@ -233,7 +236,7 @@ public class ZookeeperLockRegistry implements ExpirableLockRegistry, DisposableB private long lastUsed; - private ZkLock(CuratorFramework client, AsyncTaskExecutor mutexTaskExecutor, String path) { + ZkLock(CuratorFramework client, AsyncTaskExecutor mutexTaskExecutor, String path) { this.client = client; this.mutex = new InterProcessMutex(client, path); this.mutexTaskExecutor = mutexTaskExecutor; diff --git a/spring-integration-zookeeper/src/main/java/org/springframework/integration/zookeeper/metadata/ZookeeperMetadataStore.java b/spring-integration-zookeeper/src/main/java/org/springframework/integration/zookeeper/metadata/ZookeeperMetadataStore.java index c410db5f87..933120ea2b 100644 --- a/spring-integration-zookeeper/src/main/java/org/springframework/integration/zookeeper/metadata/ZookeeperMetadataStore.java +++ b/spring-integration-zookeeper/src/main/java/org/springframework/integration/zookeeper/metadata/ZookeeperMetadataStore.java @@ -334,7 +334,7 @@ public class ZookeeperMetadataStore implements ListenableMetadataStore, SmartLif private final int version; - private LocalChildData(String value, int version) { + LocalChildData(String value, int version) { this.value = value; this.version = version; } @@ -351,6 +351,10 @@ public class ZookeeperMetadataStore implements ListenableMetadataStore, SmartLif private class MetadataStoreListenerInvokingPathChildrenCacheListener implements PathChildrenCacheListener { + MetadataStoreListenerInvokingPathChildrenCacheListener() { + super(); + } + @Override public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception { synchronized (ZookeeperMetadataStore.this.updateMap) { diff --git a/spring-integration-zookeeper/src/test/java/org/springframework/integration/zookeeper/config/LeaderInitiatorFactoryBeanTests.java b/spring-integration-zookeeper/src/test/java/org/springframework/integration/zookeeper/config/LeaderInitiatorFactoryBeanTests.java index 0a0f81654b..0cf45a978b 100644 --- a/spring-integration-zookeeper/src/test/java/org/springframework/integration/zookeeper/config/LeaderInitiatorFactoryBeanTests.java +++ b/spring-integration-zookeeper/src/test/java/org/springframework/integration/zookeeper/config/LeaderInitiatorFactoryBeanTests.java @@ -108,15 +108,10 @@ public class LeaderInitiatorFactoryBeanTests extends ZookeeperTestSupport { @Bean public ApplicationListener listener() { - return new ApplicationListener() { - - @Override - public void onApplicationEvent(AbstractLeaderEvent event) { - events.add(event); - latch1.countDown(); - latch2.countDown(); - } - + return event -> { + events.add((AbstractLeaderEvent) event); + latch1.countDown(); + latch2.countDown(); }; } diff --git a/spring-integration-zookeeper/src/test/java/org/springframework/integration/zookeeper/lock/ZkLockRegistryTests.java b/spring-integration-zookeeper/src/test/java/org/springframework/integration/zookeeper/lock/ZkLockRegistryTests.java index 09e57fdaab..7f2eb2116f 100644 --- a/spring-integration-zookeeper/src/test/java/org/springframework/integration/zookeeper/lock/ZkLockRegistryTests.java +++ b/spring-integration-zookeeper/src/test/java/org/springframework/integration/zookeeper/lock/ZkLockRegistryTests.java @@ -27,7 +27,6 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.Map; -import java.util.concurrent.Callable; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executors; import java.util.concurrent.Future; @@ -39,7 +38,6 @@ import org.junit.Test; import org.springframework.integration.test.util.TestUtils; import org.springframework.integration.zookeeper.ZookeeperTestSupport; -import org.springframework.integration.zookeeper.lock.ZookeeperLockRegistry.KeyToPathStrategy; import org.springframework.messaging.MessagingException; /** @@ -150,21 +148,17 @@ public class ZkLockRegistryTests extends ZookeeperTestSupport { lock1.lockInterruptibly(); final AtomicBoolean locked = new AtomicBoolean(); final CountDownLatch latch = new CountDownLatch(1); - Future result = Executors.newSingleThreadExecutor().submit(new Callable() { - - @Override - public Object call() throws Exception { - Lock lock2 = registry.obtain("foo"); - locked.set(lock2.tryLock(200, TimeUnit.MILLISECONDS)); - latch.countDown(); - try { - lock2.unlock(); - } - catch (MessagingException e) { - return e.getCause(); - } - return null; + Future result = Executors.newSingleThreadExecutor().submit(() -> { + Lock lock2 = registry.obtain("foo"); + locked.set(lock2.tryLock(200, TimeUnit.MILLISECONDS)); + latch.countDown(); + try { + lock2.unlock(); } + catch (MessagingException e) { + return e.getCause(); + } + return null; }); assertTrue(latch.await(10, TimeUnit.SECONDS)); assertFalse(locked.get()); @@ -184,24 +178,20 @@ public class ZkLockRegistryTests extends ZookeeperTestSupport { final CountDownLatch latch2 = new CountDownLatch(1); final CountDownLatch latch3 = new CountDownLatch(1); lock1.lockInterruptibly(); - Executors.newSingleThreadExecutor().execute(new Runnable() { - - @Override - public void run() { - Lock lock2 = registry.obtain("foo"); - try { - latch1.countDown(); - lock2.lockInterruptibly(); - latch2.await(10, TimeUnit.SECONDS); - locked.set(true); - } - catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - finally { - lock2.unlock(); - latch3.countDown(); - } + Executors.newSingleThreadExecutor().execute(() -> { + Lock lock2 = registry.obtain("foo"); + try { + latch1.countDown(); + lock2.lockInterruptibly(); + latch2.await(10, TimeUnit.SECONDS); + locked.set(true); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + finally { + lock2.unlock(); + latch3.countDown(); } }); assertTrue(latch1.await(10, TimeUnit.SECONDS)); @@ -223,24 +213,20 @@ public class ZkLockRegistryTests extends ZookeeperTestSupport { final CountDownLatch latch2 = new CountDownLatch(1); final CountDownLatch latch3 = new CountDownLatch(1); lock1.lockInterruptibly(); - Executors.newSingleThreadExecutor().execute(new Runnable() { - - @Override - public void run() { - Lock lock2 = registry2.obtain("foo"); - try { - latch1.countDown(); - lock2.lockInterruptibly(); - latch2.await(10, TimeUnit.SECONDS); - locked.set(true); - } - catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - finally { - lock2.unlock(); - latch3.countDown(); - } + Executors.newSingleThreadExecutor().execute(() -> { + Lock lock2 = registry2.obtain("foo"); + try { + latch1.countDown(); + lock2.lockInterruptibly(); + latch2.await(10, TimeUnit.SECONDS); + locked.set(true); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + finally { + lock2.unlock(); + latch3.countDown(); } }); assertTrue(latch1.await(10, TimeUnit.SECONDS)); @@ -260,19 +246,15 @@ public class ZkLockRegistryTests extends ZookeeperTestSupport { lock.lockInterruptibly(); final AtomicBoolean locked = new AtomicBoolean(); final CountDownLatch latch = new CountDownLatch(1); - Future result = Executors.newSingleThreadExecutor().submit(new Callable() { - - @Override - public Object call() throws Exception { - try { - lock.unlock(); - } - catch (Exception e) { - latch.countDown(); - return e.getCause(); - } - return null; + Future result = Executors.newSingleThreadExecutor().submit(() -> { + try { + lock.unlock(); } + catch (Exception e) { + latch.countDown(); + return e.getCause(); + } + return null; }); assertTrue(latch.await(10, TimeUnit.SECONDS)); assertFalse(locked.get()); @@ -285,18 +267,8 @@ public class ZkLockRegistryTests extends ZookeeperTestSupport { @Test public void testLockWithBoundedStrategy() throws Exception { - ZookeeperLockRegistry registry = new ZookeeperLockRegistry(this.client, new KeyToPathStrategy() { - - @Override - public String pathFor(String key) { - return "/SpringIntegration-LockRegistry/singleLock"; - } - - @Override - public boolean bounded() { - return true; - } - }); + ZookeeperLockRegistry registry = new ZookeeperLockRegistry(this.client, + key -> "/SpringIntegration-LockRegistry/singleLock"); for (int i = 0; i < 10; i++) { Lock lock = registry.obtain("foo"); lock.lock();