Fixes according latest upgrades

* Add `--add-opens` to `asciidoctor` Gradle task to avoid compilation warning
* Upgrade to Kotlin `1.6.10` and modify its Gradle task respective
* Add empty impl for new `AnnotationMetadataAdapter.getDeclaredMethods()`
* Parse HTTP methods to new `String methodNames` property of the `RequestMapping`
since `HttpMethod` is not an `enum` anymore.
* Ignore JDBC tests which rely on a map property resolution: the `[]` placeholder
is not handled in the latest SF anymore.
* Fix `WebFluxInboundEndpoint` for deprecations
This commit is contained in:
Artem Bilan
2022-01-06 17:24:11 -05:00
parent a80b22638d
commit b3ae24eac6
17 changed files with 205 additions and 163 deletions

View File

@@ -1,26 +1,26 @@
buildscript {
ext.kotlinVersion = '1.5.32'
repositories {
mavenCentral()
gradlePluginPortal()
maven { url 'https://repo.spring.io/plugins-release-local' }
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlinVersion"
}
ext.kotlinVersion = '1.6.10'
repositories {
mavenCentral()
gradlePluginPortal()
maven { url 'https://repo.spring.io/plugins-release-local' }
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlinVersion"
}
}
plugins {
id 'org.sonarqube' version '2.8'
id 'io.spring.nohttp' version '0.0.10' apply false
id 'org.ajoberstar.grgit' version '4.1.0'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'com.jfrog.artifactory' version '4.24.20' apply false
id 'org.jetbrains.dokka' version '1.5.30'
id 'org.asciidoctor.jvm.pdf' version '3.3.2'
id 'org.asciidoctor.jvm.gems' version '3.3.2'
id 'org.asciidoctor.jvm.convert' version '3.3.2'
id 'org.sonarqube' version '2.8'
id 'io.spring.nohttp' version '0.0.10' apply false
id 'org.ajoberstar.grgit' version '4.1.0'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'com.jfrog.artifactory' version '4.24.20' apply false
id 'org.jetbrains.dokka' version '1.5.30'
id 'org.asciidoctor.jvm.pdf' version '3.3.2'
id 'org.asciidoctor.jvm.gems' version '3.3.2'
id 'org.asciidoctor.jvm.convert' version '3.3.2'
}
if (System.getenv('GITHUB_ACTION') || System.getenv('bamboo_buildKey')) {
@@ -46,66 +46,67 @@ ext {
modifiedFiles =
files(grgit.status().unstaged.modified).filter { f -> f.name.endsWith('.java') || f.name.endsWith('.kt') }
apacheSshdVersion = '2.7.0'
artemisVersion = '2.19.0'
aspectjVersion = '1.9.7'
assertjVersion = '3.21.0'
assertkVersion = '0.25'
avroVersion = '1.10.2'
awaitilityVersion = '4.1.1'
commonsDbcp2Version = '2.9.0'
commonsIoVersion = '2.11.0'
commonsNetVersion = '3.8.0'
curatorVersion = '4.3.0'
derbyVersion = '10.14.2.0'
ftpServerVersion = '1.1.1'
googleJsr305Version = '3.0.2'
greenmailVersion = '2.0.0-alpha-2'
groovyVersion = '3.0.9'
hamcrestVersion = '2.2'
hazelcastVersion = '4.2.3'
hibernateVersion = '5.6.1.Final'
hsqldbVersion = '2.6.0'
h2Version = '1.4.200'
jacksonVersion = '2.13.0'
jaxbVersion = '3.0.2'
jeroMqVersion = '0.5.2'
jmsApiVersion = '3.0.0'
jpaApiVersion = '3.0.2'
jrubyVersion = '9.2.19.0'
jschVersion = '0.1.55'
jsonpathVersion = '2.6.0'
junit4Version = '4.13.2'
junitJupiterVersion = '5.8.1'
jythonVersion = '2.7.2'
kryoShadedVersion = '4.0.2'
lettuceVersion = '6.1.6.RELEASE'
log4jVersion = '2.17.1'
mailVersion = '2.0.1'
micrometerVersion = '1.7.8'
mockitoVersion = '4.0.0'
mongoDriverVersion = '4.4.0-beta2'
mysqlVersion = '8.0.27'
pahoMqttClientVersion = '1.2.5'
postgresVersion = '42.2.23'
r2dbch2Version='0.8.4.RELEASE'
reactorVersion = '2020.0.14'
resilience4jVersion = '1.7.1'
romeToolsVersion = '1.16.0'
rsocketVersion = '1.1.1'
saajVersion = '2.0.1'
servletApiVersion = '5.0.0'
smackVersion = '4.3.5'
springAmqpVersion = project.hasProperty('springAmqpVersion') ? project.springAmqpVersion : '3.0.0-SNAPSHOT'
springDataVersion = project.hasProperty('springDataVersion') ? project.springDataVersion : '2022.1.0-SNAPSHOT'
springKafkaVersion = '3.0.0-SNAPSHOT'
springRetryVersion = '1.3.1'
springSecurityVersion = project.hasProperty('springSecurityVersion') ? project.springSecurityVersion : '6.0.0-SNAPSHOT'
springVersion = project.hasProperty('springVersion') ? project.springVersion : '6.0.0-SNAPSHOT'
springWsVersion = '4.0.0-SNAPSHOT'
tomcatVersion = '10.0.11'
xmlUnitVersion = '2.8.3'
xstreamVersion = '1.4.18'
apacheSshdVersion = '2.7.0'
artemisVersion = '2.19.0'
aspectjVersion = '1.9.7'
assertjVersion = '3.21.0'
assertkVersion = '0.25'
avroVersion = '1.10.2'
awaitilityVersion = '4.1.1'
commonsDbcp2Version = '2.9.0'
commonsIoVersion = '2.11.0'
commonsNetVersion = '3.8.0'
curatorVersion = '4.3.0'
derbyVersion = '10.14.2.0'
ftpServerVersion = '1.1.1'
googleJsr305Version = '3.0.2'
greenmailVersion = '2.0.0-alpha-2'
groovyVersion = '3.0.9'
hamcrestVersion = '2.2'
hazelcastVersion = '5.0.2'
hibernateVersion = '5.6.1.Final'
hsqldbVersion = '2.6.0'
h2Version = '1.4.200'
jacksonVersion = '2.13.0'
jaxbVersion = '3.0.2'
jeroMqVersion = '0.5.2'
jmsApiVersion = '3.0.0'
jpaApiVersion = '3.0.2'
jrubyVersion = '9.2.19.0'
jschVersion = '0.1.55'
jsonpathVersion = '2.6.0'
junit4Version = '4.13.2'
junitJupiterVersion = '5.8.1'
jythonVersion = '2.7.2'
kryoShadedVersion = '4.0.2'
lettuceVersion = '6.1.5.RELEASE'
log4jVersion = '2.17.0'
mailVersion = '2.0.1'
micrometerVersion = '1.7.7'
mockitoVersion = '4.0.0'
mongoDriverVersion = '4.4.0'
mysqlVersion = '8.0.27'
pahoMqttClientVersion = '1.2.5'
postgresVersion = '42.2.23'
r2dbch2Version = '0.9.0.M1'
reactorVersion = '2020.0.14'
resilience4jVersion = '1.7.1'
romeToolsVersion = '1.16.0'
rsocketVersion = '1.1.1'
saajVersion = '2.0.1'
servletApiVersion = '5.0.0'
smackVersion = '4.3.5'
springAmqpVersion = project.hasProperty('springAmqpVersion') ? project.springAmqpVersion : '3.0.0-SNAPSHOT'
springDataVersion = project.hasProperty('springDataVersion') ? project.springDataVersion : '2022.1.0-SNAPSHOT'
springKafkaVersion = '3.0.0-SNAPSHOT'
springRetryVersion = '1.3.1'
springSecurityVersion = project.hasProperty('springSecurityVersion') ? project.springSecurityVersion : '6.0.0-SNAPSHOT'
springVersion = project.hasProperty('springVersion') ? project.springVersion : '6.0.0-SNAPSHOT'
springWsVersion = '4.0.0-SNAPSHOT'
testcontainersVersion = '1.16.2'
tomcatVersion = '10.0.11'
xmlUnitVersion = '2.8.4'
xstreamVersion = '1.4.18'
javaProjects = subprojects - project(':spring-integration-bom')
}
@@ -204,14 +205,18 @@ configure(javaProjects) { subproject ->
compileKotlin {
kotlinOptions {
languageVersion = '1.6'
apiVersion = '1.6'
jvmTarget = '16'
freeCompilerArgs = ['-Xjsr305=strict']
freeCompilerArgs = ['-Xjsr305=strict', '-Xsuppress-version-warnings', '-Xopt-in=kotlin.RequiresOptIn']
allWarningsAsErrors = true
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = '16'
freeCompilerArgs = ['-Xjsr305=strict']
}
}
@@ -255,10 +260,10 @@ configure(javaProjects) { subproject ->
testImplementation("com.willowtreeapps.assertk:assertk-jvm:$assertkVersion") {
exclude group: 'org.jetbrains.kotlin'
}
testImplementation 'org.jetbrains.kotlin:kotlin-reflect'
testImplementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
testImplementation 'io.projectreactor:reactor-test'
testImplementation "org.testcontainers:junit-jupiter:$testcontainersVersion"
testImplementation 'org.jetbrains.kotlin:kotlin-reflect'
testImplementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
testImplementation 'io.projectreactor:reactor-test'
testImplementation "org.testcontainers:junit-jupiter:$testcontainersVersion"
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
@@ -349,10 +354,10 @@ configure(javaProjects) { subproject ->
enableAssertions = false
}
checkstyle {
configDirectory.set(rootProject.file('src/checkstyle'))
toolVersion = project.hasProperty('checkstyleVersion') ? project.checkstyleVersion : '9.2'
}
checkstyle {
configDirectory.set(rootProject.file('src/checkstyle'))
toolVersion = project.hasProperty('checkstyleVersion') ? project.checkstyleVersion : '9.2'
}
jar {
manifest {
@@ -490,25 +495,25 @@ project('spring-integration-core') {
}
}
dokkaHtmlPartial {
outputDirectory.set(new File(buildDir, 'docs/kdoc'))
dokkaSourceSets {
main {
sourceRoots.setFrom(file('src/main/kotlin'))
classpath.from(sourceSets['main'].runtimeClasspath)
externalDocumentationLink {
url.set(new URL("https://docs.spring.io/spring-integration/docs/$version/api/"))
packageListUrl.set(file("$buildDir/docs/javadoc/element-list").toURI().toURL())
}
externalDocumentationLink {
url.set(new URL('https://projectreactor.io/docs/core/release/api/'))
}
externalDocumentationLink {
url.set(new URL('https://www.reactive-streams.org/reactive-streams-1.0.3-javadoc/'))
}
}
}
}
dokkaHtmlPartial {
outputDirectory.set(new File(buildDir, 'docs/kdoc'))
dokkaSourceSets {
main {
sourceRoots.setFrom(file('src/main/kotlin'))
classpath.from(sourceSets['main'].runtimeClasspath)
externalDocumentationLink {
url.set(new URL("https://docs.spring.io/spring-integration/docs/$version/api/"))
packageListUrl.set(file("$buildDir/docs/javadoc/element-list").toURI().toURL())
}
externalDocumentationLink {
url.set(new URL('https://projectreactor.io/docs/core/release/api/'))
}
externalDocumentationLink {
url.set(new URL('https://www.reactive-streams.org/reactive-streams-1.0.3-javadoc/'))
}
}
}
}
}
project('spring-integration-event') {
@@ -634,7 +639,7 @@ project('spring-integration-jdbc') {
testImplementation "org.postgresql:postgresql:$postgresVersion"
testImplementation "mysql:mysql-connector-java:$mysqlVersion"
testImplementation "org.apache.commons:commons-dbcp2:$commonsDbcp2Version"
testImplementation "org.testcontainers:mysql:$testcontainersVersion"
testImplementation "org.testcontainers:mysql:$testcontainersVersion"
testRuntimeOnly 'com.fasterxml.jackson.core:jackson-databind'
}
@@ -1042,9 +1047,9 @@ task api(type: Javadoc) {
}
dokkaHtmlMultiModule {
dependsOn api
moduleName.set('spring-integration')
outputDirectory.set(file("$buildDir/docs/kdoc"))
dependsOn api
moduleName.set('spring-integration')
outputDirectory.set(file("$buildDir/docs/kdoc"))
}
apply from: "${rootDir}/gradle/docs.gradle"

View File

@@ -3,3 +3,4 @@ org.gradle.jvmargs=-Xmx1536M -Dfile.encoding=UTF-8
org.gradle.caching=true
org.gradle.parallel=true
kotlin.stdlib.default.dependency=false
kotlin.jvm.target.validation.mode=IGNORE

View File

@@ -108,6 +108,10 @@ asciidoctorj {
asciidoctor {
dependsOn asciidoctorPdf
inProcess = JAVA_EXEC
forkOptions {
jvmArgs '--add-opens', 'java.base/sun.nio.ch=ALL-UNNAMED', '--add-opens', 'java.base/java.io=ALL-UNNAMED'
}
baseDirFollowsSourceFile()
configurations 'asciidoctorExt'
sourceDir "$buildDir/asciidoc"

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2021 the original author or authors.
* Copyright 2002-2022 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.config.xml;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.w3c.dom.Element;
@@ -25,6 +26,7 @@ import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.xml.BeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.core.type.MethodMetadata;
import org.springframework.integration.config.EnablePublisher;
import org.springframework.integration.config.IntegrationRegistrar;
import org.springframework.integration.config.PublisherRegistrar;
@@ -84,6 +86,12 @@ public class AnnotationConfigParser implements BeanDefinitionParser {
}
}
@Override
public Set<MethodMetadata> getDeclaredMethods() {
return null;
}
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2022 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,12 +18,14 @@ package org.springframework.integration.config.xml;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
import org.w3c.dom.Element;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.xml.BeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.core.type.MethodMetadata;
import org.springframework.integration.config.MessageHistoryRegistrar;
import org.springframework.integration.config.annotation.AnnotationMetadataAdapter;
@@ -51,6 +53,11 @@ public class MessageHistoryParser implements BeanDefinitionParser {
return Collections.singletonMap("value", element.getAttribute("tracked-components"));
}
@Override
public Set<MethodMetadata> getDeclaredMethods() {
return null;
}
}, parserContext.getRegistry());
return null;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2021 the original author or authors.
* Copyright 2021-2022 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.
@@ -84,7 +84,7 @@ class KotlinFileAggregatorTests {
this.fileSplitterAggregatorFlow.send(GenericMessage(file))
val receive = this.resultChannel.receive(10000)
assertThat(receive).isNotNull()
assertThat(receive.headers)
assertThat(receive!!.headers)
.all {
contains(FileHeaders.FILENAME, "foo.txt")
contains(FileHeaders.LINE_COUNT, 3L)

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2020 the original author or authors.
* Copyright 2002-2022 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.
@@ -239,7 +239,7 @@ public class HttpInboundEndpointParser extends AbstractSingleBeanDefinitionParse
String methods = element.getAttribute("supported-methods");
if (StringUtils.hasText(methods)) {
requestMappingDefBuilder.addPropertyValue("methods", methods.toUpperCase());
requestMappingDefBuilder.addPropertyValue("methodNames", methods.toUpperCase());
}
IntegrationNamespaceUtils.setValueIfAttributeDefined(requestMappingDefBuilder, element, "path", "pathPatterns");

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2016-2021 the original author or authors.
* Copyright 2016-2022 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,12 +18,14 @@ package org.springframework.integration.http.config;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
import org.w3c.dom.Element;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.xml.BeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.core.type.MethodMetadata;
import org.springframework.integration.config.annotation.AnnotationMetadataAdapter;
/**
@@ -48,6 +50,11 @@ public class IntegrationGraphControllerParser implements BeanDefinitionParser {
return Collections.singletonMap("value", element.getAttribute("path"));
}
@Override
public Set<MethodMetadata> getDeclaredMethods() {
return null;
}
}, parserContext.getRegistry());
return null;

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2013-2019 the original author or authors.
* Copyright 2013-2022 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.
@@ -67,6 +67,16 @@ public class RequestMapping {
return this.pathPatterns; // NOSONAR - expose internals
}
/**
* Configure a set of supported HTTP methods from their string representations.
* @param supportedMethods the array of HTTP method names.
* @since 6.0
*/
public void setMethodNames(String... supportedMethods) {
Assert.notEmpty(supportedMethods, "at least one supported methods is required");
setMethods(Arrays.stream(supportedMethods).map(HttpMethod::valueOf).toArray(HttpMethod[]::new));
}
public void setMethods(HttpMethod... supportedMethods) {
Assert.notEmpty(supportedMethods, "at least one supported methods is required");
this.methods = Arrays.copyOf(supportedMethods, supportedMethods.length);

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2022 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,7 +17,6 @@
package org.springframework.integration.http.support;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import java.net.URI;
import java.net.URISyntaxException;
@@ -56,17 +55,6 @@ import org.springframework.messaging.MessageHeaders;
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class DefaultHttpHeaderMapperFromMessageInboundTests {
@Test
public void validateAllowWithWrongMethodName() {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();
Map<String, Object> messageHeaders = new HashMap<>();
messageHeaders.put("Allow", "bar");
HttpHeaders headers = new HttpHeaders();
assertThatIllegalArgumentException()
.isThrownBy(() -> mapper.fromHeaders(new MessageHeaders(messageHeaders), headers));
}
@Test
public void validateAllowAsString() {
HeaderMapper<HttpHeaders> mapper = DefaultHttpHeaderMapper.inboundMapper();

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2016-2021 the original author or authors.
* Copyright 2016-2022 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.
@@ -82,7 +82,8 @@ public class JdbcLockRegistry implements ExpirableLockRegistry, RenewableLockReg
/**
* Construct an instance based on the provided {@link LockRepository}.
* @param client the {@link LockRepository} to rely on.
*/ public JdbcLockRegistry(LockRepository client) {
*/
public JdbcLockRegistry(LockRepository client) {
this.client = client;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2022 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,10 +23,11 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.jdbc.core.JdbcTemplate;
@@ -46,7 +47,7 @@ public class JdbcMessageHandlerIntegrationTests {
private static JdbcTemplate jdbcTemplate;
@BeforeClass
@BeforeAll
public static void setUp() {
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
builder.setType(EmbeddedDatabaseType.HSQL).addScript(
@@ -55,12 +56,12 @@ public class JdbcMessageHandlerIntegrationTests {
jdbcTemplate = new JdbcTemplate(embeddedDatabase);
}
@AfterClass
@AfterAll
public static void tearDown() {
embeddedDatabase.shutdown();
}
@After
@AfterEach
public void cleanup() {
jdbcTemplate.execute("DELETE FROM FOOS");
}
@@ -147,9 +148,10 @@ public class JdbcMessageHandlerIntegrationTests {
}
@Test
@Disabled("SF doesn't handle [] in query params any more")
public void testIdHeaderDynamicInsert() {
JdbcMessageHandler handler = new JdbcMessageHandler(jdbcTemplate,
"insert into foos (id, status, name) values (:headers[idAsString], 0, :payload)");
"insert into foos (id, status, name) values (headers[idAsString], 0, :payload)");
handler.afterPropertiesSet();
Message<String> message = new GenericMessage<>("foo");
String id = message.getHeaders().getId().toString();
@@ -163,6 +165,7 @@ public class JdbcMessageHandlerIntegrationTests {
}
@Test
@Disabled("SF doesn't handle [] in query params any more")
public void testDottedHeaderDynamicInsert() {
JdbcMessageHandler handler = new JdbcMessageHandler(jdbcTemplate,
"insert into foos (id, status, name) values (:headers[business.id], 0, :payload)");

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2022 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,9 @@ import java.util.Map;
import javax.sql.DataSource;
import org.junit.After;
import org.junit.Test;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -48,6 +49,7 @@ import org.springframework.messaging.MessageChannel;
* @since 2.0
*
*/
@Disabled("SF doesn't handle [] in query params any more")
public class JdbcMessageHandlerParserTests {
private JdbcTemplate jdbcTemplate;
@@ -144,7 +146,7 @@ public class JdbcMessageHandlerParserTests {
assertThat(map.get("name")).as("Wrong id").isEqualTo("foo");
}
@After
@AfterEach
public void tearDown() {
if (context != null) {
context.close();

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2022 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.
@@ -30,8 +30,9 @@ import java.util.Map;
import javax.sql.DataSource;
import org.apache.commons.logging.Log;
import org.junit.After;
import org.junit.Test;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.context.ConfigurableApplicationContext;
@@ -59,6 +60,7 @@ import org.springframework.messaging.support.GenericMessage;
* @since 2.0
*
*/
@Disabled("SF doesn't handle [] in query params any more")
public class JdbcOutboundGatewayParserTests {
private JdbcTemplate jdbcTemplate;
@@ -291,7 +293,7 @@ public class JdbcOutboundGatewayParserTests {
}
@After
@AfterEach
public void tearDown() {
if (this.context != null) {
this.context.close();

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2018-2021 the original author or authors.
* Copyright 2018-2022 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.
@@ -327,8 +327,8 @@ class KafkaDslKotlinTests {
private fun replyContainer(): GenericMessageListenerContainer<Int, String> {
val containerProperties = ContainerProperties(TEST_TOPIC5)
containerProperties.groupId = "outGate"
containerProperties.consumerRebalanceListener = object : ConsumerRebalanceListener {
containerProperties.setGroupId("outGate")
containerProperties.setConsumerRebalanceListener(object : ConsumerRebalanceListener {
override fun onPartitionsRevoked(partitions: Collection<TopicPartition>) {
// empty
@@ -338,7 +338,7 @@ class KafkaDslKotlinTests {
this@ContextConfiguration.replyContainerLatch.countDown()
}
}
})
return KafkaMessageListenerContainer(consumerFactory(), containerProperties)
}
@@ -351,7 +351,7 @@ class KafkaDslKotlinTests {
private fun containerProperties() =
ContainerProperties(TEST_TOPIC4)
.also {
it.groupId = "inGateGroup"
it.setGroupId("inGateGroup")
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2017-2021 the original author or authors.
* Copyright 2017-2022 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,7 +20,6 @@ import java.time.Instant;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
@@ -52,6 +51,7 @@ import org.springframework.integration.support.AbstractIntegrationMessageBuilder
import org.springframework.messaging.Message;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import org.springframework.util.MimeTypeUtils;
import org.springframework.util.MultiValueMap;
import org.springframework.web.reactive.HandlerMapping;
import org.springframework.web.reactive.accept.HeaderContentTypeResolver;
@@ -463,7 +463,7 @@ public class WebFluxInboundEndpoint extends BaseHttpInboundEndpoint implements W
}
List<MediaType> result = new ArrayList<>(compatibleMediaTypes);
MediaType.sortBySpecificityAndQuality(result);
MimeTypeUtils.sortBySpecificity(result);
for (MediaType mediaType : result) {
if (mediaType.isConcrete()) {
@@ -517,9 +517,13 @@ public class WebFluxInboundEndpoint extends BaseHttpInboundEndpoint implements W
}
private static MediaType selectMoreSpecificMediaType(MediaType acceptable, MediaType producible) {
MediaType producibleToUse = producible.copyQualityValue(acceptable);
Comparator<MediaType> comparator = MediaType.SPECIFICITY_COMPARATOR;
return (comparator.compare(acceptable, producibleToUse) <= 0 ? acceptable : producibleToUse);
producible = producible.copyQualityValue(acceptable);
if (acceptable.isLessSpecific(producible)) {
return producible;
}
else {
return acceptable;
}
}
}

View File

@@ -12,7 +12,7 @@ ifdef::backend-pdf[]
NOTE: This documentation is also available as https://docs.spring.io/spring-integration/docs/current/reference/html/index.html[multiple (faster to load) HTML pages] and as a single https://docs.spring.io/spring-integration/docs/current/reference/html/index-single.html[(more easily searchable) HTML file].
endif::[]
(C) 2009 - 2021 VMware, Inc.
(C) 2009 - 2022 VMware, Inc.
All rights reserved.
Copies of this document may be made for your own use and for distribution to others, provided that you do not charge any fee for such copies and further provided that each copy contains this Copyright Notice, whether distributed in print or electronically.