Support Java 14 (#3310)

* Support Java 14

* Provide changes to avoid deprecated Java API
and have a compatibility back to Java 8
* Change affected test classes to JUnit 5 whenever it is possible
* Ignore/Disable some TCP/IP tests which don't pass on Java 14

* Fix (some) TCP tests on JRE 14

* Fix SSL Handshake test - client side handshake is successful with java 14

- change the badClient cert to a badServer cert to force an error on the client side

Co-authored-by: artembilan <raven666>
Co-authored-by: Gary Russell <grussell@pivotal.io>
This commit is contained in:
Artem Bilan
2020-06-17 14:00:06 -04:00
committed by GitHub
parent b0cd0156c7
commit 3f5aba2cb9
53 changed files with 613 additions and 671 deletions

View File

@@ -67,7 +67,9 @@ ext {
h2Version = '1.4.200'
jacksonVersion = '2.11.0'
javaxActivationVersion = '1.2.0'
javaxAnnotationVersion= '1.3.2'
javaxMailVersion = '1.6.2'
jaxbVersion = '2.3.3'
jmsApiVersion = '2.0.1'
jpa21ApiVersion = '1.0.2.Final'
jpaApiVersion = '2.2.1'
@@ -90,8 +92,10 @@ ext {
resilience4jVersion = '1.4.0'
romeToolsVersion = '1.12.2'
rsocketVersion = '1.0.0'
saajVersion = '1.5.2'
servletApiVersion = '4.0.1'
smackVersion = '4.3.4'
soapVersion = '1.4.0'
springAmqpVersion = project.hasProperty('springAmqpVersion') ? project.springAmqpVersion : '2.3.0-SNAPSHOT'
springDataVersion = project.hasProperty('springDataVersion') ? project.springDataVersion : '2020.0.0-SNAPSHOT'
springSecurityVersion = project.hasProperty('springSecurityVersion') ? project.springSecurityVersion : '5.4.0-SNAPSHOT'
@@ -231,6 +235,7 @@ configure(javaProjects) { subproject ->
testImplementation 'io.projectreactor:reactor-test'
testImplementation "com.jayway.jsonpath:json-path:$jsonpathVersion"
testImplementation 'com.fasterxml.jackson.core:jackson-databind'
testImplementation "javax.annotation:javax.annotation-api:$javaxAnnotationVersion"
// To avoid compiler warnings about @API annotations in JUnit code
testCompileOnly 'org.apiguardian:apiguardian-api:1.0.0'
@@ -314,6 +319,8 @@ configure(javaProjects) { subproject ->
environment 'SI_FATAL_WHEN_NO_BEANFACTORY', 'true'
useJUnitPlatform()
enableAssertions = false
}
checkstyle {
@@ -774,6 +781,11 @@ project('spring-integration-ws') {
exclude group: 'org.springframework'
}
optionalApi "javax.activation:javax.activation-api:$javaxActivationVersion"
providedImplementation "javax.xml.soap:javax.xml.soap-api:$soapVersion"
providedImplementation "com.sun.xml.bind:jaxb-impl:$jaxbVersion"
providedImplementation "com.sun.xml.messaging.saaj:saaj-impl:$saajVersion"
testImplementation "com.thoughtworks.xstream:xstream:$xstreamVersion"
testImplementation ("org.springframework.ws:spring-ws-support:$springWsVersion") {
exclude group: 'org.springframework'
@@ -801,6 +813,8 @@ project('spring-integration-xml') {
optionalApi ("org.springframework.ws:spring-ws-core:$springWsVersion") {
exclude group: 'org.springframework'
}
testImplementation "com.sun.xml.bind:jaxb-impl:$jaxbVersion"
}
}

View File

@@ -115,7 +115,7 @@ public class DefaultAmqpHeaderMapperTests {
assertThat(amqpProperties.getDeliveryMode()).isEqualTo(MessageDeliveryMode.NON_PERSISTENT);
assertThat(amqpProperties.getDeliveryTag()).isEqualTo(1234L);
assertThat(amqpProperties.getExpiration()).isEqualTo("test.expiration");
assertThat(amqpProperties.getMessageCount()).isEqualTo(new Integer(42));
assertThat(amqpProperties.getMessageCount()).isEqualTo(42);
assertThat(amqpProperties.getMessageId()).isEqualTo("test.messageId");
assertThat(amqpProperties.getReceivedExchange()).isEqualTo("test.receivedExchange");
assertThat(amqpProperties.getReceivedRoutingKey()).isEqualTo("test.receivedRoutingKey");

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2016-2019 the original author or authors.
* Copyright 2016-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,6 +20,7 @@ import java.util.LinkedHashMap;
import java.util.Map;
import java.util.function.Function;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.core.ResolvableType;
import org.springframework.integration.channel.DirectChannel;
@@ -55,14 +56,9 @@ public abstract class EndpointSpec<S extends EndpointSpec<S, F, H>, F extends Be
@SuppressWarnings("unchecked")
protected EndpointSpec(H handler) {
try {
Class<?> fClass = ResolvableType.forClass(this.getClass()).as(EndpointSpec.class).resolveGenerics()[1];
this.endpointFactoryBean = (F) fClass.newInstance();
this.handler = handler;
}
catch (Exception e) {
throw new IllegalStateException(e);
}
Class<?> fClass = ResolvableType.forClass(this.getClass()).as(EndpointSpec.class).resolveGenerics()[1];
this.endpointFactoryBean = (F) BeanUtils.instantiateClass(fClass);
this.handler = handler;
}
@Override

View File

@@ -179,14 +179,14 @@ public abstract class IntegrationFlowAdapter implements IntegrationFlow, SmartLi
return IntegrationFlows.from(inboundGatewaySpec);
}
protected <T> IntegrationFlowBuilder from(Supplier<T> messageSource) {
return IntegrationFlows.from(messageSource);
protected <T> IntegrationFlowBuilder fromSupplier(Supplier<T> messageSource) {
return IntegrationFlows.fromSupplier(messageSource);
}
protected <T> IntegrationFlowBuilder from(Supplier<T> messageSource,
protected <T> IntegrationFlowBuilder fromSupplier(Supplier<T> messageSource,
Consumer<SourcePollingChannelAdapterSpec> endpointConfigurer) {
return IntegrationFlows.from(messageSource, endpointConfigurer);
return IntegrationFlows.fromSupplier(messageSource, endpointConfigurer);
}
protected IntegrationFlowBuilder from(Class<?> serviceInterface) {

View File

@@ -141,8 +141,8 @@ public final class IntegrationFlows {
* @return new {@link IntegrationFlowBuilder}.
* @see Supplier
*/
public static <T> IntegrationFlowBuilder from(Supplier<T> messageSource) {
return from(messageSource, null);
public static <T> IntegrationFlowBuilder fromSupplier(Supplier<T> messageSource) {
return fromSupplier(messageSource, null);
}
/**
@@ -156,7 +156,7 @@ public final class IntegrationFlows {
* @return new {@link IntegrationFlowBuilder}.
* @see Supplier
*/
public static <T> IntegrationFlowBuilder from(Supplier<T> messageSource,
public static <T> IntegrationFlowBuilder fromSupplier(Supplier<T> messageSource,
Consumer<SourcePollingChannelAdapterSpec> endpointConfigurer) {
Assert.notNull(messageSource, "'messageSource' must not be null");

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@ import org.springframework.messaging.Message;
* <p>
* The BridgeHandler can be used as a stopper at the end of an assembly line of
* channels. In this setup the output channel doesn't have to be set, but if the
* output channel is omitted the <tt>REPLY_CHANNEL</tt> MUST be set on the
* output channel is omitted the {@code REPLY_CHANNEL} MUST be set on the
* message. Otherwise, a MessagingException will be thrown at runtime.
*
* @author Mark Fisher

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -52,8 +52,8 @@ public interface MetadataStore {
/**
* Remove a value for the given key from this MetadataStore.
* @param key The key.
* @return The previous value associated with <tt>key</tt>, or
* <tt>null</tt> if there was no mapping for <tt>key</tt>.
* @return The previous value associated with key, or
* null if there was no mapping for key.
*/
@ManagedAttribute
String remove(String key);

View File

@@ -106,7 +106,7 @@ fun integrationFlow(messageSource: MessageSourceSpec<*, out MessageSource<*>>,
fun integrationFlow(source: () -> Any,
options: SourcePollingChannelAdapterSpec.() -> Unit = {},
flow: KotlinIntegrationFlowDefinition.() -> Unit) =
buildIntegrationFlow(IntegrationFlows.from(source, options), flow)
buildIntegrationFlow(IntegrationFlows.fromSupplier(source, options), flow)
/**
* Functional [IntegrationFlow] definition in Kotlin DSL for [IntegrationFlows.from] -

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -63,13 +63,13 @@ public class DelayerParserTests {
DelayHandler delayHandler = context.getBean("delayerWithDefaultScheduler.handler", DelayHandler.class);
assertThat(delayHandler.getOrder()).isEqualTo(99);
assertThat(delayHandler.getOutputChannel()).isSameAs(this.context.getBean("output"));
assertThat(TestUtils.getPropertyValue(delayHandler, "defaultDelay", Long.class)).isEqualTo(new Long(1234));
assertThat(TestUtils.getPropertyValue(delayHandler, "defaultDelay", Long.class)).isEqualTo(1234L);
//INT-2243
assertThat(TestUtils.getPropertyValue(delayHandler, "delayExpression")).isNotNull();
assertThat(TestUtils.getPropertyValue(delayHandler, "delayExpression", Expression.class).getExpressionString())
.isEqualTo("headers.foo");
assertThat(TestUtils.getPropertyValue(delayHandler, "messagingTemplate.sendTimeout", Long.class))
.isEqualTo(new Long(987));
.isEqualTo(987L);
assertThat(TestUtils.getPropertyValue(delayHandler, "taskScheduler")).isNull();
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -159,7 +159,7 @@ public class HeaderEnricherOverwriteTests {
template.setDefaultDestination(channel);
Message<?> result = template.sendAndReceive(new GenericMessage<String>("test"));
assertThat(result).isNotNull();
assertThat(new IntegrationMessageHeaderAccessor(result).getPriority()).isEqualTo(new Integer(42));
assertThat(new IntegrationMessageHeaderAccessor(result).getPriority()).isEqualTo(42);
}
@Test
@@ -173,7 +173,7 @@ public class HeaderEnricherOverwriteTests {
input.send(message);
Message<?> result = replyChannel.receive(0);
assertThat(result).isNotNull();
assertThat(new IntegrationMessageHeaderAccessor(result).getPriority()).isEqualTo(new Integer(77));
assertThat(new IntegrationMessageHeaderAccessor(result).getPriority()).isEqualTo(77);
}
@Test

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,6 +22,7 @@ import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -137,7 +138,7 @@ public class HeaderEnricherTests {
MessageChannel channel = context.getBean("expirationDateValueInput", MessageChannel.class);
Message<?> result = template.sendAndReceive(channel, new GenericMessage<>("test"));
assertThat(result).isNotNull();
assertThat(new IntegrationMessageHeaderAccessor(result).getExpirationDate()).isEqualTo(new Long(1111));
assertThat(new IntegrationMessageHeaderAccessor(result).getExpirationDate()).isEqualTo(1111L);
}
@Test
@@ -146,7 +147,7 @@ public class HeaderEnricherTests {
MessageChannel channel = context.getBean("expirationDateRefInput", MessageChannel.class);
Message<?> result = template.sendAndReceive(channel, new GenericMessage<>("test"));
assertThat(result).isNotNull();
assertThat(new IntegrationMessageHeaderAccessor(result).getExpirationDate()).isEqualTo(new Long(9999));
assertThat(new IntegrationMessageHeaderAccessor(result).getExpirationDate()).isEqualTo(9999);
}
@Test
@@ -155,7 +156,7 @@ public class HeaderEnricherTests {
MessageChannel channel = context.getBean("priorityInput", MessageChannel.class);
Message<?> result = template.sendAndReceive(channel, new GenericMessage<>("test"));
assertThat(result).isNotNull();
assertThat(new IntegrationMessageHeaderAccessor(result).getPriority()).isEqualTo(new Integer(42));
assertThat(new IntegrationMessageHeaderAccessor(result).getPriority()).isEqualTo(42);
}
@Test
@@ -165,7 +166,7 @@ public class HeaderEnricherTests {
Message<?> result = template.sendAndReceive(channel,
new GenericMessage<>(Collections.singletonMap("priority", "-10")));
assertThat(result).isNotNull();
assertThat(new IntegrationMessageHeaderAccessor(result).getPriority()).isEqualTo(new Integer(-10));
assertThat(new IntegrationMessageHeaderAccessor(result).getPriority()).isEqualTo(-10);
}
@Test
@@ -300,7 +301,7 @@ public class HeaderEnricherTests {
TestBean testBean = (TestBean) o;
return !(name != null ? !name.equals(testBean.name) : testBean.name != null);
return Objects.equals(name, testBean.name);
}

View File

@@ -540,7 +540,7 @@ public class IntegrationFlowTests {
@Bean
public IntegrationFlow supplierFlow() {
return IntegrationFlows.from(stringSupplier())
return IntegrationFlows.fromSupplier(stringSupplier())
.transform(toUpperCaseFunction())
.channel("suppliedChannel")
.get();
@@ -572,7 +572,8 @@ public class IntegrationFlowTests {
@Bean
public IntegrationFlow supplierFlow2() {
return IntegrationFlows.from(() -> "foo", c -> c.poller(Pollers.fixedDelay(100).maxMessagesPerPoll(1)))
return IntegrationFlows.fromSupplier(() -> "foo",
c -> c.poller(Pollers.fixedDelay(100).maxMessagesPerPoll(1)))
.<String, String>transform(String::toUpperCase)
.channel("suppliedChannel2")
.get();

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2016-2019 the original author or authors.
* Copyright 2016-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -25,8 +25,7 @@ import java.util.List;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.Test;
import org.springframework.aop.framework.Advised;
import org.springframework.aop.support.AopUtils;
@@ -60,7 +59,7 @@ import org.springframework.messaging.handler.annotation.Header;
import org.springframework.scheduling.TriggerContext;
import org.springframework.stereotype.Component;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
import org.springframework.util.StringUtils;
/**
@@ -68,7 +67,7 @@ import org.springframework.util.StringUtils;
*
* @since 5.0
*/
@RunWith(SpringRunner.class)
@SpringJUnitConfig
@DirtiesContext
public class FlowServiceTests {
@@ -174,7 +173,7 @@ public class FlowServiceTests {
@Override
protected IntegrationFlowDefinition<?> buildFlow() {
return from(this::messageSource, e -> e.poller(p -> p.trigger(this::nextExecutionTime)))
return fromSupplier(this::messageSource, e -> e.poller(p -> p.trigger(this::nextExecutionTime)))
.split(this, null, e -> e.applySequence(false))
.transform(this)
.aggregate(a -> a.processor(this, null))

View File

@@ -34,8 +34,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Supplier;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.BeanCreationException;
import org.springframework.beans.factory.BeanCreationNotAllowedException;
@@ -87,7 +86,7 @@ import org.springframework.messaging.support.GenericMessage;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
import org.springframework.util.ReflectionUtils;
import reactor.core.publisher.Flux;
@@ -100,7 +99,7 @@ import reactor.core.publisher.Flux;
*/
@ContextConfiguration(loader = NoBeansOverrideAnnotationConfigContextLoader.class,
classes = ManualFlowTests.RootConfiguration.class)
@RunWith(SpringRunner.class)
@SpringJUnitConfig
@DirtiesContext
public class ManualFlowTests {
@@ -537,7 +536,7 @@ public class ManualFlowTests {
.withCauseExactlyInstanceOf(IllegalStateException.class)
.withRootCauseInstanceOf(ClassCastException.class)
.withMessageContaining("from source: '" + source + "'")
.withStackTraceContaining("java.util.Date cannot be cast to java.lang.String");
.withStackTraceContaining("java.util.Date cannot be cast to");
flowRegistration.destroy();
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -58,9 +58,9 @@ public class ProducerAndConsumerAutoStartupTests {
received.add(this.consumer.poll(10000));
}
this.context.stop();
assertThat(received.get(0)).isEqualTo(new Integer(1));
assertThat(received.get(1)).isEqualTo(new Integer(2));
assertThat(received.get(2)).isEqualTo(new Integer(3));
assertThat(received.get(0)).isEqualTo(1);
assertThat(received.get(1)).isEqualTo(2);
assertThat(received.get(2)).isEqualTo(3);
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,21 +18,19 @@ package org.springframework.integration.filter;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.PollableChannel;
import org.springframework.messaging.support.GenericMessage;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
/**
* @author Mark Fisher
* @author Artem Bilan
*/
@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@SpringJUnitConfig
public class DynamicExpressionFilterIntegrationTests {
@Autowired
@@ -46,15 +44,15 @@ public class DynamicExpressionFilterIntegrationTests {
@Test
public void simpleExpressionBasedFilter() {
this.input.send(new GenericMessage<Integer>(1));
this.input.send(new GenericMessage<Integer>(0));
this.input.send(new GenericMessage<Integer>(99));
this.input.send(new GenericMessage<Integer>(-99));
assertThat(positives.receive(0).getPayload()).isEqualTo(new Integer(1));
assertThat(positives.receive(0).getPayload()).isEqualTo(new Integer(99));
assertThat(negatives.receive(0).getPayload()).isEqualTo(new Integer(0));
assertThat(negatives.receive(0).getPayload()).isEqualTo(new Integer(-99));
void simpleExpressionBasedFilter() {
this.input.send(new GenericMessage<>(1));
this.input.send(new GenericMessage<>(0));
this.input.send(new GenericMessage<>(99));
this.input.send(new GenericMessage<>(-99));
assertThat(positives.receive(0).getPayload()).isEqualTo(1);
assertThat(positives.receive(0).getPayload()).isEqualTo(99);
assertThat(negatives.receive(0).getPayload()).isEqualTo(0);
assertThat(negatives.receive(0).getPayload()).isEqualTo(-99);
assertThat(positives.receive(0)).isNull();
assertThat(negatives.receive(0)).isNull();
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,21 +18,19 @@ package org.springframework.integration.filter;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.PollableChannel;
import org.springframework.messaging.support.GenericMessage;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
/**
* @author Mark Fisher
* @author Artem Bilan
*/
@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@SpringJUnitConfig
public class SpelFilterIntegrationTests {
@Autowired
@@ -56,28 +54,28 @@ public class SpelFilterIntegrationTests {
@Test
public void simpleExpressionBasedFilter() {
this.simpleInput.send(new GenericMessage<Integer>(1));
this.simpleInput.send(new GenericMessage<Integer>(0));
this.simpleInput.send(new GenericMessage<Integer>(99));
this.simpleInput.send(new GenericMessage<Integer>(-99));
assertThat(positives.receive(0).getPayload()).isEqualTo(new Integer(1));
assertThat(positives.receive(0).getPayload()).isEqualTo(new Integer(99));
assertThat(negatives.receive(0).getPayload()).isEqualTo(new Integer(0));
assertThat(negatives.receive(0).getPayload()).isEqualTo(new Integer(-99));
this.simpleInput.send(new GenericMessage<>(1));
this.simpleInput.send(new GenericMessage<>(0));
this.simpleInput.send(new GenericMessage<>(99));
this.simpleInput.send(new GenericMessage<>(-99));
assertThat(positives.receive(0).getPayload()).isEqualTo(1);
assertThat(positives.receive(0).getPayload()).isEqualTo(99);
assertThat(negatives.receive(0).getPayload()).isEqualTo(0);
assertThat(negatives.receive(0).getPayload()).isEqualTo(-99);
assertThat(positives.receive(0)).isNull();
assertThat(negatives.receive(0)).isNull();
}
@Test
public void beanResolvingExpressionBasedFilter() {
this.beanResolvingInput.send(new GenericMessage<Integer>(1));
this.beanResolvingInput.send(new GenericMessage<Integer>(2));
this.beanResolvingInput.send(new GenericMessage<Integer>(9));
this.beanResolvingInput.send(new GenericMessage<Integer>(22));
assertThat(odds.receive(0).getPayload()).isEqualTo(new Integer(1));
assertThat(odds.receive(0).getPayload()).isEqualTo(new Integer(9));
assertThat(evens.receive(0).getPayload()).isEqualTo(new Integer(2));
assertThat(evens.receive(0).getPayload()).isEqualTo(new Integer(22));
this.beanResolvingInput.send(new GenericMessage<>(1));
this.beanResolvingInput.send(new GenericMessage<>(2));
this.beanResolvingInput.send(new GenericMessage<>(9));
this.beanResolvingInput.send(new GenericMessage<>(22));
assertThat(odds.receive(0).getPayload()).isEqualTo(1);
assertThat(odds.receive(0).getPayload()).isEqualTo(9);
assertThat(evens.receive(0).getPayload()).isEqualTo(2);
assertThat(evens.receive(0).getPayload()).isEqualTo(22);
assertThat(odds.receive(0)).isNull();
assertThat(evens.receive(0)).isNull();
}
@@ -89,6 +87,7 @@ public class SpelFilterIntegrationTests {
public boolean isEven(int number) {
return number % 2 == 0;
}
}
}

View File

@@ -209,7 +209,7 @@ public class GatewayProxyFactoryBeanTests {
proxyFactory.afterPropertiesSet();
TestService service = (TestService) proxyFactory.getObject();
Integer result = service.requestReplyWithIntegers(123);
assertThat(result).isEqualTo(new Integer(123456));
assertThat(result).isEqualTo(123456);
}
@Test

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -255,8 +255,8 @@ public class MethodInvokingMessageProcessorAnnotationTests {
.setHeader("attrib2", 456).build();
Map<String, Integer> result = (Map<String, Integer>) processor.processMessage(message);
assertThat(result.size()).isEqualTo(2);
assertThat(result.get("attrib1")).isEqualTo(new Integer(88));
assertThat(result.get("attrib2")).isEqualTo(new Integer(99));
assertThat(result.get("attrib1")).isEqualTo(88);
assertThat(result.get("attrib2")).isEqualTo(99);
}
@Test

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -77,7 +77,7 @@ public class MessageBuilderTests {
.setHeader("count", 123)
.build();
assertThat(message.getHeaders().get("foo", String.class)).isEqualTo("bar");
assertThat(message.getHeaders().get("count", Integer.class)).isEqualTo(new Integer(123));
assertThat(message.getHeaders().get("count", Integer.class)).isEqualTo(123);
}
@Test
@@ -189,7 +189,7 @@ public class MessageBuilderTests {
public void testPriority() {
Message<Integer> importantMessage = MessageBuilder.withPayload(1)
.setPriority(123).build();
assertThat(new IntegrationMessageHeaderAccessor(importantMessage).getPriority()).isEqualTo(new Integer(123));
assertThat(new IntegrationMessageHeaderAccessor(importantMessage).getPriority()).isEqualTo(123);
}
@Test
@@ -199,7 +199,7 @@ public class MessageBuilderTests {
Message<Integer> message2 = MessageBuilder.fromMessage(message1)
.setHeaderIfAbsent(IntegrationMessageHeaderAccessor.PRIORITY, 13)
.build();
assertThat(new IntegrationMessageHeaderAccessor(message2).getPriority()).isEqualTo(new Integer(42));
assertThat(new IntegrationMessageHeaderAccessor(message2).getPriority()).isEqualTo(42);
}
@Test

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
package org.springframework.integration.message;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -26,12 +27,13 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.Test;
import org.junit.jupiter.api.Test;
import org.springframework.messaging.MessageHeaders;
/**
* @author Mark Fisher
* @author Artem Bilan
*/
public class MessageHeadersTests {
@@ -50,7 +52,7 @@ public class MessageHeadersTests {
}
@Test
public void testIdOverwritten() throws Exception {
public void testIdOverwritten() {
MessageHeaders headers1 = new MessageHeaders(null);
MessageHeaders headers2 = new MessageHeaders(headers1);
assertThat(headers2.getId()).isNotSameAs(headers1.getId());
@@ -64,8 +66,8 @@ public class MessageHeadersTests {
@Test
public void testNonTypedAccessOfHeaderValue() {
Integer value = new Integer(123);
Map<String, Object> map = new HashMap<String, Object>();
int value = 123;
Map<String, Object> map = new HashMap<>();
map.put("test", value);
MessageHeaders headers = new MessageHeaders(map);
assertThat(headers.get("test")).isEqualTo(value);
@@ -73,41 +75,44 @@ public class MessageHeadersTests {
@Test
public void testTypedAccessOfHeaderValue() {
Integer value = new Integer(123);
Map<String, Object> map = new HashMap<String, Object>();
int value = 123;
Map<String, Object> map = new HashMap<>();
map.put("test", value);
MessageHeaders headers = new MessageHeaders(map);
assertThat(headers.get("test", Integer.class)).isEqualTo(value);
}
@Test(expected = IllegalArgumentException.class)
@Test
public void testHeaderValueAccessWithIncorrectType() {
Integer value = new Integer(123);
Map<String, Object> map = new HashMap<String, Object>();
int value = 123;
Map<String, Object> map = new HashMap<>();
map.put("test", value);
MessageHeaders headers = new MessageHeaders(map);
assertThat(headers.get("test", String.class)).isEqualTo(value);
assertThatIllegalArgumentException()
.isThrownBy(() -> headers.get("test", String.class))
.withMessageContaining(
"Expected [class java.lang.String] but actual type is [class java.lang.Integer]");
}
@Test
public void testNullHeaderValue() {
Map<String, Object> map = new HashMap<String, Object>();
Map<String, Object> map = new HashMap<>();
MessageHeaders headers = new MessageHeaders(map);
assertThat(headers.get("nosuchattribute")).isNull();
}
@Test
public void testNullHeaderValueWithTypedAccess() {
Map<String, Object> map = new HashMap<String, Object>();
Map<String, Object> map = new HashMap<>();
MessageHeaders headers = new MessageHeaders(map);
assertThat(headers.get("nosuchattribute", String.class)).isNull();
}
@Test
public void testHeaderKeys() {
Map<String, Object> map = new HashMap<String, Object>();
Map<String, Object> map = new HashMap<>();
map.put("key1", "val1");
map.put("key2", new Integer(123));
map.put("key2", 123);
MessageHeaders headers = new MessageHeaders(map);
Set<String> keys = headers.keySet();
assertThat(keys.contains("key1")).isTrue();
@@ -116,7 +121,7 @@ public class MessageHeadersTests {
@Test
public void serializeWithAllSerializableHeaders() throws Exception {
Map<String, Object> map = new HashMap<String, Object>();
Map<String, Object> map = new HashMap<>();
map.put("name", "joe");
map.put("age", 42);
MessageHeaders input = new MessageHeaders(map);
@@ -128,7 +133,7 @@ public class MessageHeadersTests {
@Test
public void serializeWithNonSerializableHeader() throws Exception {
Object address = new Object();
Map<String, Object> map = new HashMap<String, Object>();
Map<String, Object> map = new HashMap<>();
map.put("name", "joe");
map.put("address", address);
MessageHeaders input = new MessageHeaders(map);

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,16 +17,18 @@
package org.springframework.integration.message;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.integration.handler.ServiceActivatingHandler;
@@ -44,24 +46,24 @@ import org.springframework.messaging.handler.annotation.Payload;
*
* @since 1.0.3
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@SuppressWarnings({"rawtypes", "unchecked"})
public class PayloadAndHeaderMappingTests {
private static final ConfigurableApplicationContext applicationContext = TestUtils.createTestApplicationContext();
private TestBean bean;
@BeforeClass
@BeforeAll
public static void start() {
applicationContext.refresh();
}
@AfterClass
@AfterAll
public static void stop() {
applicationContext.close();
}
@Before
@BeforeEach
public void setup() {
bean = new TestBean();
}
@@ -71,7 +73,7 @@ public class PayloadAndHeaderMappingTests {
public void headerPropertiesAndObjectPayload() throws Exception {
MessageHandler handler = this.getHandler("headerPropertiesAndObjectPayload", Properties.class, Object.class);
Object payload = "test";
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
headers.put("baz", 99);
@@ -87,7 +89,7 @@ public class PayloadAndHeaderMappingTests {
public void stringPayloadAndHeaderProperties() throws Exception {
MessageHandler handler = this.getHandler("stringPayloadAndHeaderProperties", String.class, Properties.class);
Object payload = "test";
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
headers.put("baz", 99);
@@ -103,7 +105,7 @@ public class PayloadAndHeaderMappingTests {
public void headerMapAndObjectPayload() throws Exception {
MessageHandler handler = this.getHandler("headerMapAndObjectPayload", Map.class, Object.class);
Object payload = "test";
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
headers.put("baz", 99);
@@ -119,7 +121,7 @@ public class PayloadAndHeaderMappingTests {
public void objectPayloadAndHeaderMap() throws Exception {
MessageHandler handler = this.getHandler("objectPayloadAndHeaderMap", Object.class, Map.class);
Object payload = "test";
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
headers.put("baz", 99);
@@ -134,10 +136,10 @@ public class PayloadAndHeaderMappingTests {
@Test
public void payloadMapAndHeaderString() throws Exception {
MessageHandler handler = this.getHandler("payloadMapAndHeaderString", Map.class, String.class);
Map<String, Object> payload = new HashMap<String, Object>();
Map<String, Object> payload = new HashMap<>();
payload.put("abc", 1);
payload.put("xyz", "test");
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
Message<?> message = MessageBuilder.withPayload(payload).copyHeaders(headers).build();
@@ -150,10 +152,10 @@ public class PayloadAndHeaderMappingTests {
@Test
public void payloadMapAndHeaderStrings() throws Exception {
MessageHandler handler = this.getHandler("payloadMapAndHeaderStrings", Map.class, String.class, String.class);
Map<String, Object> payload = new HashMap<String, Object>();
Map<String, Object> payload = new HashMap<>();
payload.put("abc", 1);
payload.put("xyz", "test");
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
headers.put("baz", "3");
@@ -170,7 +172,7 @@ public class PayloadAndHeaderMappingTests {
MessageHandler handler = this.getHandler("objectPayloadHeaderMapAndStringHeaders",
String.class, Map.class, String.class, Object.class);
Object payload = "test";
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
headers.put("baz", 99);
@@ -191,10 +193,10 @@ public class PayloadAndHeaderMappingTests {
@Test
public void payloadMapAndHeaderMap() throws Exception {
MessageHandler handler = this.getHandler("payloadMapAndHeaderMap", Map.class, Map.class);
Map<String, Object> payload = new HashMap<String, Object>();
Map<String, Object> payload = new HashMap<>();
payload.put("abc", 1);
payload.put("xyz", "test");
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
headers.put("baz", 99);
@@ -209,10 +211,10 @@ public class PayloadAndHeaderMappingTests {
@Test
public void headerMapAndPayloadMap() throws Exception {
MessageHandler handler = this.getHandler("headerMapAndPayloadMap", Map.class, Map.class);
Map<String, Object> payload = new HashMap<String, Object>();
Map<String, Object> payload = new HashMap<>();
payload.put("abc", 1);
payload.put("xyz", "test");
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
headers.put("baz", 99);
@@ -228,7 +230,7 @@ public class PayloadAndHeaderMappingTests {
public void headerMapOnlyWithStringPayload() throws Exception {
MessageHandler handler = this.getHandler("headerMapOnly", Map.class);
String payload = "test";
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
headers.put("baz", 99);
@@ -243,10 +245,10 @@ public class PayloadAndHeaderMappingTests {
@Test
public void headerMapOnlyWithMapPayload() throws Exception {
MessageHandler handler = this.getHandler("headerMapOnly", Map.class);
Map<String, Object> payload = new HashMap<String, Object>();
Map<String, Object> payload = new HashMap<>();
payload.put("abc", 1);
payload.put("xyz", "test");
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
headers.put("baz", 99);
@@ -261,9 +263,9 @@ public class PayloadAndHeaderMappingTests {
@Test
public void mapOnlyNoAnnotationsWithMapPayload() throws Exception {
MessageHandler handler = this.getHandler("mapOnlyNoAnnotations", Map.class);
Map<String, Object> payload = new HashMap<String, Object>();
Map<String, Object> payload = new HashMap<>();
payload.put("payload", 1);
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
Message<?> message = MessageBuilder.withPayload(payload).copyHeaders(headers).build();
handler.handleMessage(message);
assertThat(bean.lastPayload).isEqualTo(payload);
@@ -274,7 +276,7 @@ public class PayloadAndHeaderMappingTests {
public void mapOnlyNoAnnotationsWithStringPayload() throws Exception {
MessageHandler handler = this.getHandler("mapOnlyNoAnnotations", Map.class);
String payload = "test";
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
headers.put("baz", 99);
@@ -289,8 +291,8 @@ public class PayloadAndHeaderMappingTests {
@Test
public void mapOnlyNoAnnotationsWithIntegerPayload() throws Exception {
MessageHandler handler = this.getHandler("mapOnlyNoAnnotations", Map.class);
Integer payload = new Integer(123);
Map<String, Object> headers = new HashMap<String, Object>();
int payload = 123;
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
headers.put("baz", 99);
@@ -307,7 +309,7 @@ public class PayloadAndHeaderMappingTests {
MessageHandler handler = this.getHandler("propertiesOnlyNoAnnotations", Properties.class);
Properties payload = new Properties();
payload.setProperty("payload", "1");
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
Message<?> message = MessageBuilder.withPayload(payload).copyHeaders(headers).build();
handler.handleMessage(message);
assertThat(bean.lastPayload).isEqualTo(payload);
@@ -317,9 +319,9 @@ public class PayloadAndHeaderMappingTests {
@Test
public void propertiesOnlyNoAnnotationsWithMapPayload() throws Exception {
MessageHandler handler = this.getHandler("propertiesOnlyNoAnnotations", Properties.class);
Map<String, Object> payload = new HashMap<String, Object>();
Map<String, Object> payload = new HashMap<>();
payload.put("payload", 1);
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
Message<?> message = MessageBuilder.withPayload(payload).copyHeaders(headers).build();
handler.handleMessage(message);
assertThat(bean.lastPayload).isEqualTo(payload);
@@ -330,7 +332,7 @@ public class PayloadAndHeaderMappingTests {
public void propertiesOnlyNoAnnotationsWithStringPayload() throws Exception {
MessageHandler handler = this.getHandler("propertiesOnlyNoAnnotations", Properties.class);
String payload = "payload=abc";
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
Message<?> message = MessageBuilder.withPayload(payload).copyHeaders(headers).build();
@@ -347,8 +349,8 @@ public class PayloadAndHeaderMappingTests {
@Test
public void propertiesOnlyNoAnnotationsWithIntegerPayload() throws Exception {
MessageHandler handler = this.getHandler("propertiesOnlyNoAnnotations", Properties.class);
Integer payload = new Integer(123);
Map<String, Object> headers = new HashMap<String, Object>();
int payload = 123;
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
Message<?> message = MessageBuilder.withPayload(payload).copyHeaders(headers).build();
@@ -362,7 +364,7 @@ public class PayloadAndHeaderMappingTests {
public void headerPropertiesOnlyWithStringPayload() throws Exception {
MessageHandler handler = this.getHandler("headerPropertiesOnly", Properties.class);
String payload = "test";
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
headers.put("baz", 99);
@@ -377,10 +379,10 @@ public class PayloadAndHeaderMappingTests {
@Test
public void headerPropertiesOnlyWithMapPayload() throws Exception {
MessageHandler handler = this.getHandler("headerPropertiesOnly", Properties.class);
Map<String, Object> payload = new HashMap<String, Object>();
Map<String, Object> payload = new HashMap<>();
payload.put("abc", 1);
payload.put("xyz", "test");
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
headers.put("baz", 99);
@@ -398,7 +400,7 @@ public class PayloadAndHeaderMappingTests {
Properties payload = new Properties();
payload.setProperty("abc", "1");
payload.setProperty("xyz", "2");
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
headers.put("baz", 99);
@@ -413,10 +415,10 @@ public class PayloadAndHeaderMappingTests {
@Test
public void payloadMapAndHeaderProperties() throws Exception {
MessageHandler handler = this.getHandler("payloadMapAndHeaderProperties", Map.class, Properties.class);
Map<String, Object> payload = new HashMap<String, Object>();
Map<String, Object> payload = new HashMap<>();
payload.put("abc", 1);
payload.put("xyz", "test");
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
headers.put("baz", 99);
@@ -432,10 +434,10 @@ public class PayloadAndHeaderMappingTests {
public void headerPropertiesPayloadMapAndStringHeader() throws Exception {
MessageHandler handler = this.getHandler("headerPropertiesPayloadMapAndStringHeader",
Properties.class, Map.class, String.class);
Map<String, Object> payload = new HashMap<String, Object>();
Map<String, Object> payload = new HashMap<>();
payload.put("abc", 1);
payload.put("xyz", "test");
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
headers.put("baz", 99);
@@ -450,15 +452,16 @@ public class PayloadAndHeaderMappingTests {
//assertFalse(bean.lastHeaders.containsKey("baz"));
}
@Test(expected = IllegalArgumentException.class)
public void twoMapsNoAnnotations() throws Exception {
this.getHandler("twoMapsNoAnnotations", Map.class, Map.class);
@Test
public void twoMapsNoAnnotations() {
assertThatIllegalArgumentException()
.isThrownBy(() -> getHandler("twoMapsNoAnnotations", Map.class, Map.class));
}
@Test
public void twoMapsWithAnnotationsWithStringPayload() throws Exception {
MessageHandler handler = this.getHandler("twoMapsWithAnnotations", Map.class, Map.class);
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
Message<?> message = MessageBuilder.withPayload("test").copyHeaders(headers).build();
@@ -473,10 +476,10 @@ public class PayloadAndHeaderMappingTests {
@Test
public void twoMapsWithAnnotationsWithMapPayload() throws Exception {
MessageHandler handler = this.getHandler("twoMapsWithAnnotations", Map.class, Map.class);
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
Map<String, Object> payloadMap = new HashMap<String, Object>();
Map<String, Object> payloadMap = new HashMap<>();
payloadMap.put("baz", "99");
Message<?> message = MessageBuilder.withPayload(payloadMap).copyHeaders(headers).build();
handler.handleMessage(message);
@@ -487,33 +490,35 @@ public class PayloadAndHeaderMappingTests {
assertThat(bean.lastHeaders.get("baz")).isEqualTo(null);
}
@Test(expected = IllegalStateException.class)
public void twoStringsAmbiguousUsingMethodName() throws Exception {
SingleAmbiguousMethodTestBean bean = new SingleAmbiguousMethodTestBean();
new ServiceActivatingHandler(bean, "twoStrings");
@Test
public void twoStringsAmbiguousUsingMethodName() {
assertThatIllegalStateException()
.isThrownBy(() -> new ServiceActivatingHandler(new SingleAmbiguousMethodTestBean(), "twoStrings"));
}
@Test(expected = IllegalStateException.class)
public void twoStringsAmbiguousWithoutMethodName() throws Exception {
SingleAmbiguousMethodTestBean bean = new SingleAmbiguousMethodTestBean();
new ServiceActivatingHandler(bean);
@Test
public void twoStringsAmbiguousWithoutMethodName() {
assertThatIllegalStateException()
.isThrownBy(() -> new ServiceActivatingHandler(new SingleAmbiguousMethodTestBean()));
}
@Test(expected = IllegalArgumentException.class)
public void twoStringsNoAnnotations() throws Exception {
this.getHandler("twoStringsNoAnnotations", String.class, String.class);
@Test
public void twoStringsNoAnnotations() {
assertThatIllegalArgumentException()
.isThrownBy(() -> getHandler("twoStringsNoAnnotations", String.class, String.class));
}
@Test(expected = IllegalArgumentException.class)
public void twoMapsNoAnnotationsAndObject() throws Exception {
this.getHandler("twoMapsNoAnnotationsAndObject", Map.class, Object.class, Map.class);
@Test
public void twoMapsNoAnnotationsAndObject() {
assertThatIllegalArgumentException()
.isThrownBy(() -> getHandler("twoMapsNoAnnotationsAndObject", Map.class, Object.class, Map.class));
}
@Test
public void mapAndAnnotatedStringHeaderWithStringPayload() throws Exception {
MessageHandler handler = this.getHandler(
"mapAndAnnotatedStringHeaderExpectingMapAsHeaders", Map.class, String.class);
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
Message<?> message = MessageBuilder.withPayload("test")
@@ -529,9 +534,9 @@ public class PayloadAndHeaderMappingTests {
public void mapAndAnnotatedStringHeaderWithMapPayload() throws Exception {
MessageHandler handler = this.getHandler(
"mapAndAnnotatedStringHeaderExpectingMapAsPayload", Map.class, String.class);
Map<String, Object> payload = new HashMap<String, Object>();
Map<String, Object> payload = new HashMap<>();
payload.put("test", "0");
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
Message<?> message = MessageBuilder.withPayload(payload)
@@ -546,7 +551,7 @@ public class PayloadAndHeaderMappingTests {
@Test
public void singleStringHeaderOnlyWithStringPayload() throws Exception {
MessageHandler handler = this.getHandler("singleStringHeaderOnly", String.class);
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
Message<?> message = MessageBuilder.withPayload("test")
@@ -560,10 +565,10 @@ public class PayloadAndHeaderMappingTests {
@Test
public void singleStringHeaderOnlyWithIntegerPayload() throws Exception {
MessageHandler handler = this.getHandler("singleStringHeaderOnly", String.class);
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
Message<?> message = MessageBuilder.withPayload(new Integer(123))
Message<?> message = MessageBuilder.withPayload(123)
.copyHeaders(headers).build();
handler.handleMessage(message);
assertThat(bean.lastPayload).isNull();
@@ -574,9 +579,9 @@ public class PayloadAndHeaderMappingTests {
@Test
public void singleStringHeaderOnlyWithMapPayload() throws Exception {
MessageHandler handler = this.getHandler("singleStringHeaderOnly", String.class);
Map<String, Object> payload = new HashMap<String, Object>();
Map<String, Object> payload = new HashMap<>();
payload.put("foo", 99);
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "1");
headers.put("bar", "2");
Message<?> message = MessageBuilder.withPayload(payload)
@@ -590,49 +595,49 @@ public class PayloadAndHeaderMappingTests {
@Test
public void singleIntegerHeaderOnlyWithIntegerPayload() throws Exception {
MessageHandler handler = this.getHandler("singleIntegerHeaderOnly", Integer.class);
Map<String, Object> headers = new HashMap<String, Object>();
headers.put("foo", new Integer(123));
headers.put("bar", new Integer(456));
Message<?> message = MessageBuilder.withPayload(new Integer(789))
Map<String, Object> headers = new HashMap<>();
headers.put("foo", 123);
headers.put("bar", 456);
Message<?> message = MessageBuilder.withPayload(789)
.copyHeaders(headers).build();
handler.handleMessage(message);
assertThat(bean.lastPayload).isNull();
assertThat(bean.lastHeaders.get("foo")).isEqualTo(new Integer(123));
assertThat(bean.lastHeaders.get("foo")).isEqualTo(123);
assertThat(bean.lastHeaders.get("bar")).isNull();
}
@Test
public void singleIntegerHeaderOnlyWithIntegerPayloadAndStringHeader() throws Exception {
MessageHandler handler = this.getHandler("singleIntegerHeaderOnly", Integer.class);
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "999");
headers.put("bar", new Integer(456));
Message<?> message = MessageBuilder.withPayload(new Integer(789))
headers.put("bar", 456);
Message<?> message = MessageBuilder.withPayload(789)
.copyHeaders(headers).build();
handler.handleMessage(message);
assertThat(bean.lastPayload).isNull();
assertThat(bean.lastHeaders.get("foo")).isEqualTo(new Integer(999));
assertThat(bean.lastHeaders.get("foo")).isEqualTo(999);
assertThat(bean.lastHeaders.get("bar")).isNull();
}
@Test
public void singleIntegerHeaderOnlyWithStringPayload() throws Exception {
MessageHandler handler = this.getHandler("singleIntegerHeaderOnly", Integer.class);
Map<String, Object> headers = new HashMap<String, Object>();
headers.put("foo", new Integer(123));
headers.put("bar", new Integer(456));
Map<String, Object> headers = new HashMap<>();
headers.put("foo", 123);
headers.put("bar", 456);
Message<?> message = MessageBuilder.withPayload("test")
.copyHeaders(headers).build();
handler.handleMessage(message);
assertThat(bean.lastPayload).isNull();
assertThat(bean.lastHeaders.get("foo")).isEqualTo(new Integer(123));
assertThat(bean.lastHeaders.get("foo")).isEqualTo(123);
assertThat(bean.lastHeaders.get("bar")).isNull();
}
@Test
public void singleObjectHeaderOnlyWithStringPayload() throws Exception {
MessageHandler handler = this.getHandler("singleObjectHeaderOnly", Object.class);
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "123");
headers.put("bar", "456");
Message<?> message = MessageBuilder.withPayload("test")
@@ -646,7 +651,7 @@ public class PayloadAndHeaderMappingTests {
@Test
public void singleObjectHeaderOnlyWithObjectPayload() throws Exception {
MessageHandler handler = this.getHandler("singleObjectHeaderOnly", Object.class);
Map<String, Object> headers = new HashMap<String, Object>();
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "123");
headers.put("bar", "456");
Message<?> message = MessageBuilder.withPayload(new Object())
@@ -660,37 +665,37 @@ public class PayloadAndHeaderMappingTests {
@Test
public void singleObjectHeaderOnlyWithIntegerPayload() throws Exception {
MessageHandler handler = this.getHandler("singleObjectHeaderOnly", Object.class);
Map<String, Object> headers = new HashMap<String, Object>();
headers.put("foo", new Integer(123));
headers.put("bar", new Integer(456));
Message<?> message = MessageBuilder.withPayload(new Integer(789))
Map<String, Object> headers = new HashMap<>();
headers.put("foo", 123);
headers.put("bar", 456);
Message<?> message = MessageBuilder.withPayload(789)
.copyHeaders(headers).build();
handler.handleMessage(message);
assertThat(bean.lastPayload).isNull();
assertThat(bean.lastHeaders.get("foo")).isEqualTo(new Integer(123));
assertThat(bean.lastHeaders.get("foo")).isEqualTo(123);
assertThat(bean.lastHeaders.get("bar")).isNull();
}
@Test
public void singleObjectHeaderOnlyWithMapPayload() throws Exception {
MessageHandler handler = this.getHandler("singleObjectHeaderOnly", Object.class);
Map<String, Object> payload = new HashMap<String, Object>();
Map<String, Object> payload = new HashMap<>();
payload.put("foo", 99);
Map<String, Object> headers = new HashMap<String, Object>();
headers.put("foo", new Integer(123));
headers.put("bar", new Integer(456));
Map<String, Object> headers = new HashMap<>();
headers.put("foo", 123);
headers.put("bar", 456);
Message<?> message = MessageBuilder.withPayload(payload)
.copyHeaders(headers).build();
handler.handleMessage(message);
assertThat(bean.lastPayload).isNull();
assertThat(bean.lastHeaders.get("foo")).isEqualTo(new Integer(123));
assertThat(bean.lastHeaders.get("foo")).isEqualTo(123);
assertThat(bean.lastHeaders.get("bar")).isNull();
}
@Test
public void twoPayloadExpressions() throws Exception {
MessageHandler handler = this.getHandler("twoPayloadExpressions", String.class, String.class);
Map<String, Object> payload = new HashMap<String, Object>();
Map<String, Object> payload = new HashMap<>();
payload.put("foo", 123);
payload.put("bar", 456);
Message<?> message = MessageBuilder.withPayload(payload).build();
@@ -720,6 +725,7 @@ public class PayloadAndHeaderMappingTests {
public String concat(String s1, String s2) {
return "s1" + "s2";
}
}
@SuppressWarnings("unused")
@@ -775,7 +781,9 @@ public class PayloadAndHeaderMappingTests {
this.lastPayload = payload;
}
public void payloadMapAndHeaderStrings(Map payload, @Header("foo") String header1, @Header("bar") String header2) {
public void payloadMapAndHeaderStrings(Map payload, @Header("foo") String header1,
@Header("bar") String header2) {
this.lastHeaders = new HashMap<String, String>();
this.lastHeaders.put("foo", header1);
this.lastHeaders.put("bar", header2);
@@ -797,7 +805,9 @@ public class PayloadAndHeaderMappingTests {
this.lastPayload = payload;
}
public void headerPropertiesPayloadMapAndStringHeader(@Headers Properties headers, Map payload, @Header("foo") String header) {
public void headerPropertiesPayloadMapAndStringHeader(@Headers Properties headers, Map payload,
@Header("foo") String header) {
this.lastHeaders = headers;
this.lastHeaders.put("foo2", header);
this.lastPayload = payload;
@@ -881,6 +891,7 @@ public class PayloadAndHeaderMappingTests {
public void twoPayloadExpressions(@Payload("foo") String foo, @Payload("bar") String bar) {
this.lastPayload = foo + bar;
}
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
package org.springframework.integration.router.config;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -24,8 +25,7 @@ import static org.mockito.Mockito.verify;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
@@ -46,8 +46,7 @@ import org.springframework.messaging.SubscribableChannel;
import org.springframework.messaging.core.DestinationResolutionException;
import org.springframework.messaging.core.DestinationResolver;
import org.springframework.messaging.support.GenericMessage;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
/**
* @author Mark Fisher
@@ -55,8 +54,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
* @author Gunnar Hillert
* @author Artem Bilan
*/
@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@SpringJUnitConfig
public class RouterParserTests {
@Autowired
@@ -64,6 +62,7 @@ public class RouterParserTests {
@Autowired
private PollableChannel output2;
@Autowired
private MessageChannel input;
@@ -121,11 +120,11 @@ public class RouterParserTests {
@Test
public void testRouter() {
this.input.send(new GenericMessage<String>("1"));
this.input.send(new GenericMessage<>("1"));
Message<?> result1 = this.output1.receive(1000);
assertThat(result1.getPayload()).isEqualTo("1");
assertThat(output2.receive(0)).isNull();
input.send(new GenericMessage<String>("2"));
input.send(new GenericMessage<>("2"));
Message<?> result2 = this.output2.receive(1000);
assertThat(result2.getPayload()).isEqualTo("2");
assertThat(output1.receive(0)).isNull();
@@ -133,7 +132,7 @@ public class RouterParserTests {
@Test
public void testRouterWithDefaultOutputChannel() {
this.inputForRouterWithDefaultOutput.send(new GenericMessage<String>("99"));
this.inputForRouterWithDefaultOutput.send(new GenericMessage<>("99"));
assertThat(this.output1.receive(0)).isNull();
assertThat(this.output2.receive(0)).isNull();
Message<?> result = this.defaultOutput.receive(0);
@@ -142,7 +141,7 @@ public class RouterParserTests {
@Test
public void refOnlyForAbstractMessageRouterImplementation() {
this.inputForAbstractMessageRouterImplementation.send(new GenericMessage<String>("test-implementation"));
this.inputForAbstractMessageRouterImplementation.send(new GenericMessage<>("test-implementation"));
Message<?> result = this.output3.receive(1000);
assertThat(result).isNotNull();
assertThat(result.getPayload()).isEqualTo("test-implementation");
@@ -150,7 +149,7 @@ public class RouterParserTests {
@Test
public void refOnlyForAnnotatedObject() {
this.inputForAnnotatedRouter.send(new GenericMessage<String>("test-annotation"));
this.inputForAnnotatedRouter.send(new GenericMessage<>("test-annotation"));
Message<?> result = this.output4.receive(1000);
assertThat(result).isNotNull();
assertThat(result.getPayload()).isEqualTo("test-annotation");
@@ -158,30 +157,30 @@ public class RouterParserTests {
@Test
public void testResolutionRequired() {
try {
this.inputForRouterRequiringResolution.send(new GenericMessage<Integer>(3));
}
catch (Exception e) {
assertThat(e.getCause() instanceof DestinationResolutionException).isTrue();
}
assertThatExceptionOfType(Exception.class)
.isThrownBy(() -> this.inputForRouterRequiringResolution.send(new GenericMessage<>(3)))
.withCauseInstanceOf(DestinationResolutionException.class);
}
@Test(expected = MessageDeliveryException.class)
@Test
public void testResolutionRequiredIsFalse() {
this.resolutionRequiredIsFalseInput.send(new GenericMessage<String>("channelThatDoesNotExist"));
assertThatExceptionOfType(MessageDeliveryException.class)
.isThrownBy(() ->
this.resolutionRequiredIsFalseInput.send(new GenericMessage<>("channelThatDoesNotExist")));
}
@Test
public void timeoutValueConfigured() {
assertThat(this.routerWithTimeout instanceof MethodInvokingRouter).isTrue();
MessagingTemplate template = TestUtils.getPropertyValue(this.routerWithTimeout, "messagingTemplate", MessagingTemplate.class);
MessagingTemplate template =
TestUtils.getPropertyValue(this.routerWithTimeout, "messagingTemplate", MessagingTemplate.class);
Long timeout = TestUtils.getPropertyValue(template, "sendTimeout", Long.class);
assertThat(timeout).isEqualTo(new Long(1234));
assertThat(timeout).isEqualTo(1234L);
}
@Test
public void sequence() {
Message<?> originalMessage = new GenericMessage<String>("test");
Message<?> originalMessage = new GenericMessage<>("test");
this.sequenceRouter.send(originalMessage);
Message<?> message1 = this.sequenceOut1.receive(1000);
Message<?> message2 = this.sequenceOut2.receive(1000);
@@ -202,11 +201,11 @@ public class RouterParserTests {
@Test
public void testInt2893RouterNestedBean() {
this.routerNestedBeanChannel.send(new GenericMessage<String>("1"));
this.routerNestedBeanChannel.send(new GenericMessage<>("1"));
Message<?> result1 = this.output1.receive(1000);
assertThat(result1.getPayload()).isEqualTo("1");
assertThat(this.output2.receive(0)).isNull();
this.routerNestedBeanChannel.send(new GenericMessage<String>("2"));
this.routerNestedBeanChannel.send(new GenericMessage<>("2"));
Message<?> result2 = this.output2.receive(1000);
assertThat(result2.getPayload()).isEqualTo("2");
assertThat(this.output1.receive(0)).isNull();
@@ -214,11 +213,11 @@ public class RouterParserTests {
@Test
public void testInt2893RouterNestedBeanWithinChain() {
this.chainRouterNestedBeanChannel.send(new GenericMessage<String>("1"));
this.chainRouterNestedBeanChannel.send(new GenericMessage<>("1"));
Message<?> result1 = this.output1.receive(1000);
assertThat(result1.getPayload()).isEqualTo("1");
assertThat(this.output2.receive(0)).isNull();
this.chainRouterNestedBeanChannel.send(new GenericMessage<String>("2"));
this.chainRouterNestedBeanChannel.send(new GenericMessage<>("2"));
Message<?> result2 = this.output2.receive(1000);
assertThat(result2.getPayload()).isEqualTo("2");
assertThat(this.output1.receive(0)).isNull();
@@ -228,7 +227,7 @@ public class RouterParserTests {
public void testErrorChannel() {
MessageHandler handler = mock(MessageHandler.class);
this.errorChannel.subscribe(handler);
this.routerAndErrorChannelInputChannel.send(new GenericMessage<String>("fail"));
this.routerAndErrorChannelInputChannel.send(new GenericMessage<>("fail"));
verify(handler, times(1)).handleMessage(Mockito.any(Message.class));
}
@@ -239,9 +238,11 @@ public class RouterParserTests {
public static class NonExistingChannelRouter {
public String route(String payload) {
return "foo";
}
}
public static class TestRouterImplementation extends AbstractMappingMessageRouter {
@@ -257,6 +258,7 @@ public class RouterParserTests {
protected List<Object> getChannelKeys(Message<?> message) {
return Collections.singletonList((Object) this.channel);
}
}
@@ -272,6 +274,7 @@ public class RouterParserTests {
public MessageChannel test(String payload) {
return this.channel;
}
}
public static class ReturnStringPassedInAsChannelNameRouter {

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -23,8 +23,7 @@ import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.integration.IntegrationMessageHeaderAccessor;
@@ -33,16 +32,14 @@ import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.PollableChannel;
import org.springframework.messaging.support.GenericMessage;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
/**
* @author Mark Fisher
* @author Artem Bilan
* @author Gary Russell
*/
@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@SpringJUnitConfig
public class SpelSplitterIntegrationTests {
@Autowired
@@ -83,13 +80,13 @@ public class SpelSplitterIntegrationTests {
Message<?> two = output.receive(0);
Message<?> three = output.receive(0);
Message<?> four = output.receive(0);
assertThat(one.getPayload()).isEqualTo(new Integer(1));
assertThat(one.getPayload()).isEqualTo(1);
assertThat(one.getHeaders().get("foo")).isEqualTo("foo");
assertThat(two.getPayload()).isEqualTo(new Integer(2));
assertThat(two.getPayload()).isEqualTo(2);
assertThat(two.getHeaders().get("foo")).isEqualTo("foo");
assertThat(three.getPayload()).isEqualTo(new Integer(3));
assertThat(three.getPayload()).isEqualTo(3);
assertThat(three.getHeaders().get("foo")).isEqualTo("foo");
assertThat(four.getPayload()).isEqualTo(new Integer(4));
assertThat(four.getPayload()).isEqualTo(4);
assertThat(four.getHeaders().get("foo")).isEqualTo("foo");
assertThat(output.receive(0)).isNull();
}
@@ -111,7 +108,7 @@ public class SpelSplitterIntegrationTests {
@Test
public void iteratorSplitter() {
this.iteratorInput.send(new GenericMessage<String>("a,b,c,d"));
this.iteratorInput.send(new GenericMessage<>("a,b,c,d"));
Message<?> a = output.receive(0);
Message<?> b = output.receive(0);
Message<?> c = output.receive(0);
@@ -133,7 +130,7 @@ public class SpelSplitterIntegrationTests {
@Test
public void spelIteratorSplitter() {
this.spelIteratorInput.send(new GenericMessage<String>("a,b,c,d"));
this.spelIteratorInput.send(new GenericMessage<>("a,b,c,d"));
Message<?> a = output.receive(0);
Message<?> b = output.receive(0);
Message<?> c = output.receive(0);

View File

@@ -154,8 +154,8 @@ class KotlinDslTests {
val verifyLater =
StepVerifier
.create(Flux.from(fluxChannel).map { it.payload }.cast(Integer::class.java))
.expectNext(Integer(4), Integer(6))
.create(Flux.from(fluxChannel).map { it.payload }.map { it.toString().toInt() })
.expectNext(4, 6)
.thenCancel()
.verifyLater()

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@ import static org.mockito.Mockito.mock;
import java.io.File;
import org.junit.Test;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.integration.support.MessageBuilder;
@@ -30,6 +30,7 @@ import org.springframework.messaging.Message;
/**
* @author Mark Fisher
* @author Gary Russell
* @author Artem Bilan
*/
public class DefaultFileNameGeneratorTests {
@@ -55,7 +56,7 @@ public class DefaultFileNameGeneratorTests {
public void defaultHeaderNameNotString() {
DefaultFileNameGenerator generator = new DefaultFileNameGenerator();
generator.setBeanFactory(mock(BeanFactory.class));
Message<?> message = MessageBuilder.withPayload("test").setHeader(FileHeaders.FILENAME, new Integer(123))
Message<?> message = MessageBuilder.withPayload("test").setHeader(FileHeaders.FILENAME, 123)
.build();
String filename = generator.generateFileName(message);
assertThat(filename).isEqualTo(message.getHeaders().getId() + ".msg");
@@ -86,7 +87,7 @@ public class DefaultFileNameGeneratorTests {
DefaultFileNameGenerator generator = new DefaultFileNameGenerator();
generator.setBeanFactory(mock(BeanFactory.class));
generator.setHeaderName("foo");
Message<?> message = MessageBuilder.withPayload("test").setHeader("foo", new Integer(123)).build();
Message<?> message = MessageBuilder.withPayload("test").setHeader("foo", 123).build();
String filename = generator.generateFileName(message);
assertThat(filename).isEqualTo(message.getHeaders().getId() + ".msg");
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -27,6 +27,7 @@ import java.util.concurrent.locks.ReentrantLock;
import org.codehaus.groovy.control.CompilerConfiguration;
import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
@@ -118,8 +119,8 @@ public class GroovyScriptExecutingMessageProcessor extends AbstractScriptExecuti
* <p> More compiler options can be provided via {@link #setCompilerConfiguration(CompilerConfiguration)}
* overriding this flag.
* @param compileStatic the compile static {@code boolean} flag.
* @since 4.3
* @see CompileStatic
* @since 4.3
*/
public void setCompileStatic(boolean compileStatic) {
this.compileStatic = compileStatic;
@@ -130,9 +131,9 @@ public class GroovyScriptExecutingMessageProcessor extends AbstractScriptExecuti
* For example the {@link CompileStatic} and {@link org.codehaus.groovy.control.customizers.ImportCustomizer}
* are the most popular options.
* @param compilerConfiguration the Groovy script compiler options to use.
* @since 4.3
* @see CompileStatic
* @see GroovyClassLoader
* @since 4.3
*/
public void setCompilerConfiguration(CompilerConfiguration compilerConfiguration) {
this.compilerConfiguration = compilerConfiguration;
@@ -201,31 +202,21 @@ public class GroovyScriptExecutingMessageProcessor extends AbstractScriptExecuti
}
private Object execute(Map<String, Object> variables) throws ScriptCompilationException {
try {
GroovyObject goo = (GroovyObject) this.scriptClass.newInstance();
GroovyObject goo = (GroovyObject) BeanUtils.instantiateClass(this.scriptClass);
VariableBindingGroovyObjectCustomizerDecorator groovyObjectCustomizer =
new BindingOverwriteGroovyObjectCustomizerDecorator(new BeanFactoryFallbackBinding(variables));
groovyObjectCustomizer.setCustomizer(this.customizerDecorator);
VariableBindingGroovyObjectCustomizerDecorator groovyObjectCustomizer =
new BindingOverwriteGroovyObjectCustomizerDecorator(new BeanFactoryFallbackBinding(variables));
groovyObjectCustomizer.setCustomizer(this.customizerDecorator);
if (goo instanceof Script) {
// Allow metaclass and other customization.
groovyObjectCustomizer.customize(goo);
// A Groovy script, probably creating an instance: let's execute it.
return ((Script) goo).run();
}
else {
// An instance of the scripted class: let's return it as-is.
return goo;
}
if (goo instanceof Script) {
// Allow metaclass and other customization.
groovyObjectCustomizer.customize(goo);
// A Groovy script, probably creating an instance: let's execute it.
return ((Script) goo).run();
}
catch (InstantiationException ex) {
throw new ScriptCompilationException(
this.scriptSource, "Could not instantiate Groovy script class: " + this.scriptClass.getName(), ex);
}
catch (IllegalAccessException ex) {
throw new ScriptCompilationException(
this.scriptSource, "Could not access Groovy script constructor: " + this.scriptClass.getName(), ex);
else {
// An instance of the scripted class: let's return it as-is.
return goo;
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -147,7 +147,7 @@ public class HttpOutboundGatewayParserTests {
assertThat(templateAccessor.getPropertyValue("errorHandler")).isEqualTo(errorHandlerBean);
Object sendTimeout = new DirectFieldAccessor(
handlerAccessor.getPropertyValue("messagingTemplate")).getPropertyValue("sendTimeout");
assertThat(sendTimeout).isEqualTo(new Long("1234"));
assertThat(sendTimeout).isEqualTo(1234L);
Map<String, Expression> uriVariableExpressions =
(Map<String, Expression>) handlerAccessor.getPropertyValue("uriVariableExpressions");
assertThat(uriVariableExpressions.size()).isEqualTo(1);

View File

@@ -89,7 +89,7 @@ public class CrossOriginTests {
assertThat(config.getAllowCredentials()).isTrue();
assertThat(config.getAllowedHeaders().toArray()).isEqualTo(new String[] { "*" });
assertThat(config.getExposedHeaders()).isEmpty();
assertThat(config.getMaxAge()).isEqualTo(new Long(1800));
assertThat(config.getMaxAge()).isEqualTo(1800L);
}
@Test
@@ -103,7 +103,7 @@ public class CrossOriginTests {
.isEqualTo(new String[] { "https://site1.com", "https://site2.com" });
assertThat(config.getAllowedHeaders().toArray()).isEqualTo(new String[] { "header1", "header2" });
assertThat(config.getExposedHeaders().toArray()).isEqualTo(new String[] { "header3", "header4" });
assertThat(config.getMaxAge()).isEqualTo(new Long(123));
assertThat(config.getMaxAge()).isEqualTo(123L);
assertThat(config.getAllowCredentials()).isEqualTo(false);
}
@@ -120,7 +120,7 @@ public class CrossOriginTests {
assertThat(config.getAllowCredentials()).isTrue();
assertThat(config.getAllowedHeaders().toArray()).isEqualTo(new String[] { "*" });
assertThat(config.getExposedHeaders()).isEmpty();
assertThat(config.getMaxAge()).isEqualTo(new Long(1800));
assertThat(config.getMaxAge()).isEqualTo(1800L);
}
@Test

View File

@@ -301,6 +301,7 @@ public class TcpNioSSLConnection extends TcpNioConnection {
@Override
public void close() {
super.close();
logger.trace("Resuming for close");
this.semaphore.release();
}
@@ -364,6 +365,9 @@ public class TcpNioSSLConnection extends TcpNioConnection {
TcpNioSSLConnection.this.semaphore.drainPermits();
HandshakeStatus status = TcpNioSSLConnection.this.sslEngine.getHandshakeStatus();
while (status != HandshakeStatus.FINISHED) {
if (logger.isTraceEnabled()) {
logger.trace("Handshake Status: " + status);
}
writeEncodedIfAny();
status = runTasksIfNeeded(result);
if (status == HandshakeStatus.NEED_UNWRAP) {
@@ -383,6 +387,9 @@ public class TcpNioSSLConnection extends TcpNioConnection {
logger.debug(status);
}
}
if (logger.isTraceEnabled()) {
logger.trace("Handshake Status: " + status);
}
}
private void writeEncodedIfAny() throws IOException {

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,6 +20,7 @@ import java.io.IOException;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.NetworkInterface;
import org.springframework.messaging.MessagingException;
@@ -29,6 +30,8 @@ import org.springframework.messaging.MessagingException;
*
* @author Gary Russell
* @author Marcin Pilaczynski
* @author Artem Bilan
*
* @since 2.0
*/
public class MulticastReceivingChannelAdapter extends UnicastReceivingChannelAdapter {
@@ -68,8 +71,7 @@ public class MulticastReceivingChannelAdapter extends UnicastReceivingChannelAda
MulticastSocket socket = port == 0 ? new MulticastSocket() : new MulticastSocket(port);
String localAddress = this.getLocalAddress();
if (localAddress != null) {
InetAddress whichNic = InetAddress.getByName(localAddress);
socket.setInterface(whichNic);
socket.setNetworkInterface(NetworkInterface.getByName(localAddress));
}
setSocketAttributes(socket);
socket.joinGroup(InetAddress.getByName(this.group));

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2001-2019 the original author or authors.
* Copyright 2001-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,6 +21,7 @@ import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.MulticastSocket;
import java.net.NetworkInterface;
import java.net.URISyntaxException;
import org.springframework.expression.Expression;
@@ -35,6 +36,8 @@ import org.springframework.messaging.Message;
* acknowledgments are required to determine success.
*
* @author Gary Russell
* @author Artem Bilan
*
* @since 2.0
*/
public class MulticastSendingMessageHandler extends UnicastSendingMessageHandler {
@@ -79,6 +82,7 @@ public class MulticastSendingMessageHandler extends UnicastSendingMessageHandler
*/
public MulticastSendingMessageHandler(String address, int port,
boolean acknowledge, String ackHost, int ackPort, int ackTimeout) {
super(address, port, acknowledge, ackHost, ackPort, ackTimeout);
}
@@ -96,6 +100,7 @@ public class MulticastSendingMessageHandler extends UnicastSendingMessageHandler
public MulticastSendingMessageHandler(String address, int port,
boolean lengthCheck, boolean acknowledge, String ackHost,
int ackPort, int ackTimeout) {
super(address, port, lengthCheck, acknowledge, ackHost, ackPort, ackTimeout);
}
@@ -134,8 +139,8 @@ public class MulticastSendingMessageHandler extends UnicastSendingMessageHandler
private void createSocket() throws IOException {
if (getTheSocket() == null) {
MulticastSocket socket;
if (this.isAcknowledge()) {
int ackPort = this.getAckPort();
if (isAcknowledge()) {
int ackPort = getAckPort();
if (this.localAddress == null) {
socket = ackPort == 0 ? new MulticastSocket() : new MulticastSocket(ackPort);
}
@@ -143,8 +148,9 @@ public class MulticastSendingMessageHandler extends UnicastSendingMessageHandler
InetAddress whichNic = InetAddress.getByName(this.localAddress);
socket = new MulticastSocket(new InetSocketAddress(whichNic, ackPort));
}
if (getSoReceiveBufferSize() > 0) {
socket.setReceiveBufferSize(this.getSoReceiveBufferSize());
int soReceiveBufferSize = getSoReceiveBufferSize();
if (soReceiveBufferSize > 0) {
socket.setReceiveBufferSize(soReceiveBufferSize);
}
if (logger.isDebugEnabled()) {
logger.debug("Listening for acks on port: " + socket.getLocalPort());
@@ -161,8 +167,7 @@ public class MulticastSendingMessageHandler extends UnicastSendingMessageHandler
}
setSocketAttributes(socket);
if (this.localAddress != null) {
InetAddress whichNic = InetAddress.getByName(this.localAddress);
socket.setInterface(whichNic);
socket.setNetworkInterface(NetworkInterface.getByName(this.localAddress));
}
this.multicastSocket = socket;
}
@@ -194,7 +199,7 @@ public class MulticastSendingMessageHandler extends UnicastSendingMessageHandler
protected void convertAndSend(Message<?> message) throws IOException, URISyntaxException {
super.convertAndSend(message);
if (logger.isDebugEnabled()) {
logger.debug("Sent packet to " + this.multicastSocket.getInterface());
logger.debug("Sent packet to " + this.multicastSocket.getNetworkInterface());
}
}

View File

@@ -51,8 +51,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import org.apache.commons.logging.Log;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
@@ -62,7 +61,6 @@ import org.springframework.beans.DirectFieldAccessor;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.core.task.SimpleAsyncTaskExecutor;
import org.springframework.integration.channel.QueueChannel;
@@ -82,8 +80,7 @@ import org.springframework.messaging.SubscribableChannel;
import org.springframework.messaging.support.ErrorMessage;
import org.springframework.messaging.support.GenericMessage;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
/**
* @author Gary Russell
@@ -92,8 +89,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
* @since 2.2
*
*/
@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@SpringJUnitConfig
@DirtiesContext
public class CachingClientConnectionFactoryTests {
@@ -183,14 +179,7 @@ public class CachingClientConnectionFactoryTests {
when(factory.isRunning()).thenReturn(true);
TcpConnectionSupport mockConn1 = makeMockConnection("conn1");
TcpConnectionSupport mockConn2 = makeMockConnection("conn2");
doAnswer(new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
return null;
}
}).when(mockConn1).close();
doAnswer(invocation -> null).when(mockConn1).close();
when(factory.getConnection()).thenReturn(mockConn1)
.thenReturn(mockConn2).thenReturn(mockConn1)
.thenReturn(mockConn2);
@@ -213,7 +202,7 @@ public class CachingClientConnectionFactoryTests {
conn2a.close();
}
@Test(expected = PoolItemNotAvailableException.class)
@Test
public void testLimit() throws Exception {
AbstractClientConnectionFactory factory = mock(AbstractClientConnectionFactory.class);
when(factory.isRunning()).thenReturn(true);
@@ -230,7 +219,8 @@ public class CachingClientConnectionFactoryTests {
assertThat(conn1.toString()).isEqualTo("Cached:" + mockConn1.toString());
TcpConnection conn2 = cachingFactory.getConnection();
assertThat(conn2.toString()).isEqualTo("Cached:" + mockConn2.toString());
cachingFactory.getConnection();
assertThatExceptionOfType(PoolItemNotAvailableException.class)
.isThrownBy(cachingFactory::getConnection);
}
@Test
@@ -253,14 +243,7 @@ public class CachingClientConnectionFactoryTests {
TcpConnection conn2 = cachingFactory.getConnection();
assertThat(conn2.toString()).isEqualTo("Cached:" + mockConn2.toString());
cachingFactory.stop();
Answer<Object> answer = new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
return null;
}
};
Answer<Object> answer = invocation -> null;
doAnswer(answer).when(mockConn1).close();
doAnswer(answer).when(mockConn2).close();
when(factory.isRunning()).thenReturn(false);
@@ -368,15 +351,16 @@ public class CachingClientConnectionFactoryTests {
CachingClientConnectionFactory cccf) throws Exception {
TcpConnection cached1 = cccf.getConnection();
assertThatExceptionOfType(MessagingException.class)
.isThrownBy(() -> cached1.send(new GenericMessage<String>("foo")));
.isThrownBy(() -> cached1.send(new GenericMessage<>("foo")));
// Before INT-3163 this failed with a timeout - connection not returned to pool after failure on send()
TcpConnection cached2 = cccf.getConnection();
assertThat(cached1.getConnectionId().contains(conn1.getConnectionId())).isTrue();
assertThat(cached2.getConnectionId().contains(conn2.getConnectionId())).isTrue();
}
private CachingClientConnectionFactory createCCCFWith2Connections(TcpConnectionSupport conn1, TcpConnectionSupport conn2)
throws Exception {
private CachingClientConnectionFactory createCCCFWith2Connections(TcpConnectionSupport conn1,
TcpConnectionSupport conn2) throws Exception {
AbstractClientConnectionFactory factory = mock(AbstractClientConnectionFactory.class);
when(factory.isRunning()).thenReturn(true);
when(factory.getConnection()).thenReturn(conn1, conn2);
@@ -392,17 +376,7 @@ public class CachingClientConnectionFactoryTests {
OutputStream stream = mock(OutputStream.class);
doThrow(new IOException("Foo")).when(stream).write(any(byte[].class), anyInt(), anyInt());
when(socket.getOutputStream()).thenReturn(stream);
TcpNetConnection conn = new TcpNetConnection(socket, false, false, new ApplicationEventPublisher() {
@Override
public void publishEvent(ApplicationEvent event) {
}
@Override
public void publishEvent(Object event) {
}
TcpNetConnection conn = new TcpNetConnection(socket, false, false, event -> {
}, "foo");
conn.setMapper(new TcpMessageMapper());
conn.setSerializer(new ByteArrayCrLfSerializer());
@@ -411,20 +385,15 @@ public class CachingClientConnectionFactoryTests {
private TcpConnectionSupport mockedTcpNioConnection() throws Exception {
SocketChannel socketChannel = mock(SocketChannel.class);
new DirectFieldAccessor(socketChannel).setPropertyValue("open", false);
if (System.getProperty("java.version").startsWith("1.8")) {
new DirectFieldAccessor(socketChannel).setPropertyValue("open", false);
}
else {
new DirectFieldAccessor(socketChannel).setPropertyValue("closed", true);
}
doThrow(new IOException("Foo")).when(socketChannel).write(Mockito.any(ByteBuffer.class));
when(socketChannel.socket()).thenReturn(mock(Socket.class));
TcpNioConnection conn = new TcpNioConnection(socketChannel, false, false, new ApplicationEventPublisher() {
@Override
public void publishEvent(ApplicationEvent event) {
}
@Override
public void publishEvent(Object event) {
}
TcpNioConnection conn = new TcpNioConnection(socketChannel, false, false, event -> {
}, "foo");
conn.setMapper(new TcpMessageMapper());
conn.setSerializer(new ByteArrayCrLfSerializer());
@@ -447,7 +416,7 @@ public class CachingClientConnectionFactoryTests {
}
@Test
public void integrationTest() throws Exception {
public void integrationTest() {
TestingUtilities.waitListening(serverCf, null);
new DirectFieldAccessor(this.clientAdapterCf).setPropertyValue("port", this.serverCf.getPort());
@@ -466,7 +435,7 @@ public class CachingClientConnectionFactoryTests {
@Test
// @Repeat(1000) // INT-3722
public void gatewayIntegrationTest() throws Exception {
final List<String> connectionIds = new ArrayList<String>();
final List<String> connectionIds = new ArrayList<>();
final AtomicBoolean okToRun = new AtomicBoolean(true);
ExecutorService exec = Executors.newSingleThreadExecutor();
exec.execute(() -> {
@@ -494,7 +463,7 @@ public class CachingClientConnectionFactoryTests {
await().atMost(Duration.ofSeconds(10)).until(() -> connections.size() > 0);
// assert we use the same connection from the pool
toGateway.send(new GenericMessage<String>("Hello, world2!"));
toGateway.send(new GenericMessage<>("Hello, world2!"));
m = fromGateway.receive(1000);
assertThat(m).isNotNull();
assertThat(new String((byte[]) m.getPayload())).isEqualTo("foo:" + "Hello, world2!");
@@ -533,7 +502,7 @@ public class CachingClientConnectionFactoryTests {
// Failover
AbstractClientConnectionFactory factory1 = mock(AbstractClientConnectionFactory.class);
AbstractClientConnectionFactory factory2 = mock(AbstractClientConnectionFactory.class);
List<AbstractClientConnectionFactory> factories = new ArrayList<AbstractClientConnectionFactory>();
List<AbstractClientConnectionFactory> factories = new ArrayList<>();
factories.add(factory1);
factories.add(factory2);
TcpConnectionSupport mockConn1 = makeMockConnection();
@@ -551,7 +520,7 @@ public class CachingClientConnectionFactoryTests {
CachingClientConnectionFactory cachingFactory = new CachingClientConnectionFactory(failoverFactory, 2);
cachingFactory.start();
TcpConnection conn1 = cachingFactory.getConnection();
GenericMessage<String> message = new GenericMessage<String>("foo");
GenericMessage<String> message = new GenericMessage<>("foo");
conn1 = cachingFactory.getConnection();
conn1.send(message);
Mockito.verify(mockConn2).send(message);
@@ -586,7 +555,7 @@ public class CachingClientConnectionFactoryTests {
AbstractClientConnectionFactory factory2 = new TcpNetClientConnectionFactory("localhost", port2);
factory2.setBeanName("client2");
factory2.registerListener(message -> false);
List<AbstractClientConnectionFactory> factories = new ArrayList<AbstractClientConnectionFactory>();
List<AbstractClientConnectionFactory> factories = new ArrayList<>();
factories.add(factory1);
factories.add(factory2);
FailoverClientConnectionFactory failoverFactory = new FailoverClientConnectionFactory(factories);
@@ -595,7 +564,7 @@ public class CachingClientConnectionFactoryTests {
CachingClientConnectionFactory cachingFactory = new CachingClientConnectionFactory(failoverFactory, 2);
cachingFactory.start();
TcpConnection conn1 = cachingFactory.getConnection();
GenericMessage<String> message = new GenericMessage<String>("foo");
GenericMessage<String> message = new GenericMessage<>("foo");
conn1.send(message);
conn1.close();
TcpConnection conn2 = cachingFactory.getConnection();
@@ -653,7 +622,7 @@ public class CachingClientConnectionFactoryTests {
AbstractClientConnectionFactory factory2 = new TcpNetClientConnectionFactory("localhost", port2);
factory2.setBeanName("client2");
factory2.registerListener(message -> false);
List<AbstractClientConnectionFactory> factories = new ArrayList<AbstractClientConnectionFactory>();
List<AbstractClientConnectionFactory> factories = new ArrayList<>();
factories.add(factory1);
factories.add(factory2);
FailoverClientConnectionFactory failoverFactory = new FailoverClientConnectionFactory(factories);
@@ -662,7 +631,7 @@ public class CachingClientConnectionFactoryTests {
CachingClientConnectionFactory cachingFactory = new CachingClientConnectionFactory(failoverFactory, 2);
cachingFactory.start();
TcpConnection conn1 = cachingFactory.getConnection();
GenericMessage<String> message = new GenericMessage<String>("foo");
GenericMessage<String> message = new GenericMessage<>("foo");
conn1.send(message);
conn1.close();
TcpConnection conn2 = cachingFactory.getConnection();
@@ -686,7 +655,7 @@ public class CachingClientConnectionFactoryTests {
TcpNetServerConnectionFactory in = new TcpNetServerConnectionFactory(0);
final CountDownLatch latch1 = new CountDownLatch(2);
final CountDownLatch latch2 = new CountDownLatch(102);
final List<String> connectionIds = new ArrayList<String>();
final List<String> connectionIds = new ArrayList<>();
in.registerListener(message -> {
connectionIds.add((String) message.getHeaders().get(IpHeaders.CONNECTION_ID));
latch1.countDown();
@@ -702,16 +671,16 @@ public class CachingClientConnectionFactoryTests {
cache.setConnectionWaitTimeout(100);
cache.start();
TcpConnectionSupport connection1 = cache.getConnection();
connection1.send(new GenericMessage<String>("foo"));
connection1.send(new GenericMessage<>("foo"));
connection1.close();
TcpConnectionSupport connection2 = cache.getConnection();
connection2.send(new GenericMessage<String>("foo"));
connection2.send(new GenericMessage<>("foo"));
connection2.close();
assertThat(latch1.await(10, TimeUnit.SECONDS)).isTrue();
assertThat(connectionIds.get(1)).isSameAs(connectionIds.get(0));
for (int i = 0; i < 100; i++) {
TcpConnectionSupport connection = cache.getConnection();
connection.send(new GenericMessage<String>("foo"));
connection.send(new GenericMessage<>("foo"));
connection.close();
}
assertThat(latch2.await(10, TimeUnit.SECONDS)).isTrue();
@@ -722,7 +691,7 @@ public class CachingClientConnectionFactoryTests {
@SuppressWarnings("unchecked")
@Test //INT-3722
public void testGatewayRelease() throws Exception {
public void testGatewayRelease() {
TcpNetServerConnectionFactory in = new TcpNetServerConnectionFactory(0);
in.setApplicationEventPublisher(mock(ApplicationEventPublisher.class));
final TcpSendingMessageHandler handler = new TcpSendingMessageHandler();
@@ -780,7 +749,7 @@ public class CachingClientConnectionFactoryTests {
}
}).when(logger).debug(anyString());
gate.start();
gate.handleMessage(new GenericMessage<String>("foo"));
gate.handleMessage(new GenericMessage<>("foo"));
Message<byte[]> result = (Message<byte[]>) outputChannel.receive(10000);
assertThat(result).isNotNull();
assertThat(new String(result.getPayload())).isEqualTo("foo");
@@ -812,7 +781,7 @@ public class CachingClientConnectionFactoryTests {
};
factory.setApplicationEventPublisher(mock(ApplicationEventPublisher.class));
final CachingClientConnectionFactory cachingFactory = new CachingClientConnectionFactory(factory, 1);
final AtomicReference<Message<?>> received = new AtomicReference<Message<?>>();
final AtomicReference<Message<?>> received = new AtomicReference<>();
cachingFactory.registerListener(message -> {
if (!(message instanceof ErrorMessage)) {
received.set(message);

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -49,7 +49,7 @@ import javax.net.SocketFactory;
import javax.net.ssl.SSLEngine;
import javax.net.ssl.SSLServerSocket;
import org.junit.Test;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.integration.ip.tcp.serializer.ByteArrayCrLfSerializer;
@@ -520,14 +520,14 @@ public class SocketSupportTests {
testNioClientAndServerSSLDifferentContexts(false);
assertThatExceptionOfType(MessagingException.class)
.isThrownBy(() -> testNioClientAndServerSSLDifferentContexts(true))
.withMessageMatching(".*(Socket closed during SSL Handshake|Broken pipe"
+ "|Connection reset by peer|AsynchronousCloseException|ClosedChannelException).*");
.withMessageMatching(".*javax.net.ssl.SSLHandshakeException.*");
}
private void testNioClientAndServerSSLDifferentContexts(boolean badClient) throws Exception {
private void testNioClientAndServerSSLDifferentContexts(boolean badServer) throws Exception {
System.setProperty("javax.net.debug", "all"); // SSL activity in the console
TcpNioServerConnectionFactory server = new TcpNioServerConnectionFactory(0);
TcpSSLContextSupport serverSslContextSupport = new DefaultTcpSSLContextSupport("server.ks",
TcpSSLContextSupport serverSslContextSupport = new DefaultTcpSSLContextSupport(
badServer ? "client.ks" : "server.ks",
"server.truststore.ks", "secret", "secret");
DefaultTcpNioSSLConnectionSupport tcpNioConnectionSupport =
new DefaultTcpNioSSLConnectionSupport(serverSslContextSupport, false) {
@@ -550,8 +550,7 @@ public class SocketSupportTests {
TestingUtilities.waitListening(server, null);
TcpNioClientConnectionFactory client = new TcpNioClientConnectionFactory("localhost", server.getPort());
TcpSSLContextSupport clientSslContextSupport = new DefaultTcpSSLContextSupport(
badClient ? "server.ks" : "client.ks",
TcpSSLContextSupport clientSslContextSupport = new DefaultTcpSSLContextSupport("client.ks",
"client.truststore.ks", "secret", "secret");
DefaultTcpNioSSLConnectionSupport clientTcpNioConnectionSupport =
new DefaultTcpNioSSLConnectionSupport(clientSslContextSupport, false);

View File

@@ -63,10 +63,9 @@ import javax.net.SocketFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
@@ -84,7 +83,7 @@ import org.springframework.integration.ip.tcp.serializer.MapJsonSerializer;
import org.springframework.integration.ip.util.TestingUtilities;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.integration.support.converter.MapMessageConverter;
import org.springframework.integration.test.rule.Log4j2LevelAdjuster;
import org.springframework.integration.test.condition.LogLevels;
import org.springframework.integration.test.util.TestUtils;
import org.springframework.integration.util.CompositeExecutor;
import org.springframework.messaging.Message;
@@ -103,31 +102,25 @@ import org.springframework.util.StopWatch;
* @since 2.0
*
*/
@LogLevels(level = "trace", categories = "org.springframework.integration.ip.tcp")
public class TcpNioConnectionTests {
private static final Log logger = LogFactory.getLog(TcpNioConnectionTests.class);
@Rule
public Log4j2LevelAdjuster adjuster =
Log4j2LevelAdjuster.trace()
.categories("org.springframework.integration.ip.tcp");
@Rule
public TestName testName = new TestName();
private final ApplicationEventPublisher nullPublisher = mock(ApplicationEventPublisher.class);
private final AsyncTaskExecutor executor = new SimpleAsyncTaskExecutor();
@Test
public void testWriteTimeout() throws Exception {
public void testWriteTimeout(TestInfo testInfo) throws Exception {
final CountDownLatch latch = new CountDownLatch(1);
final CountDownLatch done = new CountDownLatch(1);
final AtomicReference<ServerSocket> serverSocket = new AtomicReference<>();
this.executor.execute(() -> {
try {
ServerSocket server = ServerSocketFactory.getDefault().createServerSocket(0);
logger.debug(testName.getMethodName() + " starting server for " + server.getLocalPort());
logger.debug(testInfo.getTestMethod().get().getName() +
" starting server for " + server.getLocalPort());
serverSocket.set(server);
latch.countDown();
Socket s = server.accept();
@@ -166,14 +159,15 @@ public class TcpNioConnectionTests {
}
@Test
public void testReadTimeout() throws Exception {
public void testReadTimeout(TestInfo testInfo) throws Exception {
final CountDownLatch latch = new CountDownLatch(1);
final CountDownLatch done = new CountDownLatch(1);
final AtomicReference<ServerSocket> serverSocket = new AtomicReference<>();
this.executor.execute(() -> {
try {
ServerSocket server = ServerSocketFactory.getDefault().createServerSocket(0);
logger.debug(testName.getMethodName() + " starting server for " + server.getLocalPort());
logger.debug(testInfo.getTestMethod().get().getName()
+ " starting server for " + server.getLocalPort());
serverSocket.set(server);
latch.countDown();
Socket socket = server.accept();
@@ -209,13 +203,14 @@ public class TcpNioConnectionTests {
}
@Test
public void testMemoryLeak() throws Exception {
public void testMemoryLeak(TestInfo testInfo) throws Exception {
final CountDownLatch latch = new CountDownLatch(1);
final AtomicReference<ServerSocket> serverSocket = new AtomicReference<>();
this.executor.execute(() -> {
try {
ServerSocket server = ServerSocketFactory.getDefault().createServerSocket(0);
logger.debug(testName.getMethodName() + " starting server for " + server.getLocalPort());
logger.debug(testInfo.getTestMethod().get().getName()
+ " starting server for " + server.getLocalPort());
serverSocket.set(server);
latch.countDown();
Socket socket = server.accept();
@@ -264,37 +259,46 @@ public class TcpNioConnectionTests {
connections.put(chan1, conn1);
connections.put(chan2, conn2);
connections.put(chan3, conn3);
boolean java8 = System.getProperty("java.version").startsWith("1.8");
final List<Field> fields = new ArrayList<>();
ReflectionUtils.doWithFields(SocketChannel.class, field -> {
field.setAccessible(true);
fields.add(field);
}, field -> field.getName().equals("open"));
if (java8) {
ReflectionUtils.doWithFields(SocketChannel.class, field -> {
field.setAccessible(true);
fields.add(field);
}, field -> field.getName().equals("open"));
}
else {
ReflectionUtils.doWithFields(SocketChannel.class, field -> {
field.setAccessible(true);
fields.add(field);
}, field -> field.getName().equals("closed"));
}
Field field = fields.get(0);
// Can't use Mockito because isOpen() is final
ReflectionUtils.setField(field, chan1, true);
ReflectionUtils.setField(field, chan2, true);
ReflectionUtils.setField(field, chan3, true);
ReflectionUtils.setField(field, chan1, java8);
ReflectionUtils.setField(field, chan2, java8);
ReflectionUtils.setField(field, chan3, java8);
Selector selector = mock(Selector.class);
HashSet<SelectionKey> keys = new HashSet<>();
when(selector.selectedKeys()).thenReturn(keys);
factory.processNioSelections(1, selector, null, connections);
assertThat(connections.size()).isEqualTo(3); // all open
ReflectionUtils.setField(field, chan1, false);
ReflectionUtils.setField(field, chan1, !java8);
factory.processNioSelections(1, selector, null, connections);
assertThat(connections.size()).isEqualTo(3); // interval didn't pass
Thread.sleep(110);
factory.processNioSelections(1, selector, null, connections);
assertThat(connections.size()).isEqualTo(2); // first is closed
ReflectionUtils.setField(field, chan2, false);
ReflectionUtils.setField(field, chan2, !java8);
factory.processNioSelections(1, selector, null, connections);
assertThat(connections.size()).isEqualTo(2); // interval didn't pass
Thread.sleep(110);
factory.processNioSelections(1, selector, null, connections);
assertThat(connections.size()).isEqualTo(1); // second is closed
ReflectionUtils.setField(field, chan3, false);
ReflectionUtils.setField(field, chan3, !java8);
factory.processNioSelections(1, selector, null, connections);
assertThat(connections.size()).isEqualTo(1); // interval didn't pass
Thread.sleep(110);
@@ -812,7 +816,7 @@ public class TcpNioConnectionTests {
}
@Test
@Ignore // Timing is too short for CI/Travis
@Disabled("Timing is too short for CI/Travis")
public void testNoDelayOnClose() throws Exception {
TcpNioServerConnectionFactory cf = new TcpNioServerConnectionFactory(0);
final CountDownLatch reading = new CountDownLatch(1);

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,11 +24,13 @@ import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.MulticastSocket;
import java.net.NetworkInterface;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
@@ -69,7 +71,7 @@ public class DatagramPacketMulticastSendingHandlerTests {
byte[] buffer = new byte[8];
DatagramPacket receivedPacket = new DatagramPacket(buffer, buffer.length);
MulticastSocket socket1 = new MulticastSocket(testPort);
socket1.setInterface(InetAddress.getByName(multicastRule.getNic()));
socket1.setNetworkInterface(multicastRule.getNic());
InetAddress group = InetAddress.getByName(multicastAddress);
socket1.joinGroup(group);
listening.countDown();
@@ -94,7 +96,10 @@ public class DatagramPacketMulticastSendingHandlerTests {
assertThat(listening.await(10000, TimeUnit.MILLISECONDS)).isTrue();
MulticastSendingMessageHandler handler = new MulticastSendingMessageHandler(multicastAddress, testPort);
handler.setBeanFactory(mock(BeanFactory.class));
handler.setLocalAddress(this.multicastRule.getNic());
NetworkInterface nic = this.multicastRule.getNic();
if (nic != null) {
handler.setLocalAddress(nic.getName());
}
handler.afterPropertiesSet();
handler.handleMessage(MessageBuilder.withPayload(payload).build());
assertThat(received.await(10000, TimeUnit.MILLISECONDS)).isTrue();
@@ -103,6 +108,7 @@ public class DatagramPacketMulticastSendingHandlerTests {
}
@Test
@Ignore("Doesn't work on Java 14")
public void verifySendMulticastWithAcks() throws Exception {
MulticastSocket socket;
@@ -125,7 +131,7 @@ public class DatagramPacketMulticastSendingHandlerTests {
byte[] buffer = new byte[1000];
DatagramPacket receivedPacket = new DatagramPacket(buffer, buffer.length);
MulticastSocket socket1 = new MulticastSocket(testPort);
socket1.setInterface(InetAddress.getByName(multicastRule.getNic()));
socket1.setNetworkInterface(multicastRule.getNic());
socket1.setSoTimeout(8000);
InetAddress group = InetAddress.getByName(multicastAddress);
socket1.joinGroup(group);
@@ -146,7 +152,7 @@ public class DatagramPacketMulticastSendingHandlerTests {
Object id = message.getHeaders().get(IpHeaders.ACK_ID);
byte[] ack = id.toString().getBytes();
DatagramPacket ackPack = new DatagramPacket(ack, ack.length,
new InetSocketAddress(multicastRule.getNic(), ackPort.get()));
new InetSocketAddress(multicastRule.getNic().getInetAddresses().nextElement(), ackPort.get()));
DatagramSocket out = new DatagramSocket();
out.send(ackPack);
out.close();
@@ -164,7 +170,7 @@ public class DatagramPacketMulticastSendingHandlerTests {
assertThat(listening.await(10000, TimeUnit.MILLISECONDS)).isTrue();
MulticastSendingMessageHandler handler =
new MulticastSendingMessageHandler(multicastAddress, testPort, true, true, "localhost", 0, 10000);
handler.setLocalAddress(this.multicastRule.getNic());
handler.setLocalAddress(this.multicastRule.getNic().getName());
handler.setMinAcksForSuccess(2);
handler.setBeanFactory(mock(BeanFactory.class));
handler.afterPropertiesSet();

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2015-2019 the original author or authors.
* Copyright 2015-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,8 +16,9 @@
package org.springframework.integration.ip.udp;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.MulticastSocket;
import java.net.NetworkInterface;
import org.apache.commons.logging.LogFactory;
import org.junit.Assume;
@@ -26,10 +27,12 @@ import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import org.springframework.integration.ip.util.SocketTestUtils;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
/**
* @author Artem Bilan
*
* @since 4.3
*/
public class MulticastRule extends TestWatcher {
@@ -38,7 +41,8 @@ public class MulticastRule extends TestWatcher {
private final String group;
private final String nic;
@Nullable
private final NetworkInterface nic;
private boolean skip;
@@ -58,19 +62,20 @@ public class MulticastRule extends TestWatcher {
throw new IllegalStateException(e);
}
if (this.nic != null) {
System.setProperty("multicast.local.address", this.nic);
System.setProperty("multicast.local.address", this.nic.getName());
}
}
private String checkMulticast() throws Exception {
String nic = SocketTestUtils.chooseANic(true);
if (nic == null) { // no multicast support
@Nullable
private NetworkInterface checkMulticast() throws Exception {
NetworkInterface nic = SocketTestUtils.chooseANic(true);
if (nic == null) { // no multicast support
this.skip = true;
return null;
}
try {
MulticastSocket socket = new MulticastSocket();
socket.joinGroup(InetAddress.getByName(this.group));
socket.joinGroup(new InetSocketAddress(this.group, 161), nic);
socket.close();
}
catch (Exception e) {
@@ -84,25 +89,18 @@ public class MulticastRule extends TestWatcher {
return group;
}
public String getNic() {
@Nullable
public NetworkInterface getNic() {
return nic;
}
@Override
public Statement apply(Statement base, Description description) {
if (this.skip) {
LogFactory.getLog(this.getClass()).info("No Multicast support; test skipped");
return new Statement() {
@Override
public void evaluate() throws Throwable {
Assume.assumeTrue(false);
}
};
}
else {
return super.apply(base, description);
LogFactory.getLog(getClass()).info("No Multicast support; test skipped");
}
Assume.assumeFalse(this.skip);
return super.apply(base, description);
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -23,8 +23,8 @@ import static org.mockito.Mockito.mock;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Inet4Address;
import java.net.InetSocketAddress;
import java.net.NetworkInterface;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
@@ -34,6 +34,8 @@ import java.util.concurrent.atomic.AtomicReference;
import org.junit.Rule;
import org.junit.Test;
import org.junit.jupiter.api.condition.EnabledOnJre;
import org.junit.jupiter.api.condition.JRE;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ConfigurableApplicationContext;
@@ -244,13 +246,16 @@ public class UdpChannelAdapterTests {
@SuppressWarnings("unchecked")
@Test
@EnabledOnJre(JRE.JAVA_8)
public void testMulticastReceiver() throws Exception {
QueueChannel channel = new QueueChannel(2);
MulticastReceivingChannelAdapter adapter =
new MulticastReceivingChannelAdapter(this.multicastRule.getGroup(), 0);
adapter.setOutputChannel(channel);
String nic = this.multicastRule.getNic();
adapter.setLocalAddress(nic);
NetworkInterface nic = this.multicastRule.getNic();
if (nic != null) {
adapter.setLocalAddress(nic.getName());
}
adapter.start();
SocketTestUtils.waitListening(adapter);
int port = adapter.getPort();
@@ -259,7 +264,7 @@ public class UdpChannelAdapterTests {
DatagramPacketMessageMapper mapper = new DatagramPacketMessageMapper();
DatagramPacket packet = mapper.fromMessage(message);
packet.setSocketAddress(new InetSocketAddress(this.multicastRule.getGroup(), port));
DatagramSocket datagramSocket = new DatagramSocket(0, Inet4Address.getByName(nic));
DatagramSocket datagramSocket = new DatagramSocket(0, nic.getInetAddresses().nextElement());
datagramSocket.send(packet);
datagramSocket.close();
@@ -271,19 +276,23 @@ public class UdpChannelAdapterTests {
@SuppressWarnings("unchecked")
@Test
public void testMulticastSender() throws Exception {
public void testMulticastSender() {
QueueChannel channel = new QueueChannel(2);
UnicastReceivingChannelAdapter adapter =
new MulticastReceivingChannelAdapter(this.multicastRule.getGroup(), 0);
adapter.setOutputChannel(channel);
String nic = this.multicastRule.getNic();
adapter.setLocalAddress(nic);
NetworkInterface nic = this.multicastRule.getNic();
if (nic != null) {
adapter.setLocalAddress(nic.getName());
}
adapter.start();
SocketTestUtils.waitListening(adapter);
MulticastSendingMessageHandler handler =
new MulticastSendingMessageHandler(this.multicastRule.getGroup(), adapter.getPort());
handler.setLocalAddress(nic);
if (nic != null) {
handler.setLocalAddress(nic.getName());
}
Message<byte[]> message = MessageBuilder.withPayload("ABCD".getBytes()).build();
handler.handleMessage(message);

View File

@@ -21,7 +21,6 @@ import static org.awaitility.Awaitility.await;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.Socket;
@@ -36,6 +35,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.integration.ip.AbstractInternetProtocolReceivingChannelAdapter;
import org.springframework.lang.Nullable;
/**
* TCP/IP Test utilities.
@@ -62,9 +62,7 @@ public class SocketTestUtils {
public static CountDownLatch testSendLength(final int port, final CountDownLatch latch) {
final CountDownLatch testCompleteLatch = new CountDownLatch(1);
Thread thread = new Thread(() -> {
Socket socket = null;
try {
socket = new Socket(InetAddress.getByName("localhost"), port);
try (Socket socket = new Socket(InetAddress.getByName("localhost"), port)) {
for (int i = 0; i < 2; i++) {
byte[] len = new byte[4];
ByteBuffer.wrap(len).putInt(TEST_STRING.length() * 2);
@@ -84,16 +82,6 @@ public class SocketTestUtils {
catch (Exception e1) {
logger.error(e1);
}
finally {
if (socket != null) {
try {
socket.close();
}
catch (IOException e2) {
}
}
}
});
thread.setDaemon(true);
thread.start();
@@ -106,9 +94,7 @@ public class SocketTestUtils {
public static CountDownLatch testSendLengthOverflow(final int port) {
final CountDownLatch testCompleteLatch = new CountDownLatch(1);
Thread thread = new Thread(() -> {
Socket socket = null;
try {
socket = new Socket(InetAddress.getByName("localhost"), port);
try (Socket socket = new Socket(InetAddress.getByName("localhost"), port)) {
byte[] len = new byte[4];
ByteBuffer.wrap(len).putInt(Integer.MAX_VALUE);
socket.getOutputStream().write(len);
@@ -118,16 +104,6 @@ public class SocketTestUtils {
catch (Exception e1) {
logger.error(e1);
}
finally {
if (socket != null) {
try {
socket.close();
}
catch (IOException e2) {
}
}
}
});
thread.setDaemon(true);
thread.start();
@@ -191,9 +167,7 @@ public class SocketTestUtils {
public static CountDownLatch testSendStxEtx(final int port, final CountDownLatch latch) {
final CountDownLatch testCompleteLatch = new CountDownLatch(1);
Thread thread = new Thread(() -> {
Socket socket = null;
try {
socket = new Socket(InetAddress.getByName("localhost"), port);
try (Socket socket = new Socket(InetAddress.getByName("localhost"), port)) {
OutputStream outputStream = socket.getOutputStream();
for (int i = 0; i < 2; i++) {
writeByte(outputStream, 0x02, true);
@@ -213,16 +187,6 @@ public class SocketTestUtils {
catch (Exception e1) {
logger.error(e1);
}
finally {
if (socket != null) {
try {
socket.close();
}
catch (IOException e2) {
}
}
}
});
thread.setDaemon(true);
thread.start();
@@ -235,9 +199,7 @@ public class SocketTestUtils {
public static CountDownLatch testSendStxEtxOverflow(final int port) {
final CountDownLatch testCompleteLatch = new CountDownLatch(1);
Thread thread = new Thread(() -> {
Socket socket = null;
try {
socket = new Socket(InetAddress.getByName("localhost"), port);
try (Socket socket = new Socket(InetAddress.getByName("localhost"), port)) {
OutputStream outputStream = socket.getOutputStream();
writeByte(outputStream, 0x02, true);
for (int i = 0; i < 1500; i++) {
@@ -248,16 +210,6 @@ public class SocketTestUtils {
catch (Exception e1) {
logger.debug("write failed", e1);
}
finally {
if (socket != null) {
try {
socket.close();
}
catch (IOException e2) {
}
}
}
});
thread.setDaemon(true);
thread.start();
@@ -271,9 +223,7 @@ public class SocketTestUtils {
public static CountDownLatch testSendCrLf(final int port, final CountDownLatch latch) {
final CountDownLatch testCompleteLatch = new CountDownLatch(1);
Thread thread = new Thread(() -> {
Socket socket = null;
try {
socket = new Socket(InetAddress.getByName("localhost"), port);
try (Socket socket = new Socket(InetAddress.getByName("localhost"), port)) {
OutputStream outputStream = socket.getOutputStream();
for (int i = 0; i < 2; i++) {
outputStream.write(TEST_STRING.getBytes());
@@ -293,16 +243,6 @@ public class SocketTestUtils {
catch (Exception e1) {
logger.error(e1);
}
finally {
if (socket != null) {
try {
socket.close();
}
catch (IOException e2) {
}
}
}
});
thread.setDaemon(true);
thread.start();
@@ -315,8 +255,7 @@ public class SocketTestUtils {
*/
public static void testSendCrLfSingle(final int port, final CountDownLatch latch) {
Thread thread = new Thread(() -> {
try {
Socket socket = new Socket(InetAddress.getByName("localhost"), port);
try (Socket socket = new Socket(InetAddress.getByName("localhost"), port)) {
OutputStream outputStream = socket.getOutputStream();
outputStream.write(TEST_STRING.getBytes());
outputStream.write(TEST_STRING.getBytes());
@@ -325,7 +264,6 @@ public class SocketTestUtils {
if (latch != null) {
latch.await();
}
socket.close();
}
catch (Exception ex) {
logger.error(ex);
@@ -340,12 +278,10 @@ public class SocketTestUtils {
*/
public static void testSendRaw(final int port) {
Thread thread = new Thread(() -> {
try {
Socket socket = new Socket(InetAddress.getByName("localhost"), port);
try (Socket socket = new Socket(InetAddress.getByName("localhost"), port)) {
OutputStream outputStream = socket.getOutputStream();
outputStream.write(TEST_STRING.getBytes());
outputStream.write(TEST_STRING.getBytes());
socket.close();
}
catch (Exception ex) {
logger.error(ex);
@@ -354,16 +290,15 @@ public class SocketTestUtils {
thread.setDaemon(true);
thread.start();
}
/**
* Sends two serialized objects over the same socket.
* @param port
* @param port the port for socket
*/
public static CountDownLatch testSendSerialized(final int port) {
final CountDownLatch testCompleteLatch = new CountDownLatch(1);
Thread thread = new Thread(() -> {
Socket socket = null;
try {
socket = new Socket(InetAddress.getByName("localhost"), port);
try (Socket socket = new Socket(InetAddress.getByName("localhost"), port)) {
OutputStream outputStream = socket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(outputStream);
oos.writeObject(TEST_STRING);
@@ -376,16 +311,6 @@ public class SocketTestUtils {
catch (Exception e1) {
logger.error(e1);
}
finally {
if (socket != null) {
try {
socket.close();
}
catch (IOException e2) {
}
}
}
});
thread.setDaemon(true);
thread.start();
@@ -398,14 +323,12 @@ public class SocketTestUtils {
public static CountDownLatch testSendCrLfOverflow(final int port) {
final CountDownLatch testCompleteLatch = new CountDownLatch(1);
Thread thread = new Thread(() -> {
try {
Socket socket = new Socket(InetAddress.getByName("localhost"), port);
try (Socket socket = new Socket(InetAddress.getByName("localhost"), port)) {
OutputStream outputStream = socket.getOutputStream();
for (int i = 0; i < 1500; i++) {
writeByte(outputStream, 'x', true);
}
testCompleteLatch.await(10, TimeUnit.SECONDS);
socket.close();
}
catch (Exception e) {
@@ -427,26 +350,23 @@ public class SocketTestUtils {
}
}
public static String chooseANic(boolean multicast) throws Exception {
@Nullable
public static NetworkInterface chooseANic(boolean multicast) throws Exception {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface intface = interfaces.nextElement();
if (intface.isLoopback() || (multicast && !intface.supportsMulticast())
|| intface.getName().contains("vboxnet")) {
continue;
}
for (Enumeration<InetAddress> inetAddr = intface.getInetAddresses(); inetAddr.hasMoreElements(); ) {
InetAddress nextElement = inetAddr.nextElement();
if (nextElement instanceof Inet4Address) {
return nextElement.getHostAddress();
}
NetworkInterface networkInterface = interfaces.nextElement();
if (!networkInterface.isLoopback()
&& (!multicast || networkInterface.supportsMulticast())
&& !networkInterface.getName().contains("vboxnet")
&& networkInterface.getInetAddresses().hasMoreElements()) {
return networkInterface;
}
}
return null;
}
public static void waitListening(AbstractInternetProtocolReceivingChannelAdapter adapter) throws Exception {
await("Adapter not listening").atMost(Duration.ofSeconds(10)).until(() -> adapter.isListening());
public static void waitListening(AbstractInternetProtocolReceivingChannelAdapter adapter) {
await("Adapter not listening").atMost(Duration.ofSeconds(10)).until(adapter::isListening);
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,6 +24,7 @@ import javax.jms.Destination;
import javax.jms.ExceptionListener;
import javax.jms.Session;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.config.AbstractFactoryBean;
@@ -412,13 +413,7 @@ public class JmsChannelFactoryBean extends AbstractFactoryBean<AbstractJmsChanne
if (this.containerType == null) {
this.containerType = DefaultMessageListenerContainer.class;
}
AbstractMessageListenerContainer container;
try {
container = this.containerType.newInstance();
}
catch (InstantiationException | IllegalAccessException e) {
throw new IllegalStateException(e);
}
AbstractMessageListenerContainer container = BeanUtils.instantiateClass(this.containerType);
container.setAcceptMessagesWhileStopping(this.acceptMessagesWhileStopping);
container.setAutoStartup(this.autoStartup);
container.setClientId(this.clientId);

View File

@@ -19,6 +19,7 @@ package org.springframework.integration.jms.dsl;
import javax.jms.Destination;
import javax.jms.ExceptionListener;
import org.springframework.beans.BeanUtils;
import org.springframework.jms.listener.AbstractMessageListenerContainer;
import org.springframework.jms.listener.DefaultMessageListenerContainer;
import org.springframework.util.ErrorHandler;
@@ -34,25 +35,17 @@ import org.springframework.util.ErrorHandler;
*
* @since 5.0
*/
public class JmsListenerContainerSpec<S extends JmsListenerContainerSpec<S, C>, C extends AbstractMessageListenerContainer>
public class JmsListenerContainerSpec<S extends JmsListenerContainerSpec<S, C>,
C extends AbstractMessageListenerContainer>
extends JmsDestinationAccessorSpec<S, C> {
protected JmsListenerContainerSpec(Class<C> aClass) {
super(newInstance(aClass));
super(BeanUtils.instantiateClass(aClass));
if (DefaultMessageListenerContainer.class.isAssignableFrom(aClass)) {
this.target.setSessionTransacted(true);
}
}
private static <C extends AbstractMessageListenerContainer> C newInstance(Class<C> aClass) {
try {
return aClass.newInstance();
}
catch (InstantiationException | IllegalAccessException e) {
throw new IllegalStateException(e);
}
}
/**
* @param destination the destination.
* @return the spec.

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -25,7 +25,7 @@ import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Session;
import org.junit.Test;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.integration.IntegrationMessageHeaderAccessor;
@@ -41,6 +41,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
/**
* @author Mark Fisher
* @author Gary Russell
* @author Artem Bilan
*/
public class DefaultJmsHeaderMapperTests {
@@ -83,7 +84,7 @@ public class DefaultJmsHeaderMapperTests {
@Test
public void testJmsCorrelationIdNumberConvertsToString() throws JMSException {
Message<String> message = MessageBuilder.withPayload("test")
.setHeader(JmsHeaders.CORRELATION_ID, new Integer(123)).build();
.setHeader(JmsHeaders.CORRELATION_ID, 123).build();
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
javax.jms.Message jmsMessage = new StubTextMessage();
mapper.fromHeaders(message.getHeaders(), jmsMessage);
@@ -103,8 +104,10 @@ public class DefaultJmsHeaderMapperTests {
@Test
public void testJmsTypeMappedFromHeader() throws JMSException {
String jmsType = "testing";
Message<String> message = MessageBuilder.withPayload("test")
.setHeader(JmsHeaders.TYPE, jmsType).build();
Message<String> message =
MessageBuilder.withPayload("test")
.setHeader(JmsHeaders.TYPE, jmsType)
.build();
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
javax.jms.Message jmsMessage = new StubTextMessage();
mapper.fromHeaders(message.getHeaders(), jmsMessage);
@@ -114,8 +117,10 @@ public class DefaultJmsHeaderMapperTests {
@Test
public void testJmsTypeIgnoredIfIncorrectType() throws JMSException {
Message<String> message = MessageBuilder.withPayload("test")
.setHeader(JmsHeaders.TYPE, new Integer(123)).build();
Message<String> message =
MessageBuilder.withPayload("test")
.setHeader(JmsHeaders.TYPE, 123)
.build();
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
javax.jms.Message jmsMessage = new StubTextMessage();
mapper.fromHeaders(message.getHeaders(), jmsMessage);
@@ -137,9 +142,10 @@ public class DefaultJmsHeaderMapperTests {
@Test
public void testUserDefinedPropertyMappedFromHeader() throws JMSException {
Message<String> message = MessageBuilder.withPayload("test")
.setHeader("foo", new Integer(123))
.build();
Message<String> message =
MessageBuilder.withPayload("test")
.setHeader("foo", 123)
.build();
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
javax.jms.Message jmsMessage = new StubTextMessage();
mapper.fromHeaders(message.getHeaders(), jmsMessage);
@@ -151,9 +157,10 @@ public class DefaultJmsHeaderMapperTests {
@Test
public void testUserDefinedPropertyMappedFromHeaderWithCustomPrefix() throws JMSException {
Message<String> message = MessageBuilder.withPayload("test")
.setHeader("foo", new Integer(123))
.build();
Message<String> message =
MessageBuilder.withPayload("test")
.setHeader("foo", 123)
.build();
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
mapper.setOutboundPrefix("custom_");
javax.jms.Message jmsMessage = new StubTextMessage();
@@ -301,11 +308,12 @@ public class DefaultJmsHeaderMapperTests {
@Test
public void testPropertyMappingExceptionIsNotFatal() throws JMSException {
Message<String> message = MessageBuilder.withPayload("test")
.setHeader("foo", new Integer(123))
.setHeader("bad", new Integer(456))
.setHeader("bar", new Integer(789))
.build();
Message<String> message =
MessageBuilder.withPayload("test")
.setHeader("foo", 123)
.setHeader("bad", 456)
.setHeader("bar", 789)
.build();
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
javax.jms.Message jmsMessage = new StubTextMessage() {
@@ -328,11 +336,12 @@ public class DefaultJmsHeaderMapperTests {
@Test
public void testIllegalArgumentExceptionIsNotFatal() throws JMSException {
Message<String> message = MessageBuilder.withPayload("test")
.setHeader("foo", new Integer(123))
.setHeader("bad", new Integer(456))
.setHeader("bar", new Integer(789))
.build();
Message<String> message =
MessageBuilder.withPayload("test")
.setHeader("foo", 123)
.setHeader("bad", 456)
.setHeader("bar", 789)
.build();
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
javax.jms.Message jmsMessage = new StubTextMessage() {
@@ -416,7 +425,7 @@ public class DefaultJmsHeaderMapperTests {
@Test
public void attemptToWriteDisallowedCorrelationIdNumberPropertyIsNotFatal() throws JMSException {
Message<String> message = MessageBuilder.withPayload("test")
.setHeader(JmsHeaders.CORRELATION_ID, new Integer(123))
.setHeader(JmsHeaders.CORRELATION_ID, 123)
.setHeader("foo", "bar")
.build();
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
@@ -544,7 +553,7 @@ public class DefaultJmsHeaderMapperTests {
}
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "javatype")
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "javatype")
private static class Foo {
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -27,6 +27,7 @@ import org.springframework.messaging.MessageHeaders;
/**
* @author Mark Fisher
* @author Gary Russell
* @author Artem Bilan
*/
public class TestJmsHeaderMapper extends JmsHeaderMapper {
@@ -36,9 +37,9 @@ public class TestJmsHeaderMapper extends JmsHeaderMapper {
@Override
public Map<String, Object> toHeaders(Message source) {
Map<String, Object> headerMap = new HashMap<String, Object>();
Map<String, Object> headerMap = new HashMap<>();
headerMap.put("testProperty", "foo");
headerMap.put("testAttribute", new Integer(123));
headerMap.put("testAttribute", 123);
return headerMap;
}

View File

@@ -88,7 +88,7 @@ import org.springframework.transaction.PlatformTransactionManager;
*/
@SpringJUnitConfig
@LogLevels(level = "debug",
categories = { "org.springframework", "org.springframework.integration", "org.apache" })
categories = {"org.springframework", "org.springframework.integration", "org.apache"})
@DirtiesContext
public class JmsTests extends ActiveMQMultiContextTests {
@@ -215,7 +215,7 @@ public class JmsTests extends ActiveMQMultiContextTests {
@Test
public void testJmsPipelineFlow() {
assertThat(TestUtils.getPropertyValue(this.jmsOutboundGatewayHandler, "idleReplyContainerTimeout", Long.class))
.isEqualTo(new Long(10000));
.isEqualTo(10000L);
PollableChannel replyChannel = new QueueChannel();
Message<String> message = MessageBuilder.withPayload("hello through the jms pipeline")
.setReplyChannel(replyChannel)

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2013-2019 the original author or authors.
* Copyright 2013-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,8 +20,12 @@ import java.util.Arrays;
import javax.management.ObjectName;
import org.springframework.util.Assert;
/**
* @author Stuart Williams
* @author Artem Bilan
*
* @since 3.0
*
*/
@@ -33,7 +37,8 @@ public class NamedFieldsMBeanAttributeFilter implements MBeanAttributeFilter {
* @param namedFields The named fields that should pass the filter.
*/
public NamedFieldsMBeanAttributeFilter(String... namedFields) {
this.namedFields = (String[]) Arrays.asList(namedFields).toArray();
Assert.notNull(namedFields, "'namedFields' must not be null");
this.namedFields = Arrays.copyOf(namedFields, namedFields.length);
}
@Override

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2013-2019 the original author or authors.
* Copyright 2013-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,8 +20,12 @@ import java.util.Arrays;
import javax.management.ObjectName;
import org.springframework.util.Assert;
/**
* @author Stuart Williams
* @author Artem Bilan
*
* @since 3.0
*
*/
@@ -33,7 +37,8 @@ public class NotNamedFieldsMBeanAttributeFilter implements MBeanAttributeFilter
* @param namedFields The named fields that should be filtered.
*/
public NotNamedFieldsMBeanAttributeFilter(String... namedFields) {
this.namedFields = (String[]) Arrays.asList(namedFields).toArray();
Assert.notNull(namedFields, "'namedFields' must not be null");
this.namedFields = Arrays.copyOf(namedFields, namedFields.length);
}
@Override

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2013-2019 the original author or authors.
* Copyright 2013-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,8 +24,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
@@ -33,16 +32,15 @@ import org.springframework.integration.endpoint.SourcePollingChannelAdapter;
import org.springframework.messaging.Message;
import org.springframework.messaging.PollableChannel;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
/**
* @author Stuart Williams
* @author Gary Russell
* @author Artem Bilan
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@SpringJUnitConfig
@DirtiesContext
public class MBeanAttributeFilterTests {
@@ -106,7 +104,7 @@ public class MBeanAttributeFilterTests {
Map<String, Object> bean = (Map<String, Object>) payload
.get(domain + ":name=in,type=MessageChannel");
List<String> keys = new ArrayList<String>(bean.keySet());
List<String> keys = new ArrayList<>(bean.keySet());
Collections.sort(keys);
assertThat(keys)
.containsExactly("LoggingEnabled", "MaxSendDuration", "MeanErrorRate", "MeanErrorRatio",

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2018-2019 the original author or authors.
* Copyright 2018-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -63,7 +63,7 @@ public class DslMBeanTests {
assertThat(query).hasSize(0);
IntegrationFlow dynamicFlow =
IntegrationFlows.from(() -> "foo", e -> e.poller(p -> p.fixedDelay(1000)))
IntegrationFlows.fromSupplier(() -> "foo", e -> e.poller(p -> p.fixedDelay(1000)))
.channel("channelTwo")
.nullChannel();

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2019 the original author or authors.
* Copyright 2019-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,6 +18,7 @@ package org.springframework.integration.rsocket;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -66,17 +67,17 @@ class IntegrationRSocketMessageHandler extends RSocketMessageHandler {
public boolean detectEndpoints() {
ApplicationContext applicationContext = getApplicationContext();
boolean endpointsDetected = false;
if (applicationContext != null && getHandlerMethods().isEmpty()) {
return applicationContext
.getBeansOfType(IntegrationRSocketEndpoint.class)
.values()
.stream()
.peek(this::addEndpoint)
.count() > 0;
}
else {
return false;
Collection<IntegrationRSocketEndpoint> endpoints =
applicationContext.getBeansOfType(IntegrationRSocketEndpoint.class)
.values();
for (IntegrationRSocketEndpoint endpoint : endpoints) {
addEndpoint(endpoint);
endpointsDetected = true;
}
}
return endpointsDetected;
}
public void addEndpoint(IntegrationRSocketEndpoint endpoint) {

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,14 +17,13 @@
package org.springframework.integration.scripting.config.jsr223;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.Test;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
@@ -34,18 +33,18 @@ import org.springframework.integration.scripting.ScriptVariableGenerator;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
/**
* @author Mark Fisher
* @author Oleg Zhurakousky
* @author David Turanski
* @author Gunnar Hillert
* @author Artem Bilan
*
* @since 2.0
*/
@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@SpringJUnitConfig
public class Jsr223ServiceActivatorTests {
@Autowired
@@ -118,8 +117,7 @@ public class Jsr223ServiceActivatorTests {
}
@Test
public void inlineScript() throws Exception {
public void inlineScript() {
QueueChannel replyChannel = new QueueChannel();
replyChannel.setBeanName("returnAddress");
for (int i = 1; i <= 3; i++) {
@@ -142,34 +140,31 @@ public class Jsr223ServiceActivatorTests {
}
@Test
public void variablesAndScriptVariableGenerator() throws Exception {
try {
new ClassPathXmlApplicationContext("Jsr223ServiceActivatorTests-fail-withgenerator-context.xml",
this.getClass()).close();
fail("BeansException expected.");
}
catch (BeansException e) {
assertThat(e.getMessage())
.contains("'script-variable-generator' and 'variable' sub-elements are mutually exclusive.");
}
public void variablesAndScriptVariableGenerator() {
assertThatExceptionOfType(BeansException.class)
.isThrownBy(() ->
new ClassPathXmlApplicationContext(
"Jsr223ServiceActivatorTests-fail-withgenerator-context.xml",
getClass()))
.withMessageContaining(
"'script-variable-generator' and 'variable' sub-elements are mutually exclusive.");
}
@Test
public void testDuplicateVariable() throws Exception {
try {
new ClassPathXmlApplicationContext("Jsr223ServiceActivatorTests-fail-duplicated-variable-context.xml",
this.getClass()).close();
fail("BeansException expected.");
}
catch (BeansException e) {
assertThat(e.getMessage()).contains("Duplicated variable: foo");
}
public void testDuplicateVariable() {
assertThatExceptionOfType(BeansException.class)
.isThrownBy(() ->
new ClassPathXmlApplicationContext(
"Jsr223ServiceActivatorTests-fail-duplicated-variable-context.xml",
getClass()))
.withMessageContaining("Duplicated variable: foo");
}
public static class SampleScriptVariSource implements ScriptVariableGenerator {
@Override
public Map<String, Object> generateScriptVariables(Message<?> message) {
Map<String, Object> variables = new HashMap<String, Object>();
Map<String, Object> variables = new HashMap<>();
variables.put("foo", "foo");
variables.put("bar", "bar");
variables.put("date", new Date());
@@ -177,6 +172,7 @@ public class Jsr223ServiceActivatorTests {
variables.put("headers", message.getHeaders());
return variables;
}
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2017-2019 the original author or authors.
* Copyright 2017-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,6 +19,7 @@ package org.springframework.integration.webflux.config;
import static org.assertj.core.api.Assertions.assertThat;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import org.junit.Test;
@@ -106,20 +107,20 @@ public class WebFluxOutboundGatewayParserTests {
assertThat(uriExpression.getValue()).isEqualTo("http://localhost/test2");
assertThat(TestUtils.getPropertyValue(handler, "httpMethodExpression", Expression.class).getExpressionString())
.isEqualTo(HttpMethod.PUT.name());
assertThat(handlerAccessor.getPropertyValue("charset")).isEqualTo(Charset.forName("UTF-8"));
assertThat(handlerAccessor.getPropertyValue("charset")).isEqualTo(StandardCharsets.UTF_8);
assertThat(handlerAccessor.getPropertyValue("extractPayload")).isEqualTo(false);
Object sendTimeout = new DirectFieldAccessor(
handlerAccessor.getPropertyValue("messagingTemplate")).getPropertyValue("sendTimeout");
assertThat(sendTimeout).isEqualTo(new Long("1234"));
assertThat(sendTimeout).isEqualTo(1234L);
Map<String, Expression> uriVariableExpressions =
(Map<String, Expression>) handlerAccessor.getPropertyValue("uriVariableExpressions");
assertThat(uriVariableExpressions.size()).isEqualTo(1);
assertThat(uriVariableExpressions).hasSize(1);
assertThat(uriVariableExpressions.get("foo").getExpressionString()).isEqualTo("headers.bar");
DirectFieldAccessor mapperAccessor = new DirectFieldAccessor(handlerAccessor.getPropertyValue("headerMapper"));
String[] mappedRequestHeaders = (String[]) mapperAccessor.getPropertyValue("outboundHeaderNames");
String[] mappedResponseHeaders = (String[]) mapperAccessor.getPropertyValue("inboundHeaderNames");
assertThat(mappedRequestHeaders.length).isEqualTo(2);
assertThat(mappedResponseHeaders.length).isEqualTo(1);
assertThat(mappedRequestHeaders).hasSize(2);
assertThat(mappedResponseHeaders).hasSize(1);
assertThat(ObjectUtils.containsElement(mappedRequestHeaders, "requestHeader1")).isTrue();
assertThat(ObjectUtils.containsElement(mappedRequestHeaders, "requestHeader2")).isTrue();
assertThat(mappedResponseHeaders[0]).isEqualTo("responseHeader");

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -113,7 +113,7 @@ public class XPathTransformerParserTests {
@Test
public void numberResult() {
this.numberInput.send(message);
assertThat(output.receive(0).getPayload()).isEqualTo(new Double(42));
assertThat(output.receive(0).getPayload()).isEqualTo(42d);
}
@Test
@@ -156,7 +156,7 @@ public class XPathTransformerParserTests {
@Test
public void expressionRef() {
this.expressionRefInput.send(message);
assertThat(output.receive(0).getPayload()).isEqualTo(new Double(84));
assertThat(output.receive(0).getPayload()).isEqualTo(84d);
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,8 +24,8 @@ import java.util.List;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Source;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
@@ -41,6 +41,8 @@ import org.springframework.xml.xpath.XPathExpressionFactory;
/**
* @author Mark Fisher
* @author Artem Bilan
*
* @since 2.0
*/
public class XPathTransformerTests {
@@ -50,21 +52,21 @@ public class XPathTransformerTests {
private volatile Message<?> message;
@Before
@BeforeEach
public void createMessage() {
this.message = MessageBuilder.withPayload(XML).build();
}
@Test
public void stringResultTypeByDefault() throws Exception {
public void stringResultTypeByDefault() {
XPathTransformer transformer = new XPathTransformer("/parent/child/@name");
Object result = transformer.doTransform(message);
assertThat(result).isEqualTo("test");
}
@Test
public void xpathExpressionReferenceConstructorInsteadOfString() throws Exception {
public void xpathExpressionReferenceConstructorInsteadOfString() {
XPathExpression expression = XPathExpressionFactory.createXPathExpression("/parent/child/@name");
XPathTransformer transformer = new XPathTransformer(expression);
Object result = transformer.doTransform(message);
@@ -72,15 +74,15 @@ public class XPathTransformerTests {
}
@Test
public void numberResult() throws Exception {
public void numberResult() {
XPathTransformer transformer = new XPathTransformer("/parent/child/@age");
transformer.setEvaluationType(XPathEvaluationType.NUMBER_RESULT);
Object result = transformer.doTransform(message);
assertThat(result).isEqualTo(new Double(42));
assertThat(result).isEqualTo(42d);
}
@Test
public void booleanResult() throws Exception {
public void booleanResult() {
XPathTransformer transformer = new XPathTransformer("/parent/child/@married = 'true'");
transformer.setEvaluationType(XPathEvaluationType.BOOLEAN_RESULT);
Object result = transformer.doTransform(message);
@@ -88,7 +90,7 @@ public class XPathTransformerTests {
}
@Test
public void nodeResult() throws Exception {
public void nodeResult() {
XPathTransformer transformer = new XPathTransformer("/parent/child");
transformer.setEvaluationType(XPathEvaluationType.NODE_RESULT);
Object result = transformer.doTransform(message);
@@ -102,7 +104,7 @@ public class XPathTransformerTests {
@Test
@SuppressWarnings("unchecked")
public void nodeListResult() throws Exception {
public void nodeListResult() {
XPathTransformer transformer = new XPathTransformer("/parent/child");
transformer.setEvaluationType(XPathEvaluationType.NODE_LIST_RESULT);
Message<?> message = MessageBuilder.withPayload(
@@ -120,7 +122,7 @@ public class XPathTransformerTests {
}
@Test
public void nodeMapper() throws Exception {
public void nodeMapper() {
XPathTransformer transformer = new XPathTransformer("/parent/child/@name");
transformer.setNodeMapper(new TestNodeMapper());
Object result = transformer.doTransform(message);
@@ -128,7 +130,7 @@ public class XPathTransformerTests {
}
@Test
public void customConverter() throws Exception {
public void customConverter() {
XPathTransformer transformer = new XPathTransformer("/test/@type");
transformer.setConverter(new TestXmlPayloadConverter());
Object result = transformer.doTransform(message);
@@ -146,6 +148,7 @@ public class XPathTransformerTests {
public Object mapNode(Node node, int nodeNum) throws DOMException {
return node.getTextContent() + "-mapped";
}
}
@@ -175,6 +178,7 @@ public class XPathTransformerTests {
public Document convertToDocument(Object object) {
throw new UnsupportedOperationException();
}
}
}