diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/src/test/java/org/springframework/cloud/function/adapter/azure/web/PetData.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/src/test/java/org/springframework/cloud/function/adapter/azure/web/PetData.java index 59989bf8a..7bfeb5241 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/src/test/java/org/springframework/cloud/function/adapter/azure/web/PetData.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/src/test/java/org/springframework/cloud/function/adapter/azure/web/PetData.java @@ -24,7 +24,10 @@ import java.util.GregorianCalendar; import java.util.List; import java.util.concurrent.ThreadLocalRandom; -public class PetData { +public final class PetData { + private PetData() { + + } private static List breeds = new ArrayList<>(); static { breeds.add("Afghan Hound"); diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-gcp/src/main/java/org/springframework/cloud/function/adapter/gcp/FunctionInvoker.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-gcp/src/main/java/org/springframework/cloud/function/adapter/gcp/FunctionInvoker.java index 062787d84..7c3f512ab 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-gcp/src/main/java/org/springframework/cloud/function/adapter/gcp/FunctionInvoker.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-gcp/src/main/java/org/springframework/cloud/function/adapter/gcp/FunctionInvoker.java @@ -121,7 +121,15 @@ public class FunctionInvoker implements HttpFunction, RawBackgroundFunction { if (result != null) { MessageHeaders headers = result.getHeaders(); - httpResponse.setContentType(result.getHeaders().get(MessageHeaders.CONTENT_TYPE).toString()); + if (result.getHeaders().containsKey(MessageHeaders.CONTENT_TYPE)) { + httpResponse.setContentType(result.getHeaders().get(MessageHeaders.CONTENT_TYPE).toString()); + } + else if (result.getHeaders().containsKey("Content-Type")) { + httpResponse.setContentType(result.getHeaders().get("Content-Type").toString()); + } + else { + httpRequest.getContentType().ifPresent(contentType -> httpResponse.setContentType(contentType)); + } httpResponse.getWriter().write(new String(result.getPayload(), StandardCharsets.UTF_8)); for (Entry header : headers.entrySet()) { Object values = header.getValue(); @@ -133,7 +141,6 @@ public class FunctionInvoker implements HttpFunction, RawBackgroundFunction { httpResponse.appendHeader(header.getKey(), header.getValue().toString()); } } - httpRequest.getContentType().ifPresent(contentType -> httpResponse.setContentType(contentType)); if (headers.containsKey(HTTP_STATUS_CODE)) { if (headers.get(HTTP_STATUS_CODE) instanceof Integer) { diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-gcp/src/test/java/org/springframework/cloud/function/adapter/gcp/FunctionInvokerHttpTests.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-gcp/src/test/java/org/springframework/cloud/function/adapter/gcp/FunctionInvokerHttpTests.java index c178414ae..d02d322eb 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-gcp/src/test/java/org/springframework/cloud/function/adapter/gcp/FunctionInvokerHttpTests.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-gcp/src/test/java/org/springframework/cloud/function/adapter/gcp/FunctionInvokerHttpTests.java @@ -42,6 +42,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.messaging.Message; +import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.support.MessageBuilder; import static java.util.Arrays.asList; @@ -165,7 +166,7 @@ public class FunctionInvokerHttpTests { bufferedWriter.close(); verify(response).setStatusCode(404); - + verify(response).setContentType("text/plain"); } @Test @@ -200,7 +201,7 @@ public class FunctionInvokerHttpTests { String payload = "hello"; - Message msg = MessageBuilder.withPayload(payload).setHeader("statusCode", 404) + Message msg = MessageBuilder.withPayload(payload).setHeader("statusCode", 404).setHeader(MessageHeaders.CONTENT_TYPE, "text/plain") .build(); return x -> msg; diff --git a/spring-cloud-function-adapters/spring-cloud-function-grpc-cloudevent-ext/pom.xml b/spring-cloud-function-adapters/spring-cloud-function-grpc-cloudevent-ext/pom.xml index e784e5ea4..b8e77fb60 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-grpc-cloudevent-ext/pom.xml +++ b/spring-cloud-function-adapters/spring-cloud-function-grpc-cloudevent-ext/pom.xml @@ -45,6 +45,16 @@ + org.apache.maven.plugins + maven-checkstyle-plugin + + + checkstyle-validation + none + + + + org.xolstice.maven.plugins protobuf-maven-plugin 0.6.1 diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/test/java/org/springframework/cloud/function/test/app/PetData.java b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/test/java/org/springframework/cloud/function/test/app/PetData.java index 90b2a736f..ac00af9ef 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/test/java/org/springframework/cloud/function/test/app/PetData.java +++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/test/java/org/springframework/cloud/function/test/app/PetData.java @@ -24,8 +24,13 @@ import java.util.GregorianCalendar; import java.util.List; import java.util.concurrent.ThreadLocalRandom; -public class PetData { +public final class PetData { private static List breeds = new ArrayList<>(); + + private PetData() { + + } + static { breeds.add("Afghan Hound"); breeds.add("Beagle"); diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/test/java/org/springframework/cloud/function/test/app/PetStoreSpringAppConfig.java b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/test/java/org/springframework/cloud/function/test/app/PetStoreSpringAppConfig.java index 2cd6d734b..2a02c3267 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/test/java/org/springframework/cloud/function/test/app/PetStoreSpringAppConfig.java +++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/test/java/org/springframework/cloud/function/test/app/PetStoreSpringAppConfig.java @@ -129,6 +129,9 @@ public class PetStoreSpringAppConfig { } public static class SimpleFilter extends OncePerRequestFilter { + /** + * + */ public boolean invoked; @Override @@ -146,6 +149,10 @@ public class PetStoreSpringAppConfig { } public static class AnotherFilter extends OncePerRequestFilter { + + /** + * + */ public boolean invoked; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java index cba41a6a4..4a9317a8f 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java @@ -1438,9 +1438,15 @@ public class SimpleFunctionRegistry implements FunctionRegistry { */ @SuppressWarnings("unchecked") private Object convertOutputMessageIfNecessary(Object output, String expectedOutputContetntType) { - String contentType = ((Message) output).getHeaders().containsKey(FunctionProperties.EXPECT_CONTENT_TYPE_HEADER) - ? (String) ((Message) output).getHeaders().get(FunctionProperties.EXPECT_CONTENT_TYPE_HEADER) - : expectedOutputContetntType; + String contentType; + if (((Message) output).getHeaders().containsKey(MessageHeaders.CONTENT_TYPE)) { + contentType = ((Message) output).getHeaders().get(MessageHeaders.CONTENT_TYPE).toString(); + } + else { + contentType = ((Message) output).getHeaders().containsKey(FunctionProperties.EXPECT_CONTENT_TYPE_HEADER) + ? (String) ((Message) output).getHeaders().get(FunctionProperties.EXPECT_CONTENT_TYPE_HEADER) + : expectedOutputContetntType; + } if (StringUtils.hasText(contentType)) { Map headersMap = new HashMap(((Message) output).getHeaders());