From 2f5d63a061e71cb7c5b855643fa400a825adb38b Mon Sep 17 00:00:00 2001 From: buildmaster Date: Fri, 31 Jul 2020 20:51:47 +0000 Subject: [PATCH 1/4] Update SNAPSHOT to 2.2.4.RELEASE --- docs/pom.xml | 2 +- pom.xml | 8 ++++---- spring-cloud-openfeign-core/pom.xml | 2 +- spring-cloud-openfeign-dependencies/pom.xml | 4 ++-- spring-cloud-starter-openfeign/pom.xml | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 7b88e45d..f1d9bc23 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-openfeign - 2.2.4.BUILD-SNAPSHOT + 2.2.4.RELEASE spring-cloud-openfeign-docs pom diff --git a/pom.xml b/pom.xml index c06b5321..d8912b92 100644 --- a/pom.xml +++ b/pom.xml @@ -4,14 +4,14 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-cloud-openfeign - 2.2.4.BUILD-SNAPSHOT + 2.2.4.RELEASE pom Spring Cloud OpenFeign Spring Cloud OpenFeign org.springframework.cloud spring-cloud-build - 2.3.1.BUILD-SNAPSHOT + 2.3.1.RELEASE @@ -26,8 +26,8 @@ ${basedir} 2.7.3 - 2.2.4.BUILD-SNAPSHOT - 2.2.4.BUILD-SNAPSHOT + 2.2.4.RELEASE + 2.2.4.RELEASE 3.6.1 diff --git a/spring-cloud-openfeign-core/pom.xml b/spring-cloud-openfeign-core/pom.xml index ba9d7d21..d30c940f 100644 --- a/spring-cloud-openfeign-core/pom.xml +++ b/spring-cloud-openfeign-core/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-openfeign - 2.2.4.BUILD-SNAPSHOT + 2.2.4.RELEASE .. spring-cloud-openfeign-core diff --git a/spring-cloud-openfeign-dependencies/pom.xml b/spring-cloud-openfeign-dependencies/pom.xml index 9f61e0b8..8717fbed 100644 --- a/spring-cloud-openfeign-dependencies/pom.xml +++ b/spring-cloud-openfeign-dependencies/pom.xml @@ -6,11 +6,11 @@ spring-cloud-dependencies-parent org.springframework.cloud - 2.3.1.BUILD-SNAPSHOT + 2.3.1.RELEASE spring-cloud-openfeign-dependencies - 2.2.4.BUILD-SNAPSHOT + 2.2.4.RELEASE pom spring-cloud-openfeign-dependencies Spring Cloud OpenFeign Dependencies diff --git a/spring-cloud-starter-openfeign/pom.xml b/spring-cloud-starter-openfeign/pom.xml index f27ffea4..52d2c534 100644 --- a/spring-cloud-starter-openfeign/pom.xml +++ b/spring-cloud-starter-openfeign/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-openfeign - 2.2.4.BUILD-SNAPSHOT + 2.2.4.RELEASE .. spring-cloud-starter-openfeign From bfd473cb8f18d3052ec93cfc67537be63ad86edd Mon Sep 17 00:00:00 2001 From: buildmaster Date: Fri, 31 Jul 2020 20:53:35 +0000 Subject: [PATCH 2/4] Going back to snapshots --- docs/pom.xml | 2 +- pom.xml | 8 ++++---- spring-cloud-openfeign-core/pom.xml | 2 +- spring-cloud-openfeign-dependencies/pom.xml | 4 ++-- spring-cloud-starter-openfeign/pom.xml | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index f1d9bc23..7b88e45d 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-openfeign - 2.2.4.RELEASE + 2.2.4.BUILD-SNAPSHOT spring-cloud-openfeign-docs pom diff --git a/pom.xml b/pom.xml index d8912b92..c06b5321 100644 --- a/pom.xml +++ b/pom.xml @@ -4,14 +4,14 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-cloud-openfeign - 2.2.4.RELEASE + 2.2.4.BUILD-SNAPSHOT pom Spring Cloud OpenFeign Spring Cloud OpenFeign org.springframework.cloud spring-cloud-build - 2.3.1.RELEASE + 2.3.1.BUILD-SNAPSHOT @@ -26,8 +26,8 @@ ${basedir} 2.7.3 - 2.2.4.RELEASE - 2.2.4.RELEASE + 2.2.4.BUILD-SNAPSHOT + 2.2.4.BUILD-SNAPSHOT 3.6.1 diff --git a/spring-cloud-openfeign-core/pom.xml b/spring-cloud-openfeign-core/pom.xml index d30c940f..ba9d7d21 100644 --- a/spring-cloud-openfeign-core/pom.xml +++ b/spring-cloud-openfeign-core/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-openfeign - 2.2.4.RELEASE + 2.2.4.BUILD-SNAPSHOT .. spring-cloud-openfeign-core diff --git a/spring-cloud-openfeign-dependencies/pom.xml b/spring-cloud-openfeign-dependencies/pom.xml index 8717fbed..9f61e0b8 100644 --- a/spring-cloud-openfeign-dependencies/pom.xml +++ b/spring-cloud-openfeign-dependencies/pom.xml @@ -6,11 +6,11 @@ spring-cloud-dependencies-parent org.springframework.cloud - 2.3.1.RELEASE + 2.3.1.BUILD-SNAPSHOT spring-cloud-openfeign-dependencies - 2.2.4.RELEASE + 2.2.4.BUILD-SNAPSHOT pom spring-cloud-openfeign-dependencies Spring Cloud OpenFeign Dependencies diff --git a/spring-cloud-starter-openfeign/pom.xml b/spring-cloud-starter-openfeign/pom.xml index 52d2c534..f27ffea4 100644 --- a/spring-cloud-starter-openfeign/pom.xml +++ b/spring-cloud-starter-openfeign/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-openfeign - 2.2.4.RELEASE + 2.2.4.BUILD-SNAPSHOT .. spring-cloud-starter-openfeign From bd671efed950b2a090e7fb6651c59a4bd04f1010 Mon Sep 17 00:00:00 2001 From: buildmaster Date: Fri, 31 Jul 2020 20:53:35 +0000 Subject: [PATCH 3/4] Bumping versions to 2.2.5.BUILD-SNAPSHOT after release --- docs/pom.xml | 2 +- pom.xml | 8 ++++---- spring-cloud-openfeign-core/pom.xml | 2 +- spring-cloud-openfeign-dependencies/pom.xml | 4 ++-- spring-cloud-starter-openfeign/pom.xml | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 7b88e45d..3debe40d 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-openfeign - 2.2.4.BUILD-SNAPSHOT + 2.2.5.BUILD-SNAPSHOT spring-cloud-openfeign-docs pom diff --git a/pom.xml b/pom.xml index c06b5321..f07ddbe9 100644 --- a/pom.xml +++ b/pom.xml @@ -4,14 +4,14 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-cloud-openfeign - 2.2.4.BUILD-SNAPSHOT + 2.2.5.BUILD-SNAPSHOT pom Spring Cloud OpenFeign Spring Cloud OpenFeign org.springframework.cloud spring-cloud-build - 2.3.1.BUILD-SNAPSHOT + 2.3.1.RELEASE @@ -26,8 +26,8 @@ ${basedir} 2.7.3 - 2.2.4.BUILD-SNAPSHOT - 2.2.4.BUILD-SNAPSHOT + 2.2.5.BUILD-SNAPSHOT + 2.2.5.BUILD-SNAPSHOT 3.6.1 diff --git a/spring-cloud-openfeign-core/pom.xml b/spring-cloud-openfeign-core/pom.xml index ba9d7d21..588b7167 100644 --- a/spring-cloud-openfeign-core/pom.xml +++ b/spring-cloud-openfeign-core/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-openfeign - 2.2.4.BUILD-SNAPSHOT + 2.2.5.BUILD-SNAPSHOT .. spring-cloud-openfeign-core diff --git a/spring-cloud-openfeign-dependencies/pom.xml b/spring-cloud-openfeign-dependencies/pom.xml index 9f61e0b8..384a48b1 100644 --- a/spring-cloud-openfeign-dependencies/pom.xml +++ b/spring-cloud-openfeign-dependencies/pom.xml @@ -6,11 +6,11 @@ spring-cloud-dependencies-parent org.springframework.cloud - 2.3.1.BUILD-SNAPSHOT + 2.3.2.BUILD-SNAPSHOT spring-cloud-openfeign-dependencies - 2.2.4.BUILD-SNAPSHOT + 2.2.5.BUILD-SNAPSHOT pom spring-cloud-openfeign-dependencies Spring Cloud OpenFeign Dependencies diff --git a/spring-cloud-starter-openfeign/pom.xml b/spring-cloud-starter-openfeign/pom.xml index f27ffea4..97e1cc23 100644 --- a/spring-cloud-starter-openfeign/pom.xml +++ b/spring-cloud-starter-openfeign/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-openfeign - 2.2.4.BUILD-SNAPSHOT + 2.2.5.BUILD-SNAPSHOT .. spring-cloud-starter-openfeign From 4bf010e810edc43c1db1b01a578f95cdf7af253b Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Mon, 3 Aug 2020 03:02:05 -0500 Subject: [PATCH 4/4] Ignore InvalidMediaTypeException when verifying if Multipart content. Fixes gh-363. (#388) --- .../openfeign/support/SpringMvcContract.java | 9 +- .../support/PageableSupportTest.java | 6 + .../SpringMvcContractIntegrationTests.java | 116 ++++++++++++++++++ 3 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringMvcContractIntegrationTests.java diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringMvcContract.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringMvcContract.java index 663ef255..cdaa9b73 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringMvcContract.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringMvcContract.java @@ -57,6 +57,7 @@ import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.ResourceLoader; +import org.springframework.http.InvalidMediaTypeException; import org.springframework.http.MediaType; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -408,7 +409,13 @@ public class SpringMvcContract extends Contract.BaseContract if (contentTypes != null && !contentTypes.isEmpty()) { String type = contentTypes.iterator().next(); - return Objects.equals(MediaType.valueOf(type), MediaType.MULTIPART_FORM_DATA); + try { + return Objects.equals(MediaType.valueOf(type), + MediaType.MULTIPART_FORM_DATA); + } + catch (InvalidMediaTypeException ignored) { + return false; + } } return false; diff --git a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/PageableSupportTest.java b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/PageableSupportTest.java index 40fbc5e3..4972309a 100644 --- a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/PageableSupportTest.java +++ b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/PageableSupportTest.java @@ -16,6 +16,7 @@ package org.springframework.cloud.openfeign.support; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -53,6 +54,11 @@ public class PageableSupportTest { String.valueOf(SocketUtils.findAvailableTcpPort())); } + @AfterAll + public static void afterClass() { + System.clearProperty("server.port"); + } + @Test void shouldProperlyFormatPageable() { String direction = feignClient.performRequest( diff --git a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringMvcContractIntegrationTests.java b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringMvcContractIntegrationTests.java new file mode 100644 index 00000000..cc2e9607 --- /dev/null +++ b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringMvcContractIntegrationTests.java @@ -0,0 +1,116 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.openfeign.support; + +import java.nio.charset.Charset; + +import feign.codec.Decoder; +import feign.codec.Encoder; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.cloud.openfeign.test.NoSecurityConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.http.HttpHeaders; +import org.springframework.util.SocketUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RestController; + +import static org.assertj.core.api.Assertions.assertThatCode; + +/** + * Integration tests for {@link SpringMvcContract} + * + * @author Olga Maciaszek-Sharma + */ +@SpringBootTest(classes = SpringMvcContractIntegrationTests.Config.class, + webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) +public class SpringMvcContractIntegrationTests { + + @Autowired + private TestClient client; + + @BeforeAll + public static void beforeClass() { + System.setProperty("server.port", + String.valueOf(SocketUtils.findAvailableTcpPort())); + } + + @AfterAll + public static void afterClass() { + System.clearProperty("server.port"); + } + + @Test + public void shouldNotThrowInvalidMediaTypeExceptionWhenContentTypeTemplateUsed() { + assertThatCode(() -> client.sendMessage("test", "text/markdown")) + .doesNotThrowAnyException(); + } + + @FeignClient(name = "test", url = "http://localhost:${server.port}/", + configuration = NoCodecsFeignConfiguration.class) + interface TestClient { + + @PostMapping("/test") + Object sendMessage(@RequestBody String message, + @RequestHeader(HttpHeaders.CONTENT_TYPE) String acceptHeader); + + } + + @Configuration(proxyBeanMethods = false) + @EnableFeignClients(clients = TestClient.class) + @EnableAutoConfiguration + @RestController + @Import(NoSecurityConfiguration.class) + protected static class Config { + + @PostMapping("/test") + Object sendMessage(@RequestBody String message, + @RequestHeader(HttpHeaders.CONTENT_TYPE) String acceptHeader) { + return message; + } + + } + + // avoid feign.codec.EncodeException - this feature works for users that override + // Encoder + protected static class NoCodecsFeignConfiguration { + + @Bean + public Decoder decoder() { + return (response, type) -> response; + } + + @Bean + public Encoder encoder() { + return (object, bodyType, request) -> request + .body(object.toString().getBytes(), Charset.defaultCharset()); + } + + } + +}